第五章学习极少了表达式以及运算符,浅尝使用了一次循环(while)。写完之后发现阅读量不高,找下自己原因可能是有点过于啰嗦了吧。

那第六章就直接开始啦!正式进入到学习循环阶段。C语言中循环只有三种——for、while、do while,还是比较好记住的,但是用法需要注意。

学习参考书籍《C Primer Plus》

1,While循环

在第五章的时候已经简单介绍和使用了While循环,下边程序做了一个求和运算(整型运算),结束循环使用的是利用scanf()的返回值来结束循环。

#include <stdio.h> int main(void) { long num; long sum = 0L; //首先声明sum初始值设置为0,此处使用了long类型(0L) int status; printf("Please enter an integer to be summed "); printf("(q to quit): "); status = scanf("%ld", &num); while (status == 1) //使用了==运算符号,这个是真的等于号。 { sum = sum num; printf("Please enter next integer (q to quit): "); status = scanf("%ld", &num); } printf("Those integers sum to %ld.\n", sum); return 0; }

上述程序中使用了==符号,在之前篇章中强调了很多次关于“=”是赋值的意思。其次在使用sum声明类型中使用long类型是为了存储更大的整数,所以将sum初始化为0L(long类型的0),而不是0(int类型的0)。程序结果如下:

Please enter an integer to be summed (q to quit): 44 Please enter next integer (q to quit): 336 Please enter next integer (q to quit): q Those integers sum to 435.

这个循环程序是根据测试条件status ==1,只要status等于1,循环就会重复。每次循环,num的当前值都被加到sum上,这样sum的值始终是当前整数之和。当status的值不为1时,循环结束。这个程序有意思的就在于status的值是怎么变化的:

1,如果scanf()成功读取一个整数,就把该数存入num并返回1,随后返回值将被赋给status(注意,用户输入的值存储在num中,不是status中)。这样做同时更新了num和status的值,while循环进入下一次迭代。

2,如果用户输入的不是数字(如,q或者任何其他字符),scanf()会读取失败并返回0。此时,status的值就是0,循环结束。

上述方式比较费脑子,其实有简单的办法退出循环也就是在循环中添加代码,例如每次循环时询问用户“是否继续循环?<y/n>”,然后判断用户是否输入y。这个办法虽然有点蠢,但Linux以及很多网络设备中仍然使用这种方法选择是否进入下一步。

c语言知识点总结完整版(C语言学习笔记系列)(1)

自制流程图

因此总结来看while循环是入口条件循环,程序在进入循环体之前必须获取输入的数据并检查status的值(作为一种条件),所以在while前面要有一个输入并且不一定是scanf。要让循环继续执行,在循环内需要一个读取数据的语句,这样程序才能获取下一个条件的值。

1.1,终止循环(while)

while循环有一点非常重要:在构建while循环时,必须让测试表达式的值有变化。否则,循环就不会终止(会让程序一直循环下去直到计算机卡死)。

1.2,入口条件循环

在1.2中总结描述了while需要入口在才能进行循环操作,也就是所谓“有条件”指的是语句部分的执行取决于测试表达式描述的条件,如(a < 6)。所以在日常使用中可以使用C语言中的运算关系来进行使用条件(类似大于、小于、等于、不等于、不大于等于等等)。

2,for循环

for循环与while循环中的三个行为写在了一起;

for (size_t i = 0; i < count; i )

for循环的第1行包含了循环所需的所有信息:i的初值,i的终值(循环的出口条件)和每次循环i的增量。

用下边的程序来举例让大家更简单认识for循环:

#include <stdio.h> int main(void) { int i; for (i = 0; i < 11; i ) printf("%d seconds!\n", i); return 0; }

下面程序的运行结果:

c语言知识点总结完整版(C语言学习笔记系列)(2)

输出结果

这个程序每次对i进行累加,累加到10后退出for循环。

当然for的写法还有很多,比如下面的写法:

#include <stdio.h> int main(void) { int x; int y = 0; for (x = 0; y <= 75; y = ( x * 5) 50) printf("d d\n", x, y); return 0; }

该循环打印x的值和表达式 x * 5 50的值,程序的输出如下:

c语言知识点总结完整版(C语言学习笔记系列)(3)

输出结果

所以for语言的写法相对简便,for语句是一种入口条件循环,即在执行循环之前就决定了是否执行循环。

3,do while循环

while循环和for循环都是入口条件循环,即在循环的每次迭代之前检查测试条件,所以有可能根本不执行循环体中的内容。C语言还有一种条件循环,即在循环的每次迭代之后检查测试条件,至少执行循环体中的内容一次。

这种循环被称为do while循环,通用的表达式为以下公式:

do    statement while ( expression );

do while循环在执行完循环体后才执行测试条件,所以至少执行循环体一次;而for循环或while循环都是在执行循环体之前先执行测试条件。do while循环适用于那些至少要迭代一次的循环。

4,选择一个适用的循环

首先,确定是需要入口条件循环还是出口条件循环。通常,入口条件循环用得比较多,有几个原因。其一,一般原则是在执行循环之前测试条件比较好。其二,测试放在循环的开头,程序的可读性更高。另外,在许多应用中,要求在一开始不满足测试条件时就直接跳过整个循环。

这就是为什么需要在讲do while时候用的篇幅较小,主要讲解for和while。

一般而言,当循环涉及初始化和更新变量时,用for循环比较合适,而在其他情况下用while循环更好。对于下面这种条件,用while循环就很合适:

while (scanf("%ld", &num) == 4)

对于涉及索引计数的循环,用for循环更适合。例如:

for (count = 0; count <= 200; count )

所以个人建议是while与for学号走遍天下!

5,总结

本章主要是讲解循环的知识内容,本来打算适用两章来讲,但想了一下不要写得过于分散,增加学习阅读体验。在C语言中使用循环特别注意的三点内容:

注意循环的测试条件要能使循环结束。

确保循环测试中的值在首次使用之前已初始化。

确保循环在每次迭代都更新测试的值。

时间精力有限,尽量提升阅读体验吧,发现想写的简单,但是又觉得写的简单了又不好让读者读懂。如有不足或有疑问欢迎各位大佬们指正,同时也希望非IT专业的小白们能感受到C语言的魅力所在。如果对你有帮助的话点赞收藏哦!嘿嘿


[1] 《C Primer Plus》

,