C语言 5(5.1-5.5) 循环结构程序设计

  • 格式:ppt
  • 大小:505.00 KB
  • 文档页数:33

下载文档原格式

  / 33
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3
资料仅供参考
例 (ch5_01.c)求1+2+3+4+5+···+100。
#include <stdio.h>
main()
循环条件
{ int i,sum=0;
循环初值
i=1;
while(i<=100)
循环变量增值
{ sum=sum+i; i++;
循环终值
}
printf("%d",sum);
}
循环体
如:i=1; sum=0;
i=1;sum=0;
for (;i<=100;)
while (i<=100)
{ sum=sum+i;
{ sum=sum+i;
i++;
i++;
17
}
}
资料仅供参考
(5)三个表达式都可省略,
如:
for ( ; ; ) 循环体;
相当于
while (1) 循环体;
即不设初值,不判断条件,循环变量不增值。无 终止地执行循环体。
如: for(sum=0,i=1;;i++)
{ if(i>100) break; sum=sum+i;
16
}
(3)表达式3也可以资料仅供省参考 略,但此时保证循环能 正常结束。
如:for(sum=0,i=1;i<=100;)
{ sum=sum+i;
i++;
}
(4) 可以省略表达式1和表达式3,只有表达 式2。
i++; goto loop;
loop: sum=sum+i; i++; if(i<101) goto loop;
}
printf(“SUM = %f\n”,sum);
}
27
资料仅供参考
5.5 break语句和continue语句
break语句
一般形式: break; 功能:
– 跳出所在的多分支switch语句 – 跳出所在的while、do-while、for循环语句
}
}
#include<<ssttddioio.h.h>> main() { cinhtari,cc;;
ffoorr((i;=(0c;=(gc=egtcehtcahr(a))r!(=))'!\n=';\n) ';i+=3) prpirnitnft(f"(%"%c c","c,)i;+c);
}
21
例(ch5_05.c) 求fib资o料仅供n参考acci数列的前20项。
22
资料仅供参考
main()
{ int i,a,b,k=0;
a=b=1;
for(i=1;i<=10;i++)
{ printf("%10d%10d",a,b);
a=a+b;
b=a+b;
k+=2;
if(k%4==0) printf("\n");
Hale Waihona Puke Baidu
} }
1
1
2
3
5
8
13
21
34
55
89 144
23
233
377 610 987
6即为24和42的最大公约数。
6
资料仅供参考
例 (ch5_03.c)求2个整数的最大公约数
#include <stdio.h> main() { int a,b,t;
scanf(“%d,%d”,&a,&b); while(b<=10)
{ t=a%b; a=b;
运行过程: tab =========
4
思考:求10!
资料仅供参考
例 (ch5_02.c)显示1~10的平方
#include <stdio.h> main() { int i=1;
while(i<=10) {
printf("%d*%d=%d\n",i,i,i*i);
i++; } }
运行结果: 1*1=1 2*2=4 3*3=9 4*4=16 5*5=25 6*6=36 7*7=49 8*8=64 9*9=81
while (i<=100) while(表达式2)
{ sum=sum+i; { 语句;
i++;
表达式3;
}
}
15
资料仅供参考
3、for语句中表达式的省略
(1)for语句一般形式中的“表达式1”可以 省略;
如: sum=0;i=1;
for ( ; i<=100;i++)
sum=sum+i;
(2)表达式2省略,即不判断循环条件,循 环无终止地进行下去;
资料仅供参考
[例5-4] 求1+2+3+……,直到和大于1000为止
#include “stdio.h” main() { int s,i;
i=1; s=0; do
{ s+=I; i++;
}
while (s<=1000);
printf(“s=%d\n”,s); }
12
资料仅供参考
1、C语言中最灵活、最 复杂的循环语句;
2、有标号的语句称为标号语句; 形式: 标号:语句;
3、 goto语句在使用时只能转移到goto所在 的函数内的标号处,不能转移到该函数外;
4、 可以从多重循环的内层转移到最外层,而 break只能跳出一层循环。
26
资料仅供参考
main()
{ int i=1,sum=0;
loop: if (i<101) { sum=sum +i;
解法二:
资料仅供参考
分析: 1 1 2 3 5 8 13‥
a+ bc a+ b c a + b c
a + b c ………… 程序:main()
{ int i,a,b;
a=b=1;
printf("%10d%10d",a,b);
for(i=3;i<=20;i++)
{c=a+b; printf("%10d",c);}
(提前结束循环)。
continue语句
一般形式: continue; 功能:
– 提前结束本次循环体的执行,接着进行下一次 循环条件的判别。
28
资料仅供参考
break语句
main() { int i;
for(i=1;i<=5;i++)
main() { int i;
for(i=1;i<=5;i++)
特点i=:1;先执行,后判断。 说明d{ :osum+=i;
– 至少i+执+行; 一次循环体 – d}ow~hwilhei(lie<可=1转00化); 成while结构
printf("%d",sum); }
例(ch5_03.c)用do~while求 1+2+3+4+5+···+100。
10
资料仅供参考
i++;
putchar(‘*’); i++; { putchar(‘*’);
i++; }
8
资料仅供参考
5.2 do--while语句
1、do--while语句 常称为“直到型” 循环语句。
循环体
非零
表达式 零
9
2、do--while的形资式料仅供参:考
#incdluode <stdio.h>
main() 循环体; { winht iil,esu(表m=达0;式);
42 24 18 24 18 6 18 6 060
b=t;
}
printf(“最大公约数:%d\n",a);
7}
资料仅供参考
注:
1. 循环体如果包含一个以上的语句,应该 用花括号括起来,以复合语句形式出现。
2. 循环体中应有使循环趋于结束的语句。 例:分析下列三个程序段
i=1;
i=1;
i=1;
putchar(‘*’); while(i<=100); while(i<=100)
输入abcdefg.输出abcdefg.
while(putchar(getchar( ) )!=’.’ ) ;
19
资料仅供参考
例:#include<stdio.h> main( ) { int i;=0; for(i;=i<01;i0<;1i+0+;i)++) putchar(‘a’+i); }
例运:行#结inc果lu:dea<bstcddioe.fhg>hij
10*10=100
5
资料仅供参考
例 (ch5_03.c)求2个整数的最大公约数
思考:24和42的最大公约数=? 公式:gcd(a,b)=gcd(b,a%b)
则 gcd(42,24) =gcd(24,42%24)=gcd(24,18) =gcd(18,24%18)=gcd(18,6) =gcd( 6, 18%6 )=gcd(6,0)
{ printf("\n%5d", { printf("\n%5d",i
i); 1 1
);
prin2 tf(2"%5d",i);
if(i==1 3) 1break;
} }
29
33 44 55
22 3
printf("\n%d",i); 当} i=3时,结束循环
资料仅供参考
continue语句
main()
如: sum=0,i=1;
for(;;)
{ if(i>100) break;
sum=sum+i; i++;
}
18
(6)循环体为空语资料句仅供参考 对for语句,循环体为空语句的一般形式为: for (表达式1;表达式2;表达式3) ;
如:for(sum=0,i=1;i<=100;sum+=i, i++) ; 又如: 要在显示器上复制输入的字符,输入的字符为‘.’ 时, 结束循环。
main()
{ int i;
{ int i;
for(i=1;i<=5;i++)
for(i=1;i<=5;i++)
{ printf("\n%5d",
i);
1 2
p12rintf("%125d1"2,i);
}3 3
3
44
} 55
44 55
30
{ printf("\n%5d"
,i);
if(i==3) continue;
循环变量 控制
说明:
– for语句中expr1, expr2 ,expr3 类型任意,都 可省略,但分号;不可省
– 无限循环: for(;;) – for语句可以转换成while结构
14
资料仅供参考
sum=0;
for(i=1;i<=100;i++)
sum=sum+i;
它相当于以下语句:
i=1;
表达式1;
可以用于循环次 数确定的情况;
可以用于循环次 数不确定的情况;
可实现while和do-while语句的所有 功能。
13
5.3 for语句
表达式1 零
表达式2 非零
循环体语句 表达式3
资料仅供参考
2、for的形式: for (表达式1;表达式2;表达式3) 循环体
循环变量 赋初值
循环终止 条件
main( ) { int i=0;
for(;i<10;)putchar(‘a’+i),i++) ; putchar(‘a’+(i++));
}
20
main()
资料仅供参考
{ int i,j,k;
for(i=1,j=100;i<=j;i++,j--)
{ k=i+j;
printf("%d+%d=%d\n",i,j,k);
24
}
资料仅供参考
循环终止条件的种类:
1.关系表达式: 如前几例 2.逻辑表达式: for (; a>b && x<y ;) 3.字符表达式:
for (; (c=getchar()) != ‘\n’;) printf(“%c”,c);
25
资料仅供参考
5.4 goto语句
1、 无条件转移语句; 形式:goto 标号; 满足标识符的规定
资料仅供参考
循环结构
循环:就是在给定的条件成立时反复
执行某一程序段,被反复执行的程序
段称为循环体。
在C语言中可以用以下语句来实现循 环:
1、用while语句; 2、用do--while语句; 3、用for语句;
1
资料仅供参考
5.1 while语句
1、while 语句 常称为“当型”循环语句。
表达式 零 非零
(1,1,2,3,5,8, …)
fibonacci数列满足下面递归关系:
F1=1
(n=1)
F2=1
(n=2)
Fn=Fn-1+Fn-2 (n≥3)
分析:
1 1 2 3 5 8 13‥ a+ ba
b+ a b a + b a b + a b ‥‥
a=1,b=1
for i=1 to 10 输出a,b
a=a+b b=b+a
非0
循 非0
语句…
环 体 语句…
非0
e
e 非0
0
语句…
循环体
2
2 、while 语句的形式: 资料仅供参考 while (表达式) 循环体;
特点:先判断表达式,后执行语句。 说明:
–循环体有可能一次也不执行 –循环体可为任意类型语句 –下列情况,退出while循环
• 条件表达式不成立(为零) • 循环体内遇break,return,goto –无限循环: while(1) 循环体;
当i=3时,结束本次
循环pr体in的t执f("行\n%d",i
资料仅供参考
break与continue的区别
break语句 continue语句
for( e1;e2;e3) {…
if(e) break; … }
for( e1;e2;e3) {…
if(e) continue;
计算e1
计算e1
0
e2
0 e2
main () { int i,sum=0;
i=1; while(i<=100) { sum=sum+i;
i++ ; } printf(“%d\n”,sum); }
11
main() { int i,sum=0;
i=1; do { sum=sum+i;
i++; }while(i<=100); printf(“%d\n”,sum); }