一、问题的引用
例1:求某个学生三门课的平均成绩。
(源代码)
#include<stdio.h>
int main(void)
{
float s1,s2,s3,aver;
scanf("%f%f%f",&s1,&s2,&s3);
aver=(s1+s2+s3)/3;
printf("aver=%7.2f",aver);
return 0;
}
(运行结果截图)
例2:全班有50个学生,统计各学生三门课的平均成绩。
(源代码)
#include<stdio.h>
int main(void)
{
float s1,s2,s3,aver;
int i=1;
while(i<=50)
{
scanf("%f%f%f",&s1,&s2,&s3);
aver=(s1+s2+s3)/3;
printf("aver=%7.2f",aver);
i++;
}
return 0;
}
(运行结果截图)
·大多数的应用程序都会包含循环结构
·循环结构、顺序结构和选择结构是结构化程序设计的三种基本结构,它们是各种复杂程序的基本构造单元
二、while循环结构程序设计
while语句一般形式
while语句的流程图
while语句的执行过程
(1)计算while后面的循环控制表达式的值。
(2)如果表达式的值为“真”,则执行循环体,并返回步骤1。
(3)如果表达式的值为“假”,则结束循环,执行循环体后面的语句。
例1:用while语句编写程序计算100!的值。
解题思路:
·这是累乘问题,需要先后将100个数相承
·要重复100次乘法运算,可用循环实现
·后一个数是前一个数加1而得
·乘完上一个数i后,使i加1可得到下一个数
流程图:
(源代码)
#include<stdio.h>
int main(void)
{
int i=1; //循环变量赋初值
double t=1.0; //累乘变量赋初值
while(i<=100)
{
t=t*i;
i++;
}
printf("100!=%e\n",t);
return 0;
}
(运行结果截图)
说明
(1)程序中的累乘变量t称为累乘器。
(2)语句“i++;”是i自增函数,这里的++后置,意思是先使用i的值,然后再使i的值加1。例如:“j=i++;”相当于“j=i;i=i+1;”1。类似的还有i自减语句“i--;”,表示先使用i的值,然后再使i的值减1。
(3)自增(减)运算符常用于循环语句中使循环变量自动加1或者自动减1。
例2:输入50个同学成绩,求最高分
(源代码)
#include<stdio.h>
int main(void)
{
float score,max_score=0;
int i=1;
while(i<=50)
{
scanf("%f",&score);
if(score>max_score)
max_score=score;
i=i+1;
}
printf("max_score=%d",max_score);
return 0;
}
(运行结果截图)
使用while语句的注意事项
(1)while语句的特点是先计算表达式的值,然后再根据表达式的值决定是否执行循环体中的语句。因此,如果while后的表达式的值一开始为假,循环体将一次也不执行。
(2)在执行while语句之前,循环控制变量必须初始化,否则执行的结果将是不可知的。
(3)在循环体中一般应该包含改变循环条件表达式的语句,即应有使循环趋于结束的语句,以避免造成无限循环(“死循环”)的发生。
(4)当循环体由多条语句组成时,要用{}括起来,形成复合语句。
三、do-while循环结构程序设计
do-while循环
do-while语句的执行过程
do-while语句的流程图
例1:利用do-while循环语句编程计算100!的值
(源代码)
(运行结果截图)
例2:输入50个同学成绩,求最高分
(源代码)
或
(运行结果
例3:while和do-while循环的比较
·当while后面的表达式的第一次的值为“真”时,两种循环得到的结果相同;否则不相同。
while与do-while的区别
四、for循环结构程序设计
for循环
表达式1
表达式2
表达式3
for语句的执行过程
for语句的流程图
例1:用for循环语句编程计算100!的值
(源代码)
常见错误
例2:输入50个同学成绩,求最高分
(源代码)
for循环语句分析
例3:将100~500之间的既能被3整除也能被7整除的数输出,每行输出5个。请问别用三种循环结构实现。
(源代码)
3种循环语句的选择
通常情况下,这3种语句是通用的,但使用上可以注意下列技巧:
五、循环结构举例(1)
(一)累加累乘法
例1
问题分析
流程图
(源代码)
(运行结果截图)
流程分析
(二)迭代法
例2
这是一个有趣的古典数学问题:
·由一对兔子,从出生后第3个月起每个月都生一对兔子。
·小兔子长到第3个月后每个月又生一对兔子。
流程图
(源代码)
(运行结果截图)
六、循环的嵌套
例1:若一个口袋中放有9个球,其中有3个红色球,4个白色球和2个蓝色球,从中任取6个球,编写程序求解一共有多少种不同的颜色搭配方案。
问题分析:
(源代码)
(运行结果截图)
七、break及continue语句
辅助控制语句
break语句
break在循结构中的使用形式
break在嵌套结构中的使用形式
例2
猜数游戏:由计算机“想”一个10以内的数字请用户猜,用户在键盘上输入所猜想的数字,猜对了,程序提示“恭喜你猜对了!”。猜错了,程序提示“你输入的数值太大”或“你输入的数值太小”,然后继续猜,直到猜对为止,程序结束
(源代码)
continue语句
break和continue的主要区别
例2
从键盘上输入不多于10个的实数,求这些数的总和及其中正数的总和。若不足10个数,则以0作为结束标记。
(源代码)
分析:若输入的实数不足10个,可用break语句来提前结束循环;若输入的实数为负数,可用continue语句来控制该实数不累加到正数的总和中去,从而结束本次循环。
八、循环结构举例(2)
打印有规律的图形
日常生活中,我们可以看到很多有规律的图形和花纹的排列组合,尤其是在现代的艺术设计中,这其中也蕴含了重复的动作,也即循环的思想。
例1:请编写程序,打印以下的图形
问题分析:
(源代码)
例2
解题思路
(源代码)
(运行结果截图)
常见的问题求解过程,建议步骤如下:
九、循环结构程序设计中的常见错误
三种循环结构
例1:编写程序计算100!的值
常见错误:
常见错误:
1.丢掉语句结束标记“;”,尤其是for语句中表达式后或do-while语句后的分号,或在预处理命令后边、while()后、for()后加“;”。
2.循环次数尤其需要注意
3.if语句或循环语句中逻辑表达式或关系表达式书写错误。
4.判断一个变量是不是一个值,务必使用“==”
5.循环后面的花括号千万不要忘记,如果忽略,只能影响它最近的那句代码。
6.切记循环控制变量不要忘记赋初值
7.切记循环体内一定要有使循环趋于结束的语句。
8.使用循环时,注意变量的值是否溢出。
十、综合案例
例:编写一个程序来帮助小学生学习10以内的加法和减法。
·如果小学生答错了,允许再次回答,如果允许最多回答3次,程序如何处理?
算法设计:
(源代码)
·如果回答次数不受限制,一直到答对为止,程序又如何处理?
例:如果一次要给小学生测验10题,每题回答一次,最后给出对错统计,程序又该如何处理?
算法设计:
(源代码)
例:如何将上述结果输出到屏幕的同时也输出到文本文件中呢?
算法设计:
(源代码)
该文章属于个人课后学习笔记,内容来源于知到智慧树共享课-C语言程序设计(上海电力大学)。