!!!!!!C菜鸟问题 恳请高手帮忙!!!!!!!

作者&投稿:蒙药 (若有异议请与网页底部的电邮联系)
各位C语言高手请进,恳请各位高手帮帮鄙人,谢谢!!!!!!!~

本程序包含你以上所要解决的四道题~~
可直接运行!!

#include "stdio.h"
#include "math.h"
void timu1()
{
int num,a[3]={0},i,t;
int fenshu[3]={5,3,2};
char result[3],s;
printf("
******************************谢谢您已进入第一题目******************************
");
printf("请问共有多少人投票?
");
scanf("%d",&num);
while(num--)
{
for(i=0;i<3;i++)
{
s=getchar();
while(s!='a' && s!='b' && s!='c')
s=getchar();
result[i]=s;
}
if(result[0]+result[1]+result[2]!='a'+'b'+'c')
printf("该票无效 !
");
else
{
for(i=0;i<3;i++)
switch(result[i])
{
case 'a': a[0]+=fenshu[i];break;
case 'b': a[1]+=fenshu[i];break;
case 'c': a[2]+=fenshu[i];break;
}
}
}
printf("三位候选人得分:
");
for(i=0;i<3;i++)
printf("%c: %d
",'a'+i,a[i]);
t=0;
for(i=1;i<3;i++)
if(a[t]<a[i]) t=i;
printf("祝贺%c当选冠军!
",'a'+t);
return ;
}

void timu2()
{
int i,j,n,hang,t;
printf("
******************************谢谢您已进入第二题目******************************
");
printf(" 现俺只给你如下三种选择:(若有意见,请输入不是这三数的任何符号)
");
printf(" 1、打印三角形图案
2、打印长方形图案
3、打印菱形图案
");
printf("
请做选择...... ");
scanf("%d",&n);
if(n==1 || n==2 || n==3)
{
printf("
您要输出多少行的啊?");
if(n==3) printf("(对不起,对于该项,你只能输入正奇数!)");
printf("
");
scanf("%d",&hang);
if(hang>=27 || (hang%2==0 && n==3))
{
printf("
您不按提示操作,我只能强制推出
");
n=10;
}
else
{
switch(n)
{
case 1:
{
for(i=0;i<hang;i++)
{
printf(" ");
for(j=0;j<=i;j++)
printf("%c",'A'+i);
printf("
");
}
break;
}
case 2:
{
for(i=0;i<hang;i++)
{
printf(" ");
for(j=0;j<10;j++)
printf("%c",'A'+i);
printf("
");
}
break;
}
case 3:
{
for(i=0,t=0;i<hang;i++)
{
printf(" ");
for(j=0;j<hang;j++)
{
if(j hang/2+t ) printf(" ");
else printf("%c",'A'+i);
}
if(i<hang/2) t++;
else t--;
printf("
");
}
break;
}
}
}
}
return ;
}


void timu3()
{
int result=1,sum=1;
int n,fuhao=-1,i;
printf("
******************************谢谢您已进入第三题目******************************
");
printf("本题将计算这个式子:
1!-2!+3!-4!+…+n!(n为奇数)或1!-2!+3!-4!+…+(n-1)!-n!(n为偶数)。

");
printf("怎么样?有意见没?
没意见请输入数据,否则出入 -1 ");
printf("数据(n<=8): n = ");
scanf("%d",&n);
if(n!=-1)
{
if(n>8) printf("
由于您不严格操作,将自动退出这个题目。谢谢使用!
");
else
{
for(i=2;i<=n;i++)
{
sum*=i;
result+=fuhao*sum;
fuhao*=-1;
}
printf("结果是:
");
for(i=1;i<=n;i++)
{
printf("%d!",i);
if(i!=n)
{
if(i%2) printf("-");
else printf("+");
}
}
printf(" = %d
",result);
}
}
return ;
}

void timu4()
{
long shu,p, i,t=0,j;

printf("
******************************谢谢您已进入第四题目******************************
");
printf("请输入一个整数(位数不超过8位):
");
scanf("%ld",&shu);
if(shu>100000000) printf("
由于您不严格操作,将自动退出这个题目。谢谢使用!
");
else
{
p=shu;
while(p)
{
p/=10;
t++;
}
printf("此数是%d位数
",t);
t=0;
p=shu/2;
for(i=2;i<=p;i++)
if(shu%i==0)
{
for(j=2;j<=(int)sqrt(i);j++)
if(i%j==0) break;
if(j>(int)sqrt(i))
t+=i;
}
for(j=2;j<=(int)sqrt(shu);j++)
if(shu%j==0) break;
if(j>(int)sqrt(shu)) t+=shu;
printf("此数所有质因数的和为:%ld
",t);
}
return ;
}

int main()
{
int ID,ture=0;
printf("
!!!!!!!!!!!!!!!!!!!!!!!!!!此程序专门为您设计。祝你用得愉快!!!!!!!!!!!!!!!!!!!!!!
");
while(1)
{
printf(" 请输入题号(1/2/3/4):(如想退出,请输入任何不是题号字符!)
");
scanf("%d",&ID);
getchar();
switch(ID)
{
case 1: timu1();break;
case 2: timu2();break;
case 3: timu3();break;
case 4: timu4();break;
default : ture=1;break;
}
if(ture!=1) printf("*******************************本题已解决谢谢使用*******************************
");
printf("
");
if(ture) break;
getchar();
printf("
请按任何键继续......
");
getchar();
}
return 0;
}

1)全扩展0
2)char a[] = "53.65"; //第二题给得不是很清晰,只能才你提问的意思了.如果你是要将任意的一个浮点数放到字符数组里的话,需要编写个算法了.还有就是强制类型转换了,这个估计不是你的意思吧!( float flt = 53.65;char ch = (char)flt;)
3)12*12=144,这时候变量a是144,所以后面一步你计算错了,应该是144-144=0,最后a=0+0所以a还是0.
您真慷慨,其实不用给分也会回答您的,这样的问题是举手之劳!

flyinwoods:用unsigned是和操作系统无关的,所以肯定是全扩展零。只有int由于符号位的存在,才可能会有扩0和扩1这两种可能性。

你研究的东西,我不是学计算机的,所以我也很菜的,不知道研究这些东西有什么用.而且你最后说要用各种类型去替换,总结可行的规律,总结来干嘛呢?按照格式规规矩矩的使用函数就好了,你应该把精力转移到其他方面,人家都说double要用%lf,你硬要用%d给他赋值,便会出错嘛.
这些东西,一句话就可以点破的,楼上的已经说的很清楚了,我再说一下我的看法,我的电脑是32位的.

假如是读入,scanf(),里面的参数,就表明按怎样的格式读入数据,%d,表示读入的是有符号整形,且读4字节,若强制赋值给double,则double的低位4字节的内容就是这个整形的二进制码,高位4字节不变.

假如是输出,printf(),里面的参数,就表明按怎样的格式输出数据,%d,表示输出的是有符号整形,有符号整形各个二进位上的意义是有定义的,说就按有符号整形的格式输出.
同样输出整形,%u,%d,输出的东西不一样,因为他们二进位上的数意义.

解释一下你一开始的疑惑(我不知道你知不知道以下的东西,我假设你不知道,如果你知道,你应该不会有疑惑):

scanf("%d%d",&a,&b);假设分别读入5 6,
按我上面说的,
有符号的5=00000000000000000000000000000101
有符号的6=00000000000000000000000000000110

强制赋值给double类型,则赋值到低位4字节,高位4字节不变,以下是double a,b的二进制内容:
(未赋值之前a和b的都是=1100110011001100110011001100110011001100110011001100110011001100)
赋值后
a=1100110011001100110011001100110000000000000000000000000000000101
b=1100110011001100110011001100110000000000000000000000000000000110
注意到了吗?低位4字节完全和上面的一样.

t=a>b?a:b;
比较时,由于是double时,要按double的格式来比较,和整形不一样,上面a,b的那串字符,按double的格式来化成十进制数就是如下(没有错,且是负数,因为首位是符号位,1表示负数):
a=-92559592117432051000000000000000000000000000000000000000000000.000000
b=-92559592117432062000000000000000000000000000000000000000000000.000000

从数学来说,你说谁大?当然是a大啦.

printf("the bigger one is: %lf\n",t);
若按%lf输出,当然那上面a的64位按double的格式来化成十进制数,输出,当然就是
-92559592117432051000000000000000000000000000000000000000000000.000000

printf("the bigger one is: %d\n",t);
若按%d输出,我开始说了,%d,有符号的整形是4字节,那就输出低位的4字节.
a的低位4字节是0000000000000000000000000000000101,那当然是5了.

其他情况类似,没有必要去总结两个负数又输出什么的,按照格式规规矩矩的使用函数就好了.

假如我说得不好,你自己去研究解决,你应该去看看,unsigned int ,int ,double ,float 用二进制存储的格式,你就会豁然开朗了.
我可以简单讲一下,
int,
有符号,最高位为符号位,用补码存储.
无符号,用原码储存,无符号位.
float和double (科学计数法)类似,最高位是符号位,然后是指数位,最后是小数位.

以上数据我自己写函数算的,
另外,我想请问C或C++有没有提供什么函数可以直接输出某些变量的各个二进位的.

首先double在你的VC下占8字节,
当你用scanf("%d%d",&a,&b);输入时, %d表示仅用每个变量的低4个字节。
输入完毕后,比较代码比较的浮点数,而不是整数。浮点数是有特定的格式的,而你的a和b类似于(假定输入为5)cc cc cc cc 00 00 00 05,这样转换成的浮点数比较后就是你用printf("%lf")输出的结果。
这是因为你用的是Debug模式,VC帮你把堆栈都填了CC,所以会有这样的结果。
你用Release会有所不同。

#include<stdio.h>
#include<math.h>
void main()
{
int a,b,t;
scanf("%d%d",&a,&b);
t=a>b?a:b;
printf("the bigger one is: %lf\n",t);
}

把程序中的double改成int即可正确运行,如上所示。
或者:
#include<stdio.h>
#include<math.h>
using namespace std;
void main()
{
double a,b,t;
scanf("%lf%lf",&a,&b);
t=a>b?a:b;
printf("the bigger one is: %lf\n",t);
}

%d是用来输入输出整数的,而%lf才是用来处理浮点数的,包括double,float,数据类型要一一致,否则会出现意想不到的结果。

当然,我以上说的都是废话,楼主当然知道这样是可以的。

对于,上面的现象,牵扯到数据类型在内存中的存储结构。既然楼主自称菜鸟,菜鸟现在不必知道那么多,只要按规矩办事就行。或许有一天你会明白的。

不过,我还想简单的说说,抽象的说一下,我也只能抽象的说一下。%d接收一个整数,用它来初始化一个double变量,致使double变量只是部分初始化。而一个未被初始化的double变量一般都是一个很大的负数,注意,这里所说的大是指它的绝对值大,而部分初始化后,它仍然是个负数,这会造成相同符号下,你输入的数值越大,而实际越小,就像4大于3,则-4小于-3性质是一样的,至于为什么一正一负,是正的大,这要牵扯到无符号数和有符号数的问题,把一个正数和负数都当做无符号数看待,正数都是小于负数的,所以,输入一个正数和一个负数,就像输入一个正数和一个较大的正数一样,结果是较大的正数是小的,负数也是小的,这就是所谓的歪打正着。
就说那么多吧。

忘了告诉你了,其实我也是莱鸟。以上是我睡觉时梦到的,信不信由你。。。

符号扩展,内存模式,补码反码之类问题。
建议把精力集中在算法,编程思路上。

首先,我的C++运行%lf没有问题
其次,出不同的结果,是在于读入与输出的机制上的(隐式转换等等)。

你也够能钻的,我刚刚试了,想解决的确要花很多精力,但有个地方我想,的是“92559592117432005000000000000000000000000000000000000000000000.000000 ”这个数值跟电脑本身的内存型号有关,每个电脑的精确度都不一样,上面出现这么大的数是因为内存中64位的16位由输入的数字决定,剩余的48位就有内存本身的性质决定了,可能是1可能是0,一旦确定了,这就是该内存的特性了,以后都会以相同的方式补充0或1,其他情况也一样,都会因为位数的不足或溢出,来决定分配给变量的内存段中所有的位是0还是1


C语言菜鸟问 在线等答案
);scanf("%d",&m);change(m,n);for(i=0;i<n;i++)printf("%d\\t",a[i]);} void change(int m,int n){ int b[80],i, *c,j=0;c=a ;for(i=0;i<m;i++)b[i]=c[n-m+i];for(i=m;i<n;i++,j++)b[i]=c[j];for(i=0;i<n;i++)c[i]=b[i];} ...

关于C语言的一个菜鸟问题?
把if一起放到do循环里面去,你用一个total循环10次,每次输入的值都给了他,这样最后一次输入的值覆盖掉前面所有的值了。

C语言超级菜鸟问个问题
第一个代表所申请的类型名为 LNode 第二个表示申请一个 LNode 型的变量(相当于int a;中的 int)第三个申请一个变量,变量名为 LNode (相当于int a;中的 a)LinkList表示一个指针型变量,名为LinkList(相当于int *p;中的 *p)

C语言 编程菜鸟问题
首先,你的for循环后面,有一个分号,有分号,这个for循环其实就是虚设的...我把你的程序稍微改了一下,希望对你有所帮助~ O(∩_∩)O~include <stdio.h> int main (void){ int size=0;printf("This is a procedure to creat amultiplication table.""please input which size do you want ...

本人c语言菜鸟,问一下compile和build后的一大堆文件是什么意思_百度知 ...
compile是编译,build是构建。你编写的C程序是不能直接运行的,要先转换成电脑能直接运行的程序,这个过程就是compile和build。compile会把源程序编译成后缀名为.obj的目标文件,这个文件还要经过build变成可执行程序exe。这个exe文件就是可以运行的程序了。

c语言 菜鸟提问 strcmp和数组指针相关
直接用gets(input[i]);之前你没有给input[i]指针一个明确的指向,程序有可能会崩溃。所以,先用input[i] = buffer;给它一个指向,这就不会有问题了。另外:你的buffer字符串只含有一个元素,你输入的字符串只能是包含一个元素,那就不是原题的要求了。你将buffer的空间加大,例如可以改为:buffe...

菜鸟的c语言问题
当a=17时,a%3=2,%是用来求余数的,17除以3的余数是2,所以a%3==2是真命题,从逻辑上讲,整个a%3==2的值为1,然后a-17为0;||是“或”的意思,“1”和“0”的或为1。

菜鸟问一道简单的C语言编程题
完整程序如下,我加的就是定义了一个函数AREA include <stdio.h> include <math.h> \/\/函数的定义,定义area=sqrt((s*(s-a)*(s-b)*(s-c))根号下的内容,返回一个值,在主函数里调用该函数 float AREA(float s,float a,float b,float c){ float X=s*(s-a)*(s-b)*(s-c);return ...

菜鸟提问,关于C的数据类型
你说的那些东西在谭浩强的C语言教程里讲的非常详细 我给出一个这本书的下载地址:http:\/\/www.namipan.com\/d\/%e8%b0%ad%e6%b5%a9%e5%bc%baC%e8%af%ad%e8%a8%80.7z\/b0fd76d2ca48312f3270930151f4f67dec12851a17890800 此书的第3章讲解了各种数据类型,包括你说的数据类型;第4章则详细...

C语言菜鸟求助!printf()函数输出的问题!
scanf("%lf",&x);意思按照%lf(double)的格式来读取一个数据,存到x的地址(&是取址符)对应的空间中,这样你输入的值实际上就是x的值。printf("sine of %lf is %lf\\n",x,s);意思按照%lf(double)的格式来打印x和s的值,其中前一个%lf 对应x,其中前一个%lf 对应s,这是一一对应的...

会同县18566113429: 急~~~~~~~一个菜鸟的简单C语言问题,求高手解答... -
臧樊唑来: 这个是char型的问题 你改成这样就行了scanf(" %c",...

会同县18566113429: 小菜鸟刚开始学C语言,有问题请教各位高手: -
臧樊唑来: 答案为8888889.000000 因为float的有效数字是6到7位,对于实际的程序来说,float类型精度通常是不够的,float只能保证6位有效数字,而double至少可以保证10为有效数字,能满足大多数计算的需要,所以就是这样的啦 如果你想更精确点的话,将c改为double形,注意,你将c改为double形的时候,输出格式为%lf

会同县18566113429: 本人菜鸟有个弱弱的问题请教下C语言高手 -
臧樊唑来: 错误较多,如使用了C不支持的引用、数据类型使用有误等,修改如下://---------------------------------------------------------------------------#include <dos.h>#include <conio.h>#include <stdio.h>#include <stdlib.h>#define MAX 30enum BOOL{False,True};...

会同县18566113429: C语言菜鸟求高手解答... -
臧樊唑来: 1 (x>=1 && x<=10) || (x>=15 && x<=20)2 开始m = 5,接下来m++>5,先判断,后加,即m先于5判断,再++,所以m++>5为false,结束后m=6,执行printf("%d\n",m--);同样,先输出,后--,即输出6,结束后m=5.希望有所帮助

会同县18566113429: c语言的基础问题菜鸟啊明天要教高手帮忙在线等啊~~ -
臧樊唑来: #include void main(){int x,i;printf("please input a int number:");//请输入一个数字:scanf("%d",x);//输...

会同县18566113429: 菜鸟求助C语言的一个小问题忘大神帮忙 -
臧樊唑来: #include<stdio.h> int main() { int a[10],x,*p,*q; printf("请输入十个整数:\n"); for(p=a;p<a+10;++p) scanf("%d",p); printf("请输入待删数据:"); scanf("%d",&x); for(p=q=a;p<a+10;p++) if(x!=*p) *(q++)=*p; if(q==p) printf("查无此数!\n"); else { for(p=a;p<q;) printf("%5d",*p++); printf("\n"); } }

会同县18566113429: c++高手帮帮忙 一个菜鸟问题 -
臧樊唑来: #include using namespace std; void main() { int i=2,j=1,k,n; int fang; double sum=0.0; cin>>k; for(n=1;n{ fang=i; sum+=(double)i/j; i+=j; j=fang; } cout} 这道是很简单的算法.就是 分子=前一项分子+分母;分母=等于前一项分母;

会同县18566113429: 菜鸟问题C语言高手进 -
臧樊唑来: 应该是___-1.00 前面有3个空格8的意思是输出的这个数占8列.2的意思是保留小数点后两位

会同县18566113429: 求教高手一个关于C语言的菜鸟问题,谢谢了. -
臧樊唑来: 因为k没有初始化,导致k一开始就可能少于1e-6,做以下更改://---------------------------------------------------------------------------#include<math.h>#include<stdio.h>main(){float x0,x1,k=1;/*注意这里*/x0=0 ;x1=0 ;while(k>0.000001){x1=cos(x0);k=fabs(x1-x0...

会同县18566113429: 求助:一个C语言编程的菜鸟问题
臧樊唑来: #include<stdio.h> #include<math.h> void main() { float a,b,c,p,s; //这里用double比较好 printf("Input a,b,c:\n"); scanf("%f%f%f",&a,&b,&c); //scanf把三个double型的变量输送到a,b,c的地址,故用取地址符& //以下代码帮你重新写过,因为你写...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网