一,
#include"stdio.h"
main()
{
short int a=32767,b=1,c;
c=a+b;
printf("a=%d,b=%d,c=%d\n",a,b,c);
}
/*观察溢出.疑问:产生这样的结果如何解释?原理是什么?*/
二,
#include"stdio.h"
main()
{
float a=123.1234,b=123.123456,c=123.123456;
printf("a=%5f,b=%5.3f,c=%.3f\n",a,b,c);
double x;int y;float z;
printf("在键盘上输入:4.6,23,123,2.34567:");
scanf("%f,%2d,%*d,%5f",&x,&y,&z);
printf("x=%lf,y=%d,z=%f\n",x,y,z);
}
/*
疑问:当把23改为2345时,y还是23,但是c的结果不是2.345000了,是一串乱七八糟的数,不知道为什么?
交大的一本教材中有这么说明:当scanf函数用%f输入一个实数型数据时,不能指定宽度.而本例为清华大学版教材中的一个范例,却指定了宽度%5f,
到底在scanf中适用%f数据格式时,能否指定宽度? 或者说用%f时可以指定宽度,但不能指定小数部分位数,如%10.3f是错误的.
*/
三,
#include"stdio.h"
main()
{
int a;
printf("input a:");
scanf("%d",&a);
printf("a=%d\n",a);
}
/* 当float型数据赋予int型时,小数部分将丢失,而不是四舍五入.疑问:当将程序改为以下时:变量b的结果很难理解?
#include"stdio.h"
main()
{
int a,b;
printf("input a and b:");
scanf("%d%d",&a,&b);
printf("a=%d,b=%d\n",a,b);
}
在键盘上输入如:1.23 2.34
运行结果:a=1,b=-858993460
b的结果为什么是那样?
*/
四,
#include"stdio.h"
main()
{
int a,b;
printf("input a and b:");
scanf("%3d%d",&a,&b);
printf("a=%d,b=%d\n",a,b);
}
/* 为什么当输入为:12345 23 时,运行结果却为a=123,b=45 ?当scanf函数改为("%3d,%d",&a,&b),输入为12345,23 时为什么结果又是a=123,
b=-858993460 ?
把程序改为:
#include"stdio.h"
main()
{
int a,b;
printf("input a and b:");
scanf("%d%4d",&a,&b);
printf("a=%d,b=%d\n",a,b);
}
当输入1.73,12345时,运行结果为什么是:a=1,b=-858993460 ?
疑问:输入函数scanf中的附加字符中的"域宽"和"*"怎么用? 书上的解释分别是:域宽:指定输入数据所占宽度(列数),域宽为正整数;
*表示本输入项在读入后不赋给相应的变量.
*/
五,
#include"stdio.h"
main()
{ int a=5,b=6;
printf("\t%d\n\t\b%d\n",a,b);
}
/*结果为什么是那样?,\t和\b怎么解释? */
六,
#include"stdio.h"
main()
{
float a=123.1236,b=1.23,c=12334.313414;
printf("a=%g,b=%e,b=%g,c=%g\n",a,b,b,c);
}
/*%g输出格式用于自动选取%f和%e中宽度较小的一种形式,且不输出无效0 ,这里的无效0指什么,包括无效无效数字吗?
疑问:为什么a=123.124,%g总是最多只输出7位(包括小数点) */