C语言程序设计知识点—第5章 循环控制
第5章 C语言 循环控制6

for语句中表达式省略的形式:
3. 省略表达式3
循环不能正常结束。
sum=0; for(i=1;i<=100;) { sum=sum+i; i++; }
sum=0; for(i=1;i<=100;) sum=sum+i;
for语句中表达式省略的形式:
4. 省略表达式1和表达式3
完全等同于while语句。
【例5.14】求Fibonacci数列前40个数。
1 5 34 233 1597 10946 75025 514229 3524578 24157817
1 8 55 377 2584 17711 121393 832040 5702887 39088169
2 13 89 610 4181 28657 196418 1346269 9227465 63245986
如:i++;
while语句多用在循环次数预先难以确定的循 环中。
【例5.3 】输入并输出一个字符串,遇“#”结 束
main() { char c; c = getchar(); while ( c!='#' ) { putchar(c); c=getchar(); } }
5.4 用do-while语句实现循环
第5章 循环控制
5.给定的条件成立时反复执行某一程序段。
特点:
有限次的重复某个操作。
5.1 概述
问题:
输出整数1~10
输出整数1~100 输出整数1~n
printf("%d\n", 1); printf("%d\n", 2); …… printf("%d\n", 10); i=1; printf("%d\n", i); i++; printf("%d\n", i); i++; …… printf("%d\n", i); i++;
C语言 第五章-循环结构程序设计

执行过程如图所示。其中i为外循环的控制变 量,j为内循环的控制变量。
i =0 当 i <=10
j=0 当 j<=10
printf(“%d ”, i*j ) j++ i++
例4 编程打印“九九乘法表”。
分析:九九乘法表 1×1=1 1×2=2 1×3=3 … 2×1=2 2×2=4 2×3=6 … 3×1=3 3×2=6 3×3=9 … …… 9×1=9 9×2=18 9×3=27 …
i ++ ; } while ( i <= 100 ) ; printf ( " %d " , sum ) ; }
结果相同
同样是下列程序,但如果while后面的表达式结果一开始就是 假时,两种循环结果会不一样。
main ( ) /*程序1*/
{ int i , sum = 0 ; i = 101 ;
所以程序需要设计成二重循环。由于题目只 要求找到一组解,所以在循环过程中只要找到一组 满足条件的x, y, z就可以跳出循环。
跳出循环的方法可以采用break语句,但是, 因为是二重循环,所以要考虑使用break是否方便。
程序 百钱买百鸡问题。 void main ( ) { int x , y , z ;
打印第2行 ( i = 2 ) for (j=1;j<=9;j++) printf(“%5d”,i*j) ; printf ( “ \n ” ) ; /*换行打印*/
…… 打印第9行 ( i = 9 )
for (j=1;j<=9;j++) printf(“%5d”,i*j) ; printf ( “ \n ” ) ; /*换行打印*/
第5章+循环控制结构程序设计

《C语言程序设计基础教程》
2013-8-12
C语言程序设计基础教程
1
5.1 while语句
5.2 do…while语句
5.3 for语句
5.4 循环的嵌套
5.5 几种循环的比较 5.6 break和continue语句 5.7 程序举例
2013-8-12
C语言程序设计基础教程
13
1↙ 55 11 ↙ 0
C语言程序设计基础教程
§5.2 do…while语句
当输入i的值小于或等于10时,两者得到的结果相同 。而当i>10时,两者结果不同。这是因为此时对while循 环来说,一次也不执行循环体(表达式“i<=100”为假) ,而对do-while循环语句来说,则要执行一次循环体。 可以得到结论:当while后面的表达式的第1次的值为“ 真”时,两种循环得到的结果相同,否则,两者结果不 相同(指两者具有相同的循环体的情况)。
§5.2 do…while语句
【例5-3】用do-while语句求1~100的累计和。 #include"stdio.h" main()
{
int i=1,sum=0; do
{
sum=sum+i; i++; } 程序运行结果如下: 5050
while(i<=100) ; printf("%d\n",sum);
19
§5.3 for语句
【例5-8】在3~100之间所有3的倍数中,找出个位数为2的数。 #include"stdio.h" main()
{
int i=0; for(i=3;i<=100;i++)
C语言程序设计:第5章 循环结构

12
do...while语句(cont...)
课堂练习: 1.输出1---n之间的数,其中n从键盘输入。
int main(void) {
//1.定义变量i和n //2.输入n的值 //3.思考循环的开始条件:i从1开始 //4.思考循环的结束条件:i++,i > n //5.循环的条件:i<=n //6.循环要做的事情:输出i的值 return 0; }
} 相当于 while(1) {
}
26
小结
❖for(i=m;i<n;i++)//循环次数:n-m次 ❖for(i=m;i<=n;i++)//循环次数:n-m+1次
27
循环语句的练习
课堂练习: 1.输出n---1之间的数,其中n>1且n从键盘输入。 2.计算1*2*3*...*n的值(n的阶乘n!), 其中n从键盘输入。 3.计算10- 1/2 - 1/3 -....1/n的值 以上练习分别以while、do...while、for语句实现
int main(void) {
//1.定义变量i,n,sum //2.输入n的值 //3.思考循环的开始条件:i从1开始 //4.思考循环的结束条件:i++,i > n //5.循环的条件:i<=n //6.循环要做的事情:累加i的值 //7.输出计算结果 return 0; }
24
for语句(cont...)
{
sum = sum + i;
if(sum > 100)break;
C语言之循环控制

do
循环体语句
循环体
while(<条件>);
条件p
假
功能:先执行循环体然后判断条件 是否满足,如果条件成立则继续执
真
行循环体中的语句,再判断条件。
依次反复,直到条件不再满足为止。
后续语句
二、说明:
1)循环体至少执行一次。 2)while(表达式)后的分号不可少,表明整个语句 结构的结束。
3)while与do——while的区别
43—RED4
红4
3
MAGENTA
5
紫5
2
BROWN 1—BLU6E
LIGHTGRAY
7
5—M棕A67GENT10A 浅灰
题解: 例#i题nc:lu画d出e 八“c个o不ni同o.大h”小的窗口,分别用互补的颜色显示前景 色#i和nc背lu景d色e 。“s(tdcihop.h5”\color.c) void main() { int x1,y1,x2,y2,bc,i ;
i++; }
i=1;01; s=0;
do {s=s+i;
i++;} while(i<=100);
s的值为0
s的值为101
练习:1)lt5_1.c main() {int x=3; do
printf(“%3d”,x-=2); while(!(--x)); } 程序输出结果为: 1 -2
作业1):编程完成一个猜数的小游戏:由系统随机产生一 100以内的整数。由用户来猜该数,如果没有猜对则由系统 给出相应的或大或小的提示,直到猜对为止。
练习:输出100以内所有能被3整数的数 输出100以内的所有数
main() {int i=1; while(i<=100)
C程序设计 循环控制

4. for语句的几种特例
可以省略表达式1, 但须保留分号;这时在for之前就得赋值 给循环变量; i b 例: 任意输入两个整数a, b,求 i main ( )
{ int i, j, a, b, sum; printf("please input two number!\n");
ia
例2: 求 Fibonacci数例: 1, 1, 2, 3, 5, 8, …前40个数。 规律: F1=1, F2=1 Fn=Fn–1+ Fn–2 程序要点: f1=f1+f2; (n>2)
f2=f1+f2; 交替的结果正好为一序列
每输出4个数时换行。
程序如下:
main ( )
{ long int f1, f2; int i;
运行结果如下: 5050
当i<=100成立 sum=sum+i; i++;
本例相当于当型循环,若改为直到型: main ( ) { int sum=0, i=0; i++; if (i<=100) goto loop; printf("sum=%d" , sum); } sum=sum+i; i++;
3 21 144 987 6765 46368 317811 2178309 14930352 102334155
例2. 求100~200的素数. 判一个数m是否为素数的方法: 当用2, 3, …
m 的整数去除它时均不能除
尽, 则为素数。
每打印10个数,换一次行。
程序如下: #include <math.h> main() { int m, k, i, n=0; for (m=101; m<=200; m=m+2) { if ( n%10==0) printf("\n"); k=sqrt(m);
大一C语言教材《C语言程序设计》第5章 循环程序设计

复合赋值运算符
种类:+= -= *= /= %= 《= 》= &= 含义: 变量 op= 表达式 变量 = 变量
^= |= op 表达式
x%=3 x*=y+8 a+=3
x=x%3 x=x*(y+8) a=a+3
运算符和表达式
说明:
结合方向:自右向左 左侧必须是变量,不能是常量或表达式
例 int i; 例 3=x-2*y; i=2.56; //结果 i=2; a+b=3;
赋值转换规则:使赋值号右边表达式值自动 转换成其左边变量的类型
赋值表达式的值与变量值相等,且可嵌套g a=b=c=5 a=(b=5) a=5+(c=6) a=(b=4)+(c=6) a=(b=10)/(c=2) //表达式值为5,a,b,c值为5 // b=5;a=5 //表达式值11,c=6,a=11 //表达式值10,a=10,b=4,c=6 //表达式值5,a=5,b=10,c=2
例 -i++ i=3;
-(i++) printf(“%d”,-i++);
//-3
无论是作为前缀还是作为后缀运算符,对于变量本身来 说自增1或自减1都具有相同的效果,但作为表达式来说却有 着不同的值。
例
j=3; k=++j; j=3; k=j++; j=3; printf(“%d”,++j); j=3; printf(“%d”,j++); a=3;b=5;c=(++a)*b; a=3;b=5;c=(a++)*b;
C语言中的循环控制

C语言中的循环控制循环控制顾名思义就是重复执行某一个语句块,日常生活中也有很多需要重复执行的事,比如生产流水线等都是在重复执行某一件事。
程序中如果没有循环控制,那么当需要执行重复的指令时,程序将变得非常庞大,有时候也不是程序员能写出的,比如要重复一百万次,你不可能把语句写一百万遍,所以循环控制是多么的重要,任何一门程序设计语言都有循环控制语句,因此循环控制是多么的基础,打好基础才能进阶成大神。
下面就简要附上对每一种循环语句进行简要说明。
一、while(表达式)语句:其一般形式如下:while(表达式){语句块}执行流程图:说明:while语句后面的表达式为真时(非0),那么就将执行后面的语句块,但是while后面的表达式一旦为真,那么它就一直为真,自己并不会使条件转变为假,因此后面的语句块必须存在使表达式转变为假的条件,否则将进入死循环,无休无止。
换言之,就是程序在运行时可以通过判断,检验条件作出选择,程序还必须能够重复执行随后的语句,直到满足某个条件为止,跳出循环。
二、do{语句块}while(表达式):上面的while语句如果一开始表达式就为假,那么它大括号里的语句块一次也不执行,但是do……w hile(表达式)语句就算一开始表达式值为假,它也会执行一次。
流程图为:可以看出其特点是,先执行循环体语句,然后再进行判断,当表达式结果为真时那么返回重新执行循环体语句,直到循环条件为假时,结束此循环。
大大的注意:在使用do……while语句时,条件要放在while后面的圆括号中,但是最后一定一定要加上分号,如do……while(表达式);。
三、for语句:for语句的一般形式为:for(表达式1;表达式2;表达式3)。
其执行流程图为:for语句每一次循环时修改循环变量,跟上面的两个比,for循环语句最为灵活,它不仅可以用于循环次数确定的情况,也可以用于循环次数不确定的情况,而只给出循环结束条件的情况。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4. 比较 while 和 do-while
while 循环和 do-while 循环的区别 语法不同 while ( 循环条件 ) { 循环操作 } 先判断,再执行 do { 循环操作 } while( 循环条件 ); 先执行,再判断
初始情况不满足循环条件时 1. while 循环一次都不会执行 2. do-while 循环不管任何情况都至少执行一次 [注]通常情况 while,do—while 可互换,但以下情况例外 #include “stdio.h” int main() { n=101; while(n<100) { printf(“n=%d\n”,n); } return 0; } 代码填空: 实现整数反转 #include<stdio.h> void main( ) { ~4~ #include “stdio.h” int main() { n=101; do { printf(“n=%d\n”,n); }while(n<100); return 0; }
C 语言程序设计知识点
主讲教师:杨剑
int i = 0; while (i < 4 ){ printf(“欢迎同学"); i ++ ; } } 问:循环一直执行,不会退出,哪里出错了? 注:永远都不会退出的循环称为死循环 循环的次数原则上应该是有穷的,也就是说,循环要有出口,否则成为死循环 /* 打印 4 次“欢迎同学” */ void main(){ int i= 1; while ( i <4 ){ printf ( “欢迎同学学员"); i ++; } } 问:只打印了三次 ,哪里出错了? 注:注意检查循环次数是否满足需求 /* 打印 4 次“欢迎同学” */ void main(){ int i = 0; while ( i > 5 ){ printf("欢迎欢迎同学"); i ++; } } 问:一次都没有打印,哪里出错了? 注意:如果一开始条件就不满足,while 循环一次都不执行 [课堂练习]找出 100 以内的奇数。 #include <stdio.h> int main() { int sum=0,i=1; while(i<=100) { sum=sum+i; i=i+2; } return 0; } [练习] 2006 年在校学生 1 万人,每年增长 25%,请问按此增长速度,到哪一年在校 学生人数将达到 10 万人? 提示: ~2~
5. for 循环
for 循环的语法和执行顺序
循环录入某学生第一期的 5 门课成绩,计算平均分 使用 for 循环结构的步骤 1、分析循环条件和循环操作 2、套用 for 语法写出代码 3、检查循环是否能够退出 结合问题: 循环次数:5 循环条件:循环的次数不足 5,继续循环 循环操作:录入成绩,计算成绩之和 输出如图所示加法表
C 语言程序设计知识点
主讲教师:杨剑
第 5 章:循环控制
1. 本章目标
理解为什么使用循环结构 熟练掌握 while 循环的使用 熟练掌握 do-while 循环的使用 理解 while 和 do-while 循环的区别 熟练使用 for 循环 理解 break 和 continu言程序设计知识点
主讲教师:杨剑
for(i=1 ; i<=100 ; i++ ) ; sum=sum+i; printf(“%d”,sum); return 0;
//for(i=1 ; i<=100 ; i+=2 )(去掉分号)
} [练习]求 1~100 之间不能被 3 整除的数之和 (使用 for 循环结构) [练习]百万富翁和陌生人,陌生人,每天十万元,百万富翁第一天一分钱,第二天 二分钱,每天是前一天的两倍。求 30 天后双方互给多少钱 [练习]以下程序的功能是计算:s=1+12+123+1234+12345.请填空. main() { int t=0,s=0,i; for(i=1;i<=5;i++) { t=i+( ); s=s+t; } printf(“s=%d\n”,s); } 答案:t*10
2. while 循环(当型循环)
while ( 循环条件 ) { 循环操作 } 特点:先判断,再执行 使用 while 循环的步骤 1、分析循环条件和循环操作 2、套用 while 语法写出代码 3、检查循环是否能够退出 求自然数 1 到 100 的和 1.分析问题(算法) step1: 设两个加数变量 sum=0,i=1; step2: 当 i<=100 时 { 重复(循环)做 sum+i 其中 sum=前一个 sum+i i =前一个 i+1; } step3: 输出循环后的结果 2.根据算法进行编程(翻译) int sum=0,i=1; while(i<=100) { sum=sum+i; i=i+1; } printf(“和=%d”,sum); while 循环常见问题 //打印 4 次“欢迎同学” void main(){ ~1~
6. break 语句
break:改变程序控制流 用于 do-while、while、for 中时,可跳出循环而执行循环后面的语句
break 通常在循环中与条件语句一起使用 从键盘输入任意一个正整数,编程判断它是否是素(质)数。若是,输出”Yes”,否则 输入”No”。 分析:依次判断该整数能否被从 2 到该整数的一半(或平方根)的整除,如都不能 整除,则是素数 1~10 之间的整数相加,得到累加值大于 20 的当前数 分析: 1、使用循环进行累加,从 1 到 10 2、判断累加值是否大于 20 3、如果大于 20,则跳出循环,并打印当前值 ~8~
for(int i=0;;i++){ printf ("这是 %d",i); } 编译正确,但是缺少循环条件,造成死循环 ~6~
C 语言程序设计知识点
主讲教师:杨剑
for(int i=0;i<10;){ printf ("这是 %d",i); } 1、编译通过,但是循环变量的值无变化,造成死循环省略表达式 3,在循环体内应 设法改变循环变量的值以结束循环 2、改为: for(int i=0;i<10;){ printf ("这是 %d",i); i++; } for(;;){ printf ("这是测试"); } 表达式全省略,无条件判断,循环变量无改变,应在循环体内设法结束循环,否则 会造成死循环 [总结] for 语句 3 个表达式均可以省略,但”;”不能省 1.省略初始化表达式。需在循环之外给循环变量赋值 i=1; for(;i<=100;i++) sum += i; 2.省略增量表达式。循环体内改变循环控制变量,否则容易造成死循环 for(i=1;i<=100;) { sum += i; ++i; } 3.省略所有三个表达式。此时应在循环体内相应位置 i=1; for(;;) { if(i<=100) sum += i; else break; //强制终止循环 i++; } 4. for 中的表达式 1、表达式 3 可为逗号表达式。 for(i=0,j=1;j<n&&i<n;i++,i++) {…} 5.for 循环体可以是一条空语句,实现延时功能 for(i=0;i<1000;i++) ; [练习本书习题五第 5 题]改错题。阅读下面的程序,求 1~100 的奇数和,指出其中的 错误,并改正。 #include <stdio.h> int main() { int i,sum; // sum=0; ~7~
C 语言程序设计知识点
主讲教师:杨剑
7. continue 语句
continue :只能用在循环里 continue 作用:跳过循环体中剩余的语句而执行下一次循环
通常与条件语句一起使用,加速循环 [课堂练习]本书习题五第 2 题 阅读题。下面程序的运行结果为__________。 #include <stdio.h> int main() {int n; for(n=1;n<5;n++) { if(n%2) { printf(“*”); } else continue; printf(“#”); } printf(“@\n”); return 0; } 答案:*#*#@ [课堂练习]求 1~10 之间的所有偶数和 1、使用循环进行累加,循环的范围是从 1 至 10 2 、判断当前数是否为偶数 3 、如果为奇数跳过,执行下一个循环,如果为偶数,进行累加 [课堂练习]下面程序输出值是多少?如果将 break 替换成 continue,输出值又为多 少? int sum=0; for( int i=0;i<5;i++){ if( i == 3) { ~9~
C 语言程序设计知识点
主讲教师:杨剑
int val = 12345; int r_digit; printf ("反转后的整数是:"); while(_______){ _____________________; _____________________; _____________________; } } } 参考答案: while(val!=0){ r_digit = val %10; printf(“%d”,r_digit); val = val /10; }
C 语言程序设计知识点