C primer plus 读书笔记第六章和第七章
这两章的标题是C控制语句:循环以及C控制语句:分支和跳转。之所以一起讲,是因为这两章内容都是讲控制语句。
第六章的第一段示例代码
/* summing.c --对用户输入的整数求和 */
#include <stdio.h>
int main (void)
{
long num;
long sum = 0L;
int status;
printf("Please enter an integer to be summed. ");
printf("q to quit): ");
status = scanf("%ld", &num);
while (status == 1) {
/* code */
sum = sum + num;
printf("Please enter next integer (q to quit): ");
status = scanf("%ld", &num);
}
printf("Those integer sum to %ld.\n", sum);
return 0;
}
这段代码很有意思,不难但是很巧妙。这里并没有另外写if判断语句来判断输入是否为数字或字母,而是利用scanf()函数的特点,很巧妙的避免了代码的复杂性,事实上,要是你输入其他字母,循环依然会跳出来。
第六章其他内容似乎没什么好说的,因为几乎所有的编程语言都会讲到while,for和do while。至于选择哪种循环,首先要确定我们需要入口条件循环还是退出条件循环。一般来说选前者。这是因为:1.一般原则是在跳过(或循环)之前进行查看比较好;2.如果在循环开始的地方进行判断,程序的可读性更强;3.如果一开始就不满足条件,那么跳过整个循环是重要的。
至于for和while了,就是个人喜好问题了。
第六章的课后题开始有些意思了。下面详细说说。
第一题蛮简单,本来以为一次能过,结果还是报错了。代码如下:
/*编写程序,创建一个具有26个元素的数组,存储,打印*/
#include <stdio.h>
#define SIZE 26
int main (void) {
char xiaoxie[SIZE];
int i;
for (i = 0; i < SIZE; i++){
xiaoxie[i] = 'a' + i;
}
for (i = 0; i < SIZE; i++){
printf("%c ", xiaoxie[i]);
}
printf("\n");
return 0;
}
报错的原因是

java写多啦~第六题使用来strlen()函数,却忘记#include <string.h>了,结果没报错,只是警告而已。

其他题难度不大,搞定了细节就行。
OK,下面进入第七章。题目是C控制语句:分支和跳转。学完这章,我们就能知道程序运行方式的全部知识。
if...else没啥讲的,讲讲书中提到的其他知识。
1.getchar()和putchar()是专门为面向字符I/O设计的C函数。ch = getchar();等价于scanf("%c", &ch);以及putchar()等价于printf("%c", ch);。这个两个函数通常在stdio.h文件中定义,而且只是预处理的宏,并不是真正的函数。
2.代码简洁写法
ch = getchar();
while (ch != '\n')
{
...
ch = getchar();
}
替换为
while ((ch = getchar()) != '\n')
{
...
}
这体现了典型的C编程风格:将两个动作合并为一个表达式。因为赋值表达式的值就等于表达式左侧数的值,所以ch=getchar()的值就等于ch的新值,然后再和'\n'比较。这种风格在C编程中很常见,一定要习惯。要注意圆括号少不了,因为!=运算符的优先级比=高。
3.ctype.h系列字符函数
ctype.h头文件包含了一系列分析字符的标准函数,例如isalpha()函数等字符判断函数,tolower()。
然后讲了下循环辅助的语句:continue和break以及多重选择switch和break,都是其他语言有的,就不详细讲了,至于goto不用或者少用吧~
至于K&R说的“要谨慎使用,或者根本不用”主要原因是:1.原则上,C程序根本不需要goto语句。2.过度使用goto会引起程序的错综复杂。
下面看看编程题。题目都蛮简单,主要是本章知识的实践,有一点发现是,用比如while ((ch = getchar()) != '#‘)时,你敲#并不会立即中断,而是你敲完回车后,才有计算的结果。
to be continued...
C primer plus 读书笔记第六章和第七章的更多相关文章
- C++ Primer Plus读书笔记(六)分支语句和逻辑运算符
1. 以上均包含在cctype中 1 #include<cctype> 2 //#include<ctype.h> 2.文件操作 (1)头文件 1 #include<fs ...
- 【读书笔记】C#高级编程 第七章 运算符和类型强制转换
(一)运算符 类别 运算符 算术运算符 + - * / % 逻辑运算符 & | ^ ~ && || ! 字符串连接运算符 + 增量和减量运算符 ++ -- 移位运算符 < ...
- 《C#从现象到本质》读书笔记(六)第8章委托和事件
<C#从现象到本质>读书笔记(六)第二部分 C#特性 第8章委托和事件 从这一部分开始,知识点就相对少了,重要的是代码练习.奈何太高深的代码平常不怎么用,这些特性也不是经常写代码的. 委托 ...
- 《Microsoft Sql server 2008 Internals》读书笔记--第六章Indexes:Internals and Management(1)
<Microsoft Sql server 2008 Internals>索引文件夹: <Microsoft Sql server 2008 Internals>读书笔记--文 ...
- 《C++ Primer》读书笔记 第一章
读<C++ Primer>才知道,自己对C++知之甚少... 写个博客记录下自己C++的成长,只是读书笔记,不是对<C++ Primer>知识点的总结,而是对自己在书上看到的以 ...
- 读书笔记 - js高级程序设计 - 第十五章 使用Canvas绘图
读书笔记 - js高级程序设计 - 第十三章 事件 canvas 具备绘图能力的2D上下文 及文本API 很多浏览器对WebGL的3D上下文支持还不够好 有时候即使浏览器支持,操作系统如果缺缺 ...
- 《android开发艺术探索》读书笔记(六)--Drawable
接上篇<android开发艺术探索>读书笔记(五)--RemoteViews [BitmapDrawable] 简单的图片 <!xml version="1.0" ...
- 【读书笔记】自然语言处理综述 -- 第四章 -- N元语法
第四章 N元语法 本章开篇的两句话很有意思,代表了当时两个学派的思想和矛盾. 一句是"有史以来最伟大的语言学家"乔姆斯基说的:"句子的概率,在任何已知的对于这个术语的解释 ...
- C++ Primer Plus读书笔记
第五章 循环和关系表达式 1. 2.类别别名: (1) #define FLOAT_POINTER float * FLOAT_POINTER pa, pb; 预处理器置换将该声明转换成 flo ...
随机推荐
- maven update 以后报错。
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start com ...
- Objective-C学习篇06—NSString与NSMutableString
NSString OC提供了定义字符串对象的方法,也就是将想要表达的字符串用一对双引号引起来,并在开头加上@.@是OC中的指令符,它告诉编译器@以后的内容为OC中的语法.比如@”Harbingwang ...
- 局部线性嵌入(LLE)原理总结
局部线性嵌入(Locally Linear Embedding,以下简称LLE)也是非常重要的降维方法.和传统的PCA,LDA等关注样本方差的降维方法相比,LLE关注于降维时保持样本局部的线性特征,由 ...
- js循环便利json数据
var data=[{name:"a",age:12},{name:"b",age:11},{name:"c",age:13},{name: ...
- HTML5 canvas生成图片马赛克特效插件
HTML5 canvas生成图片马赛克特效插件 简要教程 这是一款使用html5 canvas来将图片制作成马赛克效果的js插件.该插件的灵感来自于美国肖像画家Chuck Close.已经有人使用这个 ...
- 2-16 HDO1106
这题寒假也没搞出来,但今天花了一小时终于搞定. 题意是输入一串数字字符,把‘5’当作空格,然后把被分割开的数字进行排序输出. 首先是字符串输入,按照高精度的处理方法,数值低位放到数组低位.(字符串型的 ...
- ZOJ1074 (最大和子矩阵 DP)
F - 最大子矩阵和 Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I64u Descri ...
- 浏览器的模式问题 Quirks Mode vs Standards Mode
当微软开始产生与标准兼容的浏览器时,他们希望确保向后兼容性.为了实现这一点,他们IE6.0以后的版本在浏览器内嵌了两种表现模式: Standards Mode(标准模式或Strict Mode)和Qu ...
- Java中new关键字和newInstance方法的区别
在初始化一个类,生成一个实例的时候,newInstance()方法和new关键字除了一个是方法一个是关键字外,最主要的区别是创建对象的方式不同.newInstance()使用类加载机制,new是创建一 ...
- VC的UNICODE 编程
简介 如果你编写的程序是针对非英语国家的用户,如中国.日本.东欧和中东地区,那么你一定要熟悉 UNICODE 字符集.尤其是用 Visual C++/MFC 编写针对上述国家和地区的用户的程序时,如果 ...