这两章的标题是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 读书笔记第六章和第七章的更多相关文章

  1. C++ Primer Plus读书笔记(六)分支语句和逻辑运算符

    1. 以上均包含在cctype中 1 #include<cctype> 2 //#include<ctype.h> 2.文件操作 (1)头文件 1 #include<fs ...

  2. 【读书笔记】C#高级编程 第七章 运算符和类型强制转换

    (一)运算符 类别 运算符 算术运算符 + - * / % 逻辑运算符 & | ^ ~ && || ! 字符串连接运算符 + 增量和减量运算符 ++ -- 移位运算符 < ...

  3. 《C#从现象到本质》读书笔记(六)第8章委托和事件

    <C#从现象到本质>读书笔记(六)第二部分 C#特性 第8章委托和事件 从这一部分开始,知识点就相对少了,重要的是代码练习.奈何太高深的代码平常不怎么用,这些特性也不是经常写代码的. 委托 ...

  4. 《Microsoft Sql server 2008 Internals》读书笔记--第六章Indexes:Internals and Management(1)

    <Microsoft Sql server 2008 Internals>索引文件夹: <Microsoft Sql server 2008 Internals>读书笔记--文 ...

  5. 《C++ Primer》读书笔记 第一章

    读<C++ Primer>才知道,自己对C++知之甚少... 写个博客记录下自己C++的成长,只是读书笔记,不是对<C++ Primer>知识点的总结,而是对自己在书上看到的以 ...

  6. 读书笔记 - js高级程序设计 - 第十五章 使用Canvas绘图

    读书笔记 - js高级程序设计 - 第十三章 事件   canvas 具备绘图能力的2D上下文 及文本API 很多浏览器对WebGL的3D上下文支持还不够好   有时候即使浏览器支持,操作系统如果缺缺 ...

  7. 《android开发艺术探索》读书笔记(六)--Drawable

    接上篇<android开发艺术探索>读书笔记(五)--RemoteViews [BitmapDrawable] 简单的图片 <!xml version="1.0" ...

  8. 【读书笔记】自然语言处理综述 -- 第四章 -- N元语法

    第四章 N元语法 本章开篇的两句话很有意思,代表了当时两个学派的思想和矛盾. 一句是"有史以来最伟大的语言学家"乔姆斯基说的:"句子的概率,在任何已知的对于这个术语的解释 ...

  9. C++ Primer Plus读书笔记

    第五章 循环和关系表达式 1. 2.类别别名: (1)   #define FLOAT_POINTER float * FLOAT_POINTER pa, pb; 预处理器置换将该声明转换成  flo ...

随机推荐

  1. SQLServer2008收缩数据库日志

    -- Set to SIMPLE mode ALTER DATABASE [DATABASE_NAME] SET RECOVERY SIMPLE; -- Shrink the db ); -- Set ...

  2. linux中挂载硬盘报错(you must specify the filesystem type)

    公司有台服务器做了raid1,由于容量小,需扩容,原先打算再添加两块硬盘进去做多一组raid1,组成两组raid1混合使用,但是公司抠门,买到服务器只能安装3块硬盘,无奈之下只能放多一块进去单独挂载分 ...

  3. Swift - 04 - 浮点型

    import UIKit var str = "Hello, playground" // 显式定义浮点型常量 let PI:Float = 3.141592612312312 l ...

  4. VsCode使用技巧

    VsCode版本1.7.2 1. node智能提示:vscode1.7之前的版本智能提示是采用jsconfig.json方式,在右下角会有小灯泡,点击创建jsconfig.json.1.7之后使用Ty ...

  5. 手把手教你DIY一个春运迁徙图(一)

    换了新工作,也确定了我未来数据可视化的发展方向.新年第一篇博客,又逢春运,这篇技术文章就来交给大家如何做一个酷炫的迁徙图(支持移动哦).(求star 代码点这里) 迁徙图的制作思路分为静态的元素和变换 ...

  6. 妙用git rebase --onto指令

    有时候,在分支提交更改的时候,会忘记rebase,就直接提交上去,或者忘记和本地远程分支做merge,就直接rebase了别的分支.有时候真希望有一种切片的方式,让自己的分支只需要接上某一段.这个时候 ...

  7. 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 ...

  8. html5 中常用的标签和属性

    标签: <blockquote> 标签定义摘自另一个源的块引用. <blockquote> 与 </blockquote> 之间的所有文本都会从常规文本中分离出来, ...

  9. Tomcat基础教程(三)

    Tomcat中的Web应用 Web应用就是具有特定目录结构的目录和文件. 基于JAVA技术开发的Web应用中通常会包含以下的web对象: 静态文件对象:HTML页面,图片,普通文件 Servlet: ...

  10. spring获取properties

    实际项目中,通常将一些可配置的定制信息放到属性文件中(如数据库连接信息,邮件发送配置信息等),便于统一配置管理.例中将需配置的属性信息放在属性文件/WEB-INF/configInfo.propert ...