while循环语句分析_第1页
while循环语句分析_第2页
while循环语句分析_第3页
while循环语句分析_第4页
while循环语句分析_第5页
已阅读5页,还剩66页未读 继续免费阅读

下载本文档

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

文档简介

第4章循环结构C

语言程序设计教程While语句循环控制结构引入、概述while语句的一般格式While语句的执行过程While语句的应用break和continue

语句goto语句(自学)学习内容假设一张报纸厚0.1毫米,将报纸从中间对折,报纸会有多厚?#include<stdio.h>voidmain(){floatt=0.0001;/*t表示报纸的厚度*/t=t*2;printf(“%f\n”,t);}循环结构的引入循环结构的引入假设一张报纸厚0.1毫米,将报纸从中间对折,报纸会有多厚?#include<stdio.h>voidmain(){floatt=0.0001;t=t*2;printf(“%f”,t);}0.0002循环结构的引入假设一张报纸厚0.1毫米,将报纸从中间对折3次后,报纸会有多厚?#include<stdio.h>voidmain(){floatt=0.0001;t=t*2;t=t*2;t=t*2;printf(“%f”,t);}循环结构的引入假设一张报纸厚0.1毫米,将报纸从中间对折3次后,报纸会有多厚?2023/2/4#include<stdio.h>voidmain(){floatt=0.0001;

t=t*2;t=t*2;t=t*2;printf(“%f”,t);}循环结构的引入假设一张报纸厚0.1毫米,将报纸从中间对折10次后,报纸会有多厚?计算机对同样的操作可以用循环结构完成.循环结构可以使我们只写很少的语句,而让计算机反复执行,从而完成大量类同的操作。循环结构概述循环结构是结构化程序三种基本结构之一C语言提供了三种循环控制语句,构成了三种基本的循环结构:while语句构成的循环结构do-while语句构成的循环结构for语句构成的循环结构

while循环控制while循环控制结构一般格式while(表达式)

循环体语句

一般为关系表达式或逻辑表达式,也可以是C语言其他类型的合法表达式用来控制循环体是否执行称为循环体语句,可以是基本语句、也可以是复合语句.是循环重复执行的部分

while语句While语句的一般格式while(表达式)

循环体语句

执行过程是:(1)先计算while后面的表达式的值,如果其值为“真”则执行循环体。(2)执行完循环体后,再次计算while后面的表达式的值,如果其值为“真”则继续执行循环体,如果表达式的值为“假”,退出此循环结构。非0

0表达式语句注意:为了保证循环正常运行,

应该特别注意:循环控制变量的初始化

(循环的初始值)循环条件(状态)的检查

(确认是否进行循环)循环控制变量值的修改

(使循环趋于结束)

while循环控制结构假设一张报纸厚0.1毫米,将报纸从中间对折10次后,报纸会有多厚?#include<stdio.h>voidmain(){floatt=0.0001;}while循环控制结构假设一张报纸厚0.1毫米,将报纸从中间对折10次后,报纸会有多厚?2023/2/4#include<stdio.h>voidmain(){floatt=0.0001;

intn=0;}while循环控制结构假设一张报纸厚0.1毫米,将报纸从中间对折10次后,报纸会有多厚?#include<stdio.h>voidmain(){floatt=0.0001;intn=0;

while(n<10)

}while循环控制结构假设一张报纸厚0.1毫米,将报纸从中间对折10次后,报纸会有多厚?#include<stdio.h>voidmain(){floatt=0.0001;intn=0;while(n<10)

t=t*2;n++;

}while循环控制结构假设一张报纸厚0.1毫米,将报纸从中间对折10次后,报纸会有多厚?#include<stdio.h>voidmain(){floatt=0.0001;

intn=0;

while(n<10){t=t*2;n++;}

}while循环控制结构假设一张报纸厚0.1毫米,将报纸从中间对折10次后,报纸会有多厚?#include<stdio.h>voidmain(){floatt=0.0001;

intn=0;

while(n<10){t=t*2;n++;}printf(“%f\n”,t);}0.1024循环控制变量必须有正确的初值循环判断条件循环控制变量值的修改while循环控制结构假设一张报纸厚0.1毫米,将报纸从中间对折多少次后,报纸高度会超过珠穆朗玛峰?

while循环控制结构假设一张报纸厚0.1毫米,将报纸从中间对折多少次后,报纸高度会超过珠穆朗玛峰?#include<stdio.h>voidmain(){

floatt=0.0001;intn=0;

}while循环控制结构假设一张报纸厚0.1毫米,将报纸从中间对折多少次后,报纸高度会超过珠穆朗玛峰?#include<stdio.h>voidmain(){

floatt=0.0001;

intn=0;

while(t<=8844)}while循环控制结构假设一张报纸厚0.1毫米,将报纸从中间对折多少次后,报纸高度会超过珠穆朗玛峰?#include<stdio.h>voidmain(){floatt=0.0001;

intn=0;

while(t<=8844){t=t*2;n++;}

}while循环控制结构假设一张报纸厚0.1毫米,将报纸从中间对折多少次后,报纸高度会超过珠穆朗玛峰?#include<stdio.h>voidmain(){

floatt=0.0001;intn=0;

while(t<=8844){t=t*2;n++;}printf(“%d\n”,n);}while循环控制结构假设一张报纸厚0.1毫米,将报纸从中间对折多少次后,报纸高度会超过珠穆朗玛峰?#include<stdio.h>voidmain(){

floatt=0.0001;

intn=0;

while(t<=8844){t=t*2;n++;}printf(“%3d\n”,n);}循环控制变量必须有正确的初值循环判断条件循环控制变量值的修改课堂练习#include<stdio.h>voidmain(){inta=5;while(--a)printf(“%5d\n”,a-=3);}

问:程序的输出结果是______.1课堂练习#include<stdio.h>voidmain(){inta=5;while(a--)printf(“%5d\n”,a-=3);}

问:程序的输出结果是______.?程序陷入死循环状态课堂练习#include<stdio.h>voidmain(){inta=5;while(--a);printf(“%5d\n”,a-=3);}

问:程序的输出结果是______.?-32023/2/427do-while语句语句一般格式do语句

while(表达式);

功能:先执行内嵌语句(循环体),之后计算表达式的值,不为0(逻辑真)时,再执行循环体并判断条件,直到表达式的值为0结束循环,转去执行while下面的语句。2023/2/428

do-while循环的算法(2)直到型循环(do~while语句)do语句while(表达式);特点:先执行后判断,循环体至少执行一次。适用于循环体至少执行一次,且总次数不确定的情况。零非零表达式?语句(循环体)零非零表达式?语句(循环体)至少执行一次2023/2/429说明:while和do-while都能实现循环控制,while结构程序通常都可以转换成do-while结构区别:do-while语句先执行循环体再判断条件,循环体至少执行一次;while语句先判断条件再执行循环体,循环体有可能一次也不执行do—while循环体中一定要有能使表达式值趋于0的操作(如i++),否则会出现死循环。

2023/2/430举例while和do-while循环的比较。#include<stdio.h>voidmain(){inti,sum=0;scanf(“%d”,&i);while(i<=100)

{

sum=sum+i;i++;

}printf(“sum=%d\n”,sum);}#include<stdio.h>voidmain(){inti,sum=0;scanf(“%d”,&i);do

{

sum=sum+i;i++;

}while(i<=100);printf(“sum=%d\n”,sum);}输入:1输入:101sum=5050输出:sum=5050sum=0输出:sum=101此程序的功能?什么情况下两者结果相同?二、do-while语句2023/2/4315.3for语句语句一般格式for(表达式1;表达式2;表达式3)语句功能:计算表达式1的值,再判断表达式2,如果其值为非0(逻辑真),则执行内嵌语句(循环体),并计算表达式3;之后再去判断表达式2,一直到其值为0时结束循环,执行后续语句。循环初始条件循环控制条件循环体2023/2/432for语句的算法N-S结构图for(表达式1;表达式2;表达式3)语句NY流程图计算表达式1语句计算表达式3表达式2为真?例如:main(){inti,sum;sum=0;

for(i=1;i<=100;i++)sum=sum+i;

printf("sum=%d\n",sum);}可部分或全部省略,但“;”不可省略2023/2/433省略for语句的表达式⑴表达式1、2、3全省略,即:for(;;)

就等同于:while(1),会无限循环(死循环)注意:在省略某个表达式时,应在适当位置进行循环控制的必要操作,以保证循环的正确执行⑵省略表达式1和表达式3,即:for(;表达式2;)

就等同于:while(

表达式2)⑶省略表达式2,即:

for(表达式1;;表达式3)

就等同于:表达式1;while(1){…表达式3;}2023/2/434例如:⑴i=1;for(;i<=100;i++)sum+=i;⑵for(i=1;;i++){…if(i>100)……}⑶for(i=1;i<=100;){…i++;…}⑷i=1;for(;;){…if(i>100)…

i++;…}2023/2/435说明:所有用while

语句实现的循环都可以用for

语句实现。

等价于:for(表达式1;表达式2;表达式3)

语句;表达式1;while(表达式2){

语句;

表达式3;

}2023/2/436for语句的简单应用【例5.4】求n!,即计算p=1×2×3×…×n的值。

思路:求阶乘与求累加的运算处理过程类似,只要将“+”变为“*”。设置:乘数i

,初值为1,终值为n(n是循环控制终值,需要从键盘输入)累乘器p

,每次循环令p=p*i2023/2/437程序:main(){inti,n;longp;

p=1;

printf("Entern:");scanf("%d",&n);for(i=1;i<=n;i++)

p=p

*

i;printf("p=%ld\n",p);}思考:如何输出1!,2!,…,n!?如何求s=1!+2!+…+n!?2023/2/438几种循环语句的比较while和do-while语句的表达式只有一个,for语句有三个。while和for先判断循环条件后执行循环体,do-while语句先执行循环体后判断循环条件。while语句多用于循环次数不定的情况do-while语句多用于至少要运行一次的情况for语句多用于要赋初值或循环次数固定的情况2023/2/439循环结构中的跳转语句有如下三种语句实现跳转:continue语句break语句goto语句在循环语句的循环体中使用,可以进行循环的流程控制2023/2/440后续语句…continue;

…YN表达式?后续语句…continue;…表达式?YNcontinue语句及应用功能:中断循环体的本次执行(即跳过循环体中尚未执行的语句),立即开始执行下一次循环。while语句do-while语句后续语句计算表达式3计算表达式1…continue;…表达式2?YNfor语句2023/2/441例如:⑴intx,n=0,s=0;while(n<10){scanf("%d",&x);

if(x<0)continue;

s+=x;n++;};

⑵intx,n=0,s=0;do{scanf("%d",&x);

if(x<0)continue;

s+=x;n++;}while(n<10);

⑶for(n=0,s=0;n<10;n++){scanf("%d",&x);

if(x<0)continue;

s+=x;}2023/2/442应用举例把100~200之间能被7整除的数,以十个数为一行的形式输出,最后输出一共有多少个这样的数。

for(n=100;n<=200;n++)n能被7整除

TF终止本次循环输出n

输出10个数

TF

换行2023/2/443算法和程序main(){intn,j=0;for(n=100;n<=200;n++){if(n%7!=0)continue; printf("%6d",n);

j++;

if(j%10==0)printf("\n");

}printf("\nj=%d\n",j);}运行jc5_72023/2/444后续语句…break;…YN表达式?后续语句…break;…表达式?YN循环中break的应用功能:利用break语句能够强迫终止本层循环,转到后续语句执行。while语句do-while语句后续语句计算表达式3计算表达式1…break;…表达式2?YNfor语句2023/2/445例如:⑴intx,n=0,s=0;while(n<10){scanf("%d",&x);

if(x<0)break;s+=x;n++;};⑵intx,n=0,s=0;do{scanf("%d",&x);

if(x<0)break;s+=x;n++;}while(n<10);⑶for(n=0,s=0;n<10;n++){scanf("%d",&x);

if(x<0)break;s+=x;}2023/2/446用goto语句实现循环有兴趣的同学自学不提倡使用goto语句注意:goto语句能实现程序无条件转移,为编程提供了便利。但是无限制地使用,会破坏程序的结构化程度。因此应限制使用。2023/2/447循环的嵌套如果循环语句的循环体内又包含了另一条循环语句,则称为循环的嵌套例如:

#include<stdio.h>main(){inti,j;

for(i=1;i<10;i++)for(j=1;j<=i;j++)printf("%4d",i*j);

}运行jc5_a外循环语句内循环语句2023/2/449注意:while、do-while、for循环语句可以并列,也可以相互嵌套,但要层次清楚,不能出现交叉。多重循环程序执行时,外层循环每执行一次,内层循环都需要循环执行多次。例如:for(a=1;a<=10;a++){for(b=0;b<=5;b++)

……}外循环执行了10次,内循环执行6次循环正常结束时,内循环执行了10×6=60次例4.4:输入一行字符,分别统计其中字母、空格、数字和其他字符的个数。(ctrl+z结束输入)#include”stdio.h”elseif(c==‘‘)main()s++;{charc;intk=0,s=0,d=0,o=0;elseif(c>=‘0’&&c<=‘9’)printf(“inputstring:\n”);d++;while((c=getchar())!=EOF)elseo++;}{if(c>=‘a’&&c<=‘z’||printf(“%d%d%d%d”,

c>=‘A’&&c<=‘Z’)k,s,d,o);k++;}while语句-实例例4.6:求数列2/1,3/2,5/3,8/5,13/8,21/13,…….前20项的和.

main() {inti=1,t;floata=2,b=1,sum=0;do{sum=sum+a/b;t=a;a=a+b;b=t;i++;}while(i<=20);printf(“sum=%10.6f”,sum);}do-while语句实例例:判断正整数m是否素数。

分析:素数的定义可以表达为----若m为素数,当且仅当它能分解为1和m的乘积。则可以得出判断m是否为素数的一种方法:让m被2到sqrt(m)除,若m能被2~sqrt(m)

之中的任何一个整数整除,则m不为素数;否则m为素数。程序如下:for语句-实例#include”math.h”/*判断正整数m是否素数*/

main(){inti,m,k;printf(“请输入正整数m:”);scanf(“%d”,&m);k=sqrt(m);for(i=2;i<=k;i++)if(m%i==0){printf(“%d不是素数”,m);break;}if(i>=k+1)printf(“%d是素数”,m);}例:求水仙花数。如果一个三位数的个位数、十位数、和百位数的立方和等于该数自身,则称该数为水仙花数。分析:一个三位数

个、十、百位数

循环结构(for语句)------定义变量i------定义变量a、b、ci==a*a*a+b*b*b+c*c*ci=100;i<=999;i++a=?b=?c=?结构嵌套的练习main()

lianxi1.c{intk,s,j;for(k=2;k<6;k++,k++){s=1;for(j=k;j<6;j++)s+=j;}printf(“%d\n”,s);}

问:程序的输出结果是______.10结构嵌套的练习2、main(){intk=5,n=0;while(k>0){switch(k){default:break;case1:n+=k;case2:case3:n+=k;}k--;}printf(“%d\n”,n);}问:程序的输出结果是______.73、main(){inta=1,b;for(b=1;b<=10;b++){if(a>=8)break;if(a%2==1){a+=5;continue;}a-=3;}printf(“%d\n”,b);}

问:程序的输出结果是______.结构嵌套的练习4例4.9:打印出以下图形。

************************

*

程序如下:循环结构(for语句)

main(){inti,j,k;for(i=1;i<=4;i++)/*上三角(1-4行)的打印*/{for(j=1;j<=4-i;j++)printf(“”);for(k=1;k<=2*i-1;k++)printf(“*”);printf(“\n”);}循环结构(for语句)

****************

for(i=1;i<=3;i++)/*下三角的打印*/{for(j=1;j<=i;j++)printf(“”);for(k=1;k<=7-2*i;k++)printf(“*”);printf(“\n”);}}循环结构(for语句)

********

*

上机中的一些问题1、循环的嵌套。例:main(){inta,b,s=0;for(a=1;a<=5;a++)for(b=1;b<=4;b++)s=a+b;printf(“s=%4d\n”,s);}

s=s+b;{s=0;s=s+b;}程序的结果为什么?上机中的一些问题2、按一定格式输出某种图形或结果。例:打印九九乘法表关键的问题是:学会分析数据间的联系和规律,采用适当的控制结构,及输出格式(%4d,\t,\n)的正确使用。程序如下:#include“stdio.h”main(){inti,j;clrscr();printf(“*”);for(i=1;i<=9;i++)printf(“%4d”,i);printf(“\n”);for(i=1;i<=9;i++){printf(“%4d”,i);for(j=1;j<=i;j++)printf(“%4d”,i*j);printf(“\n”);}}S3-4.c#include“stdio.h”main(){int

温馨提示

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

评论

0/150

提交评论