内容正文:
第05章 循环结构
1
1. 逗号运算符及其表达式
2. while、do while和for语句
3. continue、break和goto语句
4. 循环的嵌套
本章内容
2
解决实际问题有时需要做大量重复操作
为什么要用循环?
3
例如打印1000次”helloworld”,计算s=1+2+3+…+99+100等
一般形式:表达式1, 表达式2, ..., 表达式n
逗号表达式的值,等于表达式n的值
常用于for循环中
一、逗号运算符及其表达式
4
运算符 ,
名称 逗号
类型 双目
优先级 15(最低)
结合性 左结合
例 a=3*5,a*4
a=3*5,a*4,a+5
例 x=(a=3,6*3)
x=a=3,6*a
例 a=1;b=2;c=3;
printf(“%d,%d,%d”,a,b,c);
printf(“%d,%d,%d”,(a,b,c),b,c);
5
例:
#include <stdio.h>
int main()
{
int x,y=7;
float z=4;
x=(y=y+6,y/z);
printf(“x=%d
",x);
return 0;
}
运行结果:x=3
while(表达式)
{
循环体
}
二、while语句
6
注意:
循环表达式可以是任意表达式;
while(表达式)后面不要随便加分号;
建议循环体语句都放在一对大括号内;
例1 计算1+2+3+…+99+100
7
思考:如果要计算100以内奇数的和,该如何修改本程序?
即求s=
#include <stdio.h>
int main()
{
int i=1,s;
return 0;
}
s=0
s=s+1
s=s+2
s=s+3
…
s=s+99
s=s+100
注意检查循
环边界条件,
即1和100是
否都加到s上
s=0;
while(i<=100)
{
s=s+i;
i=i+1;
}
printf(“%d
”,s);
do
{
循环体
}while(表达式);
三、do while语句
8
for(表达式1;表达式2;表达式3)
{
循环体
}
四、for语句
9
1. 循环表达式一般是关系表达式或逻辑表达式,实际上可以是任意表达式;
2. 循环体包含一条以上语句时,用复合语句。不管一条还是多条语句,建议都加大括号;
3. 循环前,必须给循环变量赋初始值;
4. 循环中须有改变循环变量值的语句;
5. 循环体可以为空;
说明
10
循环变量即控制循环结束的变量,也即出现在循环判断表达式中的变量。
例2 求100以内的奇数和与偶数和(while、do while和for写法)
11
例3 从键盘输入一个正整数,在屏幕上将其逆序输出。比如输入573,输出3 7 5 (注意每个数字后面有一个空格)
12
输入正整数n=573;
输出573的个位数3;
把573的个位数抹掉得到新的n=57;
输出57的个位数7;
把57的个位数抹掉得到新的n=5;
输出5的个位数5;
把5的个位数抹掉得到新的n=0;
操作结束
输出正整数n=573;
输出573的个位数3;
输出573的十位数7;
输出573的百位数5;
操作结束
13
输入正整数n=573;
当n不为0时,循环做如下操作:
输出n的个位数;
把n的个位数抹掉得到新的n;
思考:如果要求每位数字正序输出呢?例如上述例子要求输出5 7 3
#include <stdio.h>
int main()
{
int n;
scanf(“%d”,&n);
while(n!=0)
{
printf(“%d ”,n%10);
n=n/10;
}
return 0;
}
break语句
五、continue、break和goto
14
while语句中break执行流程图
do-while语句中break执行流程图
for语句中break执行流程图
continue语句
一般不建议使用无条件转移语句goto
15
while语句
do-while语句
for语句
break结束整个循环,从本层循环后的第一条语句接着执行
continue提前结束本次循环,马上开始做下一次循环,它还在循环中
16
例4 求两个正整数的最大公约数和最小公倍数
17
分析好每个循环的循环体,每个循环都是按其既定的运行流程在运行。
六、循环的嵌套
18
例5 打印九九乘法表
19
1、数列求和
例6 求1-1/2+1/3-1/4…直到最后一项绝对值小于10-6
七、循环例题分析
20
例7 计算a+aa+aaa+…+a…a(n个a)的值,n和a由键盘输入
21
2、找数
例8 判断一个正整数是否素数
22
例9 找出所有的水仙花数。水仙花数是一个三位数,其各个位数上的数字立方和等于该数本身
23
例10 找出1000以内的所有完全数,并按如下格式打印:6=1+2+3。所谓完全数是指一个数如果等于它的因子之和(除自身外),则称该数为完全数。
24
3、打印图形
例11 打印如下图形
25
4、找组合
例12 零钱兑换问题:用1分,2分,5分硬币组合成1元钱,请问分别需要几个1分,几个2分,几个5分?(每币种必须至少1个)列出所有的组合.
26
百钱百鸡问题、百马百担问题
质因数分解
27
5、字符串处理
例13 输入一行字符串,统计并输出其中英文字符、数字字符、空格和其他字符的个数。
28
$$