第五章:循环结构_第1页
第五章:循环结构_第2页
第五章:循环结构_第3页
第五章:循环结构_第4页
第五章:循环结构_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

第五章循环结构(一)回顾多重if结构就是在主if块的else部分中还包含其他if块嵌套if结构是在主if块中还包含另一个if语句C语言规定,嵌套if结构中每个else部分总是属于前面最近的那个缺少对应的else部分的if语句switch结构也可以用于多分支选择。用于分支条件是整型表达式,而且判断该整型表达式的值是否等于某些值(可以罗列的),然后根据不同的情况,执行不同的操作条件运算符是if–else语句的另一种表现形式目标理解为什么使用循环结构理解循环的两大规则熟练掌握while循环的使用熟练掌握do-while循环的使用理解while和do-while循环的区别循环的必要性Intresult1,result2,result3;intresult4,result5;result1=1*10;printf("1×10=%d\n",result1);result2=2*10;printf("2×10=%d\n",result2);result3=3*10;printf("3×10=%d\n",result3);result4=4*10;printf("4×10=%d\n",result4);result5=5*10;printf("5×10=%d\n",result5);

1×10=102×10=203×10=304×10=405×10=50输出结果重复语句C语言中的各种循环whiledo-whilefor需要多次重复执行一个或多个任务的问题考虑使用循环来解决5.1while语句构成循环while(表达式){

语句;}while循环的一般语法:while(index<100){......

index++;}计算表达式的值,当值为真(非0)时,执行循环体语句,一旦条件为假,就停止执行循环体。如果条件在开始时就为假,那么不执行循环体语句直接退出循环。

工作原理示例规则1:[<初始化>]while(循环条件){<循环体>}循环条件中使用的变量需要经过初始化规则2:while(index<100){......

index++;}while循环主体中的语句必须修改循环条件的值,否则会形成死循环while(1)真1×10=102×10=203×10=304×10=405×10=500+11+12+1上个数字

+1...重复

(上个数字

+1)×10while循环示例1(找出循环规律)#include<stdio.h>voidmain(){intnum=1,result;while(num<=10){result=num*10;printf("%d×10=

%d\n",num,result);num++;}}内存numresult1null102输出:1×10=102×10=203×10=304×10=405×10=506×10=607×10=708×10=809×10=9010×10=10011100循环实现的算法1.累积和算法p51

循环变量i控制数的规律性变化i++

累积和变量sum存储和sum=sum+i*i2.迭代算法

x1x2=cos(x1)0cos(0)cos(0)cos(cos(0))cos(cos(0))x1=x2cos(cos(0))x1=x2习题5.35.125.135.16嵌套while循环

嵌套while循环的语法while(i<=10){...while(i<=j){......}...}外循环内循环只有在内循环完全结束后,外循环才会进行下一趟。问题描述:用“*”打印一个直角三角形图案。图案如下所示:*******************************************************嵌套while循环示例voidmain(){intnstars=1,stars;

while(nstars<=10){ stars=1;

while(stars<=nstars) { printf("*"); stars++; } printf("\n"); nstars++;}}内层循环控制每行打印*号的个数外层循环控制打印的行数输出:*******************************************************5.2do-while循环do{

语句;}while(表达式);while循环的一般语法:do{......

scanf(“%d”,&answer);}while(answer!=-1);它先执行循环体中的语句,然后再判断条件是否为真,如果为真则继续循环;如果为假,则终止循环。

工作原理示例问题描述:猜数游戏。要求猜一个介于1~10之间的数字,根据用户猜测的数与标准值进行对比,并给出提示,以便下次猜测能接近标准值,直到猜中为止。do-while循环示例intnumber=5,guess;printf("猜一个介于1与10之间的数\n");do{printf("请输入您猜测的数:");scanf("%d",&guess);if(guess>number)printf("太大\n");elseif(guess<number)printf("太小\n");}while(guess!=number);printf("您猜中了!答案为%d\n",number);猜一个介于1与10之间的数请输入您猜测的数:3太小请输入您猜测的数:5您猜中了!答案为

5输入数字

5后,do…while循环中的条件为假,

输出结果消息后,程序终止。Dowhile实现Fibonacci数列(迭代的过程) f1f2f=f1+f2010+1=1

111+1=2121+2=3f1=f2f2=ff1=f2f2=f嵌套do-while循环

嵌套

do-while循环的语法do{...do{...}while(...)...}while(...)外循环内循环只有在内循环完全结束后,外循环才会进行下一趟。嵌套do-while循环示例intvalue,r_digit;value=0;do{printf("\n请输入一个数:");scanf("%d",&value);if(value<=0)printf("该数必须为正数\n");}while(value<=0);printf("\n反转后的数为:");do{r_digit=value%10;printf("%d",r_digit);value=value/10;}while(value!=0);printf("\n");通过示例比较intvalue,r_digit;value=0;do{printf("\n请输入一个数:");scanf("%d",&value);if(value<=0)printf("该数必须为正数\n");}while(value<=0);printf("\n反转后的数为:");do{r_digit=value%10;printf("%d",r_digit);value=value/10;}while(value!=0);printf("\n");intvalue,r_digit;value=0;while(value<=0)

{printf("\n请输入一个数:");scanf("%d",&value);if(value<=0)printf("该数必须为正数\n");}printf("\n反转后的数为:");while(value!=0){r_digit=value%10;printf("%d",r_digit);value=value/10;}printf("\n");

该程序用

do-while

循环将数字左右反转同样的程序用

while循环将数字左右反转比较while和do-while循环while(循环条件){循环体;}do{

循环体;}while(循环条件);do-while循环是先执行后判断,所以,即使开始条件为假,循环体也至少会被执行一次。while循环是先判断后执行,所以,如果条件为假,则循环体一次也不会被执行。

比较

while和do-while循环的工作原理总结循环结构的特点是,在给定条件成立时,重复执行某程序段,直到条件不成立为止while循环用于在给定条件为真的情况下重复执行一组操作,while循环先判断后执行do-while循环先执行后判断,因此循环将至少执行一次在循环中,需要修改循环变量的值以改变循环条件,否则有可能形成死循环循环嵌套必须将内层循环完整的包含在外层循环中第五章循环结构(二)回顾循环结构的特点是,在给定条件成立时,重复执行某程序段,直到条件不成立为止while循环用于在给定条件为真的情况下重复执行一组操作,while循环先判断后执行do-while循环先执行后判断,因此循环将至少执行一次在循环中,需要修改循环变量的值以改变循环条件,否则有可能形成死循环循环嵌套必须将内层循环完整的包含在外层循环中目标熟练使用for循环理解break和continue语句的用法熟练使用嵌套循环for(表达式1;表达式2;表达式3){

语句;}

for循环的一般语法:5.3for循环counter=0;inum=1;cnt=100;counter==10;inum<25;cnt>0counter++;inum=inum+1;cnt--分号用于分隔for

循环的三个表达式1、计算表达式1的值,通常为循环变量赋初值;2、计算表达式2的值,即判断循环条件是否为真,若值为真则执行循环体一次,否则跳出循环;3、计算表达式3的值,这里通常写更新循环变量的赋值表达式,然后转回第2步重复执行;工作原理1234for循环示例1#include<stdio.h>voidmain(){intnumber,count,factorial=1;printf("\n请输入任意一个正整数:");scanf("%d",&number);for(count=1;count<=number;count++) factorial=factorial*count;printf("\n%d的阶乘

=%d\n",number,factorial);}请输入任意一个正整数:5内存numbercountfactorial51121206循环执行五次5的阶乘=120逗号运算符for(i=0,j=max;i<=max;i++,j--)printf(“\n%d+%d=%d”,i,j,i+j);for语句中的三个表达式都可以是逗号表达式逗号表达式就是通过“,”运算符隔开的多个表达式组成的表达式逗号表达式从左往右计算。逗号运算符在C语言运算符中的优先级最低for循环示例2#include<stdio.h>voidmain(){ inti,j,max; printf("请输入一个值\n"); printf("根据这个值可以输出以下加法表:"); scanf("%d",&max);

for(i=0,j=max;i<=max;i++,j--)

printf("\n%d+%d=%d",i,j,i+j); printf("\n");}循环执行max次初始化语句只执行一次请输入一个值根据这个值可以输出以下加法表:50+5=51+4=52+3=53+2=54+1=5for循环的表达式for循环中有三个表达式for语句中的各个表达式都可以省略分号分隔符不能省略for(<初始化循环变量>;<循环条件>;<修改循环变量的值>){<循环体语句>;}可省略不能省略省略表达式1intnum=0;for(;num<=10;num++){ printf("%d\n",num*2);}

inta=0,n;printf("\n输入n的值:");scanf("%d",&n);for(;n>0;a++,n--)printf("%d",a*2);

相当于省去了为循环变量赋初值,此时应在for语句之前给循环变量赋初值省略表达式2for(num=1;;num++){...}

即不判断循环条件,也就是认为表达式2始终为真,这时应在循环体内设法结束循环,否则将成为死循环省略表达式3for(i=1;i<=100;)

{sum=sum+1;i++;}

即省去修改循环变量的值,但此时应在循环体内设法更改循环变量的值省略三个表达式for(;;){printf("这将一直进行下去");i=getchar();if(i=='X'||i=='x') break;}

即不为循环变量赋初值,不设置循环条件(认为表达式2为真值),不修改循环变量的值,无终止地执行循环体。此时应在循环体内设法结束循环,否则会成为死循环5.4for循环的嵌套For循环嵌套实现算法:1倒置图形外层循环控制行i,内层循环控制每层的空格k和字符j。2素数的求解外层控制需要判断的数i,内层对每个数进行具体的判断(从2到sprt(i))。5.5break和continuebreak语句强行跳出循环体,循环体中break后面的语句不再执行。在多层循环中,一个break语句只向外跳一层。break语句2-2跳出

for循环for(;;){printf("这将一直进行下去");i=getchar();if(i=='X'||i=='x')

break;}

跳出

while循环X=11while(1){if(x--==10)

break;}

跳出

do-while循环X=11do{if(x--==10)

break;}while(10);问题描述:统计从键盘输入的若干个字符中有效字符的个数,以换行符作为输入结束。有效字符是指第一个空格符前面的字符,若输入字符中没有空格符,则有效字符为除了换行符之外的所有字符。#include<stdio.h>voidmain(){ intcount=0,ch; printf("\n请输入一行字符:"); while((ch=getchar())!='\n') { if(ch=='')

break; count++; } printf("\n共有

%d个有效字符。\n",count);}break语句示例内存chcountH0_

请输入一行字符:Helloworld

共有5个有效字符1循环执行5次5continue语句continue语句的作用是跳过循环体中剩余的语句而执行下一次循环对于while和do-while循环,continue语句执行之后的动作是条件判断;对于for循环,随后的动作是变量更新.continue语句2-2while(…){

…………continue;

…………}while(…){

…………

break;

…………}跳出整个循环继续下一次循环问题描述:求整数1~100的累加值,但要求跳过所有个位为3的数。#include<stdio.h>voidmain(){ inti,sum=0; for(i=1;i<=100;i++) { if(i%10==3)

continue; sum+=i; } printf("sum=%d\n",sum);}continue语句示例内存isumnull0131循环执行到i=1378输出:sum=45701循环执行到i=1011014570问题描述:用“*”输出一个菱形图案,图案如下:

*************************嵌套循环示例1voidmain(){ inti,j,k;

for(i=1;i<=4;i++) {

for(j=1;j<=4-i;j++) printf("");

for(k=1;k<=2*i-1;k++)

printf("*"); printf("\n"); }

for(i=1;i<=3;i++){

for(j=1;j<=i;j++) printf("");

for(k=1;k<=7-2*i;k++) printf("*"); printf("\n");}}

输出:*************************控制打印的行数控制每行打印的空格数控制每行打印的*号数控制打印的行数控制每行打印的空格数控制每行打印的*号数问题描述:打印输出100至200之间的全部素数。分析:素数是指只能被1和它本身整除的数。算法比较简单,先将这个数被2除,如果能整除,且该数又不等于2,则该数不是素数。如果该数不能被2整除,再看则是否能被3整除。如果被3整除,并且该数不等于3,则该数不是素数,否则再判断是否被4整除,依此类推,该数只要是能被小于本身的某个数整除时,就不是素数。

嵌套循环示例2voidmain(){inti,j,n;n=0;

for(i=100;i<=200;i++){j=2;

while(i%j!=0)

j++;

温馨提示

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

评论

0/150

提交评论