第五章循环结构
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
开始 假(0)
本程序流程图: i=1,sum=0
假(0)
表达式
真(非0) 循环体
i<=100
真(非0)
sum+=i; i++;
5.2 while语句
例: 用while循环求sum=1+2+3+…+100 本程序流程图: i=1,sum=0 i<=100 sum+=i i++
假(0) 循环变量
真(非0)
真(非0)
while sum<100 假(0)
例 任意输入一个正整数,将该数各位颠倒顺序输出。如, 输入1234,输出为4321。 算法分析:根据题目要求,可以采用除10取余的方法,依次从 输入数的右边截取各位数字输出。 main() { int n,d; printf("input a integer:"); scanf("%d",&n); do { d=n%10; printf("%d",d); n=n/10; } while(n!=0); }
第5章 循环结构程序设计
5.1 5.2 5.3 5.4 5.5
概述 while语句 do-while语句 for语句 break语句和continue语句
5.3 do-while语句
一般形式: do { 循环体语句; } while(表达式); 执行过程:
do
此处有 分号 ;
特点: 先执行循环体, 再判断表达式, 至少执行一次循环体
循环体 真(非0) while 表达式 假(0)
例 从键盘输入一个整数n,用do…while语句求1!+2!+…+n!。 main() { int n; int p=1,i=1,sum=0; printf("input a 整数n:"); scanf("%d",&n); while( i<=n) { p=p*i; i++; sum=sum+p; } printf("%d\n",sum); } while语句 main() { int n; int p=1,i=1,sum=0; printf("input a 整数n:"); scanf("%d",&n); do { p=p*i; sum=sum+p; i++; } while( i<=n); printf("%d\n",sum); }
例 从键盘输入一个整数n,求该整数的阶乘n!。 算法分析: p=n!=1×2×3×…×n ,连续×,与连续+实质是一样的, 只需把+ 改成×即可。 main() { while(i<=n) int i=1, n,p=1; { printf("input a 整数n:"); sum=sum+i; scanf("%d",&n); i++; while(i<= n) } { p=p*i; 连续+ i++; } printf("%d\n",p); }
概述 while语句 do-while语句 for语句 break语句和continue语句 循环的嵌套 循环结构程序设计举例
5.1 概述
循环结构是程序中一种很重要的结构。其特点是,在给定 条件成立时,反复执行某程序段,直到条件不成立为止。 给定的条件称为循环条件, 反复执行的程序段称为循环体。 C语言常见的循环结构有三种: 1) while循环语句; 2) do-while循环语句; 3) for循环语句; 另外,用 goto 语句和 if 语句也可以构成循环,但这种循环 尽量不用。
5.1 概述
由于goto语句将使程序流程无规律, 破坏了程序的结构化风格,降低了程序的可读性, 而且往往会造成程序流程混乱,因此,尽量不适用此语句。
第5章 循环结构程序设计
5.1 5.2 5.3 5.4 5.5
概述 while语句 do-while语句 for语句 break语句和continue语句
例 从键盘输入一个整数n,求1!+2!+…+n!。 main() { 1!=1 int n,; 2!=1*2 int p=1,i=1,sum=0; 3!=1*2*3 printf("input a 整数n:"); ...... scanf("%d",&n); (n-2)!= 1*2*3*... *(n-2) while( i<=n) (n-1)!= 1*2*3*... *(n-2) *(n-1) { n! = 1*2*3*... *(n-2) *(n-1)* n p=p*i; 即 n!= (n-1)!*n i++; 因此可以设一变量i,让其循环依次等于1、 2...n, sum=sum+p; 计算其阶乘p=p*i,sum=sum+p. } printf("%d\n",sum); } 算法分析:
5.1 概述
goto 语句是一种无条件转移语句,它的一般形式为: ...; 标号:…; …; ...; goto 标号; …; 其中标号是一个按合法用户标识符,放在某一句之前,标 号后加冒号(:),起标识语句的作用。 程序执行时,当执行到 “goto 语句标号”语句时,将改变 程序现有执行顺序,转向标号所标识的语句,无论goto语 句与标号语句之间有何语句。
第5章 循环结构程序设计
本章要点
while语句构成的循环结构 do-while语句构成的循环结构 for语句构成的循环结构 Break语句和continue语句 多重循环结构的实现
本章难点 多重循环结构的实现
第5章 循环结构程序设计
5.1 5.2 5.3 5.4 5.5 5.6 5.7
main() { int n; int p=1,i; printf("input a 整数n:"); scanf("%d",&n); for(i=1;i<=n;i++) { p=p*i; } printf("%d\n",p);}
例 用for循环求1!+2!+…+n!。
main() { int n; int p=1,i,sum=0; printf("input a 整数n:"); scanf("%d",&n); for(i=1;i<=n;i++) { p=p*i; sum=sum+p; } printf("%d\n",sum); }
例
统计从键盘输入一行字符的个数(不包括回车)。
算法描述: ①可设char变量 c 记录getchar每次获取的字符,int 变量 i 记录getchar调用的次数,i初值为0; ②c=getchar()获取一个字符 ; ③i++,调用次数增加1; ④判断c是否为回车符,若不是回车符,转到②; ⑤输出i-1的值。
5.1 概述
例:已知sum=1+2+3+…+100,编程求sum的值。 因此,该程序的算法可描述为: ①设sum=0, i=1 ; ②sum=sum+i; ③i=i+1; ④若i<=100则转到② ; ⑤输出sum的值。 用程序语言如何来描述呢? main() { int i=1,sum=0; line2: sum= sum+ i; i=i+1; if(i<=100) goto line2 ; printf(“sum=%d”,sum); }
5.1 概述
例:已知sum=1+2+3+…+100,编程求sum的值。 算法分析:利用赋值语句可写出如下形式的代码 sum=0; sum=sum+1; sum=sum+2; sum=sum+3; …… sum=sum+100; 很显然,使用这种形式也能得到结果,但程序很冗长。 观察上面的代码可以发现,这段代码实际上重复了同一个 操作:sum=sum+n, 只不过是每次相加的自然数n不同而已。 因此,可以定义一个变量i,让其依次等于1、2、…100, 当i<=100时依次执行sum=sum+i 。
while(n!=0) { d=n%10; printf("%d",d); n=n/10; }
5.3 do-while语句
注意:
(1) do-while循环由do开始,一直到while结束, while 语句后面则必须加分号,表示do-while循环的结束。 (2) 在do和while之间的循环体由多个语句组成时,必 须用花括弧{}括起来组成一个复合语句。 (3) do-while和while语句相互替换时,要注意有时两 者的循环控制条件不完全相同。 (4) 程序中要有使循环条件从真变成假的语句,否则就 会造成死循环。
假(0)
表达式2:循环条件
真(非0) 循环体 表达式3
表达式3: 修改循环控制变量的值
例 用for循环求sum=1+2+3+…+100
main() { int i,sum=0; for(i=1;i<=100;i++) { sum=sum+i; } printf("%d",sum); }
例 用for循环求阶乘n!。
main() 死循环 { int m,i=0; 循环条件永远为真 while(m=3) ; 循环体为空(允许) printf("%d",i++); }
5.2 while语句
例 统计从键盘输入一行字符的个数(不包括回车)。
算法分析: 一行字符往往有多个,最后以回车结束。 当调用字符输入函数getchar(),若用户在按回车之前 输入了不止一个字符,其他字符(包括回车符)会保留在缓冲 区中,等待后续getchar依次读取,直到缓冲区中的字符读完。 如果多次执行getchar,其读取的最后一个字符一定回 车符,故在getchar读取到回车符之前读取的字符数就是输 入这行文字的字符数。 因此可以循环调用getchar,并变量记录调用的次数 以及获取的字符,直到获取的是回车符为止。
第5章 循环结构程序设计
5.1 5.2 5.3 5.4 5.5
概述 while语句 do-while语句 for语句 break语句和continue语句
5.4 for语句
一般形式: for(表达式1 ; 表达式2 ; 表达式3) { 循环体语句; }
for
执行过程:
表达式1 表达式2
表达wk.baidu.com1:循环前赋值
main() { int i=0; char c; c=getchar(); i++; while(c !='\n') { c=getchar(); i++; } printf("%d",i-1); } main() getchar所获得的 { int i=0; while(getchar() !='\n') 字符也可以不赋 { 值给某个变量。 i++; } printf("%d",i); }
5.4 for语句
三点说明: for语句中的三个表达式类型任意,都可省略,但分号”;”不 可省。 for(;;) : 无限循环.可以使用break语句退出循环。 for语句可以转换成while、do-while结构
5.1 概述
例:已知sum=1+2+3+…+100,编程求sum的值。 因此,该程序的算法可描述为: ①设sum=0, i=1 ; ②sum=sum+i; ③i=i+1; ④若i<=100则转到② ; ⑤输出sum的值。 用程序语言如何来描述呢? main() { int i=1,sum=0; sum= sum+ i; i=i+1; if(i<=100) goto ②; }
例 求整数i,它满足条件: 1+2+…+(i-1)<100且1+2+ … + i ≥100。 main() { int i=0,sum=0; do { i++; sum=sum+i; } while(sum<100); printf("the integer is:%d\n",i); }
do
sum =sum+i
main() { 循环条件 int i,sum=0; i=1; while(i<=100) { sum=sum+i; i++; }
循环体
printf("%d",sum); }
5.2 while语句
注意: 循环体如包括有一个以上的语句,则必 须用花括弧{}括起来,组成复合语句。 否则,while 语句的作用范围就只是 while语句后面的第一个分号处。 应注意循环条件的选择以避免死循环。 while(i<=100) { sum=sum+i; i++; }
5.2 while语句
一般形式: while(表达式) { 循环体语句; }
此处无 分号 ;
执行过程:当表达式的值为真(非0)时,执行循环体语句。
开始
特点: 先判断表达式, 再执行循环体
表达式 真(非0) 循环体
假(0)
5.2 while语句
例: 用while循环求sum=1+2+3+…+100 while循环执行一般过程:
本程序流程图: i=1,sum=0
假(0)
表达式
真(非0) 循环体
i<=100
真(非0)
sum+=i; i++;
5.2 while语句
例: 用while循环求sum=1+2+3+…+100 本程序流程图: i=1,sum=0 i<=100 sum+=i i++
假(0) 循环变量
真(非0)
真(非0)
while sum<100 假(0)
例 任意输入一个正整数,将该数各位颠倒顺序输出。如, 输入1234,输出为4321。 算法分析:根据题目要求,可以采用除10取余的方法,依次从 输入数的右边截取各位数字输出。 main() { int n,d; printf("input a integer:"); scanf("%d",&n); do { d=n%10; printf("%d",d); n=n/10; } while(n!=0); }
第5章 循环结构程序设计
5.1 5.2 5.3 5.4 5.5
概述 while语句 do-while语句 for语句 break语句和continue语句
5.3 do-while语句
一般形式: do { 循环体语句; } while(表达式); 执行过程:
do
此处有 分号 ;
特点: 先执行循环体, 再判断表达式, 至少执行一次循环体
循环体 真(非0) while 表达式 假(0)
例 从键盘输入一个整数n,用do…while语句求1!+2!+…+n!。 main() { int n; int p=1,i=1,sum=0; printf("input a 整数n:"); scanf("%d",&n); while( i<=n) { p=p*i; i++; sum=sum+p; } printf("%d\n",sum); } while语句 main() { int n; int p=1,i=1,sum=0; printf("input a 整数n:"); scanf("%d",&n); do { p=p*i; sum=sum+p; i++; } while( i<=n); printf("%d\n",sum); }
例 从键盘输入一个整数n,求该整数的阶乘n!。 算法分析: p=n!=1×2×3×…×n ,连续×,与连续+实质是一样的, 只需把+ 改成×即可。 main() { while(i<=n) int i=1, n,p=1; { printf("input a 整数n:"); sum=sum+i; scanf("%d",&n); i++; while(i<= n) } { p=p*i; 连续+ i++; } printf("%d\n",p); }
概述 while语句 do-while语句 for语句 break语句和continue语句 循环的嵌套 循环结构程序设计举例
5.1 概述
循环结构是程序中一种很重要的结构。其特点是,在给定 条件成立时,反复执行某程序段,直到条件不成立为止。 给定的条件称为循环条件, 反复执行的程序段称为循环体。 C语言常见的循环结构有三种: 1) while循环语句; 2) do-while循环语句; 3) for循环语句; 另外,用 goto 语句和 if 语句也可以构成循环,但这种循环 尽量不用。
5.1 概述
由于goto语句将使程序流程无规律, 破坏了程序的结构化风格,降低了程序的可读性, 而且往往会造成程序流程混乱,因此,尽量不适用此语句。
第5章 循环结构程序设计
5.1 5.2 5.3 5.4 5.5
概述 while语句 do-while语句 for语句 break语句和continue语句
例 从键盘输入一个整数n,求1!+2!+…+n!。 main() { 1!=1 int n,; 2!=1*2 int p=1,i=1,sum=0; 3!=1*2*3 printf("input a 整数n:"); ...... scanf("%d",&n); (n-2)!= 1*2*3*... *(n-2) while( i<=n) (n-1)!= 1*2*3*... *(n-2) *(n-1) { n! = 1*2*3*... *(n-2) *(n-1)* n p=p*i; 即 n!= (n-1)!*n i++; 因此可以设一变量i,让其循环依次等于1、 2...n, sum=sum+p; 计算其阶乘p=p*i,sum=sum+p. } printf("%d\n",sum); } 算法分析:
5.1 概述
goto 语句是一种无条件转移语句,它的一般形式为: ...; 标号:…; …; ...; goto 标号; …; 其中标号是一个按合法用户标识符,放在某一句之前,标 号后加冒号(:),起标识语句的作用。 程序执行时,当执行到 “goto 语句标号”语句时,将改变 程序现有执行顺序,转向标号所标识的语句,无论goto语 句与标号语句之间有何语句。
第5章 循环结构程序设计
本章要点
while语句构成的循环结构 do-while语句构成的循环结构 for语句构成的循环结构 Break语句和continue语句 多重循环结构的实现
本章难点 多重循环结构的实现
第5章 循环结构程序设计
5.1 5.2 5.3 5.4 5.5 5.6 5.7
main() { int n; int p=1,i; printf("input a 整数n:"); scanf("%d",&n); for(i=1;i<=n;i++) { p=p*i; } printf("%d\n",p);}
例 用for循环求1!+2!+…+n!。
main() { int n; int p=1,i,sum=0; printf("input a 整数n:"); scanf("%d",&n); for(i=1;i<=n;i++) { p=p*i; sum=sum+p; } printf("%d\n",sum); }
例
统计从键盘输入一行字符的个数(不包括回车)。
算法描述: ①可设char变量 c 记录getchar每次获取的字符,int 变量 i 记录getchar调用的次数,i初值为0; ②c=getchar()获取一个字符 ; ③i++,调用次数增加1; ④判断c是否为回车符,若不是回车符,转到②; ⑤输出i-1的值。
5.1 概述
例:已知sum=1+2+3+…+100,编程求sum的值。 因此,该程序的算法可描述为: ①设sum=0, i=1 ; ②sum=sum+i; ③i=i+1; ④若i<=100则转到② ; ⑤输出sum的值。 用程序语言如何来描述呢? main() { int i=1,sum=0; line2: sum= sum+ i; i=i+1; if(i<=100) goto line2 ; printf(“sum=%d”,sum); }
5.1 概述
例:已知sum=1+2+3+…+100,编程求sum的值。 算法分析:利用赋值语句可写出如下形式的代码 sum=0; sum=sum+1; sum=sum+2; sum=sum+3; …… sum=sum+100; 很显然,使用这种形式也能得到结果,但程序很冗长。 观察上面的代码可以发现,这段代码实际上重复了同一个 操作:sum=sum+n, 只不过是每次相加的自然数n不同而已。 因此,可以定义一个变量i,让其依次等于1、2、…100, 当i<=100时依次执行sum=sum+i 。
while(n!=0) { d=n%10; printf("%d",d); n=n/10; }
5.3 do-while语句
注意:
(1) do-while循环由do开始,一直到while结束, while 语句后面则必须加分号,表示do-while循环的结束。 (2) 在do和while之间的循环体由多个语句组成时,必 须用花括弧{}括起来组成一个复合语句。 (3) do-while和while语句相互替换时,要注意有时两 者的循环控制条件不完全相同。 (4) 程序中要有使循环条件从真变成假的语句,否则就 会造成死循环。
假(0)
表达式2:循环条件
真(非0) 循环体 表达式3
表达式3: 修改循环控制变量的值
例 用for循环求sum=1+2+3+…+100
main() { int i,sum=0; for(i=1;i<=100;i++) { sum=sum+i; } printf("%d",sum); }
例 用for循环求阶乘n!。
main() 死循环 { int m,i=0; 循环条件永远为真 while(m=3) ; 循环体为空(允许) printf("%d",i++); }
5.2 while语句
例 统计从键盘输入一行字符的个数(不包括回车)。
算法分析: 一行字符往往有多个,最后以回车结束。 当调用字符输入函数getchar(),若用户在按回车之前 输入了不止一个字符,其他字符(包括回车符)会保留在缓冲 区中,等待后续getchar依次读取,直到缓冲区中的字符读完。 如果多次执行getchar,其读取的最后一个字符一定回 车符,故在getchar读取到回车符之前读取的字符数就是输 入这行文字的字符数。 因此可以循环调用getchar,并变量记录调用的次数 以及获取的字符,直到获取的是回车符为止。
第5章 循环结构程序设计
5.1 5.2 5.3 5.4 5.5
概述 while语句 do-while语句 for语句 break语句和continue语句
5.4 for语句
一般形式: for(表达式1 ; 表达式2 ; 表达式3) { 循环体语句; }
for
执行过程:
表达式1 表达式2
表达wk.baidu.com1:循环前赋值
main() { int i=0; char c; c=getchar(); i++; while(c !='\n') { c=getchar(); i++; } printf("%d",i-1); } main() getchar所获得的 { int i=0; while(getchar() !='\n') 字符也可以不赋 { 值给某个变量。 i++; } printf("%d",i); }
5.4 for语句
三点说明: for语句中的三个表达式类型任意,都可省略,但分号”;”不 可省。 for(;;) : 无限循环.可以使用break语句退出循环。 for语句可以转换成while、do-while结构
5.1 概述
例:已知sum=1+2+3+…+100,编程求sum的值。 因此,该程序的算法可描述为: ①设sum=0, i=1 ; ②sum=sum+i; ③i=i+1; ④若i<=100则转到② ; ⑤输出sum的值。 用程序语言如何来描述呢? main() { int i=1,sum=0; sum= sum+ i; i=i+1; if(i<=100) goto ②; }
例 求整数i,它满足条件: 1+2+…+(i-1)<100且1+2+ … + i ≥100。 main() { int i=0,sum=0; do { i++; sum=sum+i; } while(sum<100); printf("the integer is:%d\n",i); }
do
sum =sum+i
main() { 循环条件 int i,sum=0; i=1; while(i<=100) { sum=sum+i; i++; }
循环体
printf("%d",sum); }
5.2 while语句
注意: 循环体如包括有一个以上的语句,则必 须用花括弧{}括起来,组成复合语句。 否则,while 语句的作用范围就只是 while语句后面的第一个分号处。 应注意循环条件的选择以避免死循环。 while(i<=100) { sum=sum+i; i++; }
5.2 while语句
一般形式: while(表达式) { 循环体语句; }
此处无 分号 ;
执行过程:当表达式的值为真(非0)时,执行循环体语句。
开始
特点: 先判断表达式, 再执行循环体
表达式 真(非0) 循环体
假(0)
5.2 while语句
例: 用while循环求sum=1+2+3+…+100 while循环执行一般过程: