c语言第5但章-循环结构
回顾 选择结构的关键在于正确描述条件,考虑不同条件下应做的动作。 关系运算符,逻辑运算符 掌握if语句三种基本结构的语法,场景,注意事项 嵌套if结构是在主if块中还包含另一个if 语句 C语言规定,嵌套if结构中每个else部分总是属于前面最近的那个缺少对应的else部分的if语句 switch结构适用于条件表达式为单值的多分支选择。条件表达式或变量结果必须是整型或字符型 条件运算符是 if–else 语句的另一种表现形式 第五章 循环结构程序设计 导入 在第三章里我们已经知道,循环结构就是在一定条件成立的情况下反复执行一些语句或操作,即有些语句会被反复多次执行。 要想写好循环,首先要能够从问题的描述和解题步骤中去发现是否需要使用循环。在分析问题时,要注意识别出解决步骤中重复执行的类似动作,这是重要的线索,说明可能需要引进一个循环结构,统一处理这些重复的动作,尤其是重复次数不确定或者过多的情况。 本章目标 掌握循环结构的使用时机 掌握循环的三种结构 牢记构成循环的要素 掌握使用continue和break提前结束循环的用法 掌握嵌套循环 理解三种循环结构各自的特点和适用情况 引入 例子1、输出一排50个“*”作为分割线; 重复打印50次“*” 例子2、一个老师给多个班上同一门课,每次考试后都要统计各个分数段的人数(不及格,中等,良好,优秀)和平均分。如何设计一个程序来完成此功能 设有4个计数器,分别记录各个分数段的人数。用一个单元来存放总分数,用一个单元来存放总人数。 重复以下动作: 读入一个学生的成绩 总人数加一 总分数加上当前的学生成绩 判断当前学生成绩属于哪一个分数段,对应的分数段人数加一 循环结构的必要性 例1、应用中我们经常会遇到采用若干个“-”或“*”形成一行,作为项目间的分割线或者对输出进行布局,程序是如何编写这样的输出呢? 分析:如果使用当前学习过的顺序设计,有两种方法。 1、通过一条printf语句一次性输出指定数量的字符。 printf(“----------------------------------------------------------------------\n”);printf(“--------------------------------------------------\n”); printf(“-----------------------------------------------------------------------\n”); 写printf语句时需要仔细核实字符数量,以免出错。 2、连续写n条printf语句,每个printf语句输出一个字符. Printf(“-”); Printf(“-”); … … Printf(“-”); Printf(“-”); 当n过大时,就会出现整个屏幕都是printf语句,不仅书写繁琐,而且可读性也很差。 循环结构的必要性 例2、实现数学中常见的累加和问题,求1-4所有数的立方和 分析:需要调用4次pow函数来分别计算1-5所有数的立方和,然后再进行多次累加。 long a, s; a = pow(1, 3); s = s+a; a = pow(2, 3); s = s+a; a = pow(3, 3); s = s+a; a = pow(4, 3); s = s+a; 上面两个程序很明显无法令人满意,里面有太多重复的类似的语句,尤其是当重复次数大到一定程度时(10000),其程序书写的繁琐已经使得其失去了计算机辅助计算的优越性。 循环结构的必要性 通过观察可以发现,这两个程序共同的特点就是有很多重复类似的操作语句,如果能够将其合并或者简化将会使程序变得更为简洁,也更有效率。 针对例2,里面重复的类似语句主要是两个,一个是计算当前数的立方,另一个是把当前计算出的立方结果加到结果变量s上。 可以采用如下思路进行简化: 变量i代表当前需要计算立方和的数,赋初值为1,s代表立方和的结果,赋初值为0;(int i=1, s=0) 如果a的值小于等于100,就重复以下动作:(while (i<100)) 计算i的立方并将其加到变量s上 (s += pow(i,3);) 将i的值加1 (i++;) 这样通过100次的重复操作,即完成了这个计算任务。这样的重复类似动作通过循环语句实现就会变得很清晰,只要把重复动作的控制条件想清楚了,就不难写出如下程序 循环结构的必要性 可见,在程序设计中使用循环结构还是非常必要的,循环结构常见的应用情况包括: 输出同样字符构成的图案。如常见的若干个“-”构成的点划线,*型图案等 需要对一系列类似的数据做同样的处理。如已知50个学生三门课的成绩,计算每个学生的平均分,既是对