第5章循环结构

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2
5.1 while语句
While语句的一般格式: 流程图: while(表达式) { 循环体 } 表达式 功能:先判断表达式的值的真假,若 为真(非零)时,就执行循环体的语句 真 系列,否则退出循环结构。 说明:所谓循环是指使用一定条件对 同一个程序段重复执行若干次。被重 复执行的部分(可能由若干语句组成) 称为循环体。
第5章 循环结构
5.1 while语句 5.2 do-while语句
5.3 for语句
5.4 三种循环语句的比较 5.5 循环的嵌套 5.5 break语句和continue语句 5.7 综合实例
1
第5章 循环结构
循环结构又称重复结构,可以完成重复 性、规律性的操作。 如求若干数的和、迭代求根等等。 C语言共有三种类型的循环语句: – while – do-while – for
14
【例5.8】while和do-while循环的比较。 ⑴ main() (2) main() {int sum=0,i; {int sum=0,i; scanf("%d",&i); scanf("%d",&i); while(i<=10) do { { sum=sum+i; sum=sum+i; i++; i++; } }while(i<=10); printf("sum=%d\n",sum); printf("sum=%d\n",sum); } }
循环体语句
最简单的应 for(循环变量赋初值;循环条件;循环变量增值;) 用形式: 循环体语句
例如:
for(i=1;i<=100;i++) sum+=i;
18
for循环的说明: 1. 表达式1省略时,应在for前给循环变量赋初值。 如:k=1; for( ;k<=3;k++)s=s+k; 2. 表达式2省略时,不判断循环条件,将成为 “死循环”,需要在循环体中引入break语句 以退出循环 3. 表达式3省略时,循环体内应有使循环条件改 变的语句。 如:for(k=1;k<=3;) { s=s+k; k++; }
5.2 do-while语句
do-while语句的一般格式是: do { 循环体 } while (<表达式>); 功能: 先执行一次循环体,再判断表
循环体

表达式 假
达式的真假。若表达式为真(非0)则
继续执行循环体,一直到表达式为 假(0)时退出循环结构。
12
5.2 do-while语句
和while语句不同的是:while语句先判断<表 达式>是否成立,然后再执行循环体。而dowhile语句是先执行循环体一次,然后再去判 断<表达式>是否成立。 注意:while后面的分号(;)不能少。
其执行过程如下: ①首先计算<表达式1>。
②求<表达式2>的值,若其值为 非零,执行<语句>,然后转③执 行,若<表达式2>的值为零,则 结束for语句。
③求解<表达式3>,转②执行。 注意: for循环的三个表达式可以 是C语言中任何有效的表达式。
17
5.3 for 语句
一般形式:for(表达式1;表达式2;表达式3;)
5.1 while语句
# include "stdio.h" #【例5.4】输入一正文,统计正文包含的行数,字数和字符数。 define IN 1 # define OUT 0 分析:正文的一行是以'\n'为结束标志的一串字符,一个 /*count lines,words and characters in input*/ void main(void) 字是以' '为结束标志的一串字符。而字符数则是对每个输入 { 的字符(不包含EOF)进行计数 . int c,nl,nw,nc,state; state=OUT; 算法: nl=nw=nc=0; ⑴将标志state置初值0,表示字符不在字中;各计数器变量均 printf("input a text end of ctrl+z:\n"); 置初值为0。 while((c=getchar())!=EOF) { ⑵ 读一个字符c,如果c不是EOF,则 ++nc; ⑵-1 字符数加1。 if(c=='\n') ++nl; if(c==' ⑵-2 若c是'\n'则行数加1。 '|| c=='\n'|| c=='\t') state=OUT; ⑵-3 如果c是空格字符‘ ’、换行字符‘\n‟ 或制表字符‘ else if (state==OUT) 将标志置为0,表示c字符不在字中;否则(c为非空白符),如 { 果标志为0(表示c是字的第一个字符)则将字数加1,并修改标 state=IN; ++nw; 志为1(表示当前字符c是一个字中的字符)。 }/*end⑵-4 转步骤⑵循环. of else-if*/ }/*end of while*/ 如果c是EOF,则循环结束,转步骤⑶ 10 printf("lines=%d words=%d characters=%d\n",nl,nw,nc); } ⑶ 输出计数结果。
运行结果如下: 1 sum=55 再运行一次: 11 sum=0
运行结果如下: 1 sum=55 再运行一次: 11 sum=11
15
5.3 for语句
一、for语句的一般形式: for(<表达式1>;<表达式2>;<表达式3>) <语句>
注意:三个表达式之间必须用分号;隔开。
16
5.3 for语句
20
例1 用for语句计算
S k
k 1
100
#include <stdio.h> main( ) { int k,s; s=0;
for(k=1;k<=100;k++) s=s+k; printf(“s=%d",s); }
#include <stdio.h> main( ) { int k,s; s=0;k=1; 先做后判 do { s= s+k; k++; }while(k<=100); printf(“s=%d",s); }
13
5.2 do-while语句
【例5.7】用do-while语句实现【例5.1】。 # include "stdio.h" void main() { int i,sum=0; i=1; do { sum=sum+i; i++; } while(i<=100); printf("%d\n",sum); }
循环体

3
5.1 while语句
【例5.1】编程实现1+2+3+…+100。
# include "stdio.h" 用传统流程图(图5.2)和N-S结构流图(图5.3)表示算法。 main() { int i,sum=0; i=1 i=1; 当i<=100 while(i<=100) { sum=sum+i sum+=i; i=i+1 i++; } 图5.3 printf("%d\n",sum); } 图5.2
# include "stdio.h" main() { int number=0; while(number++<=1) printf("*%d\n",number); 运行结果为: *1 *2 **3
printf("**%d\n",number);
}
7
5.1 while语句
# include "stdio.h" main() { int number=0; while(number<=1) { number++; printf("%d\n",numBaidu Nhomakorabeaer); # include "stdio.h" main() { int number=0; while(number++<=1) printf("*%d\n",number); printf("**%d\n",number); }
4
5.1 while语句
需要注意的是: ⑴循环体如果包含一个以上的语句,应该用 花括号括起来,以复合语句的形式出现。如 果不用花括号,则while语句的范围只到while 后面第一个分号处。例如本例中while语句若 无花括号,则while语句范围只到“sum+=i;” 。
⑵在循环体中应该有使循环趋向于结束的语 句。如无此语句,循环将永不结束。
}
} 运行结果为: 1 2
运行结果为: *1 *2 **3
8
# include "stdio.h" void main() { char c; 【例5.4】 输入一行字符,按字母、数字和其它分成三类, int alpha,digit,other; 分别统计各类字符的数目(换行符'\n'不在统计范围内)。 alpha=digit=other=0; 字母的条件: c>='a'&&c<= 'z'|| c>= 'A'&&c<= 'Z'成立, printf("input characters end of newline:\n"); 则c为一个字符。 while(c=getchar()!='\n') 数字的条件: c>=„0‟&&c<= „9‟成立,则c为一个数字。 if (c>='a'&&c<= 'z'|| c>= 'A'&&c<= 'Z') alpha++; 算法: else if (c>='0'&&c<= '9') ⑴ 将各计数器变量置初值为0。 digit++; ⑵ 提示用户输入一行字符。 else ⑶ 读入一个字符。 other++; ⑷ 检查c是否为换行符‘\n‟,如果不是,则检查c符合哪种字 printf("alpha=%d\ndigit=%d\nother= 符条件,并将相应计数器变量的值加1,然后转步骤⑶(循 %d\n", alpha,digit,other); 环);如果c是'\n'字符,则结束循环,转步骤⑸。 9 } ⑸ 输出计数结果。
main() 【例5.6】搬砖问题。(36块砖,36人搬;男搬4,女搬3,两 对于men: {个小孩抬一砖。要求一次全搬完,问男、女、小孩各若干) men=0; int men=0,women,children; 设计搬砖问题的程序。 while(men<=8) while(men<=8) 分析:男人(men)的可能取值范围为:0-8; {找满足题意的women,children; { 女人(women)的可能取值范围为:0-11; men++; women=0; 小儿(children)的可能取值范围为:0-36; }while(women<=11) 下面再进一步细化,找每一个women下的children: { children=36-women-men; men=0; if(4.0men+3.0*women+children/2==36) while(men<=8) { {women=0; printf("\nmen is %d",men); while(women<=11) printf("\twomen is %d",women); {找满足题意的children; women++;} printf("\tchildren is %d\n",children); men++; } 当men与women已知后 } women++; children=36-women-men } 若这一children满足条件: men++; 4*men+3*women+children/2=36 } 11 则就找到了一组解。 }
5
5.1 while语句
【例5.2】看一个简单的印数程序。
# include "stdio.h"
main() {
int number=0;
while(number<=1) { number++;
运行结果为: 1 2
printf("%d\n",number); } }
6
5.1 while语句
【例5.3】 第二个印数程序。
19
4. 同时省略表达式1和表达式3,只有表达式2,此时相当 于while语句。如 k=1; for(;k<=100;) { s=s+k; k++; } 5. 表达式2一般是关系表达式或逻辑表达式,但也可 以是数值表达式或字符表达式,只要其值不等于0就 执行循环体。 如: for(k=1;k-4;k++)s=s+k; 仅当k的值等于4时终止循环。k-4是数值表达式。
#include <stdio.h> main( ) 先判后做 { int k,s; s=0;k=1; while(k<=100) { s=s+k; k++; } printf(“s=%d",s); }
相关文档
最新文档