C语言入门教程(六)for循环

大家好,废话不多说。直接进入主题,先来看一下上一节课的练习题及作业。

练习:

1.编写程序判断一个用户给定的年份是不是闰年

如果年份数字可以被4整除但是不能被100整除则它是闰年

如果年份数字可以被400整除则它是闰年

2.从键盘得到三个整数,找出其中的最大数并把它打印在屏幕上

作业:

1.从键盘得到一个三位数(例如123),把它倒序打印在屏幕上(例如321)

循环语句可以让同样一组语句反复多次运行

for关键字可以用来编写循环

for循环中可以让一个变量依次代表一组数字,然后使用同样一组语句处理每个数字,这个变量叫做循环变量

采用如下结构描述循环变量的变化过程

(把开始数字赋值给循环变量;用逻辑表达式描述循环变量和结束数字的关系;

循环变量的变化规律)

练习:

1.使用for循环在屏幕上打印如下5行内容

54321

5432

543

54

5

每次打印一行

2.在屏幕上打印1到100之间的所有奇数

3.编写程序从键盘得到一组考试成绩,找出其中最大成绩和最小成绩并计算出总成绩,把结果打印在屏幕上(用户事先需要输入成绩个数)

假设有如下for循环

for (1;2;3) {

4

}

它按照如下方式分组执行

[1,2][4,3,2][4,3,2]….[4,3,2]

第一组和其他组不同

正常情况下for循环一定在两组之间结束

如果某一组最后编号为2的逻辑表达式结果为真则启动下一组,否则结束循环

如果循环正常结束则结束后循环变量一定落在范围之外

for循环执行时有可能不执行大括号里面的语句

for循环小括号里的每部分都可以省略

如果小括号里的逻辑表达式没有写则表示这个逻辑表达式的结果永远是真。这种循环不能正常结束,所以叫做死循环。

小括号里最前和最后的部分可以是用逗号连接的多条语句

C99规范中允许在小括号里临时声明循环变量这个循环变量只能在循环里使用,循环结束后就不能用了

2、可以在循环中使用break;语句立刻结束循环的执行一旦执行了break;语句后循环中的一切语句都

不再执行,循环变量也不会再变化

如果循环采用break;语句结束则结束后循环变量在范围内

可以在循环中使用continue;语句直接跳到循环大括号的末尾,中间的所有语句这次都不执行了

如果编写循环的时候无法计算出循环需要执行的次数就可以编写一个死循环,在循环中使用分支和break;语句结束循环

作业:

1.编写循环解决鸡兔同笼问题一共40个头,100只脚计算兔子的只数并把结果打印在屏幕上

for循环嵌套,C语言for循环嵌套详解!编程使我快乐

虽说是多层,事实上 for 循环嵌套的层数也不能太多。通常为两个 for 循环的嵌套,超过两个的极少使用。

与单个 for 循环相比,多个 for 循环的嵌套在逻辑上更复杂一点,但并不难懂。

直接给大家写一个程序:

输出结果是:

问世间情是何物, 直教生死相许

两情若是久长时, 又岂在朝朝暮暮

两情若是久长时, 又岂在朝朝暮暮

两情若是久长时, 又岂在朝朝暮暮

问世间情是何物, 直教生死相许

两情若是久长时, 又岂在朝朝暮暮

两情若是久长时, 又岂在朝朝暮暮

两情若是久长时, 又岂在朝朝暮暮

问世间情是何物, 直教生死相许

两情若是久长时, 又岂在朝朝暮暮

两情若是久长时, 又岂在朝朝暮暮

两情若是久长时, 又岂在朝朝暮暮

问世间情是何物, 直教生死相许

两情若是久长时, 又岂在朝朝暮暮

两情若是久长时, 又岂在朝朝暮暮

两情若是久长时, 又岂在朝朝暮暮

=============

其实,多层 for 循环嵌套的执行过程与单个 for 循环的执行过程是一模一样的。多层 for 循环的嵌套只不过是将单个 for 循环大括号中的“语句”换成了 for 循环而已。

下面看看上面程序中两个 for 循环嵌套是怎么执行的。

1) 首先求解表达式 1,即给变量 i 赋初值,i=0;表达式 1 只执行这一次,下面都不会再执行了。

2) 然后求解表达式 2,即 0<4 成立,则执行 for 循环中的内嵌语句:

printf(\”问世间情是何物, 直教生死相许\\n\”);

for (j=0; j<3; ++j)

{

printf(\”两情若是久长时, 又岂在朝朝暮暮\\n\”);

}

====================

首先 “printf(\”问世间情是何物,直教生死相许\\n\”)”,然后执行内部 for 循环,对这个 for 循环再次应用“单个 for 循环”的执行过程:

★ 首先求解表达式 1,即给变量 j 赋初值,j=0。

★ 然后求解表达式 2,即 0<3 成立,则执行 for 循环中的内嵌语句,即 “printf(\”两情若是久长时,又岂在朝朝暮暮\\n\”);”。

★ 然后执行表达式 3,变量 j 自加 1,即变量 j 由 0 变为 1。

★ 然后求解表达式 2,即 1<3 成立,则执行 for 循环中的内嵌语句,即“printf(\”两情若是久长时,又岂在朝朝暮暮\\n\”);”。

★ 然后执行表达式 3,变量 j 自加 1,即变量 j 由 1 变为 2。

★ 然后求解表达式 2,即 2<3 成立,则执行 for 循环中的内嵌语句,即“printf(\”两情若是久长时,又岂在朝朝暮暮\\n\”);”。

★ 然后执行表达式 3,变量 j 自加 1,即变量 j 由 2 变为 3。

★ 然后求解表达式 2,即 3<3 不成立,则内部的循环结束。对内部的 for 而言循环是结束了,但对外部的 for 而言,“for 循环的执行”过程才执行到表达式 3。

3) 然后执行表达式 3,变量 i 自加 1,即变量 i 由 0 变为 1。

4) 然后再求解表达式 2……

……

就这样一直循环下去,直到外层循环结束,整个循环才结束。

总之,不管是单个 for 循环还是多个 for 循环的嵌套,它们的执行过程是一样的。只不过如果是“多个 for 循环的嵌套”,则其执行过程也是嵌套的。

对于这个程序前面用一个for编程也可以实现,但是逻辑性太强,现在再用for循环嵌套编程实现一下:

==========

输出结果是:

请输入n的值:10

sum = 4037913

我们看到 n 的值仅为 10 结果就这么大,要再大点 long 类型肯定是存放不了的。此外,有人可能会纠结这样的问题,程序开头定义那么多变量,可是我写的时候怎么知道后面要用到哪些变量呢?

其实,这些变量都不是刚开始写程序的时候就定义的,大多数情况下都是“若刚开始知道定义哪些变量那么就定义上,如果不知道那就不定义,等到后面需要用再回到前面进行定义”,这才是正常的逻辑。

思路:用穷举法, 将所有可能的情况都列出来, 用 for 循环可以实现穷举

分析:100 元单用 50 换算, 最多需要两张;用 20 元换算, 最多需要五张;用 10 元换算最多需要十张

=========

输出结果是:

0 0 10

0 1 8

0 2 6

0 3 4

0 4 2

0 5 0

1 0 5

1 1 3

1 2 1

2 0 0

所谓枚举就是将所有可能的情况全部列出来的意思。for 循环嵌套是实现枚举的一种手段,上面的换算也是一种枚举。假设公鸡 5 元一只,母鸡 3 元一只,小鸡 1 元 3 只,现在给你 100 元,要你买回 100 只鸡,求出公鸡、母鸡、小鸡分别为多少只。

==========

输出结果是:

x = 0, y = 25, z = 75

x = 4, y = 18, z = 78

x = 8, y = 11, z = 81

x = 12, y = 4, z = 84

==================================

for循环嵌套我们就学习到这里。

如果你还想更深入地学习以及其他知识,不管你是转行也好,初学也罢,进阶也可~

【值得关注】我!

本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com

点赞 0
收藏 0

文章为作者独立观点不代本网立场,未经允许不得转载。