第3章练习

作者在 2008-02-26 23:07:22 发布以下内容
3.11  编程练习 1. /*有关溢出问题*/ #include int main(void) { int a=32767; int c=10; unsigned int b=65535; float toobig1=111111.111; double toobig2=2222222222222.222222222; float toosmall=0.1234e-10/c; printf("%d %d %d\n",a, a+1,a+2); printf("%u %u %u\n",b,b+1,b+2); printf("%f %f %e\n",toobig1,toobig2,toosmall); return 0; } 输出结果:

这是TC里的显示结果

这是在VC里的显示结果

当把a,b改为a=2147483647,b=4294967295,VC里的显示结果为

:分析如下

(1)整数溢出:

无符号整数b就像一个汽车里程指示表,当达到最大值时,它将溢出到起始点.整数a也是同样.他们的主要区别是unsigned int变量b的起始点是0(正像里程表那样),int变量a的起始点是-2147483648.

(2)浮点数溢出:

请看第4小题的分析

2. 

#include <stdio.h>

int main(void)

{

int m;

scanf("%d",&m);

printf("%d %c\n",m,m);

return 0;

}

显示结果:

3.

/*报警字符功能地的演示*/

#include <stdio.h>

int main(void)

{

printf("\aStartled by the sudden sound,\a");

printf("\aSally shouted,\"By the Great Pumpkin,what was that!\"\a\n");

return 0;

}

结果显示:能够听到噔的一声L(声音取决于个人计算机的硬件)

4.

/*一个浮点数以小数和指数的形式输出*/

#include <stdio.h>

int main(void)

{

float a;

scanf("%f",&a);

printf("The input is %f or %e.\n",a,a);

return 0;

}

结果显示:

分析:结果出来应该是: The input is21.290000or 2.129000e+001

因为(1)根据一般系统规定,e格式符以指数形式输出实数,在没有指定数据输出所占得宽度和数字部分的小数位数时,c编译系统自动指定给出6位小数,指数部分占5,但是不同系统略有不同像我用的这个,其显示是2.12900e+01.

(2)%f,不指定字段宽度,系统自动指定,使整数部分全部如数输出,并输出6位小数.但要注意的是并非全部的数字都是有效数字.此处我用的是单精度实数输出,而单精度实数的有效位数一般为7,故输出的是21.290001,最后一位不是有效数字,是系统随机给的.对于双精度的也可以用%f格式输出,它的有效数字一般为16,给出小数6.

不过在VC编译器里的结果显示是The input is21.290001or 2.129000e+001

5.

#include <stdio.h>

int main(void)

{

double sec;

float a=3.156e7;

float age;

scanf("%f",&age);

sec=age*a;

printf("a=%e sec=%e\n",a,sec);

return 0;

}

: 此程序在编写的时候把scanf("%f",&age);写成了scanf("my age %f",&age);结果sec不论输入什么数都是-3.388729e+015,后来在scanf("my age %f",&age);语句后添加prntf(“%f”,age),发现age的输出值不正确,这里可以肯定的是这里出错,但没有注意到scanf()函数的用法,致使错误百思不得其解,我也是在无意中修改了scanf("my age %f",&age);去掉my age发现结果正确了,这才恍然大悟:原来我把printf()函数和scanf()函数搞混了,他们的具体用法请参考C Primer Plus (第四版)中文版第四章字符串和格式化输入/输出

6.

#include <stdio.h>

int main(void)

{

double num;

float a=3.0e-23;

float b=950;

num=b*a;

printf("a=%e\nnum=%e\n",a,num);

return 0;

}

显示结

7.

/*centimerter表示成inche*/

#include <stdio.h>

int main(void)

{

double inches;

float a=2.54;

float b;

scanf("%f",&b);

inches=b*a;

printf("a=%f\ninches=%f\n",a,inches);

return 0;

}

显示结果:

:

文章评论,共1条
hidden47
2008-07-09 10:44
1
受益匪浅。。 float a=3.0e-23 这里float为什么能表示这么多位数的数呢? 为什么不用long double
游客请输入验证码