ImageVerifierCode 换一换
格式:DOCX , 页数:126 ,大小:1.22MB ,
资源ID:9937863      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9937863.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(《C Primer Plus》读书笔记.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

《C Primer Plus》读书笔记.docx

1、C Primer Plus读书笔记C Primer Plus读书笔记By:riusksk(泉哥)Blog: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 value

4、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则分别占用4字节,prinft()在读取

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

6、d) 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以外,其它说明符均会自动跳过输入项之前的空格。比如:#include int main(void

7、) 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()函数返回成功读入的项目的个数,如果它没有读取任何项目(当它期望一个数字而你又键入一个非数字字符串时就会发生这种情况),scnaf()会返回值0。当它检测到“文件结尾”时

8、,它返回EOF(stdio.h中将EOF定义为值-1)。10 printf()和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 width and a precision:n);

9、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!代码二:/*跳过输入的头两个整数,此功能可用于读取一个文件中某个特定的列*/#include int main

10、(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 = 1; int aplus, p

11、lusb; 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会有不同结果,而如果使用下列语句来代替它:+i; /第1行b=i;

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

13、oid) int i=1; float n; while(i+1时,n都会等于0 printf(%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 cool! C is cool!1111121117. while循环语句在遇到

14、第一个分号之后就退出循环,例如以下代码:#include int main(void)int n = 0; while (n+ 3); /* line 7 */ printf(n is %dn, n); /* line 8 */ printf(Thats all this program does.n); return 0;输出结果:n is 4Thats all this program does.由于while(n+ 3); 之后存在分号,因此它只是循环的执行n+,直至它小于3才退出循环,相当于一个空语句,退出循环时n刚好等于4。有时,程序员有意地使用带有空语句的while语句,因为所有的

15、工作都在判断语句中进行。例如,你想要跳过输入直到第一个不为空格或数字的字符,可以使用这样的循环:while ( scanf ( “%d”,&num ) = 1); /*跳过整数输入*/只要输入一个整数,则scanf()就返回1,循环就会继续。18. math.h头文件中声明的fabs()函数用于返回一个浮点值的绝对值,即没有代数符号的值。19. 请看代码:#include int main(void) int num = 0; for (printf(keep entering numbers!n);num!=6;) scanf(%d,&num); printf(thats the one I

16、 want!n); return 0;输出结果:keep entering numbers!123456thats the one I want!20. houseprice = 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 y

17、ou want:); scanf(%d,&limit); for (time=0,t_ct=1,x=1;t_ct=limit;t_ct+,x*=2.0) time += 1.0/x; printf(time = %f when terms = %d.n,time,t_ct); return 0;运行结果:enter the number of terms you want:15time = 1.000000 when terms = 1.time = 1.500000 when terms = 2.time = 1.750000 when terms = 3.time = 1.875000 w

18、hen terms = 4.time = 1.937500 when terms = 5.time = 1.968750 when terms = 6.time = 1.984375 when terms = 7.time = 1.992188 when terms = 8.time = 1.996094 when terms = 9.time = 1.998047 when terms = 10.time = 1.999023 when terms = 11.time = 1.999512 when terms = 12.time = 1.999756 when terms = 13.tim

19、e = 1.999878 when terms = 14.time = 1.999939 when terms = 15.22. 代码:#include int main(void) int k; for ( k = 1,printf(“%d:Hi!n”,k) ; printf(“k = %dn”,k), k*k26 ; k+=2,printf ( “Now k is %dn”,k) ) printf (“k is %d in the loopn”,k); return 0;运行结果:1:Hi!k = 1k is 1 in the loopNow k is 3k = 3k is 3 in th

20、e loop Now k is 5k is 5 in the loopNow k is 7k = 723. 让程序要求用户输入一个大写字母,使用嵌套循环产生像下面这样的金字塔图案,比如输入E: A ABA ABCBA ABCDCBA ABCDEDCBA提示:使用一个外部循环来处理行,在每一行中使用三个内部循环,一个处理空格,一个以升序打印字母,一个以降序打印字母。源码如下:#includeint main(void) int a; char i,j,k; printf(请输入字母: ); scanf( %c,&i); /* 输入的字母用 i */ for(k=A ; k0 ; a-) prin

21、tf( ); /* 印出空白字元 */ for(j=A ; j=A ; j-) printf(%c,j); /* 递減印出字母 */ printf(n); return 0;24. getchar()没有参数,它返回来自输入设备的下一个字符,比如:ch = getchar(); 相当于scanf(%c,&ch); putchar()打印出它的参数,比如putchar(ch); 相当于printf(“%c”,ch); 这两个函数通常在stdio.h文件中定义,而且通常只是个预处理宏,而不是真正的函数。25. ctype.h系列字符函数:ctype.h头文件包含了一些函数的原型,这些函数接受一个字

22、符作为参数,如果该字符属于某特定的种类则返回真,否则返回假,比如isalpha()函数判断是否为字母。一些映射函数,比如转换为小写字母tolower()函数,它并不改变原始的参数,它们只返回改变后的值,也就是说,tolower(ch); /对ch没有影响,若要改变ch,可以这样做:ch = tolower(ch); 。26. 27. 求2到num之间的所有数,看它们是否可以整除num,比如求144的约数,由于一次成功的num%div测试可以得到两个约数,拿144除以2,可以得到72,则这两个数均为其约数,这样,我们可以将测试的数缩小到num的平方根即可,而不必到num。如果测试的数是一个完全平

23、方数,就只需打印出一个数。如果测试的数是一个素数,那么程序流程也进不了if语句中,对此我们可设置一个布尔值变量,即标志(flag):#include #include / BOOL,TRUE,FALSE包含在windows.h头文件中int main(void) unsigned long num; unsigned long div; BOOL isPrime; printf(Please enter an integer for analysis,enter q to quit.n ); while (scanf(%lu, &num) = 1) for (div = 2, isPrime=

24、 TRUE; (div * div) ! & | ,对于逻辑表达式是从左至右求值的。31. 在定义测试范围时,请勿效仿数学上常用的写法:if ( 90 = range = 100) / 语义错误 printf (“Good show!n”); 问题在于该代码存在语义错误,而不是语法错误,所以编译器并不会捕获它(尽管可能会发出警告)。因为对=运算符的求值顺序是由左到右的,所以它会被解释成: ( 90 = range )= 100子表达式90 = 90 & range = a & ch = z) printf ( “Thats a lowercase character.n”); 对于ASCII那样的字符编码可以工作,因为在这种编码中连续字母的编码是相邻的数值。然而,对于包括EBCDIC在内的一些编码就不正确了。进行这种测试的移植性最好的方法是使用ctype.h系列中的islower()函数:if ( islower(ch) printf ( “Thats a lowercase character.n”);33. 计算给定的平方英尺的面积涂油漆,全部涂完需要

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1