这是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;
}
显示结果:
果: