第五章 循环结构程序设计

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

注:
while语句是先判断,后执行。
while后面的语句一般为复合语句, 即:加{ } 语句中应有使表达式=0的语句。 否则会出现无限循环–––"死"循环。
while( )后面不能加分号;如果后面紧跟分号, 编译系统认为循环体是一条空语句, 造成“死循 环”。

输入若干个学生成绩,输入-1表示结束,求 平均成绩。程序如下 main() { int i, score, sum=0; i=0; /* 学生人数计数器初值 */ printf("please input score:\n"); scanf("%d",&score); while (score!=-1) { sum=sum+score; i++; scanf("%d",&score); } if (i) printf("average=%f\n",(float)sum/i); }
几种循环的比较
1. 对于同一问题, 四种循环可相互替代。但不提倡 用goto. 2. for循环功能强于while, do…while.但若不是明显 地给出循环变量初终值(或修改条件),则应用 while 或do …while.以增强程序的结构化和可读 性。
i++;
goto loop;}
printf("%d", sum);
} 运行结果如下: 5050
本例相当于当型循环,若改为直到型: main ( )
{ int sum=0, i=0;
loop: sum=sum+i;
i + +;
if (i<=100) goto loop; printf ("sum=%d" , sum); }
例 输出九九乘法表,形式如下: main() { int i, j; for (i=1; i<=9; i++) { for(j=1; j<=i; j++) printf("%2d*%2d=%2d",i,j,i*j); printf("\n\n"); } }
例 编程显示以下图形(共N行,N由键盘
输入)
5.2 do-while 语句
一种专门的“ 直到型” 循环语句。 1. 形式: do语句while(表达式); 2. 执行过程: 先执行语句,再判表达式的值,若0,再 执行语句,否则结束循环 3. 流程: 语句
0
表达式
=0
程序如下: main ( ) { int i, sum=0; i=1;
5.4 goto 语句
1. goto语句
形式: goto标号; 功能: 无条件转向标号处。 标号:用标识符命名。 2. 与if构成循环. 例: 求
i 1 2 100
i 1
100
main ( ) { int i, sum=0;
i=1;
loop:if (i<=100)
{sum=sum+i;
do
{sum=sum+i;
i++;
} while (i<=100); printf("%d",sum); }
while语句与do…while语句的区别: 当第一次 执行时,若表达式=0时,则while语句与do while
有所不同,do while 执行一次循环体的语句,而
while不执行。

输入若干个学生成绩,输入-1表示结束,求 平均成绩。程序如下
main() { int i, score, sum= 1; i= -1; do { scanf("%d",&score); sum=sum+score; i++; } while (score != -1) if (i) printf("average=%f\n",(float)sum/i); }
程序二:用do-while语句实现 main() { int number,digit; printf("please input data:"); scanf("%d",&number); do 运行区别: { digit=number%10; printf("%d",digit); 0 number=number/10; 0 } while (number!=0); }
5.3 for 语句
循环控制初始化, 如给循 一种形式更为灵活的循环语句。 环控制变量赋初值 1. 形式 for(表达式1; 表达式2; 表达式3)语句
每执行完一次循环体, 对 循环控制变量进行改变的 首先计算表达式1,接着执行表达式2,若表达式2的 逻辑表达式, 给出是否继续 表达式,以控制循环正确 值0,则执行循环体语句,接着计算表达式3,再判断表 循环的条件,如果值为真, 进行和结束。 则继续执行循环;否则出循 达式2的值.依此重复下去,直到表达式2的值为假。 环。 2.执行过程
如: i ,
i 1
100
sum=1+2+3+…+100;
则用循环结构解决。
C语言用四种形式循环 1. while 语句 2. do „while 语句
3. for语句
4. if语句与goto语句
5.1 while 语句
专门的当型循环语句––while语句 1. 形式: while (表达式)语句 2. 执行过程: 先判断表达式的值。若0.则执行其后 面的语句,否则while执行完毕。

判断m是否素数
设标志量flag,若flag为0,m不是素数; flag为1,m是素数
#include “stdio.h” main() { int m, i, flag; printf(“请输入要判断的正整数m:”); scanf(“%d”,&m); flag=1; for(i=2;i<m;i++) if(m%i==0) { flag=0; i=m; } if(flag==1) printf(“%d是素数\n”,m); else printf(“%d不是素数\n”,m); }
{ 语句 表达式3; }
4. for语句的几种特例 可以省略表达式1, 但须保留分号;这时在for之前 就得赋值给循环变量; 例: 任意输入两个整数a, b,求 i ia main ( ) { int i, j, a, b, sum; printf ("please input two number!\n")
i b
scanf ("a=%d, b=%d", &a, &b);
i=a; j=b;
if (a>b) {i=b; j=a;} for (; i<=j; i++) sum=sum+i; printf (" \n sum=%d", sum); }
表达式2一般不可省略,否则为无限循环
例: for (i=1; ; i++) sum=sum+i; 相当于条件永真、永不为0,若用while表示
5.5 循环的嵌套
循环结构的循环体可以是任何合法的C语句,当循 环体中又包含了另一个完整的循环语句时–––嵌套。 C有三种循环语句,均可以相互嵌套: while ( ) {… while ( ) …{
}
}
for (; ;) {… while ( ) { do { … } } while ( ); }
均为正确的嵌套,但: while ( ) for (; ; )
{ … { for (; ; ) 三种循环可互相嵌套,层数不限,每层可有多个循环 while ( ) {…
外循环每执行一次循环体,内循环要完整执行一遍 { } 各种循环可以和各种选择结构相互嵌套 }… } 嵌套不能相互交叉 } 会理解为正确的形式。但要注意语句的包 含关系。
3. 流程:
计算表达式1
求表达式2值
0(真)
=0(假)
语句 计算表达式3
结束for语句
用for语句写出上述例子
for ( i=1; i<=100; i++) sum+=i;
for语句完全可以用while代替,但for直观、简单、 方便 for用while代替的流程 表达式1;
while(表达式2)
* *** ***** ******* *********
分析:此类题目的关键是找出每行的空格、*与行 号i、列号j及总行数N的关系。
假设:N=5
* *** ***** ******* *********
•第一行:4个空格=5-1,1个“*”=2*行号-1;
•第二行:3个空格=5-2,3个“*”=2*行号-1;
3. 流程图: #include <stdio.h> =0 main() 表达式 { int i, sum=0; /* sum 累加器*/ 0 i=1; 语句 /* 循环控制初值 */ while(i<=100) /*{循环体}*/ { sum+=i; i++; /*关系表达式值可变*/ 下一语句 } 将上述例子用while语句写出 printf("%d",sum); } while (i<=100) { sum+ =i; i++; }
例 任意输入一个整数,将该数各位倒序输出。 程序一:用while语句实现
main() { int number,digit; printf("please input data:"); scanf("%d",&number); while (number!=0) { digit=number%10; printf("%d",digit); number=number/10; } }
达式2)语句。
例: for (; i<=100,) {sum+=i; i++;}
相当于 while (i<=1Байду номын сангаас0)
{sum:=i;
i++;
}
三个表达式均省略 即for(;;)语句则相当于while(1) 语句.
表达式1、表达式3可以是逗号表达式,以使循环 变量值在修改时可以对其它变量赋值。
•第三行:2个空格=5-3,5个“*”=2*行号-1; •第四行:1个空格=5-4,7个“*”=2*行号-1; •第五行:0个空格=5-5,9个“*”=2*行号-1;
结论:第i行空格数是N-i个;“*”个数是2i-1个。
#include “stdio.h” main() { int i, j, N; printf (“请输入N=”); scanf (“%d”, &N); for (i=1; i<=N; i++) { for (j=1; j<=N-i; j++) printf (“ ”); for (j=1; j<=2*i-1; j++) printf (“*”); printf (“\n”); } }
C程序设计
循环结构程序设计
第五章 循环结构程序设计



while语句 do-while语句 for语句 goto语句 循环的嵌套 break和continue语句 循环结构程序举例 C程序的基本调试技术
循环结构程序设计
前面已介绍了顺序结构,选择结构,本章介绍 循环结构。
实际问题: 一组重复执行的语句。
例 某人在银行存入了1000元,年利率为2.18%。计算 并打印10年内各年的存款数。公式为:a=p(1+r)n公式 中,p:本金 n:年数 r:年利率 a:n年后的存款数 #include <math.h> main() { int year; float amount, principal=1000, rate=0.0218; printf("%s%21s\n","year","amount on deposit"); for (year=1; year<=10; year++) { amount=principal*pow(1.0+rate,year); printf("%4d%21.2f\n",year,amount); } }
如 for (sum=0, i=1; i<=100; i++, i++)
sum=0;
for (i=1; i<=100; i=i+2)
表达式2可以是关系表达式,也可以是数值表达式 或字符表达式。只要值0.即执行循环体. 例: for (i=0; (c=getchar( ))!='\n'; i+=c);
相当于: while (1)
{ sum=sum+i; i++; }
表达式3亦可省略,但在循环体中须有语句修改循 环变量;以使表达式2在某一时刻为0而正常结束循
环。
例: for (sum=0,i=1;i<=100;) { sum=sum+i; i++; }
若同时省略表达式1,表达式3,则相当于while(表
相关文档
最新文档