第五章 循环结构程序设计

合集下载

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

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 ” ) ; /*换行打印*/

第5章 循环结构程序设计

第5章 循环结构程序设计
龙诚数码:
do-while语句的简单应用 do-while语句的简单应用
【例5.3】用辗转相除法求m和n的最大公约数 5.3】用辗转相除法求m
定义m、 、 定义 、n、r m<n T F m和n交换 和 交换 r=m%n m=n n=r 当r != 0时 时 输出最大公约数m 输出最: 算法和程序:
main( ) { int m,n,r; scanf("%d, %d",&m,&n); if (m<n) { r=m; m=n; n=r; } do { r=m%n; 程序运行情况如下: 程序运行情况如下: m=n; 24, 60 24, n=r; 12 }while(r!=0); while(r!=0 printf("%d\n",m); }
for语句的算法 for语句的算法
流程图 计算表达式1 计算表达式
表达式2 表达式 为真? 为真
15
N-S结构图 结构图 for (表达式 表达式 表达式 表达式1;表达式 表达式3) 表达式 表达式2;表达式 N 语句
Y 语句 计算表达式3 计算表达式
例如: 例如: 可部分或全部省略, 可部分或全部省略, main( ) 但“;”不可省略 { int i,sum; sum=0; for ( i=1; i<=100; i++) i=1 i<=100; sum=sum+i; sum=sum+i; printf("sum=%d\n",sum); }
龙诚数码:
18
for语句的简单应用 for语句的简单应用
【例5.4】求n! ,即计算p=1×2×3×…×n 5.4】 即计算p=1× 的值。 的值。

C语言程序设计_05循环结构程序设计

C语言程序设计_05循环结构程序设计

5.2 DO…WHILE循环结构 5.2.1 DO…WHILE语句的格式 DO…WHILE语句的一般格式为: DO 语句 WHILE(表达式); DO…WHILE语句中的表达式表示循环的条件,可 以是任何表达式,常用的是关系表达式和逻辑表达 式。表达式必须加圆括号。语句是重复执行的部分, 称作循环体。
由亍循环体在表达式2乊后表达式3乊前执行所以把循环体语句放在表达式3的开头循环体语句不原来的i构成逗号表达式作为循环语句新的表达式3从而也就没有循环体语句了
第5章 循环结构程序设计
5.1 WHILE循环结构 5.2 DO…WHILE循环结构 5.3 FOR循环结构 5.4 与循环有关的控制语句 5.5 3种循环语句的比较 5.6 循环的嵌套 5.7 循环结构程序举例 本章小结
图5-6 FOR语句执行过 程
FOR语句的执行过程如图5-6所示。具体由以下几步 完成: (1)求表达式1。 (2)求表达式2,并判定其值为0或非0。若值为非0, 转步骤(3);否则结束FOR语句。 (3)执行语句,然后求表达式3。 (4)转向步骤(2)。 由FOR语句的执行流程可知,表达式1的作用是为循 环控制的有关变量赋初值,表达式2是循环控制条件, 表达式3用于修正有关变量,语句是重复执行部分。
【例5.7】输入20个数,求出其中的最大值与最小值。
5.3.3 FOR语句的各种变形 1.在FOR语句中省略表达式 FOR语句中的3个表达式可以部分或全部省略,下面 给出语句的4种基本变形。 (1)表达式1移至FOR语句前,但它后面的分号必 须保留。这时FOR语句的形式为: 表达式1; FOR(; 表达式2; 表达式3) 语句
(2)表达式3移至循环体语句之后,但它前面的分 号必须保留。FOR语句的形式为: FOR(表达式1; 表达式2;) { 语句; 表达式3; } 对于求P=5!的程序段,省略表达式3,将其放在循环 体中,则程序段写成:

第5章-循环结构程序设计PPT优秀课件

第5章-循环结构程序设计PPT优秀课件
17
5.3.1 前测型Do…Loop循环语句
格式:
Do [While | Until <条件表达式>] <语句块> [Exit Do] <语句块>
Loop
18
5.3.1 前测型Do…Loop循环语句
前测型Do…Loop循环的流程图
Do While…Loop流程图
Do Until…Loop流程图
条件表达式 值为真?
格式:
Do <语句块> [Exit Do] <语句块>
Loop [While | Until <条件表达式>]
23
5.3.1 后测型Do…Loop循环语句
说明:
后测型Do…Loop循环语句与前测型Do…Loop循环语句的主 要区别在于:
后测型要先执行一次循环体,再判断条件;而前测型要 先判断条件,然后根据判断结果决定是否执行循环体。因此 对于后测型,不管条件是否满足,循环体至少有一次执行机 会。
16
5.3 Do…Loop循环语句
导入:
Do…Loop循环也属于条件型循环,即根据条件的 成立与否来决定是否执行循环。Do…Loop循环的应 用具有很强的灵活性,主要体现在:它既能指定循环 开始条件,又能指定循环结束条件;既能构成前测型 Do…Loop循环语句,又能构成后测型Do…Loop循 环语句。
25
5.3.1 后测型Do…Loop循环语句 【例5-10】将400~600间能够被3整除的数 输出(上机练习)
【例5-11】(略)
26
5.4 循环嵌套
介绍:
一个循环结构中又包含一个或多个循环结构被称为 循环嵌套,或称多重循环。 多重循环对嵌套的层数没有限制。有几层嵌套,就 称为几重循环,如二重循环、三重循环、四重循环 等。一般地,把嵌套在一个循环体内部的另一个循 环结构称为内循环;这样,嵌套了其他内循环部分 的循环结构就称为外循环。 为了使多重循环结构具有较好的可读性,通常用缩 进方式书写相应的源代码。

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

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;

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

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

14
第5章
循环结构程序设计
5.2 for语句 结构
1. for语句一般形式: for 目标变量 in 序列对象: 循环体语句 说明:
for语句的首行定义了目标变量和遍历的序 列对象,后面是需要重复执行的语句块。语 句块中的语句要向右缩进,且缩进量要一致。
15
第5章
循环结构程序设计
注意:
(1)for语句是通过遍历任意序列的元素来建立 循环的。 (2)for 语句也支持一个可选的else块,一般格 式如下: for 目标变量 in序列对象: 语句块 else: 语句
5
第5章
循环结构程序设计
在while语句中使用else子句
while exp: 循环体 else: 语句
Python可以在循环语句中使用else子句,即构 成了while.......else循环结构。
6
第5章
循环结构程序设计
例 :求

100
n 1
n
开始 sum,n=0,1 n<=100
1)问题分析:
29
第5章
循环结构程序设计
5.4 循环控制语句
有时候我们需要在循环体中提前跳 出循环,或者在某种条件满足时,不执行 循环体中的某些语句而立即从头开始新的 一轮循环,这时就要用到循环控制语句 break、continue和pass语句。
30
第5章
循环结构程序设计
(1) break语句
一般格式 break 功能
371printdddijk40728python语言程序设计第5章循环结构程序设计第5章循环结构程序设计循环结构程序设计51while语句当型循环52for语句结构53循环的嵌套54循环控制语句55循环结构程序举例2第5章循环结构程序设计循环结构的基本类型exptaf

第5章 循环结构程序设计习题解答

第5章 循环结构程序设计习题解答

第5章循环结构程序设计习题解答1.输入n个整数,求这n个数之中的偶数平均值,并输出。

#include<stdio.h>void main(){int n,i,x,k=0,s=0;printf("Input a number(n):");scanf("%d",&n);printf("Input %d numbers:",n);for(i=0;i<n;i++){scanf("%d",&x);if(x%2==0){s+=x;k++;}}s/=k;printf("average=%d\n",s);}2.输入一串字符,直到输入一个星号*为止,统计(输出)其中字母个数和数字字符个数。

#include<stdio.h>void main(){int n=0,m=0;char c;printf("Input a string character:");do{scanf("%c",&c);if(c>='0'&&c<='9')n++;else if(c>='A'&&c<='Z'||c>='a'&&c<='z')m++;}while(c!='*');printf("number_char=%d\n",n);printf("letter_char=%d\n",m);}3.从键盘输入一正整数n,计算该数各位数字之和并输出。

例如,输入数是5246,则计算5+2+4+6=17并输出。

#include<stdio.h>void main(){int n,r,m=0,s=0;printf("Input a number(int):");scanf("%d",&n);do{r=n%10;s=s+r;n/=10;if(m==0)printf("%d",r);//加式中的第1项不带“+”elseprintf("+%d",r);m++;}while(n>0);printf("=%d\n",s);}4.输入一个字符串,将其中的大写字母改为小写字母,小写字母改为大写字母,然后输出。

第5章 循环结构程序设计PPT课件

第5章 循环结构程序设计PPT课件

}
C语言程序设计
第5章 循环结构程序设计
§ 5.2 用while语句实现循环i=1w; hile (i<=100)
2、while语句的注意事项
{ sum=sum+i;
注意:
i++; }
(1) 循环体如果包含一个以上的语句,应该用花括弧括
起来,以复合语句形式出现
(2) 在循环体中应有使循环趋向于结束的语句。如果无
C语言程序设计
第5章 循环结构程序设计
§ 5.2 用while语句实现循环
1、while语句的一般形式
while语句用来实现“当型”循环结构 一般形式: while (表达式)
循环体语句
当表达式为非0值时,执行while 语句中的循环体语句 其特点是:
先判断表达式,后执行语句
C语言程序设计
第5章 循环结构程序设计
} 运行结果:
}
1↙ sum=55 再运行一次:
}说明:当while后面的表达式的第一次的
值为“真”时,两种循环得到的结果相
11↙ sum=0
同。否则,二者结果不相同
C语言程序设计
第5章 循环结构程序设计
§ 5.4 用for语句实现循环
1、for语句的一般形式
C语言中的for语句使用最为灵活,不仅可以用于 循环次数已经确定的情况,而且可以用于循环次数 不确定而只给出循环结束条件的情况,它完全可以 代替while语句
语句,转到第(5)步
(3) 求解表达式3
(4) 转第(2)步骤继续执行
(5) 循环结束,执行for语句下面的一个语句
C语言程序设计
第5章 循环结
执行表达式1
循环初始条件
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第五章循环结构程序设计循环结构是结构化程序设计的三种基本结构之一,也是最重要、最常用的一种基本结构。

其特点是:在给定条件成立时,反复执行某程序段,直到给定条件不成立时为止。

给定的条件称为循环条件,反复执行的程序段称为循环体。

根据开始或结束循环的条件不同,在C 语言中可以用如下语句实现循环:1. 用goto语句和if语句构成循环。

2. 用while循环语句。

3. 用do-while循环语句。

4. 用for循环语句。

5.1 语句标号、goto语句及用goto语句构成的循环1.语句标号语句标号就是给程序中的某一个语句定义的标识符,标号可以是任意合法的标识符,但在语句标号和它所标识的语句之间必须加一个冒号作为分隔符。

C程序中的任何一个可执行语句之前都可以加上语句标号。

例如:stop:printf(“END\n”);通常,语句标号只是用作goto 语句的转向目标。

如:goto stop;如果程序中没有用goto语句改变程序的执行顺序,也就没有必要出现语句标号。

2.goto语句goto语句称为无条件转向语句,goto语句的一般形式为:goto 语句标号;goto语句的作用是把程序的执行转移到语句标号所在的位置,但这个语句标号必须与此goto语句在同一个函数之内。

goto语句不符合结构化程序设计的原则,因为无条件转向使得程序的结构没有规律、可读性差。

对于初学者来说应尽量避免使用goto语句,但如果使用goto语句能够大大地提高程序的执行效率,也可以使用。

3.用goto语句构成的循环结构goto语句通常与if语句配合构成条件转移语句,用来实现构成循环或跳出循环等功能。

例5.1统计从键盘输入的一行字符的个数。

#include <stdio.h>main(){int n= 0;char ch;printf("input a string\n");loop: ch= getchar();n++;if(ch!='\n') /*字符'\n'是结束从键盘输入字符串的标志*/goto loop;n=n-1; /*不要统计字符'\n'*/printf("%d",n);}当用户从键盘上输入一个字符后,先执行n++进行计数,然后判断该字符是否为'\n'字符,若该字符不是'\n'字符,则转移至loop构成循环;否则不执行goto语句,程序在输出n的值后结束。

例5.2 从键盘输入一组数据,以0作为结束输入数据的标志,求这组数据之和。

#include <stdio.h>main(){int number, sum=0;loop: scanf("%d", &number);sum+=number;if(number!=0)goto loop;printf("The total sum is %d\n", sum);}5.2 while语句和用while语句构成的循环由while语句构成的循环也称”当”循环,while循环的一般形式如下:while(表达式)循环体语句while语句的执行过程是:先计算while后一对圆括号中的表达式的值,当表达式的值为非0时,便执行循环体语句,之后再计算该表达式的值,由此构成循环,直到有一次求得表达式的值为0时才结束循环,并继续执行循环体语句之外的后续语句。

如图5.1所示。

例如,用while语句改写例5.1的程序,统计从键盘输入的一行字符的个数。

#include <stdio.h>main(){int n=0; char ch;printf("input a string:\n");ch= getchar();while(ch!='\n'){n++;ch= getchar();}printf("%d",n);}图5.1 while循环流程图说明:(1)while语句中的表达式一般是关系表达式或逻辑表达式,但也可以是其它合法的C表达式,只要表达式的值为真(非0)即可继续循环。

(2)循环体语句可以是一条简单的可执行语句;也可以是由多个语句用{}括起来后构成的复合语句。

(3)应该注意在循环体语句中包含能够使循环趋于结束的操作,以避免出现死循环。

例5.3编写程序,求1+2+3+…+100的值。

这是一个求100个数的累加和问题。

所加的加数从1变化到100,因此我们可以在循环体中设计一个整型变量i,使它的初值为1,每循环一次使i的值增1,一直循环到i的值超过100为止,用这个办法就解决了所需的加数问题。

要解决求累加和的问题,还要再设计一个变量sum用来存放这100个数的和值,先求0+1的和并将其放在sum中,然后把sum中的数加上2再存放在sum中,依次类推。

在这里,sum累加的过程要放在循环体中,由计算机来判断所加的数是否已经超过100。

程序流程图如图5.2所示。

main(){int i, sum;i=1; sum=0;while(i<=100){sum= sum + i ;i++;}printf("sum=%d\n", sum);}程序运行结果为:sum=50505.3 do-while 语句用do-while 语句构成的循环由do-while 语句构成的循环称为”直到型”循环,do-while 语句的一般形式为:do循环体语句while(表达式);do-while 语句的执行过程是:先执行循环体语句,再求表达式的值,若表达式的值为非0,则再执行循环体语句,由此构成循环,直到表达式的值为0时结束循环。

如图5.3所示。

do-while 语句和while 语句的区别在于do-while 是先执行循环体语句,后判断循环条件,因此do-while 至少要执行一次循环体;而while 是先判断后执行,如果条件不满足,则一次循环体语句也不执行。

while 语句和do-while 语句一般都可以相互替代。

例如,我们可以用do-while 语句改写例5.3的程序,求1+2+3+…+100的值。

main()图5.2 例5.3程序流程图图{ int i, sum;i=1;sum=0; do { sum= sum + i ;i++; } while(i<=100) ; printf("sum=%d\n", sum);}程序运行结果为: sum=5050说明:(1) do-while 语句在while(表达式)后一定要有一个分号,它是do-while 语句的结束标志。

(2) 图5.4右图为用N-S 流程图描述的直到型循环结构,其循环结束条件的描述方法与C 语言的do-while 语句的循环条件的判断方法稍有不同,编程时应作适当地转换。

如上例中的“直到i>100”时结束循环和程序中的“ i<=100”时继续执行循环是同一个概念的不同表述形式。

5.4 for 语句和用for 语句构成的循环for 语句是C语言提供的功能更强,使用更广泛的一种循环语句。

其一般形式为:for (表达式1;表达式2;表达式3)循环体语句for 循环的执行过程是:(1) 计算”表达式1”。

(2) 计算”表达式2”;若其值为非零,转至步骤(3);若其值为零,则转至步骤(5)。

(3) 执行一次循环体语句。

(4) 计算”表达式3”;然后转向步骤(2),构成循环。

(5) 结束循环,执行for 循环之后的语句。

如图5.5所示。

图5.4 用do-while 语句实现例5.3的程序流程图图5.5 for循环语句的流程图根据for循环的执行过程,通常用“表达式1”来给循环变量(即用来控制循环次数的变量)赋初值或做一些进入循环之前的初始工作;用“表达式2”来作为判断循环是否结束的条件;用“表达式3”来修改循环变量的值,使得循环能够趋于结束。

从语法上来讲,for语句中的三个表达式都可以是任意合法的C表达式,各表达式之间用”;”隔开,并且这三个表达式都是任选项,都可以省略。

例如我们可以用f or循环语句将例5.3 的程序改写为如下几种形式,它们都能正确地求出1+2+3+…+100的值。

main() /*程序1 */{int i, sum;for (i=1,sum=0; i<=100; i++)sum= sum + i ;printf(“sum=%d\n”, sum);}main() /*程序2 */{int i=1, sum=0;for ( ; i<=100; i++)sum= sum + i ;printf(“sum=%d\n”, sum);}main() /*程序3 */{int i=1, sum=0;for ( ; i<=100; ){sum= sum + i;i++ ;}printf(“sum=%d\n”, sum);}main() /*程序4 */{int i=1, sum=0;for ( ; ; ){sum= sum + i++ ;if(i>100)goto pend;}pend: printf(“sum=%d\n”, sum);}说明:(1) for语句中的表达式可以部分或全部省略,但两个”;”不可省略。

如果“表达式2”被省略了,程序会因为缺少条件判断而陷入死循环,虽然可以在循环体内使用goto语句或break语句跳出循环,但实际编程时最好还是不要采用这种形式的for语句。

(2) 循环体语句可以是一条语句,也可以是用{}括起来的复合语句,甚至还可以是只有一个分号的空语句,例如上例中的for语句也可以改写成如下形式:for (i=1; i<=100; sum= sum + i++ );(3)表达式1和表达式3都可以是逗号表达式,这种用法经常出现在有2个循环变量变化的情形。

如:for (i=1,sum=0; i<=100; sum= sum + i,i++ );for (i=1,j=10; i<=j; i++,j-- )s=i+j;(4) 注意在循环体语句之前不能有分号,如果将上例中的for语句写成如下两种形式:for (i=1; i<=100; i++ );for (i=1; i<=100; i++ )或sum= sum + i;;sum= sum + i;则循环体语句是只有一个分号的空语句。

而语句sum= sum + i;则成为循环结构之外的一条语句,只是在退出for循环之后才被执行了一次。

(5)while循环和do-while循环常称为条件循环,即根据条件来决定是否继续执行循环。

相关文档
最新文档