5.4 循环结构(课件)-《C语言程序设计》同步教学(清华大学出版)

2024-08-11
| 34页
| 49人阅读
| 8人下载
普通

内容正文:

《C语言程序设计》 (清华大学出版) 同步教学 第 5 章 C语言的控制结构 …… 版权所有:KOPPT WWW.KOPPT.CN 第5章 C语言的控制结构 版权所有:KOPPT WWW.KOPPT.CN 3 C语言的控制结构用来控制语句的执行顺序。 在程序执行过程中,程序语句大多是按照其书写顺序依次执行的,这称为顺序结构。但是,为了能处理某些复杂的问题,程序也需要根据不同条件选择执行不同的程序段,或者重复执行某些特定的程序段,其前者称为分支结构,后者称为循环结构。 1.顺序结构 在顺序结构中,程序是按照语句的书写顺序依次执行的。 2.分支结构 在分支结构中,程序根据判断条件是否成立,来选择执行不同的程序段。 3.循环结构 在循环结构中,程序根据判断条件是否成立,来决定是否重复执行某个程序段。 5.1 算法与程序 5.2 顺序结构 5.3 选择结构 5.4 循环结构 5.4 循环结构 5.4.1 while语句 while ( 表达式 ) 语句 说明: 循环体有可能一次也不执行 循环体可为任意类型语句: 复合语句、简单语句、空语句 下列情况,退出while循环 判断条件不成立(为零) 循环体内遇break 无限循环: while(非0值) 版权所有:KOPPT WWW.KOPPT.CN 4 While语句的一般形式 【例5.9】求1到100之和,即1+2+3+…+100 #include <stdio.h> int main() { int i,sum; i=1; sum=0; while(i<=100) { sum=sum+i; i++; } printf("%d",sum); return 0; } 变量初值 循环变量值改变,使循环条件向”假”变化. 循环条件 循环体 版权所有:KOPPT WWW.KOPPT.CN 以此例延伸,讲解1+3+5+…… 2+4+…… …… 5 i=10,sum=9 i=9,sum=9 i=2,sum=1 运行出现错误 A B C D 提交 程序的运行结果是( ).  main()   {  int  i=1,sum=0;     while(i<10) {        sum=sum+1; i++; }     printf("i=%d,sum=%d",i,sum);   } 单选题 1分 版权所有:KOPPT WWW.KOPPT.CN 程序的运行结果是().  main()   {  int  i=1,sum=0;     while(i<10)         sum=sum+1; i++;     printf("i=%d,sum=%d",i,sum);   } i=10,sum=9 i=9,sum=9 i=2,sum=1 运行出现错误 A B C D 提交 单选题 1分 版权所有:KOPPT WWW.KOPPT.CN 7 在C语言中,为了结束由while语句构成的循环,while后一对圆括号中表达式的值应该为( ). 0 1 True 非0 A B C D 提交 单选题 1分 版权所有:KOPPT WWW.KOPPT.CN 8 5.4.2 do-while语句 do 语句 while ( 表达式 ) ; 特点:先执行循环体,后判断表达式 说明:循环体语句至少执行一次 表达式 语句 假 真 版权所有:KOPPT WWW.KOPPT.CN do-While语句的一般形式 使用do-while求1到100之和,即1+2+3+…+100 #include <stdio.h> int main() { int i,sum; i=1; sum=0; while(i<=100) { sum=sum+i; i++; } printf("%d",sum); return 0; } #include <stdio.h> int main() { int i,sum; i=1; sum=0; do { sum=sum+i; i++; } while(i<=100); printf("%d",sum); return 0; } 版权所有:KOPPT WWW.KOPPT.CN 以下叙述正确的是(). do-while语句构成的循环不能用其它语句构成的循环来代替. do-while语句构成的循环只能用break语句退出. 用do-while语句构成的循环,在while后的表达式为非零时结束循环. 用do-while语句构成的循环,在while后的表达式为零时结束循环 A B C D 提交 单选题 1分 版权所有:KOPPT WWW.KOPPT.CN 【例5.10】输入一个整数,计算它是几位数。如输入32564,输出5。 #include<stdio.h> int main() { long x; int n=0; printf("input x="); scanf("%ld",&x); do { n++; x/=10; } while( ); printf("output n=%d ",n); return 0; } 分析: 设 x=32564 若x=x/10, 则 x=3256 若x=x/10, 则 x=325 若x=x/10, 则 x=32 若x=x/10, 则 x=3 若x=x/10, 则 x=0 x!=0 版权所有:KOPPT WWW.KOPPT.CN 5.4.3 for语句 for(表达式1;表达式2;表达式3) 语句 后续语句 0 非0 版权所有:KOPPT WWW.KOPPT.CN for 语句的一般形式 若i和sum为整型变量,则以下程序的运行结果是( ). sum=0 ; for(i=2;i<10;i=i+2) sum=sum+i; printf("%d",sum); 20 22 18 19 A B C D 提交 单选题 1分 版权所有:KOPPT WWW.KOPPT.CN 对 for(表达式1; ;表达式3) 可理解为( ). for(表达式1;0;表达式3) for(表达式1;1;表达式3) for(表达式1;表达式1;表达式3) for(表达式1;表达式3;表达式3) A B C D 提交 单选题 1分 版权所有:KOPPT WWW.KOPPT.CN 若i为整型变量,则以下循环执行次数是(). for(i=2;i==0;) printf("%d",i--); 无限次 0次 1次 2次 A B C D 提交 单选题 1分 版权所有:KOPPT WWW.KOPPT.CN 【例5.11】输入10个数,输出其中的最大值。 #include <stdio.h> int main() { float x,max; int i; printf("input first number: "); scanf("%f",&x); max=x; for(i=1;i<=9;i++) { scanf("%f",&x); if(x>max) max=x; } printf("max=%f ",max); return 0; } 版权所有:KOPPT WWW.KOPPT.CN 5.4.6 break语句 提前结束循环 #include<stdio.h> int main() { int i; for(i=100;i<=300;i++) if(i%17==0) break; printf("i=%d ",i); return 0; } 【例5.12】找出100~300之间第一个能被17整除的数。 运行结果: i=102 版权所有:KOPPT WWW.KOPPT.CN while() { … for() { … break; } … } 注意: 1.break语句只能用于switch语句或循环语句。当用于循环语句时,break语句通常与if语句配合使用。 2.当用于嵌套的循环结构时,break语句只能跳出(或终止)包含这条break语句本身的最内层循环。例如 版权所有:KOPPT WWW.KOPPT.CN 5.4.5 continue语句 结束本次循环,开始下一次循环 #include <stdio.h> int main() { int i , n=0; float x,y=1; for(i=1;i<=10;i++) { scanf("%f",&x); if(x==0) continue; y*=x; n++; } printf("y=%.2f, n=%d ",y,n); return 0; } 【例5.13】输入10个数,计算并输出这10个数中非0数据的乘积,并统计和输出非0数据的个数。 版权所有:KOPPT WWW.KOPPT.CN 以下程序的运行结果是().  main()   {       int n;       for(n=1;n<=10;n++)         {           if(n%3==0) continue;           printf("%d",n);        }  } 12457810 369 12 1234567890 A B C D 提交 单选题 1分 版权所有:KOPPT WWW.KOPPT.CN 5.4.6单重循环程序举例 #include<stdio.h> int main() { long f1=1,f2=1; int i; for(i=1;i<=10;i++) { printf("%10ld%10ld",f1,f2); if(i%2==0)printf(" "); f1=f1+f2; f2=f2+f1; } return 0; } 【例5.14】求Fibonacci数列前20项。该数列如下: 1,1,2,3,5,8,13,21,… 版权所有:KOPPT WWW.KOPPT.CN 【例5.15】输入一个大于1的自然数,判断该数是否为素数,如果是素数,输出“yes”,否则输出“no”。 #include <stdio.h> int main() { long n; int i; printf("input n:"); scanf("%ld",&n); for(i=2;i<=n-1;i++) if(n%i==0) break; if(i==n) printf("yes "); else printf("no "); return 0; } 分析: 设n为大于1的自然数 如果n不能被2,3,…,n-1整除,则n是素数。 版权所有:KOPPT WWW.KOPPT.CN #include <stdio.h> #include <math.h> int main() { long n,k; int i; printf("input n:"); scanf("%ld",&n); k=(int)sqrt(n); for(i=2;i<=k;i++) if(n%i==0) break; if(i>k) printf("yes "); else printf("no "); return 0; } 若能被整除 则存在使: 若为和中的较小者,则 则: 版权所有:KOPPT WWW.KOPPT.CN 【例5.16】按下面的幂级数展开式计算e的值。要求误差小于10-5。 #include <stdio.h> int main() { float t=1,e=1; int i=0; while(t>=1e-5) { i++; t=t*1.0/i; e=e+t; } printf("e=%.5f ",e); return 0; } 分析: 设t表示一般项, e表示和 t=1, e=1 t=t/1 ,e=e+t, t=t/2 ,e=e+t t=t/3 ,e=e+t, t=t/4 ,e=e+t …… 直到 t<10-5 s=1!+2!+3!+……+n! s=0; t=1; for(i=1;i<=n;i++) { t=t*i; s=s+t; } 版权所有:KOPPT WWW.KOPPT.CN 25 5.4.7 多重循环结构 #include <stdio.h> int main() {int i , j; for(i=0;i<3;i++) /* 外循环 */ { printf("i=%d: ",i); for(j=0;j<4;j++) /* 内循环 */ printf("j=%-3d",j); /* 内循环的循环体 */ printf(" "); } return 0; } 例 5.17 该程序用于演示嵌套循环的执行过程。 运行结果如下: i=0: i=1: i=2: j=0 j=1 j=2 j=3 j=0 j=1 j=2 j=3 j=0 j=1 j=2 j=3 版权所有:KOPPT WWW.KOPPT.CN 26 【例5.18】输出1~100中所有的素数。 #include <stdio.h> #include <math.h> int main() { int n, i, k; for(n=2; n<=100; n++) { k=sqrt(n); for(i=2; i<=k; i++) if(n%i==0) break; if (i>k) printf("%5d",n); } return 0; } 分析: for(n=2; n<=100; n++) { 判断n是否为素数 若n是素数,则输出n } 版权所有:KOPPT WWW.KOPPT.CN 【例5.18】每行10个,输出1~100中所有的素数。 #include <stdio.h> #include <math.h> int main() { int n, i, k, count=0; for(n=2; n<=100; n++) { k=sqrt(n); for(i=2; i<=k; i++) if(n%i==0) break; if (i>k) { printf("%5d",n); count++; if(count%10==0) printf(" "); } } return 0; } 分析: for(n=2; n<=100; n++) { 判断n是否为素数 若n是素数,则输出n } 版权所有:KOPPT WWW.KOPPT.CN 【例5.19】编写程序输出如下图形: * *** ***** ******* ********* #include <stdio.h> int main() { int i,j; for(i=1;i<=5;i++) { for(j=1; j<=5-i; j++) putchar(' '); for(j=1; j<=2*i-1; j++) putchar('*'); putchar(' '); } return 0; } 空格个数: 第1行:4 第2行:3 第3行:2 第4行:1 第5行:0 第1行:1 星号个数: 第2行:3 第3行:5 第4行:7 第5行:9 第 i 行:5-i 第 i 行:2i-1 版权所有:KOPPT WWW.KOPPT.CN #include <stdio.h> #include <conio.h> main() { int i,n,sum; sum=0; /**********FILL**********/ _____ /**********FILL**********/ for(i=1; _____ ;i++) /**********FILL**********/ if(_____) if(i%2==0) { sum=sum+i; n++; printf("%6d",i); /**********FILL**********/ if(_____) printf(" "); } printf(" total=%d",sum); } 功能:以每行5个数来输出300 以内能被7或17整除的偶数,并 求出其和。 版权所有:KOPPT WWW.KOPPT.CN (4)程序填空:程序的功能是计算2+22+222+2222+…+22…2(共n项)的和。 提示:2+22+222+2222+…+22…2=2*(1+11+111+1111+…+11…1)。 程序如下: 31 #include <stdio.h> int main() { long s=1,t=1; int n,i; scanf("%d",&n); for( i=1;i<n;i++) { t=t*10+1; 【1】 } 【2】 printf("sum=%ld ",s); return 0; } 版权所有:KOPPT WWW.KOPPT.CN #include <stdio.h> main() { long int f,s; int i,j,n; /**********FILL**********/ _____ scanf("%d",&n); /**********FILL**********/ for(i=1;i<=n; _____ ) { f=1; /**********FILL**********/ for(j=1; _____;j++) /**********FILL**********/ _____ s=s+f; } printf("n=%d,s=%ld ",n,s); } 功能:下面的程序是求1!+3!+5!+……+n!的和。 版权所有:KOPPT WWW.KOPPT.CN (3)程序填空:程序的功能是输出6至10000之间的亲密数对,填空将程序补充完整。若a、b是亲密数对,则a的因子和等于b、b的因子和等于a且a不等于b。例如: 220: 1+2+4+5+10+11+20+22+44+55+110=284 284: 1+2+4+71+142=220 程序如下: #include <stdio.h> int main() { int a,b,c,i; for(a=6;a<=10000;a++) { b=1; for(i=2;i<=a/2;i++) if(【1】) b+=i; 【2】 for(i=2;i<=b/2;i++) if(b%i==0) c+=i; if(【3】&&a!=b) printf("%d %d ",a,b); } return 0; } 版权所有:KOPPT WWW.KOPPT.CN 谢谢观看 34 $$

资源预览图

5.4 循环结构(课件)-《C语言程序设计》同步教学(清华大学出版)
1
5.4 循环结构(课件)-《C语言程序设计》同步教学(清华大学出版)
2
5.4 循环结构(课件)-《C语言程序设计》同步教学(清华大学出版)
3
5.4 循环结构(课件)-《C语言程序设计》同步教学(清华大学出版)
4
5.4 循环结构(课件)-《C语言程序设计》同步教学(清华大学出版)
5
5.4 循环结构(课件)-《C语言程序设计》同步教学(清华大学出版)
6
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。