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 ...
随机推荐
- (转) ThinkPHP模板自定义标签使用方法
这篇文章主要介绍了ThinkPHP模板自定义标签使用方法,需要的朋友可以参考下 转之--http://www.jb51.net/article/51584.htm 使用模板标签可以让网站前台开发 ...
- CRT detected that the application wrote to memory after end of heap buffer.
很多人的解释都不一样, 我碰到的问题是,开辟的内存空间小于操作的内存空间.也就是说,我free的内存越界了. 这是我开辟链表结构体内存的代码: PNODE Create() { int len; / ...
- Python报错:SyntaxError: Non-ASCII character '\xe5' in file
运行Python脚本总是报一下的错误: SyntaxError: Non-ASCII character '\xe5' in file 原因:Python默认是以ASCII作为编码方式的,如果在自己的 ...
- [个人原创]关于java中对象排序的一些探讨(三)
这篇文章由十八子将原创,转载请注明,并标明博客地址:http://www.cnblogs.com/shibazijiang/ 对对象排序也可以使用Guava中的Ordering类. 构造Orderin ...
- spring web flow 2.0入门(转)
Spring Web Flow 2.0 入门 一.Spring Web Flow 入门demo(一)简单页面跳转 附源码(转) 二.Spring Web Flow 入门demo(二)与业务结合 附源码 ...
- PHP表单提交验证各种方式
<!DOCTYPE unspecified PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www. ...
- 在VC6中使用ogre进行游戏开发
微软公司开发的visual c++6.0堪称史上最易用.最成熟的开发工具.vc6以其小巧.轻便赢得了程序员的喜爱,以至于在VS大行其道的时代,很多程序员仍然使用vc6作为开发工具,vc6的欢迎性可见一 ...
- DOM4J 读取XML配置文件进行数据库连接
介绍介绍DOM4J. 据说是非常优秀非常优秀的Java XML API(Dom4j is an easy to use, open source library for working ...
- 简洁的MysqlHelper
把MySqlXXX的类更改为SqlXXX就可以成为sqlHelper. 另外C#也提供了MysqlHelper和sqlHelper,用起来也挺方便的. public class MySqlHelper ...
- ASP.NET中实现页面间数据传递的方法
说到页面间数据传递,很多人都会想到通过像Session这样的全局变量,但是向Session中添加的东西太多会增加服务器的压力,页面间数据传递,数据的作用范围越小越好. ASP.NET页面间数据传递 ...