循环结构程序设计:三种循环语句
C语言 第五章-循环结构程序设计
执行过程如图所示。其中i为外循环的控制变 量,j为内循环的控制变量。
i =0 当 i <=10
j=0 当 j<=10
printf(“%d ”, i*j ) j++ i++
例4 编程打印“九九乘法表”。
分析:九九乘法表 1×1=1 1×2=2 1×3=3 … 2×1=2 2×2=4 2×3=6 … 3×1=3 3×2=6 3×3=9 … …… 9×1=9 9×2=18 9×3=27 …
i ++ ; } while ( i <= 100 ) ; printf ( " %d " , sum ) ; }
结果相同
同样是下列程序,但如果while后面的表达式结果一开始就是 假时,两种循环结果会不一样。
main ( ) /*程序1*/
{ int i , sum = 0 ; i = 101 ;
所以程序需要设计成二重循环。由于题目只 要求找到一组解,所以在循环过程中只要找到一组 满足条件的x, y, z就可以跳出循环。
跳出循环的方法可以采用break语句,但是, 因为是二重循环,所以要考虑使用break是否方便。
程序 百钱买百鸡问题。 void main ( ) { int x , y , z ;
打印第2行 ( i = 2 ) for (j=1;j<=9;j++) printf(“%5d”,i*j) ; printf ( “ \n ” ) ; /*换行打印*/
…… 打印第9行 ( i = 9 )
for (j=1;j<=9;j++) printf(“%5d”,i*j) ; printf ( “ \n ” ) ; /*换行打印*/
循环结构
printf("%d ",n);
}
}
编程小结
如何按要求输出几项后换行; 在程序设计中,常引入标志变量(或称开 关变量)来表征某个量“是”或“不是”; 课后习题6.1如何求最大公约数和最小公 倍数的算法:辗转相除法; 课后习题6.2,针对“输入一行字 符,……”的题目处理判断条件 while((c=getchar())!=„\n‟)
重要注意:
请认真阅读课本
P359—P363 P371—373
附录中关于上机事项的介绍;
作业
NO1: 编写程序,求1-3+5-7+…-99+101的值; 按正序和反序输出字母表;(只是一道题) 1 1 1 1 1 编写程序,求e≈ 1 ! 2 ! 3 ! n! ①用while循环,要求直到最后一项的值小 于10-4。 ②用for循环,计算前50项; ——此题目的:看哪种方法精度高。
(注意:赋初值时刻及{}包括的范围) 另:为考虑阅读的方便,请务必 注意书写时的缩进及层次
例:打印各种形状图形
***** ***** ***** * ***** *** *** ***** * 考虑:采用双重循环,一行一行输出。 每一行输出步骤:一般3步。 1)光标定位 2)输出图形 3)每输完一行光标换行(\n)
说明(此部分可自学,P111)
for语句使用非常灵活,可以省略“表达 式1”、“表达式2”、“表达式3”中的 几个或全部表达式,但2个“;”不
可省;
①省略“表达式1”:表达式1”的作用 是设定循环初始条件,“表达式1”省略 后,应在for语句前面设置循环初始条件; ②省略“表达式2” (即循环条件), 不判别循环条件,认为循环循环条件始
循环结构程序设计(C语言实验报告)
循环结构程序设计(C语言实验报告)实验目的:1. 掌握循环结构程序设计流程2. 熟悉while、do-while和for循环语句的使用3. 掌握循环语句的嵌套应用实验原理:循环结构是一种非常重要的程序设计结构,其目的是为了让程序可以重复执行一段代码块,从而达到省去大量代码重复编写的目的,也可以是让程序能够按照用户的需求反复执行一段代码块。
在C语言中,常用的循环结构有while、do-while和for三种,这三种循环语句的基本语法结构是:while(循环条件){循环体语句;}其中,while循环和do-while循环的区别在于:while循环条件成立时,不一定会执行一次循环体,但do-while循环条件成立时,会先执行一次循环体,然后判断循环条件是否成立;至于for循环,则是将循环条件、循环初值和循环增量三个要素集成在一起,使用比较方便。
另外,循环结构也可以进行嵌套应用,即在循环体内部再嵌套一个循环,这样可以实现多个变量的循环控制。
应用实例包括如下:1. 打印九九乘法表2. 对一个数组进行排序3. 多重循环实现字谜游戏实验内容:1. while循环:目的是求出1~100的整数和,并在程序运行过程中输出1~100的所有整数。
目的是输入若干个数字,计算它们的平均值。
3. for循环:目的是输入一个数n,求1~n中可以被3或5整除的所有整数和。
4. 循环嵌套:目的是打印九九乘法表。
实验总结:本次实验通过三种常用的循环结构,并结合实例进行学习掌握,同时还熟悉了循环嵌套的应用。
相信这对于日后的程序设计和代码优化应用会非常有帮助。
[工学]第05章 循环结构程序设计 (2)
22
i=i+c
2019/2/17
例:#include<stdio.h> 例:#include<stdio.h> main( ) main( ) { int i=0; { int i=0; for(;i<10;i++) for(i=0;i<10;i++) putchar(‘a’+i); putchar(‘a’+i); } } 运行结果:abcdefghij
2019/2/17
21
(7)表达式2一般是关系表达式(如 for语句说明4 i<=100)或逻辑 表达式(如a<b&&x<y),但也可以是数值表达式 或字符表达式,只要其值为非零,就执行循环体。分 析下面两个例子: ①for ( i=0;(c=getchar( ))!=‘\n’;i+ =c); i=0 此 for语句的执行过程见图 ,它的作 用是不断输入字符,将它们的ASCII 取一个字 码相加,直到输入一个“换行”符为 符=>c 止。 F ② for( ;(c=getchar( ))!=‘ \ n’;) C≠换行符 printf(“%c”,c);
15
思考:该程序是什么功能?
2019/2/17
5.3 for语句
for循环语句是C语言中功能最强的循环语句,它有
多个变化形式,并且可以很方便的代替其它的循环语
16
句。 for语句的一般形式
for(表达式1;表达式2;表达式3)循环体语句
2019/2/17
17
for执行流程
①先计算初值表达式1,它主要 用于循环开始前设置变量初值; ②接着计算循环控制逻辑表达式 2,它控制循环条件,决定循环 次数; ③如果表达式2为真,则执行循 环体语句,否则结束for循环; ④求解表达式3,它主要是对循 环控制变量进行修改。 ⑤转步骤②执行。
C语言程序设计:第5章 循环结构
12
do...while语句(cont...)
课堂练习: 1.输出1---n之间的数,其中n从键盘输入。
int main(void) {
//1.定义变量i和n //2.输入n的值 //3.思考循环的开始条件:i从1开始 //4.思考循环的结束条件:i++,i > n //5.循环的条件:i<=n //6.循环要做的事情:输出i的值 return 0; }
} 相当于 while(1) {
}
26
小结
❖for(i=m;i<n;i++)//循环次数:n-m次 ❖for(i=m;i<=n;i++)//循环次数:n-m+1次
27
循环语句的练习
课堂练习: 1.输出n---1之间的数,其中n>1且n从键盘输入。 2.计算1*2*3*...*n的值(n的阶乘n!), 其中n从键盘输入。 3.计算10- 1/2 - 1/3 -....1/n的值 以上练习分别以while、do...while、for语句实现
int main(void) {
//1.定义变量i,n,sum //2.输入n的值 //3.思考循环的开始条件:i从1开始 //4.思考循环的结束条件:i++,i > n //5.循环的条件:i<=n //6.循环要做的事情:累加i的值 //7.输出计算结果 return 0; }
24
for语句(cont...)
{
sum = sum + i;
if(sum > 100)break;
VFP第六章课件2(循环结构)
控制循环执行的方式
控制循环执行的方式
3)用记录指针控制循环 学院英语比赛成绩数据表SH.DBF SH.DBF中包 例2:学院英语比赛成绩数据表SH.DBF中包 括以下字段:姓名( ),班级 班级( 括以下字段:姓名(C,8),班级(C, 10),英语(N ),英语(N, 0)和备用(N, 和备用(N 10),英语(N,3,0)和备用(N,3,0) ;其 中除备用字段外,其他字段均已有值。 中除备用字段外,其他字段均已有值。 编程序统计各班英语的平均成绩, 编程序统计各班英语的平均成绩,并显示平 均分前三名的班级和平均成绩( 均分前三名的班级和平均成绩(假设平均成绩 都不相同)。 都不相同)。 ( 见“程序168.PRG” 程序文件 )
<内存变量>为循环变量,作为计数器控制循环。<数 内存变量>为循环变量,作为计数器控制循环。 值表达式1>为循环变量初值; 数值表达式2> 1>为循环变量初值 2>为循环 值表达式1>为循环变量初值;<数值表达式2>为循环 变量终值,循环变量超过终值循环结束。 变量终值,循环变量超过终值循环结束。 FOR语句每循环一次 语句每循环一次, FOR语句每循环一次,自身便改变一次循环变量的 STEP短语设置改变的增量 短语设置改变的增量, 数值表达式3> 值,STEP短语设置改变的增量,由<数值表达式3> 设置。正值为增加,负值为减少,缺省默认为1 设置。正值为增加,负值为减少,缺省默认为1。在 循环中允许使用赋值语句修改循环变量的值。 循环中允许使用赋值语句修改循环变量的值。 FOR语句可以嵌套 语句可以嵌套。 NEXT任选其一 任选其一。 FOR语句可以嵌套。ENDFOR 和NEXT任选其一。
c语言循环结构三种形式
c语言循环结构三种形式
循环结构是c语言程序设计中重要的一环,它是指将指定的语句重复执行多次的程序结构,循环结构有三种形式:for循环,while循环和do…while循环。
for循环是一种最常用的循环结构,其结构形式为:for(表达式1;表达式2;表达式3)语句;(注意:表达式1、2、3之间用分号隔开,表达式3要用分号结尾),每次循环都会按照表达式1、2、3的顺序执行,其中表达式1一般是初始化变量的值,表达式2则是作为循环条件(集限),表达式3则是更改变量的值。
while循环是另一种比较常用的循环结构,其结构形式为:while(表达式)语句,while循环的作用是当表达式值为真时则重复执行相应的语句,也就是说,只要表达式的值为真,语句就会一次被执行,最后当表达式值为假时,结束循环。
最后一种结构是do…while循环,其结构形式为:do句 while (表达式),不同于while循环,do…while循环会先执行语句,然后才判断表达式,也就是说,无论表达式的值是真还是假,语句都会被至少执行一次。
c语言程序设计中,for循环,while循环和do…while循环共同构成了循环结构的三种形式,它们均是c语言中重要的程序控制结构。
对于for循环,我们可以使用其来完成同一段代码的多次执行;而对于while循环,可以利用其来完成当表达式值为真时的重复执行;最后,对于do…while循环,可以利用其来完成将语句至
少执行一次的操作。
从上面可以看出,不论是c语言编程还是其他编程语言,都不可缺少循环结构,其中for循环,while循环和do…while循环是循环结构当中最为常用的三种形式,他们能够极大地提高程序员的编程效率,帮助我们完成一些复杂的程序编写工作。
循环结构
[作业] 1、下列程序段是计算_______ 公式的。 S:=0; t:=1; for i:=1 to 10 do Begin t:=t*I; s:=s+t end; (A) s=1+2+3+4+…+10 (B) s=1*2*3*4*…*10 (C)s=1!+2!+3!+…+10! (D) s=1+2*3+3*4+4*5+…+9*10 注:N!表示1*2*3*…*N ,如3!=1*2*3 本题的循环体不止一句,是一个复合语句,用begin 和 end 圈起来了。 2、var x1,x2,I,x:integer; 该题采用列表法,将变量的值分步写出来。 begin x1:=3; i x x2 x1 x2:=8; 0 8 3 for i:=1 to 5 do 1 begin x:=(x1+x2)*2; 2 x1:=x2; x2:=x; 3 end; 4 writeln(‘x=’,x); 5 end. 运行结果:
[例2]求1+2+3+4+……+N的 和小于等于10000的最小的N。
程序如下: var n,s:integer; begin n:=0; s:=0; while s<10000 do begin n:=n+1; s:=s+n; end; writeln(‘N=’,n) end.
[注意]其中的 n和s必须在循环 语句之前赋初值。
[例1]体育彩票。体育彩票的号码由7位数字组成,现 用电脑帮你编一程序产生随机数。
重复7次,可以使用循环语句来实现。 Var a, I :integer; Begin randomize; {启动程序的随机数开关} For i:=1 to 7 do Begin a:=random(10); {a取一个小于10的整数,但不取负数,可以取0} write (a); end; end.
C语言循环结构程序设计
i=-i;
//然后对i取负,得到它的绝对值
}
if(i==0)
printf("%d",i);
while(i!=0)
{
r=i%10;
printf("%d",r);
i=i/10;
}
printf("\n");
}
注意:循环体的有效范围 例: i=1; while(i<=100)
putchar(‘*’); i++;
i++;
i=10,iSum=55 1+2+3+...+10=55
} while(i<=10);
printf("1+2+3+...+10= %d\n",iSum);
}
例5.7 将一个给定的整数反序输出。
#include "stdio.h"
void main()
{
int i,r;
printf("\nInput an integer:");
{
****
for(j=1;j<=i;j++)
*****
putchar('*');
putchar('\n');
}
}
例5.12 求100以内的全部素数。
void main() {
int m,n,i,prime; i=0; for(m=2;m<=100;m++) {
void main()
{
int m,n,r;
printf("please input two positive integers:");
实验五 循环结构程序设计
//③
}
}
(3)下列程序的功能为:从键盘上输入123,输出结果是54656。请纠正程序中存在错误,使程序实现其功能。
#include<stdio.h>
main()
{intc;//①
while(c=getchar() !='\n')//②
{ switch(c-1)
{ case '0':
“辗转相除法”求两个正整数的最大公约数的算法提示如下:
①将两数中大的那个数放在m中,小的放在n中。
②求出m被n除后的余数。
③若余数为0则执行步骤⑦;否则执行步骤④。
④把除数作为新的被除数;把余数作为新的除数。
⑤求出新的余数。
⑥重复步骤③到⑤。
⑦输出n,n即为最大公约数。
#include <stdio.h>
nY++;
if(nY > 3) break;
}
printf(“x = %d\n”,nX);
if(nY == 4) continue;
nX--;
}while(!nX);
}
运行结果:
(7)三重循环的使用。
有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。程序源代码如下:
printf("%d %d %d % d\n",a,b,c,d );
}
题目
⑴输入某课程的成绩(学生人数未知,以负数作为输入结束,大于100视为无效成绩),求课程成绩的平均分。
循环结构程序设计:三种循环语句
一、循环结构(Iteration Structure)的概述1.目的为了解决含有重复处理内容的问题,必须采用循环语句(Loop Statement)来编程实现。
2.类型(1)当型循环结构(2)直到型循环结构二、循环语句1.while语句①功能:实现当型循环结构。
②形式while(表达式){循环体}③特点:先判断后执行。
④举例:(累加和问题)编程计算整数1~100的和。
int i ; //循环变量int sum = 0 ; //累加和清0i = 1 ; //循环变量i赋初值while( i <= 100){sum = sum + i ; //循环变量累加到sum中i = i + 1; //改变循环变量i的值}2.do-while语句①功能:实现直到型循环结构。
②形式do{循环体}while(表达式); //注意最后的分号③特点:先执行后判断。
④举例:修改上例。
/*利用do-while语句编程实现整数1~100的和。
*/int i ; //循环变量int sum = 0 ; //累加和清0i = 1 ; //循环变量i赋初值do{sum = sum + i ; //循环变量累加到sum中i = i + 1; //改变循环变量i的值}while(i<=100);//注意最后的分号3.for语句①功能:实现当型循环结构。
②形式for(表达式1;表达式2;表达式3){循环体}③特点:先判断后执行;使用频率最高。
④举例:修改上例。
/*使用for语句编程计算整数1~100的和。
*/int i ; //循环变量int sum = 0 ; //累加和清0for( i = 1 ; i <=100 ; i++ ){//第一个表达式完成循环变量i赋初值;第三个表达式实现改变循环变量i的值sum = sum + i ; //循环变量累加到sum中}4.几种循环语句的比较①由于while语句和for语句均实现当型循环结构,两者是完全等价的。
循环结构程序设计三种循环语句
循环结构程序设计三种循环语句
循环结构是程序中常用的一种语句,可以用来重复执行一段代码。
在循环结构中,有三种常见的循环语句:for循环、while循环和do-while 循环。
1. for循环:for循环通常用于已知循环次数的情况下。
它的语法格式如下:
```
for (初始化表达式; 条件表达式; 更新表达式)
//循环体
```
其中,初始化表达式用于初始化循环变量;条件表达式用于判断是否执行循环体;更新表达式用于更新循环变量的值。
2. while循环:while循环通常用于未知循环次数的情况下。
它的语法格式如下:
```
while (条件表达式)
//循环体
```
在每次循环开始之前,会先判断条件表达式的值,如果为真,则执行循环体;否则结束循环。
3. do-while循环:do-while循环和while循环的语法结构类似,但不同之处在于它会先执行一次循环体,然后再判断条件是否成立。
它的语法格式如下:
```
do
//循环体
} while (条件表达式);
```
在每次循环结束之后,会判断条件表达式的值,如果为真,则继续执行循环体;否则结束循环。
这三种循环语句各有优势,具体使用哪种循环语句取决于具体的应用场景和需求。
C语言程序设计循环结构程序设计
假
体现式
真
语句
假如体现式旳值一开始就为0,则语 句一次也不会被执行。
上一页
下一页
while语句举例
问题: 求学生旳平均成绩,以输入负数成绩为结束
算法分析:
1. 定义变量score存储学生成绩,定义s=0存储累加旳成绩,
定义n=0统计录入旳成绩数目。
2. 输入第一种学生旳score
3. 若score>=0,执行第4步,不然执行第7步
上一页
下一页
例: 求 1+2 +…+99
分析:用变量i从1到99循环, 把i旳值累加到变量s中,最 终输出s旳值。
程序如下:
#include<stdio.h> main( ) { int i,s=0;
for(i=1;i<=99;i++) s=s+i;
printf(“s=%d”,s); }
上一页
下一页
在某些情况下,for语句中旳体现式1、2、3都能够 省略,而改用其他旳方式来实现这些功能。我们还用 上面旳例子阐明for语句省略体现式旳情形。
上一页
下一页
1.省略体现式1: #include<stdio.h> main( ) { int i=1,s=0;
for(;i<=99;i++) s=s+i;
因为do-while语句至 少要被执行一次,特
别要注意n和s旳取值 问题!
s=s+score;
}while(score>=0);
if(n>1) printf (“ \n %f” ,(s-score)/(n-1));
else printf(“no student score!”);
【实验指导书】实验3:循环结构程序设计-20150706
实验三:循环结构程序设计一、实验目的:1. 熟练使用for()、while()和do-while()三种语句实现循环程序设计;2. 理解循环条件和循环体,以及体会for()、while()和do-while()语句的相同及不同之处;3.掌握break和continue语句的使用。
二、实验要求:1. 参照《附件一:确定循环次数的程序设计》,完成相应的题目要求(共5题);2. 水仙花数是指各位数字的立方和等于该数本身的三位数。
例如,153是水仙花数,因为153=13+33+53。
请编程计算并输出所有的水仙花数,每个数占一行。
输出样例:153370371407#include<stdio.h>int main(){int s,d,z,i;for(i=100;i<=999;i++){s=i/100;d=i/10%10;z=i%10;if(i==s*s*s+d*d*d+z*z*z)printf("%d\n",i);}return 0;}3. 编写程序,输入一批正整数(以零或负数为结束标志),求其中的偶数和。
要求:使用while()语句实现此程序。
输入样例:1 2 3 4 5 0输出样例:6输入样例:-1输出样例:0#include<stdio.h>int main(){int n ,sum=0;while(scanf("%d",&n),n>0){if(n%2==0)sum+=n;}printf("%d",sum);return 0;}4.古代《张丘建算经》中有一道百鸡问题:鸡翁一,值钱五;母鸡一,值钱三;鸡雏三,值钱一。
百钱买百鸡,问鸡翁、母、雏各几何?其意为:公鸡每只5元,母鸡每只3元,小鸡3只1元。
请用穷举法编程计算,若用100元买100只鸡,则公鸡、母鸡和小鸡各能买多少只。
输出样例:0 25 754 18 788 11 8112 4 845.一球从100米高度自由落下,每次落地后反弹回原高度的一半,然后再落下再反弹。
visual foxpro程序设计中循环结构的分析
visual foxpro程序设计中循环结构的分析VisualFoxpro(VFP)一种强劲的对象关系数据库管理系统,它支持复杂的数据库应用程序的开发。
在Visual Foxpro中,循环结构是一种重要的程序设计语言,它提供了一种有效的方法来控制程序的执行和控制程序的流程。
本文就Visual Foxpro程序设计中循环结构的分析进行简要介绍。
一、Visual Foxpro中的循环结构Visual Foxpro中的循环结构分为三种:Do While循环结构、For 循环结构和For Each循环结构。
1、Do While循环结构Do While循环由“Do While”子句开始,该子句包括一个条件表达式,如果该条件表达式为真,则循环会一直执行,否则循环将终止。
Do While循环可以连续执行,直到条件为假或者循环体结束,它也可以将循环体执行指定的次数。
2、For循环结构For循环由for循环头和for循环尾构成,for循环头包括一个变量和初始值、最终值以及变量的变化量。
for循环尾包括一个step 语句,它用于指定变量增量。
for循环可以表示一次性累计计算,也可以表示分级循环或者嵌套循环。
3、For Each循环结构For Each循环是一种特殊的循环结构,它用于处理多维数组,还可以处理文件和记录集中的一组记录。
For Each循环结构有foreach语句、while条件修饰符和end for each语句组成,while条件修饰符用于确定for each语句的执行条件,在for each语句与end for each语句之间的语句将会被循环执行。
二、Visual Foxpro中循环结构的应用Visual Foxpro中循环结构可以用于各种类型的应用,从简单的任务到复杂的任务都可以使用循环结构。
1、统计与分析使用循环结构可以轻松实现数据库中的数据统计和分析,例如,可以使用For循环结构来统计数据库中的总结果或者对结果进行分类。
《C语言程序设计》课件 《C语言程序设计》课件 第5章-循环结构程序设计
Page 28
参考代码
#include<stdio.h> void main() {
char ch; int char_num=0,int_num=0,other_num=0; while((ch=getchar())!=‘\n’) //回车键结束输入 {
if(ch>='A'&&ch<='Z'||ch>='a'&&ch<='z') char_num++;
printf("************\n ");
printf("************\n ");
printf("************\n ");
printf("************\n "); printf("************\n "); 等价 for(int i=1;i<=8;i++)
{ s=s+i;
i++; //表达式3移至循环体末尾
}
printf("s=%d",s);
}
<<C语言程序设计>>
Page 19
随堂练习
例 编程计算n的阶乘。
n!=1 2 3 ……〔n-1〕 n
思路:
类似于累加求和,每一次循环乘上一个数字,求和 将和初始化为0,这里应把积初始化为?
<<C语言程序设计>>
#include "stdio.h" void main( ) { int i,sum=0;
第8章 循环结构程序设计
循环结构程序设计
许多问题都会遇到规律性的重复操作。例如,求和问 题、求有一定规律的问题和一些迭代等问题都会用到循环结 构。循环结构是结构化程序设计的基本结构之一,它与顺序 结构、选择结构共同构成了作为各种复杂程序的基本构造单 元。本章重点讲解3种循环语句:while语句、do…while语 句和for语句。本章内容如下: while语句; do…while语句; for语句; 总结应用。
【例8-5】从键盘输入一个正整数n,计算该数的各位数之和并输出 。例如,输入数是4569,则计算:4+5+6+9=24并输出。
While 与do…while比较
#include <stdio.h> void main() { int i; float sum; sum=0; scanf("%d",&i); while(i<=20) { sum+=1/(float)i; i+=1; } printf("sum=%f",sum); } #include <stdio.h> void main() { int i; float sum; sum=0; scanf("%d",&i); do { sum+=1/(float)i; i+=1; }while(i<=20); printf("sum=%f",sum); }
8.4.1
几种循环的比较
用while和do-while循环时,循环变量初始化应在 while 和 do-while之前 ;而for 循环可以在“表达式1”中实 现循环变量的初始化。 while循环:先判断后执行;do-while循环:先执行后 判断;for循环:先判断后执行。 对 while循环、do-while循环、for循环,用 break 语 句跳出循环,可以用continue语句结束本次循环。对于 goto语句构成的循环,不能如此操作。
5 循环结构程序设计
5 循环结构程序设计本章重点:• while 语句及其构成的循环结构• do-while语句及其构成的循环结构• for语句及其构成的循环结构• break语句和continue语句• 多重循环结构的实现本章难点:• for循环结构• 多重循环结构的实现5.1 概述循环结构是高级语言程序设计中一种重要的、常用的控制结构,主要用于解决那些需要重复执行的操作。
循环结构是在重复性的操作过程中找到规律,然后按照指定的条件重复执行某个指定程序段的控制方式,也称重复结构。
其特点是在给定条件成立时,反复执行某程序段,直到条件不成立为止。
其中给定的条件称为循环条件,反复执行的程序段称为循环体。
C语言中常见的循环结构语句有以下三种。
(1) while语句(2) do-while语句(3) for语句另外,使用goto语句与if语句一起也可以构成循环结构。
goto语句也称为无条件转移语句,其一般格式如下:goto 语句标号;……标号:语句……说明:其中语句标号是按标识符规定书写的符号,放在某一语句行的前面,标号后加冒号(:)。
语句标号起标识语句的作用,与goto 语句配合使用。
如: loop: i=i+1;C语言不限制程序中使用标号的次数,但各标号不得重名。
goto语句的语义是改变程序流向,转去执行语句标号所标识的语句。
例5-1 用goto语句构造循环计算1到100的整数和。
算法分析:这是一个求连续数累加和的问题。
sum用来存放两数的和,初值为0,i用来表示下一个要进行求和的数。
main(){int i=1,sum=0;loop:sum=sum+i;i++;if(i<=100)goto loop;printf("the sum of 1 to 100 is:%d\n",sum);}运行结果如下:the sum of 1 to 100 is:5050本例用if语句和goto语句构成循环结构。
C语言程序设计教程(第4版)_第5章_循环结构
void main()
{ int i,sum=1,n;
printf("please input the value of n:");
scanf("%d:",&n);
if (n>=0)
{ i=1;
while(i<=n)
{sum=sum*I; i++;}
printf("%d\n",sum);}
else
printf("wrong\n"); }
5.2 while语句
例6:编写程序,从键盘输入一个正整
数n,求n!。
分析:n!=n*(n−1)*(n−2)*…*2*1 (约定:n≥0,0!=1) 用i代表循环变量,s代表n!的结
果值,则循环计算表达式:s=s*i, 即可求得n!。 思考:能否用for循环实现?
#include<stdio.h>
2.判断<条件表达式>的值。该表达式就是循环条件, 若该表达式的值为“真”,则执行<循环体语句>; 若该表达式的值为“假”,则退出循环,执行循环结 构外的语句。
3.计算<循环表达式>的值。该表达式更新循环控制变 量的值。
4.转第2步。
5.1 for语句
for语句的流程图:
注意: ①若<循环体语句>中有多
sum=0; for(i=1; i<=100; i=i+2) 7.for循环也可以嵌套,执行时是先执行最里层的循环,再 执行其外一层的循环。
5.1 for语句
例2:编写程序,从键盘输入两个不等于零的正整数a、
b(a<b),求它们之间的几何级数的和,数学表达式
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、循环结构(Iteration Structure)的概述1.目的为了解决含有重复处理内容的问题,必须采用循环语句(Loop Statement)来编程实现。
2.类型(1)当型循环结构(2)直到型循环结构二、循环语句1.while语句①功能:实现当型循环结构。
②形式while(表达式){循环体}③特点:先判断后执行。
④举例:(累加和问题)编程计算整数1~100的和。
int i ; //循环变量int sum = 0 ; //累加和清0i = 1 ; //循环变量i赋初值while( i <= 100){sum = sum + i ; //循环变量累加到sum中i = i + 1; //改变循环变量i的值}2.do-while语句①功能:实现直到型循环结构。
②形式do{循环体}while(表达式); //注意最后的分号③特点:先执行后判断。
④举例:修改上例。
/*利用do-while语句编程实现整数1~100的和。
*/int i ; //循环变量int sum = 0 ; //累加和清0i = 1 ; //循环变量i赋初值do{sum = sum + i ; //循环变量累加到sum中i = i + 1; //改变循环变量i的值}while(i<=100);//注意最后的分号3.for语句①功能:实现当型循环结构。
②形式for(表达式1;表达式2;表达式3){循环体}③特点:先判断后执行;使用频率最高。
④举例:修改上例。
/*使用for语句编程计算整数1~100的和。
*/int i ; //循环变量int sum = 0 ; //累加和清0for( i = 1 ; i <=100 ; i++ ){//第一个表达式完成循环变量i赋初值;第三个表达式实现改变循环变量i的值sum = sum + i ; //循环变量累加到sum中}4.几种循环语句的比较①由于while语句和for语句均实现当型循环结构,两者是完全等价的。
for(表达式1;表达式2;表达式3){循环体;}表达式1 ;while(表达式2){循环体;表达式3;}②for语句适合循环次数事先已知的情况;而while语句和do-while语句适合循环次数事先未知的情况。
③当第一次进入循环时条件就不满足,while语句和do-while语句就不等价。
除此情况外,while语句和do-while语句均等价。
三、程序举例1.循环次数已知的累加和问题①编程实现计算100以内偶数的和。
/*方法一:使用for语句*/sum = 0 ;for( i = 2 ; i <=100 ; i = i + 2 ){sum = sum + i ;}/*方法二:使用while语句*/sum = 0 ;i = 2 ;while( i <=100 ){sum = sum + i ;i = i + 2 ;}/*方法三:使用do-while语句*/sum = 0 ;i = 2 ;do{sum = sum + i ;i = i + 2 ;}while(i <= 100) ;第159页课后习题4.10、4.11、4.12、4.13属于循环次数已知,计算累加和的问题。
参考代码注意:计算累加和时,需要累加和变量清0。
2.循环次数已知的累乘积问题①编程计算n!=1*2*3*4*……*n的值。
(课本第107页例题4.10)要想解决这个问题,需要用到“递推”的程序设计方法。
也就是说,求n!时,先求1!,用1!*2得到2!,用2!*3得到3!,以此类推,直到利用(n-1)!*n得到n!为止,问题即可解决。
/*方法一:利用for语句实现。
*/int i , n ;long int p = 1 ;scanf("%d" , &n) ;for( i = 1 ; i <= n ; i++ ){p = p * i ;}printf("%d!=%ld\n", n , p );/*方法二:利用while语句实现。
*/int i , n ;long int p = 1 ;scanf("%d" , &n) ;i = 1 ;while( i <= n ){p = p * i ;i = i + 1 ;printf("%d!=%ld\n", n , p );/*方法三:利用do-while语句实现。
*/int i , n ;long int p = 1 ;scanf("%d" , &n) ;do{p = p * i ;i = i + 1 ;}while( i <= n) ;printf("%d!=%ld\n", n , p );第159页课后习题4.14属于循环次数已知,计算累乘积的问题。
参考代码注意:计算累乘积时,需要累乘积变量置1。
3.循环次数未知的累加和(累乘积)问题①这也是累加求和的问题,但不同的是,这里的循环次数是预先未知的,而且累加项以正负交替的规律出现。
实现方法,累加项通式term=sign/n表示。
其中,sign按+1,-1,+1,-1,……交替变化,可用sign=-sign实现,sign的初值为1;n按1,3,5,7,……变化,可用n=n+2实现,n的初值为1;统计累加项数只有设置一个计数器变量count即可,初值为0。
详细算法描述和代码实现参见课本第112页例题4.12。
注意:①能够正确得到累加项或累乘项通式。
②计算累加和问题时注意清0,计算累乘积问题时注意置1。
③注意累加项或累乘项是否满足循环终止条件的判断。
第159页课后习题 4.15,4.16,4.17属于循环次数未知,计算累加和的问题。
参考代码4.循环结构和选择结构的综合应用(1)猜数字游戏升级版:编程实现猜数字游戏,要求所猜数字为1~10之间的整数,游戏者只有三次机会,猜数字游戏过程中会根据游戏者所猜数字的大小给出一定的信息提示,增强游戏的趣味性。
#include <stdio.h>#include <stdlib.h>#include <math.h>main(){int magic ; //计算机“想”的数int guess ; //人猜的数int count ;srand(time(NULL)); //标准库函数srand()为函数rand()设置随机数种子magic = rand() % 10 +1; //生成1-10之间的整数//=====利用do-while循环完成猜数字游戏======count = 0 ; //计算器清零do{printf("请您输入您要猜的整数:(1-10之间)\n");scanf("%d",&guess); //读入人猜的数count++ ;//判断计算机“想”的数与人猜的数的大小if(guess > magic){printf("猜错了!Too big!\n");}else if(guess < magic){printf("猜错了!Too small!\n");}else{printf("猜对了!\n");printf("您猜的数字为:%d\n",guess);}}while( guess!=magic && count <=3 ); //判断循环终止条件,最多三次机会}(2)从键盘任意输入一个正整数,编程判断它是否是素数,若是素数,输出“Yes!”,否则输出“No!”。
(参见课本第127页例4.19)判断素数的方法:由于素数是指除了能被1和它本身整除外,不能被其他任何整数整除的数。
(1不是素数。
2是最小的素数。
)把m作为被除数,把i=2~(m-1)依次作为除数,判断被除数m与除数i相除的结果,若都除不尽,即余数都不为0,则说明m是素数。
反之,只要有一次能除尽(余数为0),则说明m存在一个1和它本身以外的另外一个因子,它不是素数。
/*方法一*/#include <stdio.h>main(){int number ;int i ; //===========定义循环变量i=====int flag = 1 ;//======定义素数标识,初始为1=====printf("please input a number :\n");scanf("%d",&number); //=====从键盘输入一个整数===for( i = 2 ; i<=number-1 && flag ; i++){ //查看从2至number-1之间所有整数是否整除numberif(number % i == 0){flag = 0 ; //如果能整除number,则说明number不是素数,存在因子,故素数标识改为0}}printf("\n");if(flag) //========素数标识为1,输出是素数,否则输出不是素数==========printf("YES====>%d is a prime number!\n",number);elseprintf("NO====>%d is not a prime number!\n",number);}改进:为了减少循环次数,用数学的方法可以证明:只需用2~sqrt(m)之间的数去除m,即可得到正确的判定结果。
/*方法二:目的使用sqrt()*/#include <stdio.h>#include <math.h>main(){int number ;int i ; //===========定义循环变量i=====int flag = 1 ; //======定义素数标识,初始为1=====int k ;printf("please input a number :\n");scanf("%d",&number); //=====从键盘输入一个整数===k= (int)sqrt(number);for( i = 2 ; i<=k && flag ; i++ ){ //查看从2至sqrt(number)之间所有整数是否整除number,与方法一相比,减少了循环次数if(number % i == 0){flag = 0 ; //如果能整除number,则说明number不是素数,存在因子,故素数标识改为0}}printf("\n");if(flag) //========素数标识为1,输出是素数,否则输出不是素数==========printf("YES====>%d is a prime number!\n",number);elseprintf("NO====>%d is not a prime number!\n",number);}(3)从键盘任意输入一个正整数,编程实现:若该整数不是素数,则打印它所有因子;否则,打印“没有因子,是素数”的提示信息。