当前位置:文档之家› 第5章循环结构

第5章循环结构

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); }
2
5.1 while语句
While语句的一般格式: 流程图: while(表达式) { 循环体 } 表达式 功能:先判断表达式的值的真假,若 为真(非零)时,就执行循环体的语句 真 系列,否则退出循环结构。 说明:所谓循环是指使用一定条件对 同一个程序段重复执行若干次。被重 复执行的部分(可能由若干语句组成) 称为循环体。
5.2 do-while语句
do-while语句的一般格式是: do { 循环体 } while (<表达式>); 功能: 先执行一次循环体,再判断表
循环体

表达式 假
达式的真假。若表达式为真(非0)则
继续执行循环体,一直到表达式为 假(0)时退出循环结构。
12
5.2 do-while语句
和while语句不同的是:while语句先判断<表 达式>是否成立,然后再执行循环体。而dowhile语句是先执行循环体一次,然后再去判 断<表达式>是否成立。 注意:while后面的分号(;)不能少。
# 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",number); # include "stdio.h" main() { int number=0; while(number++<=1) printf("*%d\n",number); printf("**%d\n",number); }
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 则就找到了一组解。 }
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); } }
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是数值表达式。
循环体

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
4
5.1 while语句
需要注意的是: ⑴循环体如果包含一个以上的语句,应该用 花括号括起来,以复合语句的形式出现。如 果不用花括号,则while语句的范围只到while 后面第一个分号处。例如本例中while语句若 无花括号,则while语句范围只到“sum+=i;” 。
⑵在循环体中应该有使循环趋向于结束的语 句。io.h> main( ) 先判后做 { int k,s; s=0;k=1; while(k<=100) { s=s+k; k++; } printf(“s=%d",s); }
运行结果如下: 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语句
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); } ⑶ 输出计数结果。
第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
20
例1 用for语句计算
相关主题