C语言 第五章 循环结构程序设计

一、问题的引用

例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语言程序设计(上海电力大学)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值