《CPrimerPlus》读书笔记

上传人:宝路 文档编号:21426733 上传时间:2017-11-23 格式:DOC 页数:78 大小:1.58MB
返回 下载 相关 举报
《CPrimerPlus》读书笔记_第1页
第1页 / 共78页
《CPrimerPlus》读书笔记_第2页
第2页 / 共78页
《CPrimerPlus》读书笔记_第3页
第3页 / 共78页
《CPrimerPlus》读书笔记_第4页
第4页 / 共78页
《CPrimerPlus》读书笔记_第5页
第5页 / 共78页
点击查看更多>>
资源描述

《《CPrimerPlus》读书笔记》由会员分享,可在线阅读,更多相关《《CPrimerPlus》读书笔记(78页珍藏版)》请在金锄头文库上搜索。

1、 C Primer Plus读书笔记By:riusksk(泉哥)Blog:http:/1 scanf()在读取输入时会自动将空字符0插入字符串末尾,而且当它遇到第一个空白字符空格(blank) 、制表符(tab )或者换行符( newline)时会停止读取,因此使用%s 的 scnaf()只会把一个单词而不是把整个语句作为字符串读入,此时我们一般用 gets()来处理一般的字符串。2 字符串常量”x”与字符常量x不同, x属于基本类型(char ),而”x” 则属于派生类型(char 数组) ,另外,”x”实际上是由两个字符(x和空字符0)组成的。3 strlen()是以字符为单位给出字符串的

2、长度,其中空字符0并不计算在内,而 sizeof()是以字节为单位给出数据的大小,其中还包括空字符0。4 定义符号常量的意义:a.提供更多的信息,增强代码的可读性;b.便于更改代码,特别对于在多处使用同一常量而又必须改变它的值时更为适用。可将符号常量名定义为大写字母,当遇到大写的符号名时,就可知道它是一个常量而变量了,比如:#define PI 3.14159这里如果我们这样定义:float pi = 3.14159;由于 pi 是个变量,程序可能意外地改变它的值,因此我们使用#define 来定义它。除了以上方法之外,我们还可以使用 const 修饰符来创建符号常量,此时它就成为只读值,在计

3、算中是不可改变的,比如:const float pi = 3.14159;5 linits.h:整数限制头文件,float.h:浮点数限制头文件。例如:#include #include #include int main(void)printf(Max int value on this system:%dn,INT_MAX);printf(Min int value on this system:%dn,INT_MIN);printf(Max float normal value on this system:%en,FLT_MAX);printf(Min float normal val

4、ue on this system:%en,FLT_MIN);return 0;输出结果:Max int value on this system:2147483647Min int value on this system:-2147483648Max float normal value on this system:3.402823e+038Min float normal value on this system:1.175494e-0386 不匹配的浮点转换实例:n1 在堆栈中占用 8 字节(float 被转换成 double) ,n2 占用 8 字节,而 n3 和 n4 则分别占用

5、 4 字节,prinft()在读取堆栈中的值时,它是根据转换说明符去读取的。%ld 说明符指出,printf()应该读取 4 个字节,所以 printf()在堆栈中读取前 4 个字节作为它的第一个值,即 n1 的前半部分,它被解释成一个长整数(long integer) 。下一个%ld 说明符再读取 4 字节,即 n1 的后半部分,它被解释成第二个长整数(long integer) 。同样,%ld 的第三、四个实例使得 n2 的前半部分和后半部分被读出,并被解释成两个长整数(long integer) 。7 printf()返回所打印的字符的数目,如果输出错误,则返回一个负数(旧版本的 pri

6、ntf 会有不同的返回值) ,比如:#include int main(void)int test = 123;int retvalue;retvalue = printf(“the test value is %dn”,test);printf(“The printf() function printed %d characters.n”,retvalue);return 0;输出结果:the test value is 123The printf() function printed 22 characters.8 在 scanf()格式字符串的说明符中,除了%c 以外,其它说明符均会自动

7、跳过输入项之前的空格。比如:#include int main(void)int a;printf(enter:n);scanf(%d,&a);printf(%d.n,a);return 0;输出结果:enter:33.这里并没有输出空格。又比如:#include int main(void)char a;printf(enter:n);scanf(%c,&a);printf(%c.n,a);return 0;输出结果:enter:a.这里就是输出空格了。9 scanf()函数返回成功读入的项目的个数,如果它没有读取任何项目(当它期望一个数字而你又键入一个非数字字符串时就会发生这种情况) ,s

8、cnaf()会返回值 0。当它检测到“文件结尾”时,它返回 EOF(stdio.h 中将 EOF 定义为值-1) 。10printf ()和 scanf()的*修饰符:代码一:/-使用可变宽度的输出字段-#include int main(void)unsigned width, precision;int number = 256;double weight = 242.5; printf(What field width?n);scanf(%d, &width);printf(The number is :%*d:n, width, number);printf(Now enter a w

9、idth and a precision:n);scanf(%d %d, &width, &precision);printf(Weight = %*.*fn, width, precision, weight);printf(Done!n);return 0;变量 width 提供字段宽度,而 number 就是要打印的数字。其运行结果:What field width?3The number is :256:Now enter a width and a precision:3 7Weight = 242.5000000Done!代码二:/*跳过输入的头两个整数,此功能可用于读取一个文件中

10、某个特定的列*/#include int main(void)int n;printf(please enter three integers:n);scanf(%*d %*d %d,&n);printf(the last integer was %dn,n);return 0;输出结果:please enter three integers:111 222 333the last integer was 33311取模运算符%只用于整数运算,对于浮点数使用该运算符将是无效的。12前缀增量与后缀增量的区别:先看下面的代码:#include int main(void)int a = 1, b

11、= 1;int aplus, plusb;aplus = a+; /* 后缀 */plusb = +b; /* 前缀 */printf(a aplus b plusb n); printf(%1d %5d %5d %5dn, a, aplus, b, plusb);return 0;运行结果:a aplus b plusb2 1 2 2显然,a 和 b 都加一了,但 aplus 是 a 改变之前的值,而 plusb 却是 b 改变之后的值。再比如,q=2*+a;它会先将 a+1,然后再 2*a;而 q=2*a+却是先 2*a,再将积加 1。再举个例子:b = +i /如果使用 i+,b 会有不

12、同结果,而如果使用下列语句来代替它:+i; /第 1 行b=i; /如果在第 1 行使用了 i+,b 的结果仍会是相同的。13. 增量运算符+与减量运算符具有很高的结合优先级,只有圆括号比它们的优先级高。所以 x*y+相当于(x)*(y+)。14. 在 y =( 4 + x+)+(6 + x+); 中表达式( 4 + x+)不是一个完整的表达式,所以 C 不能保证在计算子表达式 4 + x+后立即增加 x。这里,完整表达式是整个赋值语句,并且分号标记了顺序点,所以 C 能保证的是在程序进入后续语句前 x 将被增加两次。C 没有指明 x 是在每个子表达式被 计算后增加还是在整个表达式被计算后增加

13、,这就是我们要避免使用这类语句的原因。15. 请看以下代码:#include int main(void)int i=1;float n;while(i+1 时,n 都会等于 0printf(%fn,n);return 0;16. 请看代码:#include #define FORMAT %s! C is cool!nint main(void)int num = 10;printf(FORMAT,FORMAT);printf(%dn,+num);printf(%dn,num+);printf(%dn,num-);printf(%dn,num);return 0;运行结果:%s! C is c

14、ool! C is cool!1111121117. while 循环语句在遇到第一个分号之后就退出循环,例如以下代码:#include int main(void)int n = 0;while (n+ int main(void)int num = 0;for (printf(keep entering numbers!n);num!=6;)scanf(%d,&num);printf(thats the one I want!n);return 0;输出结果:keep entering numbers!123456thats the one I want!20. houseprice =

15、249,500; 相当于:houseprice = 249;500;而 houseprice = (249,500);相当于 houseprice =500;21. 求 S=1 + 1/2 + 1/4 + 1/8 + 1/16 + #include int main(void)int t_ct;double time,x;int limit;printf(enter the number of terms you want:);scanf(%d,&limit);for (time=0,t_ct=1,x=1;t_ctint main(void)int k;for ( k = 1,printf(“%d:Hi!n”,k) ; printf(“k = %dn”,k),k*kint main(void)int a;char i,j,k;printf(请输入字母: );scanf( %c,&i); /* 输入的字母用 i */for(k=A ; k0 ; a-)printf( ); /* 印出空白字元 */for(j=A ; j=A

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号