A,定义的字符类型与输入函数的类型不一样
B,scanf函数没有加“&”符号
C,计算的数字并没有进行赋值
D,int型数字进行除法时,除数大于被除数
下面来一一讲解:
引入求圆的以及球的一些简单计算:
#include#include int main() { double r,h,pi,a1;//输入的double pi = 3.1415926; printf("enter the r:"); scanf("%f",&r); printf("enter the h:"); scanf("%f",&h); a1=2.0*pi*r; printf("C圆=%6.2fn",a1); printf("S圆=%6.2fn",pi*r*r); printf("C球=%6.2fn",4*pi*r*r); printf("S球=%6.2fn",4/3*pi*r*r*r); return 0; }
A,这一段代码看似没有问题:
但是double 定义的r,h要与%lf对应才可,否则会出现储存不了的情况。
这里1,可以将double改为float。
2,可以将%f改为%lf
注意:用float定义时,用%lf或者%f输入都可以
printf输出用什么%(,)也没有那么讲究,根据需求来就行。
B,在进行盲打的时候,对于初学者而言(至少我是这样嘿嘿),“&”及其容易忘记:
#includeint main() { int d; scanf("%d",d); printf("%d",d); return 0; }
不管你输入的是什么,最后都无法输出。
C,计算的数字并没有进行赋值,
就是说如果你先写的输出语句后写的输入语句,那么结果会被计算机随机赋上0.
#includeint main() { double d,e; double f,g; e=g;//为什么e,d=0? d=f;//时效性问题,就是在给e,d赋值的时候f,g还没有进行赋值,故默认为0 f=3157.890121; g=0.123456789; printf("e=%lf,d=%lfn",e,d); printf("f=%lf,g=%lf",f,g); }
D,int型数字进行除法时,除数大于被除数:
有以下示例:
#includeint main() { int a1,b1; float a2,b2; a1=3/4; b1=3/4; a2=3.0/4.0; b2=3.0/4.0; printf("a1=%dn",a1); printf("b1=%lfn",b1); printf("a2=%dn",a2); printf("b2=%lfn",b2); printf("%dn",3/4); printf("%lfn",3/4); printf("%dn",3.0/4.0); printf("%lf",3.0/4.0); return 0; }
简单观察以后发现,输出的结果与定义类型还有输出类型都有关系:
首先如果要输出0.75
那么输出不能为%d,否则因为显示不了小数而被计算为0
其次定义不能用int(整形),以整形计算时,无论输出如何都为0
总结就是,
如果分开写1,定义为double或者float
2,计算时以浮点型计算
3,输出以%f或者%lf
复合语句就是:printf("%lf",3.0/4.0);写就行
出错场景可能是这样的
#includeint main(){ const double PI=3.14; double r,s1,s2; printf("enter r:"); scanf("%lf",&r); s1=3/4*PI*r*r*r; s2=3.0/4.0*PI*r*r*r; printf("%.21fn",s1); printf("%.21f",s2); return 0;
由上面总结的可知s1输出为0.00
改错的话就如s2,将整形数字变为浮点型即可
找错误的时候可以看“/”的分子分母是不是所需要的类型
还有就是数字后面加小数点什么意思:
double a = 3/4; double b = 3.0/4.0;
前一个是按整数型计算:结果a=0.000000;
后面一个是按浮点型计算:结果b=0.750000;(均是以%lf输出)
(浮点型说白了就是带小数的数据)
作者也是刚刚学习C语言1个多月,有什么不足的地方欢迎各位大佬指正
操作系统:Windows10
软件:Devc++
编译器:TDM-GCC 4.9.2 64-bit Release



