第5 循环结构程序设计_第1页
第5 循环结构程序设计_第2页
第5 循环结构程序设计_第3页
第5 循环结构程序设计_第4页
第5 循环结构程序设计_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

会计学1第5循环结构程序设计2/715.1while语句真(非零)表达式

循环体假(零)1、while语句的形式:

while(表达式)循环体;

2、

while语句常称为“当型”循环语句。while第1页/共60页3/71例用while循环求

#include<stdio.h>main(){inti,sum=0;i=1;while(i<=100){sum=sum+i;i++;}printf("%d",sum);}循环初值循环终值循环变量增值循环条件循环体第2页/共60页4/71例显示1~10的平方#include<stdio.h>main(){inti=1;while(i<=10){printf("%d*%d=%d\n",i,i,i*i);i++;}}运行结果:1*1=12*2=43*3=94*4=165*5=256*6=367*7=498*8=649*9=8110*10=100第3页/共60页5/713、说明:先判断表达式,后执行语句。循环体有可能一次也不执行表达式同if语句后的表达式一样,可以是任何类型的表达式。循环体多于一句时,用一对{}括起。下列情况,退出while循环条件表达式不成立(为零)循环体内遇break无限循环:while(1)

循环体第4页/共60页6/71例:分析下列程序段的循环次数i=1;while(i<=100)putchar(‘*’);i++;

第5页/共60页7/71#include<stdio.h>voidmain(){intx;scanf(“%d”,&x);【例】输入一系列整数,判断其正负号,当输入0时,结束循环。输入数据,为第一次判断做准备while(x!=0)判断是否结束{if(x>0)printf("+");elseprintf("-");scanf(“%d”,&x);}

判断正负号}第6页/共60页8/71#include<stdio.h>voidmain(){charch;intnum=0;ch=getchar();【例】统计从键盘输入的一行字符的个数(以回车换行键作为输入结束标记)。while(ch!='\n')判断是否输入结束{num++;ch=getchar();}printf("num=%d\n",num);}第7页/共60页9/71注意表达式在判断前,必须要有明确的值。循环体中一般有改变条件表达式的语句。while(表达式)后面没有分号。第8页/共60页10/715.2do--while语句1、do--while的形式:

do{循环体;}while(表达式);2、do--while语句常称为“直到型”循环语句。真(非零)表达式

循环体假(零)

do第9页/共60页11/71例用do~while循环求

#include<stdio.h>main(){inti,sum=0;i=1;do{sum+=i; i++;}while(i<=100);printf("%d",sum);}第10页/共60页12/71例while和do~while比较#include<stdio.h>main(){inti,sum=0;scanf("%d",&i);do{sum+=i; i++;}while(i<=10);printf("%d",sum);}main(){inti,sum=0;scanf("%d",&i);while(i<=10){sum+=i; i++;}printf("%d",sum);}第11页/共60页13/713、说明:先执行语句,后判断表达式。第一次条件为真时,while,do-while等价;第一次条件为假时,二者不同。第12页/共60页14/71【例】口令密码校验,假设预设口令为A,密码为a,如果口令密码不一致,则需要重新输入,直到与预设口令密码一致。

#include<stdio.h>voidmain(){ charc1,c2; do {c1=getchar();c2=getchar(); }while(c1!=‘A’&&c2!=‘a’);printf(“Pass!\n");}第13页/共60页15/71注意在if、while语句中,表达式后面都没有分号,而在do-while语句的表达式后面则必须加分号。do-while和while语句相互替换时,要注意修改循环控制条件。第14页/共60页16/715.3for语句1、for的形式:for(初始表达式1;条件表达式2;循环表达式3){循环体;}

表达式1:用于循环开始前为循环变量设置初值。表达式2:控制循环执行的条件,决定循环次数。表达式3:循环控制变量修改表达式。循环体语句:被重复执行的语句。第15页/共60页17/71表达式3计算表达式1循环体判断表达式2零非零for的下一条语句2、执行过程第16页/共60页18/71例如:它相当于以下语句:

i=1;

while(i<=100){sum=sum+i;i++;

}

printf("%d",sum);表达式1;while(表达式2)表达式3;例用for循环求

#include<stdio.h>main(){inti,sum=0;for(i=1;i<=100;i++)sum+=i;printf("%d",sum);}第17页/共60页19/713、说明三个表达式都可以是逗号表达式。三个表达式都是任选项,都可以省略,但要注意省略表达式后,分号间隔符不能省略。第18页/共60页20/71例:#include<stdio.h>main(){inti=0;for(i=0;i<10;i++)putchar(‘a’+i);}运行结果:abcdefghij例:#include<stdio.h>main(){inti=0;

for(;i<10;i++)putchar(‘a’+i);}例:#include<stdio.h>main(){inti=0;

for(;i<10;)putchar(‘a’+(i++));}例:#include<stdio.h>main(){inti=0;

for(;i<10;putchar(‘a’+i),i++);

}第19页/共60页21/711、for语句中表达式省略的形式(1)for语句一般形式中的“表达式1”可以省略;如:sum=0;i=1;for(;i<=100;i++)sum=sum+i;

第20页/共60页22/711、for语句中表达式省略的形式(2)表达式2省略,即不判断循环条件,循环无终止地进行下去;如:for(sum=0,i=1;;i++){if(i>100)break;sum=sum+i;}

第21页/共60页23/711、for语句中表达式省略的形式(3)表达式3也可以省略,但此时保证循环能正常结束如:for(sum=0,i=1;i<=100;){sum=sum+i;i++;}第22页/共60页24/71(4)可以省略表达式1和表达式3,只有表达式2,如:

i=1;sum=0;for(;i<=100;){sum=sum+i;i++;}1、for语句中表达式省略的形式i=1;sum=0;while(i<=100)

{sum=sum+i;i++;}相当于第23页/共60页25/71while(1)循环体;即不设初值,不判断条件,循环变量不增值。无终止地执行循环体。(5)三个表达式都可省略,如

for(;;)循环体;1、for语句中表达式省略的形式如:sum=0,i=1;for(;;){if(i>100)break;sum=sum+i;i++;}相当于第24页/共60页26/71(6)循环体为空语句对for语句,循环体为空语句的一般形式为:

for(表达式1;表达式2;表达式3);如:for(sum=0,i=1;i<=100;sum+=i,i++);1、for语句中表达式省略的形式要在显示器上复制输入的字符,输入的字符为’.’时,结束循环。输入abcdefg.输出abcdefg.while(putchar(getchar())!=’.’);第25页/共60页27(1)在进入累加前先给累加器赋初值(一般为0);(2)用循环语句实现累加;for(循环变量赋初值;循环条件;循环变量改变规律)(3)循环体语句的设计。累加器当前值=累加器原值+循环变量当前值;典型例题分析【例】求累加和1+2+3+…+1000基本方法:属于“累加器”类型问题。第26页/共60页28累加器赋初值参考程序:voidmain(){longintk,s;s=0;for(k=1;k<=1000;k++)s=s+k;printf("s=%ld",s);}累加求偶数和2+4+6+…+100思考第27页/共60页29(1)给累乘器赋初值,一般为1;(2)用循环语句实现累乘;for(循环变量赋初值;循环条件;循环变量改变规律)(3)循环体设计。累乘器当前值=累乘器原值*循环变量当前值;例:求累乘积。如:1×2×3×...×100基本方法:属于“累乘器”类型问题。第28页/共60页30累乘器赋初值求n!=1×2×3×…n参考程序:voidmain(){doubles=1;intk;for(k=1;k<=100;k++)s=s*k;printf("s=%lf",s);}累乘思考整数连乘结果一定是整数,而本例中结果数值相当大,用long型都无法存放,因此将存放累乘结果的变量s定义为double型。第29页/共60页31/71编程方法:“递推法”或“迭代法”

所谓递推法就是从初值出发,归纳出新值与旧值间的关系,直到求出所需值为止。新值的求出依赖于旧值,不知道旧值,无法推导出新值。数学上递推公式正是这一类问题,如前面的累加与累乘例子的循环体就是使用的“递推法”或“迭代法”

。第30页/共60页32/71例:输出100以内、个位数为6且能被3整除的自然数?

编程方法:“枚举法”或“穷举法”按问题本身的性质,一一列举出该问题所有可能的解,并在逐一列举的过程中,检验每个可能的解是否是问题的真正解,若是,我们采纳这个解,否则抛弃它。对于所列举的值,既不能遗漏也不能重复。第31页/共60页33/71#include<stdio.h>voidmain(){inti;for(i=1;x<100;i++)if(i%10==6&&i%3==0)printf("%3d",i);

}

第32页/共60页34/715.4break和continue语句1.break语句的功能:用于从循环体内跳出循环体,即提前结束循环。例:计算r=1到r=10的圆面积,当面积大于100时结束循环,for(r=1;r<=10;r++){area=3.14159*r*r;if(area>100)break;

printf(“%f”,area);

}2、使用要点:break只能用在循环语句和switch语句中.break语句第33页/共60页35/71

expr……break;……假(0)真(非0)whiledo……break;…...expr假(0)真(非0)while第34页/共60页36/71expr2……break;…...假(0)真(非0)forexpr1expr3switchexpr语句组1break;语句组2break;语句组nbreak;语句组break;…...const1const2constndefaultcase第35页/共60页37/71【例】求300以内能被17整除的最大的数。#include"stdio.h"voidmain(){intx,k;for(x=300;x>=1;x--)if(x%17==0)break;printf("x=%d\n",x);}找到满足条件的最大数,结束循环第36页/共60页38/71例break举例:小写字母转换成大写字母,直至输入非字母字符#include<stdio.h>main(){inti,j;charc;while(1){c=getchar(); if(c>='a'&&c<='z') putchar(c-'a'+'A'); else break;}}第37页/共60页39/71continue语句1、功能:结束本次循环,接着判定下一次是否执行循环。2、continue与break的区别:continue只结束本次循环,而break终止本层循环.3、例:把100~200之间的不能被3整除的数输出.

main(){intn;for(n=100;n<=200;n++){if(n%3==0)continue;printf(“%d”,n);}}第38页/共60页40/71expr……continue;……假(0)真(非0)while真(非0)do……continue;…...expr假(0)whileexpr2……continue;…...假(0)真(非0)forexpr1expr3第39页/共60页41/71while(条件){语句A;

break;语句B;}真语句B条件语句Abreak假结束循环6、break语句与continue语句的区别至此位置第40页/共60页42/71while(条件){语句A;

continue;语句B;}真语句B条件语句Acontinue假结束循环至此位置第41页/共60页43/71#include"stdio.h"voidmain(){inta,b;for(a=1,b=1;a<=10;a++){ if(b>=10)break; if(b%3==1){b+=3;continue;}}printf("%d\n",a);}【例5】分析以下程序的运行结果。程序运行结果:4第42页/共60页44/71在循环体语句中又包含有另一个完整的循环结构的形式,称为循环的嵌套。如果内循环体中又有嵌套的循环语句,则构成多重循环。5.5循环的嵌套嵌套在循环体内的循环体称为内循环,外面的循环称为外循环。while、do-while、for三种循环都可以互相嵌套。第43页/共60页45/71循环语句之间的关系for(...){...for(...){...}...}内循环外循环for(....){...}for(...){...}并列循环嵌套循环交叉循环for(....){...for(...){...}}错误第44页/共60页46/71真真外循环初始条件内循环初始条件内循环体外循环条件假内循环条件假修改内循环条件修改外循环条件循环结束二重循环嵌套结构执行流程第45页/共60页47例5-13:输出图形:****************编程分析:采用双重循环,一行一行输出。每一行输出步骤:一般3步。1)输出空格例如本题:共4行,若行号用k表示,则每一行有4-k个空格。3)每输完一行光标换行(\n)2)输出“*”:2*k-1个*第46页/共60页48#include<stdio.h>main(){inti,j;for(i=1;i<=4;i++){ for(j=1;j<=4-i;j++) printf(“

”); for(j=1;j<=2*i-1;j++) printf(“*”); printf(“\n”);}}第47页/共60页49/715.6复合结构程序设计举例【例】求#include"stdio.h"voidmain(){floats=0,f1=2,f2=1,f=1,t,n;/*累加器赋初值*/

for(n=1;n<=10;n++){s=s+f*f1/f2;/*累加器当前值=累加器原来的值+新的要加的数据*/

f=f*(-1);t=f2;f2=f1;f1=f1+t;/*为求下一个要加的数据做准备*/}printf("s=%f\n",s);}第48页/共60页50/71#include<stdio.h>#include<math.h>main(){ints=1;floatn=1.0,t=1.0,pi=0;while(fabs(t)>=1e-6){pi=pi+t;n=n+2;s=-s;t=s/n;}pi=pi*4;printf("pi=%10.6f\n",pi);}第49页/共60页51/71例译密码ABCDEFGHIJKLMNOPQRSTUVWXYZ例如Hello,world!译成密码:Lipps,asvph!第50页/共60页52/71#include<stdio.h>main(){charc;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);}}第51页/共60页53/71【例】输入任意一个整数,将其逆序输出,例如输入1234,输出4321。#include<stdio.h>voidmain(){ longy,n; scanf("%ld",&y) while(y!=0) {n=y%10; printf("%ld",n); y=y/10;}}第52页/共60页54/711、写出程序运行结果:voidmain(){ inti,j,x=0; for(i=0;i<2;i++) {x++;for(j=0;j<=3;j++) {if(j%2)continue;x++;}x++;}printf(“x=%d\n”,x);}运行结果:x=8练习第53页/共60页55voidmain(){intx=1,y=0,a=0,b=0;switch(x){case1:switch(y){case0:a++;break;case1:b++;break;}case2:a++;b++;break;case3:a++;b++;}printf(“a=%d,b

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论