第5章 循环程序设计
合集下载
第5章 循环程序设计

#include <stdio.h> void main() { int j=1; float f=1.0; while(j<=3) 计算3! { f=f*j; j++; } printf("%.0f\n",f);}
#include <stdio.h> void main() { int j=1; float f=1.0; while(j<=2) 计算2! { f=f*j; j++; } printf("%.0f\n",f);} #include <stdio.h> void main() { int j=1; float f=1.0; while(j<=10) { f=f*j; 计算10! j++; } printf("%.0f\n",f);} 16
13
(3)
循环必须是完整的, 不允许内外循环交叉嵌套
f = 1; 套形式 while( i < 10) { i=1; do { f = f * i; i ++; } } while( i<10 );
错误的嵌
内外循环的循环控制条 件通常是分开的,相对 独立的。 i=1; s=0; 混乱的控 while ( i <3 ) 制条件
} printf ( “sum = %d\n”,sum ) ;
}
3
5.1 概述
例:计算100以内的偶数的和sum=2+4+6+……+100。 # include <stdio.h> void main( ) { int i=0, sum=0 ; while ( i <= 100 ) { sum = sum + i ; i+=2; } printf ("Sum = %d \n", sum ) ; }
#include <stdio.h> void main() { int j=1; float f=1.0; while(j<=2) 计算2! { f=f*j; j++; } printf("%.0f\n",f);} #include <stdio.h> void main() { int j=1; float f=1.0; while(j<=10) { f=f*j; 计算10! j++; } printf("%.0f\n",f);} 16
13
(3)
循环必须是完整的, 不允许内外循环交叉嵌套
f = 1; 套形式 while( i < 10) { i=1; do { f = f * i; i ++; } } while( i<10 );
错误的嵌
内外循环的循环控制条 件通常是分开的,相对 独立的。 i=1; s=0; 混乱的控 while ( i <3 ) 制条件
} printf ( “sum = %d\n”,sum ) ;
}
3
5.1 概述
例:计算100以内的偶数的和sum=2+4+6+……+100。 # include <stdio.h> void main( ) { int i=0, sum=0 ; while ( i <= 100 ) { sum = sum + i ; i+=2; } printf ("Sum = %d \n", sum ) ; }
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章 循环结构程序设计

龙诚数码:
do-while语句的简单应用 do-while语句的简单应用
【例5.3】用辗转相除法求m和n的最大公约数 5.3】用辗转相除法求m
定义m、 、 定义 、n、r m<n T F m和n交换 和 交换 r=m%n m=n n=r 当r != 0时 时 输出最大公约数m 输出最: 算法和程序:
main( ) { int m,n,r; scanf("%d, %d",&m,&n); if (m<n) { r=m; m=n; n=r; } do { r=m%n; 程序运行情况如下: 程序运行情况如下: m=n; 24, 60 24, n=r; 12 }while(r!=0); while(r!=0 printf("%d\n",m); }
for语句的算法 for语句的算法
流程图 计算表达式1 计算表达式
表达式2 表达式 为真? 为真
15
N-S结构图 结构图 for (表达式 表达式 表达式 表达式1;表达式 表达式3) 表达式 表达式2;表达式 N 语句
Y 语句 计算表达式3 计算表达式
例如: 例如: 可部分或全部省略, 可部分或全部省略, main( ) 但“;”不可省略 { int i,sum; sum=0; for ( i=1; i<=100; i++) i=1 i<=100; sum=sum+i; sum=sum+i; printf("sum=%d\n",sum); }
龙诚数码:
18
for语句的简单应用 for语句的简单应用
【例5.4】求n! ,即计算p=1×2×3×…×n 5.4】 即计算p=1× 的值。 的值。
do-while语句的简单应用 do-while语句的简单应用
【例5.3】用辗转相除法求m和n的最大公约数 5.3】用辗转相除法求m
定义m、 、 定义 、n、r m<n T F m和n交换 和 交换 r=m%n m=n n=r 当r != 0时 时 输出最大公约数m 输出最: 算法和程序:
main( ) { int m,n,r; scanf("%d, %d",&m,&n); if (m<n) { r=m; m=n; n=r; } do { r=m%n; 程序运行情况如下: 程序运行情况如下: m=n; 24, 60 24, n=r; 12 }while(r!=0); while(r!=0 printf("%d\n",m); }
for语句的算法 for语句的算法
流程图 计算表达式1 计算表达式
表达式2 表达式 为真? 为真
15
N-S结构图 结构图 for (表达式 表达式 表达式 表达式1;表达式 表达式3) 表达式 表达式2;表达式 N 语句
Y 语句 计算表达式3 计算表达式
例如: 例如: 可部分或全部省略, 可部分或全部省略, main( ) 但“;”不可省略 { int i,sum; sum=0; for ( i=1; i<=100; i++) i=1 i<=100; sum=sum+i; sum=sum+i; printf("sum=%d\n",sum); }
龙诚数码:
18
for语句的简单应用 for语句的简单应用
【例5.4】求n! ,即计算p=1×2×3×…×n 5.4】 即计算p=1× 的值。 的值。
第5章-循环结构程序设计PPT优秀课件

17
5.3.1 前测型Do…Loop循环语句
格式:
Do [While | Until <条件表达式>] <语句块> [Exit Do] <语句块>
Loop
18
5.3.1 前测型Do…Loop循环语句
前测型Do…Loop循环的流程图
Do While…Loop流程图
Do Until…Loop流程图
条件表达式 值为真?
格式:
Do <语句块> [Exit Do] <语句块>
Loop [While | Until <条件表达式>]
23
5.3.1 后测型Do…Loop循环语句
说明:
后测型Do…Loop循环语句与前测型Do…Loop循环语句的主 要区别在于:
后测型要先执行一次循环体,再判断条件;而前测型要 先判断条件,然后根据判断结果决定是否执行循环体。因此 对于后测型,不管条件是否满足,循环体至少有一次执行机 会。
16
5.3 Do…Loop循环语句
导入:
Do…Loop循环也属于条件型循环,即根据条件的 成立与否来决定是否执行循环。Do…Loop循环的应 用具有很强的灵活性,主要体现在:它既能指定循环 开始条件,又能指定循环结束条件;既能构成前测型 Do…Loop循环语句,又能构成后测型Do…Loop循 环语句。
25
5.3.1 后测型Do…Loop循环语句 【例5-10】将400~600间能够被3整除的数 输出(上机练习)
【例5-11】(略)
26
5.4 循环嵌套
介绍:
一个循环结构中又包含一个或多个循环结构被称为 循环嵌套,或称多重循环。 多重循环对嵌套的层数没有限制。有几层嵌套,就 称为几重循环,如二重循环、三重循环、四重循环 等。一般地,把嵌套在一个循环体内部的另一个循 环结构称为内循环;这样,嵌套了其他内循环部分 的循环结构就称为外循环。 为了使多重循环结构具有较好的可读性,通常用缩 进方式书写相应的源代码。
5.3.1 前测型Do…Loop循环语句
格式:
Do [While | Until <条件表达式>] <语句块> [Exit Do] <语句块>
Loop
18
5.3.1 前测型Do…Loop循环语句
前测型Do…Loop循环的流程图
Do While…Loop流程图
Do Until…Loop流程图
条件表达式 值为真?
格式:
Do <语句块> [Exit Do] <语句块>
Loop [While | Until <条件表达式>]
23
5.3.1 后测型Do…Loop循环语句
说明:
后测型Do…Loop循环语句与前测型Do…Loop循环语句的主 要区别在于:
后测型要先执行一次循环体,再判断条件;而前测型要 先判断条件,然后根据判断结果决定是否执行循环体。因此 对于后测型,不管条件是否满足,循环体至少有一次执行机 会。
16
5.3 Do…Loop循环语句
导入:
Do…Loop循环也属于条件型循环,即根据条件的 成立与否来决定是否执行循环。Do…Loop循环的应 用具有很强的灵活性,主要体现在:它既能指定循环 开始条件,又能指定循环结束条件;既能构成前测型 Do…Loop循环语句,又能构成后测型Do…Loop循 环语句。
25
5.3.1 后测型Do…Loop循环语句 【例5-10】将400~600间能够被3整除的数 输出(上机练习)
【例5-11】(略)
26
5.4 循环嵌套
介绍:
一个循环结构中又包含一个或多个循环结构被称为 循环嵌套,或称多重循环。 多重循环对嵌套的层数没有限制。有几层嵌套,就 称为几重循环,如二重循环、三重循环、四重循环 等。一般地,把嵌套在一个循环体内部的另一个循 环结构称为内循环;这样,嵌套了其他内循环部分 的循环结构就称为外循环。 为了使多重循环结构具有较好的可读性,通常用缩 进方式书写相应的源代码。
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;
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;
第5章 循环结构程序设计

输入学生2的三门课成绩,并计算平均值后输出
scanf(“%f,%f,%f”,&s1,&s2,&s3);
aver=(s1+s2+s3)/3;
printf(“aver=%7.2f”,aver); 要对50个学生进行相同操作
重复50次
大多数的应用程序都会包含循环结构
循环结构和顺序结构、选择结构是结构 化程序设计的三种基本结构,它们是各 种复杂程序的基本构造单元
(1) 先求解表达式1 (2) 求解表达式2,若其值为真,执行循环体, 然后执行下面第(3)步。若为假,则结束循环, 转到第(5)步 (3) 求解表达式3 (4) 转回上面步骤(2)继续执行 (5) 循环结束,执行for语句下面的一个语句
5.4用for 语句实现循环
for(i=1;i<=100;i++) sum=sum+i; 等价于 用for语句更简单、方便 i=1; while(i<=100) { sum=sum+i; i++; }
要向计算机输入全班50个学生的成绩
分别统计全班50个学生的平均成绩 求30个整数之和 教师检查30个学生的成绩是否及格
5.1为什么需要循环控制
例如:全班有50个学生,统计各学生 三门课的平均成绩。
输入学生1的三门课成绩,并计算平均值后输出 scanf(“%f,%f,%f”,&s1,&s2,&s3); aver=(s1+s2+s3)/3; printf(“aver=%7.2f”,aver);
n 1
100
5.3用do---while语句实现循环
解题思路:
sum=0 i=1 sum=sum+i i=i+1
C语言第5章

= 1− 1 1 1 1 + − + −L 3 5 7 9
π
6
定义实型变量s=0; 整型变量n=1,k=-1;
1./(2*n-1)>=1e-4?
k=k*(-1); s=s+k*(1./(2*n-1)); n++; 输出4*s的值
程序如下: main() {int n=1,k=-1; float s=0; while(1./(2*n-1)>=1e-4) {k=-k; s=s+k/(2.*n-1); n++; } printf(“PI=%f”,s*4); } 运行结果为: PI=3.141397
1
一、什么是循环 所谓循环,就是重复执行某一程序段。 所谓循环,就是重复执行某一程序段。循环是所 有程序设计中都有的一种最重要的程序控制结构。 有程序设计中都有的一种最重要的程序控制结构。 正是有了循环,使得程序变得非常简单。 正是有了循环,使得程序变得非常简单。可用最 少的程序代码就可完成许多复杂的事情。 少的程序代码就可完成许多复杂的事情。同时循 环也是所有程序设计中最难的一种程序结构, 环也是所有程序设计中最难的一种程序结构,许 多同学对于其它程序结构都好理解, 多同学对于其它程序结构都好理解,但一遇到循 环就变糊涂了,不可理解了。 环就变糊涂了,不可理解了。这一点希望引起同 学们的极大注意。本书一共给出了三种循环: 学们的极大注意。本书一共给出了三种循环: 语句构成的循环; ⑴用while语句构成的循环; 语句构成的循环 语句构成的循环; ⑵用do-while语句构成的循环; - 语句构成的循环 语句构成的循环; ⑶用for语句构成的循环; 语句构成的循环
定义变量sum=0,i=1 接收用户的输入n sum=sum+i; i++; i<=n printf(“sum=%d\n”,sum); #include “stdio.h” main() { int i,sum,n; i=1;sum=0; printf(“\ninput n:”); scanf(“%d”,&n); do { sum=sum+i; i++; }while(i<=n); 9 printf(“sum=%d\n”,sum);}
π
6
定义实型变量s=0; 整型变量n=1,k=-1;
1./(2*n-1)>=1e-4?
k=k*(-1); s=s+k*(1./(2*n-1)); n++; 输出4*s的值
程序如下: main() {int n=1,k=-1; float s=0; while(1./(2*n-1)>=1e-4) {k=-k; s=s+k/(2.*n-1); n++; } printf(“PI=%f”,s*4); } 运行结果为: PI=3.141397
1
一、什么是循环 所谓循环,就是重复执行某一程序段。 所谓循环,就是重复执行某一程序段。循环是所 有程序设计中都有的一种最重要的程序控制结构。 有程序设计中都有的一种最重要的程序控制结构。 正是有了循环,使得程序变得非常简单。 正是有了循环,使得程序变得非常简单。可用最 少的程序代码就可完成许多复杂的事情。 少的程序代码就可完成许多复杂的事情。同时循 环也是所有程序设计中最难的一种程序结构, 环也是所有程序设计中最难的一种程序结构,许 多同学对于其它程序结构都好理解, 多同学对于其它程序结构都好理解,但一遇到循 环就变糊涂了,不可理解了。 环就变糊涂了,不可理解了。这一点希望引起同 学们的极大注意。本书一共给出了三种循环: 学们的极大注意。本书一共给出了三种循环: 语句构成的循环; ⑴用while语句构成的循环; 语句构成的循环 语句构成的循环; ⑵用do-while语句构成的循环; - 语句构成的循环 语句构成的循环; ⑶用for语句构成的循环; 语句构成的循环
定义变量sum=0,i=1 接收用户的输入n sum=sum+i; i++; i<=n printf(“sum=%d\n”,sum); #include “stdio.h” main() { int i,sum,n; i=1;sum=0; printf(“\ninput n:”); scanf(“%d”,&n); do { sum=sum+i; i++; }while(i<=n); 9 printf(“sum=%d\n”,sum);}
C语言程序设计第5章-循环结构程序设计ppt课件

分析:循环进行的条件是:i≤k和flag=0。因为在i>k时, 显然不必再去检查n是否能被整除,此外如果flag=1, 就表示n已被某一个数整除过,肯定是非素数无疑, 也不必再检查了。只有i≤k和flag=0两者同时满足才 需要继续检查。循环体只有一个判断操作:判断n 能否被i整除,如不能,则执行i=i+1,即i的值加1, 以便为下一次判断作准备。如果在本次循环中n能 被i整除,则令flag=1,表示n已被确定为非素数了, 这样就不再进行下一次的循环了。如果n不能被任 何一个i整除,则flag始终保持为0。因此,在结束 循环后根据flag的值为0或1,分别输出n是素数或非 素数的信息。
while(i<=k && !flag)
if(n % i==0) flag=1;
else i=i+1;
if(!flag)
printf("%d is a prime
number.\n",n);
else
printf("%d is not a prime
number.\n",n);
}
.
返回本章首页
第5章 循环结构程序设计
【例5_1】用while语句求p=n!
#include<stdio.h>
int main()
{ int i=1,p=1; //循环初始化部分 while(i<=5) //循环控制部分
{ p=p*i; //循环体语句 i++; //循环修改部分
}
printf("5!=%d\n",p);
return 0;
10-3,则再执行循环体,把 term 值赋给term1.然后再累加 到s中去。可以看出:程序中 term1代表当前要累加的项, term代表下一项,如果这两项 之差未超过10-3,就将下一项 加到s 中。
while(i<=k && !flag)
if(n % i==0) flag=1;
else i=i+1;
if(!flag)
printf("%d is a prime
number.\n",n);
else
printf("%d is not a prime
number.\n",n);
}
.
返回本章首页
第5章 循环结构程序设计
【例5_1】用while语句求p=n!
#include<stdio.h>
int main()
{ int i=1,p=1; //循环初始化部分 while(i<=5) //循环控制部分
{ p=p*i; //循环体语句 i++; //循环修改部分
}
printf("5!=%d\n",p);
return 0;
10-3,则再执行循环体,把 term 值赋给term1.然后再累加 到s中去。可以看出:程序中 term1代表当前要累加的项, term代表下一项,如果这两项 之差未超过10-3,就将下一项 加到s 中。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
安庆师范学院计算机与信息学院
for语句(1)
初始化表达式 修正表达式
for语句语法如下: for(表达式①;表达式②;表达式③) 循环体语句 循环条件 表达式①通常用于循环的初始化,包括循环变量的 赋初值、其他变量的准备等; 表达式②为循环的条件,如果缺省则条件为真; 表达式③通常设计为循环的调整部分,主要是循环 变量的变化部分;
s+3
S+100
/* 计算下次投币数 */
安庆师范学院计算机与信息学院
引言(2)
•循环语句组成
(a)“先工作后判断”循环结构形式(b)“先判断后工作”循环结构形 式
安庆师范学院计算机与信息学院
引言(3)
•循环的三种语句
for语句
while语句
构成当型循环结构 构成直到型循环结构
do-while语句
安庆师范学院计算机与信息学院
while语句(2)
例5-1
表达式 非0 语句 0 i<=100 非0 0 i=1;s=0;
s=s+i;i=i+1;
图5-2 while循环结构流程图 图5-3例5-1流程图
安庆师范学院计算机与信息学院
while语句(3)
/* EX5-1.C */
#include <stdio.h> main() { int i,s; i=1;s=0; while(i<=100) /* 循环控制 */ { 思考 s=s+i; i=i+1; 计算1到100之间所有3的倍数的和 } printf("1到100的和为%d\n",s); }
安庆师范学院计算机与信息学院
while语句(4)
(1)程序设计中应避免出现 “死循环”。 注意(2)循环执行的次数用以下公式计算: 循环次数 = (终值-初值)/ 步长 + 1 例如上例循环次数为(100 –1)/1 + 1,即100次。 步长也可以为负数,例如下面程序段也能计算 1+2+…+100: int i,s; i=100; s=0; while(i>=1) { s=s+i; i=i-1;} 实际上是计算100+99+……+1 (3)注意循环体语句先后次序对执行结果的影响。
安庆师范学院计算机与信息学院
单循环程序设计(3)
【例5-10】求Fibonacci数列的前40个数。该数列的生成 方法为:F1=1,F2=1,Fn=Fn-1+Fn-2(n>=3),即从第3 个数开始,每个数等于前2个数之和。
分析
安庆师范学院计算机与信息学院
单循环程序设计(3)
/* EX5-10. C*/ #include <stdio.h> main() { long f1,f2,f3; int i; f1= f2=1; printf("%10ld%10ld",f1,f2); for(i=3;i<=40;i++) {f3=f1+f2; printf("%10ld",f3); if(i%5==0)printf("\n"); f1=f2; f2=f3; ? 如何逆序输出? } }
安庆师范学院计算机与信息学院
for语句(5)
注意 (4) 表达式③也可以省略,但作为循环变量的调整
功能不能缺少,可以在循环体中完成,例如下面的for 循环: for(i=1,s=0;i<=100;) {s = s + i;i++;} (5) 如果表达式①和③都省略的话,相当于while 循环,例如下面的程序形式: i=1,s=0; for(;i<=100;) /*相当于 while(i<=100)*/ s+=i++;
安庆师范学院计算机与信息学院
单循环程序设计(2)
【例5-8】输入的两个正整数,求其最大公约数和最小公 倍数。 #include <stdio.h> main() {int m,n,a,b,t; printf("从键盘读入 m 和 n: "); scanf("%d,%d",&m,&n); a=m;b=n; while(b!=0) { t=a%b;a=b;b=t; } printf("%d和%d的最大公约数为%d\n",m,n,a); printf("%d和%d的最小公倍数为%d\n",m,n,m*n/a); }
安庆师范学院计算机与信息学院
for语句(7)
使用for循环语句编写程序,求解满足条件s=1+ 例 2+3+……+n≥1000的最小n和s的值。 /* EX5-6.C */ #include <stdio.h> main() { int n,s; for(n=1,s=0;s<=1000;n++)s+=n; n--; printf("n=%d,s=%d\n",n,s); }
安庆师范学院计算机与信息学院
其他控制语句(2)
3.说明
(1) break能用于循环语句和switch语句中,continue 只能用于循环语句中。
(2)循环嵌套时,break和continue只影响包含它们的 当层循环,与外层循环无关。 (3)为了防止出现死语句或死循环,执行break和 continue都是有条件的,即都必须放在if条件之后: if(表达式) break; if(表达式) continue;
安庆师范学院计算机与信息学院
其他控制语句(1)
为了使循环控制更加灵活,C语言提供了break语句 和continue语句。 1.一般格式: break; continue;
2.功能
(1)break:强行结束循环,转向执行循环语句的下一 条语句。 (2)continue:对于for循环,跳过循环体其余语句, 转向修正表达式的计算;对于while和do-while循环,跳 过循环体其余语句,转向循环继续条件的判定。
n值很大应怎样处理?
安庆师范学院计算机与信息学院
for语句(4)
(1)for循环可以用以下while循环代替: 注意 表达式①; while (表达式②) {循环体语句; 表达式③;} (2)表达式①可以放在for循环的前面,但原处的分号不能 少,例如:表达式①; for(; 表达式②; 表达式③) 循环体语句; (3)表达式②也可以省略,此时循环条件始终为真 for(表达式①; ;表达式③) {循环体语句; if(条件)break; /*结束循环*/ }
【例5-4】使用for语句编程求1+2+3+……+100的和。 /* EX5-4.C */ #include <stdio.h> main() { int i, sum; for(i=1,sum=0;i<=100;i++) sum+=i; printf(“1到100的和为%d\n,sum”); }
思考 用for语句编程求1×2×3×……×n的值,如果
安庆师范学院计算机与信息学院
while语句(5)
例1:用 求π 的近似值,直到某一项 的绝对值小于10-4为止。求绝对值用数学函数fabs()。 /* EX5-2.C */ while(fabs(temp)>=1e-4) #include "math.h" { sum=sum+temp; #include "stdio.h" i=i+2; main() sign=-sign; { int sign; temp=sign/i; float i; } float sum,temp; sum=sum*4; sum=0; printf("pi=%f\n",sum); sign=1; temp=1; } i=1;
安庆师范学院计算机与信息学院
do-while语句(2)
计算s=1+2+3+…+100
/* EX5-3.C */
main( ) { int i,s; i=1;s=0; do {s=s+i; i=i+1; } while(i<=100); printf("s=%d\n",s); } 可见do-while循环和while循环可以完成相同的任务。
安庆师范学院计算机与信息学院
多重循环程序
【例5-14】计算100以内的所有素数之和。 分析
这是穷举算法的一个典型例子。需要设置两重
循环:外循环是控制产生2到100的数的循环; 内
循环首先判断当前外循环变量的值是否为素数,是
则累加求和。 程序如下:
安庆师范学院计算机与信息学院
多重循环程序
/* EX5-15.C */ #include <stdio.h> main() {int i,j,s=0; for(i=2; i<=100; i++) {for(j=2; j<=i/2; j++) if(i%j==0) break; if(j>i/2) /* i是素数,因为2~i/2没有i的因子 */ s=s+i; } printf("100以内所有素数和为:%d\n",s); }
安庆师范学院计算机与信息学院
while语句(1)
while循环格式: while (表达式) 语句 其中的语句可以是一条语句,或相当于一条语句的复 合语句,称为循环体。 while语句的执行过程为: (1) 计算表达式的值; (2)判断表达式的值,若为非0,则执行循环体;若 为 0,则结束循环,执行while语句后面的语句。 (3)执行完循环体转步骤(1)
安庆师范学院计算机与信息学院
for语句(6)
注意
for语句(1)
初始化表达式 修正表达式
for语句语法如下: for(表达式①;表达式②;表达式③) 循环体语句 循环条件 表达式①通常用于循环的初始化,包括循环变量的 赋初值、其他变量的准备等; 表达式②为循环的条件,如果缺省则条件为真; 表达式③通常设计为循环的调整部分,主要是循环 变量的变化部分;
s+3
S+100
/* 计算下次投币数 */
安庆师范学院计算机与信息学院
引言(2)
•循环语句组成
(a)“先工作后判断”循环结构形式(b)“先判断后工作”循环结构形 式
安庆师范学院计算机与信息学院
引言(3)
•循环的三种语句
for语句
while语句
构成当型循环结构 构成直到型循环结构
do-while语句
安庆师范学院计算机与信息学院
while语句(2)
例5-1
表达式 非0 语句 0 i<=100 非0 0 i=1;s=0;
s=s+i;i=i+1;
图5-2 while循环结构流程图 图5-3例5-1流程图
安庆师范学院计算机与信息学院
while语句(3)
/* EX5-1.C */
#include <stdio.h> main() { int i,s; i=1;s=0; while(i<=100) /* 循环控制 */ { 思考 s=s+i; i=i+1; 计算1到100之间所有3的倍数的和 } printf("1到100的和为%d\n",s); }
安庆师范学院计算机与信息学院
while语句(4)
(1)程序设计中应避免出现 “死循环”。 注意(2)循环执行的次数用以下公式计算: 循环次数 = (终值-初值)/ 步长 + 1 例如上例循环次数为(100 –1)/1 + 1,即100次。 步长也可以为负数,例如下面程序段也能计算 1+2+…+100: int i,s; i=100; s=0; while(i>=1) { s=s+i; i=i-1;} 实际上是计算100+99+……+1 (3)注意循环体语句先后次序对执行结果的影响。
安庆师范学院计算机与信息学院
单循环程序设计(3)
【例5-10】求Fibonacci数列的前40个数。该数列的生成 方法为:F1=1,F2=1,Fn=Fn-1+Fn-2(n>=3),即从第3 个数开始,每个数等于前2个数之和。
分析
安庆师范学院计算机与信息学院
单循环程序设计(3)
/* EX5-10. C*/ #include <stdio.h> main() { long f1,f2,f3; int i; f1= f2=1; printf("%10ld%10ld",f1,f2); for(i=3;i<=40;i++) {f3=f1+f2; printf("%10ld",f3); if(i%5==0)printf("\n"); f1=f2; f2=f3; ? 如何逆序输出? } }
安庆师范学院计算机与信息学院
for语句(5)
注意 (4) 表达式③也可以省略,但作为循环变量的调整
功能不能缺少,可以在循环体中完成,例如下面的for 循环: for(i=1,s=0;i<=100;) {s = s + i;i++;} (5) 如果表达式①和③都省略的话,相当于while 循环,例如下面的程序形式: i=1,s=0; for(;i<=100;) /*相当于 while(i<=100)*/ s+=i++;
安庆师范学院计算机与信息学院
单循环程序设计(2)
【例5-8】输入的两个正整数,求其最大公约数和最小公 倍数。 #include <stdio.h> main() {int m,n,a,b,t; printf("从键盘读入 m 和 n: "); scanf("%d,%d",&m,&n); a=m;b=n; while(b!=0) { t=a%b;a=b;b=t; } printf("%d和%d的最大公约数为%d\n",m,n,a); printf("%d和%d的最小公倍数为%d\n",m,n,m*n/a); }
安庆师范学院计算机与信息学院
for语句(7)
使用for循环语句编写程序,求解满足条件s=1+ 例 2+3+……+n≥1000的最小n和s的值。 /* EX5-6.C */ #include <stdio.h> main() { int n,s; for(n=1,s=0;s<=1000;n++)s+=n; n--; printf("n=%d,s=%d\n",n,s); }
安庆师范学院计算机与信息学院
其他控制语句(2)
3.说明
(1) break能用于循环语句和switch语句中,continue 只能用于循环语句中。
(2)循环嵌套时,break和continue只影响包含它们的 当层循环,与外层循环无关。 (3)为了防止出现死语句或死循环,执行break和 continue都是有条件的,即都必须放在if条件之后: if(表达式) break; if(表达式) continue;
安庆师范学院计算机与信息学院
其他控制语句(1)
为了使循环控制更加灵活,C语言提供了break语句 和continue语句。 1.一般格式: break; continue;
2.功能
(1)break:强行结束循环,转向执行循环语句的下一 条语句。 (2)continue:对于for循环,跳过循环体其余语句, 转向修正表达式的计算;对于while和do-while循环,跳 过循环体其余语句,转向循环继续条件的判定。
n值很大应怎样处理?
安庆师范学院计算机与信息学院
for语句(4)
(1)for循环可以用以下while循环代替: 注意 表达式①; while (表达式②) {循环体语句; 表达式③;} (2)表达式①可以放在for循环的前面,但原处的分号不能 少,例如:表达式①; for(; 表达式②; 表达式③) 循环体语句; (3)表达式②也可以省略,此时循环条件始终为真 for(表达式①; ;表达式③) {循环体语句; if(条件)break; /*结束循环*/ }
【例5-4】使用for语句编程求1+2+3+……+100的和。 /* EX5-4.C */ #include <stdio.h> main() { int i, sum; for(i=1,sum=0;i<=100;i++) sum+=i; printf(“1到100的和为%d\n,sum”); }
思考 用for语句编程求1×2×3×……×n的值,如果
安庆师范学院计算机与信息学院
while语句(5)
例1:用 求π 的近似值,直到某一项 的绝对值小于10-4为止。求绝对值用数学函数fabs()。 /* EX5-2.C */ while(fabs(temp)>=1e-4) #include "math.h" { sum=sum+temp; #include "stdio.h" i=i+2; main() sign=-sign; { int sign; temp=sign/i; float i; } float sum,temp; sum=sum*4; sum=0; printf("pi=%f\n",sum); sign=1; temp=1; } i=1;
安庆师范学院计算机与信息学院
do-while语句(2)
计算s=1+2+3+…+100
/* EX5-3.C */
main( ) { int i,s; i=1;s=0; do {s=s+i; i=i+1; } while(i<=100); printf("s=%d\n",s); } 可见do-while循环和while循环可以完成相同的任务。
安庆师范学院计算机与信息学院
多重循环程序
【例5-14】计算100以内的所有素数之和。 分析
这是穷举算法的一个典型例子。需要设置两重
循环:外循环是控制产生2到100的数的循环; 内
循环首先判断当前外循环变量的值是否为素数,是
则累加求和。 程序如下:
安庆师范学院计算机与信息学院
多重循环程序
/* EX5-15.C */ #include <stdio.h> main() {int i,j,s=0; for(i=2; i<=100; i++) {for(j=2; j<=i/2; j++) if(i%j==0) break; if(j>i/2) /* i是素数,因为2~i/2没有i的因子 */ s=s+i; } printf("100以内所有素数和为:%d\n",s); }
安庆师范学院计算机与信息学院
while语句(1)
while循环格式: while (表达式) 语句 其中的语句可以是一条语句,或相当于一条语句的复 合语句,称为循环体。 while语句的执行过程为: (1) 计算表达式的值; (2)判断表达式的值,若为非0,则执行循环体;若 为 0,则结束循环,执行while语句后面的语句。 (3)执行完循环体转步骤(1)
安庆师范学院计算机与信息学院
for语句(6)
注意