5.1 引例
【例5.2】计算1-4/1+7/1-10/1+13/1-16/1+...的和,直到某一项的绝对值小于10负6次方
5.2 使用for语句实现循环结构
5.2.1 for语句的 基本语法
for语句的一般形式:
for(表达式1;表达式2;表达式3)
循环体语句;
1.首先计算表达式1;
2.判断表达式2,若其值为真(非0),则执行循环体语句,然后执行第3步;若值为假(0),结束循环,转到第5步执行。
3.计算表达式3。
4.返回第2步继续执行;
5.循环结束,继续执行for语句的下一条语句;
【例5.3】输入一个正整数n,求sum的值
【例5.4】输入一个正整数n,求n!
2.for语句的一般形式中省略表达式1
格式如下:
for(;表达式2,表达式3)
循环语句;
说明:省略表达式1时,可以将循环变量赋初值放在for之前。注意,此时不能省略第一个“;”。
例5.3的循环语句:
for(i=1;i<=n;i++)
sum=sum+i;
等价于:
i=1;
for(;i<=n;i++)
sum=sum+i;
3.for语句的一般形式中省略表达式2
格式如下:
for(表达式1;;表达式3)
循环体语句;
4.for语句的一般形式中省略表达式3
for(表达式1;表达式2;)
循环体语句;
例5.4的循环语句:
for(i=1;i<=n;i++)
factorial=factorial*i;
等价于:
for(i=1;i<=n;)
{ factorial=factorial*i;
i++;
}
5.for语句的一般形式表达式1和表达式3也可以是逗号表达式
例5.3的程序段:
sum=0;
for(i=1,i<=n;i++)
sum=sum+i;
等价于:
for(sum=0,i=1;i<=n;i++)
sum=sum+i;
表达式sum=0,i=1为逗号表达式。
6.for语句的一般形式表达式2的值只要非0,就执行循环体
例如:
for(;(ch=getchar())!='\n';)
printf("%c",ch)
7.for语句的一般形式中循环语句可以省略
例5.3的循环语句:
for(i=1;i<=n;i++)
sum=sum+i;
等价于:
for(i=1;i<=n;sum=sum+i,i++);
5.2.2 for循环使用示例
【例5.5】输入一个整数n,计算1-1/4+1/7-1/10+1/13-1/16+...的前n项之和
【例5.6】输入10个数,输出其中的最大数
【例5.7】输出所有的水仙花数
【例5.8】由键盘输入一个正整数,判断该数是否为完数
运行结果2
【例5.9】统计由键盘中输入的若干个字符中,大写英文字母、小写英文字母、数字字符和其他字符的个数。
【5.10】任意输入一行小写字母,将它们转换成大写字母后输出
【例5.11】 由键盘输入3个数字,将其组合成一个整型数并输出
【5.12】由键盘输入一个正整数,判断其是否为素数
运行结果2
5.3 使用while语句实现循环结构
5.3.1 while语句的基本语法
while语句一般形式如下:
while(表达式)
循环体;
while语句的执行流程如图5.3所示
第一步:计算表达式的值,若表达式的值为“真”,则执行第2步;若表达式的值为“假”,则转到第4步。
第二步:执行循环体语句。
第三步:返回第一步。
第四步:结束循环,执行while语句的下一条语句。
注意:while语句的特点是先判断循环条件,后执行循环体。
5.3.2 while循环使用示例
【例5.13】计算sum的值
【5.14】输入一个正整数n,计算n!
【5.15】由键盘输入一串字符,分别统计输入字符中数字字符、字母字符及其它字符个数
5.4 使用 do-while语句实现循环结构
5.4.1 do-while语句的基本用法
do
循环体
while(表达式);
do-while语句的执行流程如图5.4所示
1.执行循环体语句;
2.计算表达式的值,若表达式的值为‘真’,返回第一步;若表达式的值为‘假’,则执行第3步;
3.结束循环;
注意:do-while语句的特点是先循环体,后判断循环条件。因此,do-while循环至少要执行一次循环体。
5.4.2 do-while循环使用示例
【例5.16】使用do-while语句计算sum=n的值
【例5.17】求两个自然数的最大公约数和最小公倍数
【例5.18】输入一个整数,统计该数的位数
5.5 改变循环结构的跳转语句
5.5.1 break语句
break结束整个循环
【例5.19】分析下面程序的运行结果
【例5.20】由键盘输入一个正整数,判断其是否为素数
运行结果2
5.5.2 continue语句
作用:结束本次循环,开始下次循环
【例5.22】把1~100之间能7整除的数,以每行5个的形式在屏幕上输出
【例5.23】分析下面程序运行结果
5.5.3 goto语句
四种循环控制语句,for循环语句、while循环语句、do-while循环语句 、goto循环
【例5.24】使用goto语句计算sum=n的值
【例5.25】求1!+2!+3!+...+10!
【例5.26】输出乘法口诀表
【例5.27】求100以内的素数。要求每行输出10个。
【例5.28】将10~20之间的正整数分解质因数
5.7 典型算法举例
5.7.1 递推法
【例5.29】
【例5.30】求sin(x)=x-x^3/3!+x^5/5!-x^7/7!+...的近视值,要求精确到10负6次方
5.7.2 迭代法
【例5.31】
5.7.3 穷举法
【例5.33】判断由1、2、3、4四个数字能组成多少个互不相同且无重复数字的三位数?输出这些数
【例5.34】
1.定义整型i,j;
2.若i<=5;转第3步,则转第步;
3.若i<=20-i;转第4步;则转第5步;
4.输出" ";
5.j++;转第3步;
6.若j<=2*i-1;转第7步;则转第9步;
7.输出"*";
8.j++;转第6步;
9.输出\n;
10.i++,转第2步;
9.结束;
【例5.35】
1.定义m,n,count;
2.m=rand()%(80-10+1)+10;
3.输入一个10—80之间的整数;
4.判断是否为真,转第5步,则转第13步;
5.count++;
6.若m==n;转第7步;则转第9步;
7.m>n&&count<5;
8.输出"对不起!你猜对了!再来一次!";
9.m<n&&count<5;
10.输出"对不起!你猜大了!再来一次!";
11.若count==5;转第12步,则转第4步;
12.输出"对不起!n你没有机会!"
13.结束;
【例5.36】
【例5.37】
1.定义x,t;
2.输入"i|tpower\n";
3.若x<1000;转第4步;则第10步;
4.t=x*x;
5.若t!=0;转第6步;则转第9步;
6.若x==t%1000;转第7步;则转第8步;
7.输出x;x*x;
8.t=t/10;
9.x++,转第3步;
10.结束;