为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

C语言循环控制

2013-11-11 47页 ppt 371KB 31阅读

用户头像

is_084131

暂无简介

举报
C语言循环控制null循环控制循环控制1 while语句 2 do--while 语句 3 for语句 4 break、continue和Goto语句 5 循环的嵌套 6 几种循环的比较 7 程序举例null循环:就是在给定的条件成立时反复执行某一程序段,被反复执行的程序段称为循环体 C语言实现循环的语句: while 语句 do ~ while 语句 for 语句 用break continue goto 语句1 while语句 while 语句 常称为“当型”循环语句。一般形式:while(表达式) 循环体语句;执行流...
C语言循环控制
null循环控制循环控制1 while语句 2 do--while 语句 3 for语句 4 break、continue和Goto语句 5 循环的嵌套 6 几种循环的比较 7 程序举例null循环:就是在给定的条件成立时反复执行某一程序段,被反复执行的程序段称为循环体 C语言实现循环的语句: while 语句 do ~ while 语句 for 语句 用break continue goto 语句1 while语句 while 语句 常称为“当型”循环语句。一般形式:while(达式) 循环体语句;执行流程: 1 while语句null特点:先判断表达式,后执行循环体 说明: 循环体如果包含一个以上的语句,应该用花括号括起来,以复合语句形式出现。 循环体有可能一次也不执行 循环体可为任意类型语句 下列情况,退出while循环 条件表达式不成立(为零) 循环体内遇break,return,goto 无限循环: while(1) 循环体;null例 用while循环求 #include void main() { int i,sum=0; i=1; while(i<=100) { sum=sum+i; i++; } printf("%d",sum); }sum=0+1 sum=1+2=3 sum=3+3=6 sum=6+4 …… sum=4950+100=5050null例 显示1~10的平方#include void main() { int i=1; while(i<=10) { printf("%d*%d=%d\n",i,i,i*i); i++; } }运行结果: 1*1=1 2*2=4 3*3=9 4*4=16 5*5=25 6*6=36 7*7=49 8*8=64 9*9=81 10*10=1002 do--while 语句 do--while语句 常称为“直到型”循环语句一般形式:do 循环体语句; while(表达式);执行流程:2 do--while 语句null特点:先执行循环体,后判断表达式 说明: 至少执行一次循环体 do~while可转化成while结构While循环null例 用do~while循环求 #include void main() { int i,sum=0; i=1; do { sum+=i; i++; }while(i<=100); printf("%d",sum); } nullwhile和do~while比较 在一般情况下,用while语句和用do--while语句处理同一问题时,若二者的循环体部分是一样的,它们的结果也一样。 但在 while后面的表达式一开始就为假(0值)时,两种循环的结果是不同的: do--while语句执行循环一次; 而 while语句一次循环也不执行。#include void main() { int i,sum=0; scanf("%d",&i); do { sum+=i; i++; }while(i<=10); printf("%d",sum); }#include void main() { int i,sum=0; scanf("%d",&i); while(i<=10) { sum+=i; i++; } printf("%d",sum); } 3 for语句C语言中最灵活、最复杂的循环语句; 它不但可以用于循环次数确定的情况, 还可以用于循环次数不确定的情况; 它可实现while和do--while语句的所有功能3 for语句null一般形式:for([expr1] ;[ expr2] ;[ expr3]) 循环体语句执行流程: for 语 句nullfor语句一般应用形式:for(循环变量赋初值;循环条件;循环变量增值) { 循环体 }#include void main() { int i,sum=0; for(i=1;i<=100;i++) sum+=i; printf("%d",sum); }相当于: i=1; while (i<=100) { sum=sum+i; i++; }null说明: for语句中expr1, expr2 ,expr3 类型任意,可省略一个、二个甚至全部,但省掉表达式时,括号中的两个分号不能省略 如果expr2省略,即不判断循环条件,认为表达式始终为真,循环将无终止地进行下去 无限循环一般用for(;;)这种形式 for语句可以转换成while结构expr1; while(expr2) { 循环体语句; expr3; }null例:#include void main( ) { int i=0; for(i=0;i<10;i++) putchar(‘a’+i); }运行结果:abcdefghij#include void main( ) { int i=0; for(;i<10;i++) putchar(‘a’+i); }#include void main( ) { int i=0; for(;i<10;) putchar(‘a’+(i++)); }for语句表达式的省略null#include void main() { int i,j,k; for(i=0,j=100;i<=j;i++,j--) { k=i+j; printf("%d+%d=%d\n",i,j,k); } }for语句中的逗号表达式for语句中,循环体不需要任何操作时用空语句#include void main( ) { int i=0; for(;i<10;putchar(‘a’+i),i++) ; }4 break、continue和goto语句4 break、continue和goto语句break语句 功能:在循环语句和开关(switch)语句中使用,终止并跳出循环体或开关体 说明: break只能终止并跳出最近一层的结构 break常常与if语句(循环结构)和switch语句一起使用 不要用于循环和switch语句之外的任何其它地方nullnullnullbreak举例:输出圆面积,面积大于100时停止#include #define PI 3.14159 void main() { int r; float area; for(r=1;r<=10;r++) { area=PI*r*r; if(area>100) break; printf("r=%d,area=%.2f\n",r,area); } }nullbreak举例:小写字母转换成大写字母,直至输入非小写字母字符#include void main() { char c; while(1) { c=getchar(); getchar(): if(c>='a' && c<='z') putchar(c-'a'+'A'); else break; } }getchar()要按Enter键才能响应 过滤Enter键getchar() 按回车才响应并回显 getch() 不按回车就响应,不回显 此处可用一getch()代替nullbreak举例: 对键盘输入的正数累加,当输入的数据为负数时,程序结束#include void main() { int x; long sum=0; for(;;) { scanf("%d",&x); if(x>=0) sum+=x; else break; } printf("sum=%ld",sum); }nullcontinue语句 功能:结束本次循环,跳过循环体中尚未执行的语句,进行下一次循环条件的判断 仅用于循环语句中null #include void main() { int n; for (n=100;n<=200;n++) { if (n%3= =0) continue; printf(“%d”,n); } } 分析:n从100循环到200,判断当n不能被3 整除时,输出n;而当n不能被3 整除时执行continue语句,结束本次循环,转而开始一个新数的判断例 把100~200之间不能被3整除的数输出。null例 求输入的十个整数中正数的个数及其平均值#include void main() { int i,num=0,a; float sum=0; for(i=0;i<10;i++) { scanf("%d",&a); if(a<=0) continue; num++; sum+=a; } printf("%d plus integer's sum :%6.0f\n",num,sum); printf("Mean value:%6.2f\n",sum/num); }nullgoto语句及用goto构成循环goto语句一般格式: goto 标号; ….….. 标号:语句; 功能:无条件转移语句,一般用于以下两种场合 与 if 语句一起构成循环结构; 退出多重循环(不同于break语句和continue语句)说明: 语句标号用标识符表示,须符合标识符的命名 goto语句会引起程序流程的跳转,无限制的使用会破坏结构化程序的逻辑结构,降低程序的可读性,限制使用goto语句null#include void main() { int i,sum=0; i=1; loop: if(i<=100) { sum+=i; i++; goto loop; } printf("%d",sum); }例 用if 和goto语句构成循环,求null例 从键盘输入一组数据,以0结束输入,求数据和#include void main() { int number,sum=0; read_loop: scanf("%d",&number); if(!number) goto print_sum; sum+=number; goto read_loop; print_sum: printf("The total sum is %d\n",sum); }材料5 循环的嵌套5 循环的嵌套循环体中又包含循环称为循环的嵌套。 内嵌的循环中又可以嵌套循环,就构成循环的多重嵌套,也称为多重循环。 三种循环可互相嵌套,层数不限 外层循环可包含两个以上内循环,但不能相互交叉while() { …… while() { …… } …... }do { …… do { …… }while( ); …... }while( );while() { …… do { …… }while( ); ……. }for( ; ;) { …… do { …… }while(); …… while() { …… } …... }null例 编程输出下面的数字金字塔(1到9 ). 1 121 12321 .….. 12345678987654321分析问题,找出规律: 每一行中的最大数字即为该行的行号且居中 每一行中数字从1递增到该行行号后再递减到1null外层循环从1循环到9共输出9行,用行号作循环变量i 内层循环循环的次数与行号i有关,需要用多个循环来实现 (1) 在每行前面输出9- i个空格 (2) 输出1到i (3) 输出i -1到1#include void main() { int i,j,k,m; for (i=1;i<=9;i++) { for (j=1;j<=9-i;j++) putchar(' '); for (j=1;j<=i;j++) printf("%d", j); for (j=i-1;j>=1;j--) printf("%d", j); printf("\n"); } }用程序实现:1 121 12321 .….. 123456789876543216 几种循环的比较四种循环都可以用来处理同一问题,一般情况下它们可以互相代替。不提倡用goto 型循环。 关于循环的控制…… while (表达式) 语句…… do 语句 while (表达式);…… for (表达式1;表达式2;表达式3) 语句6 几种循环的比较null循环体的执行while、do-while、for循环可以用break语句跳出循环,continue结束本次循环,但由goto和if语句组成的循环不能7 程序举例求n! 算法:通过分析问题,找出解决问题的方法和步骤 n!=1*2*···*n 设置变量:x放连乘的结果,i放每次连乘的数,i的值的变化规律为i++,n的值从键盘输入 变量类型:考虑到当n较大时,连乘的值会很大,这里我们可以把x定义为double型,其余定义为int型 变量初值:连乘的变量一般设为1,累加变量的可设为0,或者把它们设为第一个值。 循环变量:初值,终值,变化规律例:连乘问题7 程序设计举例null#include void main() { int n,i; double x; printf(“Please input n:”); scanf(“%d”,&n); /*输入n*/ for (i=1,x=1;i<=n;i++) x= x*i; /*求1到n的连乘*/ printf(“%d!=%.0f\n”,n,x); }执行上述程序: Please input n: 10 10!=3628800null例:判断一个正整数是否为素数。 分析:素数有2,3,5,7.... 指除了1和它本身之外,不能被其它整数整除的自然数(1不是素数)。 所以判断数m是否是素数,可以用2到m-1之间的整数逐个去除m。这样需要进行m-2次运算。实际上数学已证明,判断的范围可缩小到2~#include #include void main() { int m,i,k; scanf("%d",&m); k=sqrt(m); for(i=2;i<=k;i++) if(m%i==0) break; if(i>k) printf("%d is a prime number\n",m); else printf("%d is not a prime number\n",m); }m=1??循环终止条件 1 i>k,m不能被所有的i整除 2 i<=k, m能被一个i整除null例:求100~200之间的全部素数#include void main() { int m,i,k,n=0; for (m=100;m<=200;m++) /*scanf("%d",&m);*/ { k=sqrt(m); for(i=2;i<=k;i++) if(m%i==0) break; if(i>=k+1) {n++;printf(n%10==0?"%5d\n“:”%5d”,m);} /*printf("%d is a prime number\n",m); else printf("%d is not a prime number\n",m);*/ } }增加变量n累计素数的个数数据不再由键盘输入 输出语句改变null#include #include void main() { int f=1; float t=1, pi=0, v=1; while(fabs(t)>=1e-6) { pi=pi+t; v+=2; f=-f; t=f/v; } pi=pi*4; printf("pi=%10.6f\n",pi); }分析:累加问题 关键是找前后项之间的关系以及它们与循环次数的关系 本题前后项关系从分子和分母两部分分别看,分子是正反关系,分母是加2关系 定义变量: pi放累加结果 t累加中间变量 v表示分母,f 分子,则t= f/v例:累加问题null例 梯形法求数值积分null例 求Fibonacci数列的前40个数,这个数列的特点用下面公式表示:null#include void main() { long int f1,f2; int i; f1=1; f2=1; for(i=1;i<=20;i++) { printf("%12ld %12ld ",f1,f2); if(i%2==0) printf("\n"); f1=f1+f2; f2=f2+f1; } }注意: 用f1、f2分别表示前两项,因为数据可能超出普通整型的表示范围,所以设置变量的类型为长整型 长整型的输出用格式控制符%ld此语句的作用是控制每行输出的数据的个数null例 译密码例如 Hello,world! 译成密码:Lipps,asvph!编码规律:字母变成其后的第四个字母,即A变E,a变成e......Z变成D,非字母符号不变。null#include void main() { char c; while((c=getchar())!='\n') {if((c>='a'&&c<='z')||(c>='A'&&c<='Z')) { c=c+4; if(c>'Z'&&c<='Z'+4||c>'z') c=c-26; } printf("%c",c); } }对字母进行译码 W和w以后的字母要特别处理ASCII码见P364null 求用0~9这十个数字可以组成多少个无重复数字的三位数#include void main() {int x,a,b,c,n=0; for(x=100;x<=999;x++) {a=x/100;b=x/10%10;c=x%10; if(a!=b&&a!=c&&b!=c) {n++; printf("%5d",x); } } printf("\nnumber=%d",n) }分析:用穷举法 列出所有可能性,然后逐一判断,找到真正的解 本题中列出所有的三位数100~999,逐个对三位数的数字进行判断nullsum累加变量 n取1,2,3,4.......20,n=n+1 f分子,v分母, t临时变量 t=f,f=v ,v=t+v sum=sum+f/v课堂练习:null课堂练习:sum累加变量,x n循环变量,取2,4,6........,n=n+2 t当前项,f分子,v分母,t=f/v f=-f*x*x v=v*(n-1)*n t=f/v sum=sum+tnull#include # include void main() { int i,j,n,m; printf("Please enter n:"); scanf("%d",&n); m=n/2+1; for(i=1;i<=n;i++) { for (j=1;j<=fabs(i-m);j++) printf(" "); for(j=1;j<=n-2*fabs(i-m);j++) printf("*"); printf("\n"); } }
/
本文档为【C语言循环控制】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索