C语言中不容易掌握的问题(1)

1)一般而言,存储一个int要用一个机器字长。并规定long int (可以省略为long)不能比int小,short int (short)
不能比int大。

										**int溢出(已32位为例)**
			int 32 位 最高为为符号位 以补码的形式存储在内存里 当符号为0其他位都为1时取得最大值2^31-1
			当最大的数加一时符号为为1其他位其他位为0,因为与-2^32 的补码一样规定其为 -2^32也就是int的最
			小值。当继续增加就可正常增加。


										**float的溢出**(以32为例)
			float  存储分为 符号为  指数为  尾数位 float 至少能够表示6位有效数字,且范围至少是10^-37~10^37.
			 浮点数的上溢:当所表示的数据大于float能表示的最大值时c语言规定给其一个表示无穷大的数inf,当所表示
			 的数小于float所表示的最小值时,c语言规定为-inf
			 浮点数的下溢:当浮点数的指数位所表示的指数已经最小了(不能再小了)如果再把这个数去除以2指数不变,
			 尾数位右移一位,降低所表示数据的精度。

2)printf();语句把输出发送到一个叫做缓冲区的中间存储区,然后缓冲区中的内容在不断的发送到屏幕上
即为刷新缓存区。当发生以下情况时才发生刷新缓存区:当缓冲区已满,遇到换行符,遇到scanf();还有一种
刷新缓冲区的方法就是调用 fflush();

3) 用printf();打印一些特殊的符号时可以用转义序列 \a (警报) \(打印斜杠)%%打印%等。

如果想打印一些ASCII码值时,打不出它的符号可以利用码值用八进制或十六进制进行打印
例如 a 的ASCII值为65 你可以这样打 printf("\o81"); 或者用16进制printf("\x41");

如果想用一些打印一些宏定义可以加上双引号就可以打印了。
例如:#define STUDENT xiaoming
printf("“STUDENT” good good study day day up\n");即可。

4)printf();该函数具有返回值并且传入的参数也不确定。

printf()的返回值为打印的字符个数(包括空格但是不包括\0)例如:
int count=printf(“good good study day day up”); 其中 count=26
当printf()的参数匹配如: int a=64; printf("%d+%d=%d\n",a);第一个参数为64 其他的两个参数都是系统
从内存里乱取的不可预测,每个系统不一样。

当用printf()打印特定的数据类型时要选取正确的占位符如果选择不同的占位符所打印的结果也不一样
例如:
int myInt=‘ABab’;//int 为4个字节的
printf("%c",myInt);//其打印出 b

其实printf();不会改变要打印的数据,而是利用所给的数据,根据占位符的规格去读取数据然后按照
相印的规则打印在屏幕上 如上面printf()根据占位符%c 读取myInt的低八位,然后以字符的形式打印
在屏幕上。

当用printf()打印浮点型数据时,因为C语言会自动把 float 类型的数据转换为double类型所以打印浮点
型数据时不管是float还是double都使用占位符%f

当打印较长的字符串时有二种方法可以让他换行打印,
1 使用多个"" 例如 printf("good good "
“study day day up”);//打印出 good good study day day up
2 使用\ 例如 printf(“good good
study day day up”);//同样可以打印出good good study day day up

5)scanf()也同样具有 返回值 和不定项参数
scanf()的返回值为成功输入的数据个数。
例如:
int a;
int b;
int count=scanf("%d %d",a,b);
当你从键盘上输入 两个数字时 count的值为 2
当你从键盘上输入 一个数字一个字母时 例如 12 a 当scanf()检测到a时与所需的数据类型不相同
时 其会终止并把 a 放回到缓冲区所以count的值为1

scanf();的参数同样也需要匹配正确的参数。
scanf();其实是按照占位符的要求解释屏幕上的字符按相应的格式转换相印的数据,然后在存储在对
应的内存中.
例如:
int a;
char b;
int c;
scanf("%d %d",&a,&c);
scanf("%c",c);
比如你在屏幕上输入 12 e a的值为12 因为e不是数字会停止对变量c的输入,并且把e 放回缓冲区所以
变量c值直接从缓冲区里取为e.

scanf()的输入格式也有一定的要求如:如果引号内的有除占位符和空格符以外的其
他符号时。你在屏幕上输入也要带上相应的符号
例如:scanf("%d,%d",a,b);
你在屏幕上可以输入 12 ,23
也可以 12,
13
还可以 12 ,13
但不可省略逗号不能就不能正常的输入。

scanf()的占位符只有double 的与printf()不一样 要想输入double类的数据需要用占位符 %lf 或 %le 或%la
例如:double a;
scanf("%lf",a);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值