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 ...
随机推荐
- SQLServer2008收缩数据库日志
-- Set to SIMPLE mode ALTER DATABASE [DATABASE_NAME] SET RECOVERY SIMPLE; -- Shrink the db ); -- Set ...
- linux中挂载硬盘报错(you must specify the filesystem type)
公司有台服务器做了raid1,由于容量小,需扩容,原先打算再添加两块硬盘进去做多一组raid1,组成两组raid1混合使用,但是公司抠门,买到服务器只能安装3块硬盘,无奈之下只能放多一块进去单独挂载分 ...
- Swift - 04 - 浮点型
import UIKit var str = "Hello, playground" // 显式定义浮点型常量 let PI:Float = 3.141592612312312 l ...
- VsCode使用技巧
VsCode版本1.7.2 1. node智能提示:vscode1.7之前的版本智能提示是采用jsconfig.json方式,在右下角会有小灯泡,点击创建jsconfig.json.1.7之后使用Ty ...
- 手把手教你DIY一个春运迁徙图(一)
换了新工作,也确定了我未来数据可视化的发展方向.新年第一篇博客,又逢春运,这篇技术文章就来交给大家如何做一个酷炫的迁徙图(支持移动哦).(求star 代码点这里) 迁徙图的制作思路分为静态的元素和变换 ...
- 妙用git rebase --onto指令
有时候,在分支提交更改的时候,会忘记rebase,就直接提交上去,或者忘记和本地远程分支做merge,就直接rebase了别的分支.有时候真希望有一种切片的方式,让自己的分支只需要接上某一段.这个时候 ...
- UVA1152 4Values whose Sum is 0
Description The SUM problem can be formulated as follows: given four lists A, B, C, D of integer val ...
- html5 中常用的标签和属性
标签: <blockquote> 标签定义摘自另一个源的块引用. <blockquote> 与 </blockquote> 之间的所有文本都会从常规文本中分离出来, ...
- Tomcat基础教程(三)
Tomcat中的Web应用 Web应用就是具有特定目录结构的目录和文件. 基于JAVA技术开发的Web应用中通常会包含以下的web对象: 静态文件对象:HTML页面,图片,普通文件 Servlet: ...
- spring获取properties
实际项目中,通常将一些可配置的定制信息放到属性文件中(如数据库连接信息,邮件发送配置信息等),便于统一配置管理.例中将需配置的属性信息放在属性文件/WEB-INF/configInfo.propert ...