C语言第5章-循环结构程序设计PPT课件
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
sum=sum+i i++
当i<=10 (直到i>10) 输出sum
#include "stdio.h" int main() {
int i,sum; i=1; sum=0; do { sum=sum+i; i++; }while(i<=10);
至少执 行一次
循环体语句
真 表达式 假
说明
printf("sum=%5d\n",sum); return 0;
7
举例
例5.2 设s=1×2×3×……×n,求s不大于400000时 最大的n。
#include <stdio.h>
int main( )
{ int n=1; long int s=1;
前n项的乘积
P81
while(s<=400000)
{
n=n+1;
s=s*n;
}
printf("不大于400000时的最大n为:%d\ns值为:%ld\n",n-1,s/n);
输入:1 输出:sum=55 输入:11 输出:sum=0
sum=55 sum=11
什么情况下两 者结果相同?
11
§5.3 for语句
P87
格式 for (表达式1;表达式2;表达式3) 语句
for (循环变量赋初值;循环条件;循环变量增值) 语句
执行 过程
求解表达式1
假 表达式2
真 循环体语句
求解表达式3
一、实现循环结构的控制语句 二、循环嵌套 三、循环结构程序举例
1
• while语句 • do-while语句 • for语句 • break、continue语句 • 几种循环的比较
2
P79
§5.1 while语句
表达式 不成立
格式 举例
while (表达式) 语句 求1~10的累加和。
成立 循环体语句
}
运行结果:
请输入学生成绩:23凵89凵67凵78凵94凵56凵34凵83凵90 凵67凵48凵72凵81凵65凵74凵87凵73凵67凵90凵98 20名学生的C语言平均成9绩为:71.8
§5.2 do-while语句 P85
格式
do 循环体语句
while(表达式);
举例 求1~10的累加和。
i=1 sum=0
#include "stdio.h"
int main()
i=1 sum=0
{
当i<=10
sum=sum+i i++
int i,sum; i=1; sum=0; while (i<=10) {
输出sum
sum=sum+i; i++; }
printf("sum=%5d\n",sum);
1 求1~100的累加和. 2 求1~10的奇数和. 3 求N!
int main( )
{
int i,j,result;
for(i=1;i<=9;i++)
{
for(j=1;j<=9;j++)
{
result=i*j;
//计算i行j列上的元素值
printf("%d*%d=%-3d\t",i,j,result);
}
printf("\n");
}
return 0;
}
32
result i=1, j=1 1*1
sum=sum+i; i++; } printf("sum=%d\n",sum); }
#include <stdio.h> void main() {
int i,sum=0; scanf("%d",&i); do {
sum=sum+i; i++; } while(i<=10) ; printf("sum=%d\n",sum); }
4、 while语句:先判断,后执行。 do-while语句:先执行,后判断。
17
§5.4 break/continue语句
格式
while (表达式1) {… if (表达式2) break;
… }
while (表达式1) {… if (表达式2) conitue;
… }
举例
结束整 个循环
结束本 次循环
i=1;
1
for(; i<=10;i++)
sum=sum+i;
2
for (i=1; ;i++) sum=sum+i;
3
for (i=1;i<=10 ;)
{
sum=sum+i;
i++;
}
表达式1可以省略, 但其后的分号不
可以省略。
for(i=1; i<=10;i++) sum=sum+i;
没有循环结
?
举例 利用公式:sum=1-3+5-7+9-11…
求前10项的和。
s:变化的符号 i:第i项 n:第i项的绝对值 t:第i项的值 sum:和
#include <stdio.h> void main() {
int s,i,sum,t,n; i=0;n=1,sum=0,t=1,s=1; 运行结果: while(i<10) { sum=sum+t; n=n+2; s=-s; t=s*n; i++; } printf("sum=%d\n",sum); }
… ... sum=0; for (i=1;i<=10;i++)
{if (i>5) break; sum=sum+i;}
printf(“sum=%5d\n”,sum); … ...
… ... sum=0; for (i=1;i<=10;i++)
{if (i<=5) continue; sum=sum+i;}
(1)先求解表达式1;
(2)求解表达式2,若其值为真,则 执行循环体语句,然后执行第(3)步; 若为假,则结束循环,转到第(5)步;
(3)求解表达式3;
(4)转向步骤(2);
(5)循环结束,执行for语句下面的一 个语句。
12
举例 求1~100的累加和。
#include <stdio.h> void main() {
printf(“sum=%5d\n”,sum); … ...
1到5的累加和
6到10的累加和
18
举例 例5.11 分析下面程序的运行结果。P90
i 第1次执行循环 0
i%10 0
条件表达式i%10==0成立,执 行break语句,跳出循环
#include <stdio.h> int main( ) { int i=0,a=0; while(i<20) { if(i%10==0) break; else i++; } i+=11;a+=i; printf("%d\n",a); return 0; }
1、循环体如果}包含一个以上的语句,必须使用复合语句形式。 2、在循环体中,必须有使循环条件趋向于不满足(假)的语句。 3、先执行,后判断。
10
举例 while和do-while循环的比较。
此程序 的功能?
#include <stdio.h> void main() {
int i,sum=0; scanf("%d",&i); while(i<=10) {
束条件,构 成了死循环
i=1 while (1) { sum=sum+i;
i++;}
for(i=1; i<=10;i++) sum=sum+i;
15
几种循环语句的比较
说明
1、 三种循环语句在处理循环问题时,一般可以 相互替代。
2、 对于循环次数固定的问题,用for语句实现 比较简单。
3、 对于循环次数不确定的问题,可用while语 句或do-while语句实现。
§dio.h> void main() {
int i,j; for (i=1;i<=4;i++) {
for (j=1;j<=5-i;j++) printf("%4d",i*j);
printf("\n"); } }
29
第六章 循环结构程序设计
12 3 4 24 6 36 4
printf(“%4d”,i*j); printf(“\n”);
} }
31
第六章 循环结构程序设计
12 4
34 68 9 12
16
举例 例5.16 打印乘法口诀表。 P95
1*1=1 2*1=2 … 9*1=9
1*2=2 … 1*9=9 2*2=4 … 2*9=18
9*2=18 … 9*9=81
#include "stdio.h"
运行结果:
4
举例 求1到10之间的偶数和
#include <stdio.h> void main() {
int i,sum=0; i=1; while (i<=10) { if (i%2==0) sum=sum+i; i++; } printf("%d\n",sum); }
运行结果:
5
举例 求N!
§5.5循环嵌套
思考3
#include <stdio.h> void main() {
int i,j; for (i=1;i<=4;i++) {
for (j=1;j<=4-i;j++) printf(“%4d”,’ ‘);
for (j=5-i;j<=4;j++) printf(“%4d”,i*j);
for (j=1;j<=4;j++) printf("%4d",i*j);
printf("\n"); } }
27
12 3 4 24 6 8 3 6 9 12 4 8 12 16
i=1,j=1 1*1 j=2 1*2 j=3 1*3 j=4 1*4
i=2,j=1 2*1 j=2 ……
i=3 i=4
§5.5循环嵌套
return 0;
}
?
说明 1、循环体如果包含一个以上的语句,必须使用复合语句形式。
2、在循环体中,必须有使循环条件趋向于不满足(假)的语句。
3、先判断后执行。
3
举例 求1到10的奇数和
#include "stdio.h" int main() { int i,sum; i=1; sum=0; while (i<=10) { sum=sum+i; i+=2; } printf("sum=%5d\n",sum); return 0; }
思考1
#include <stdio.h> void main() {
int i,j; for (i=1;i<=4;i++) {
for (j=1;j<=i;j++) printf("%4d",i*j);
printf("\n"); } }
28
第六章 循环结构程序设计
1 24 36 9 4 8 12 16
#include <stdio.h> void main() {
int i=1,n; float fac=1; printf("请输入n:"); scanf ("%d",&n); while (i<=n) { fac=fac*i; i++; } printf("%.0f\n",fac); }
6
运行结果:
j=2 1*2 j=3 1*3 ┇ j=9 1*9
i=2, j=1 2*1 j=2 2*2
┇ j=9 2*9 …… i=9, j=1 9*1 j=2 9*2 ┇ j=9 9*9
结束整个循环
运行结果:11
19
§5.5循环嵌套
第六章 循环结构程序设计
概念 一个循环体内又包含另一个完整的循环结构,称为循环嵌套。
举例 打印乘法口诀表。
for i=1 to 4 for j=1 to 4
输出i*j 换行
#include <stdio.h> void main() {
int i,j; for (i=1;i<=4;i++) {
P81
int i=1;
printf("请输入学生成绩:");
while(i<=20)
{
scanf("%f",&score);
total=total+score;
i++;
}
average=total/20;
printf("20名学生的C语言平均成绩为:% .1f\n",average);
return 0;
printf(“\n”); } }
30
第六章 循环结构程序设计
4 68 6 9 12 4 8 12 16
§5.5循环嵌套
思考4
#include <stdio.h> void main() {
int i,j; for (i=1;i<=4;i++) { for (j=1;j<=i-1;j++)
printf(“%4d”,’ ‘); for (j=i;j<=4;j++)
return 0;
}
运行结果:
8
举例 例5.3 现有某班20名学生的C语言成绩,求该班学生的C语
言的平均成绩。
total : 前i名学生 的成绩的和
score : 每一名学生 的成绩
average : 平均成绩
#include <stdio.h>
int main( )
{ float total=0,score,average;
int i,sum; sum=0; for (i=1;i<=100;i++)
sum=sum+i; printf("sum=%5d\n",sum); }
?
13
i=1; while (i<=100) { sum=sum+i; i++; }
1 求1~50的累加和. 2 求1~100的奇数和. 3 求N!
说明
当i<=10 (直到i>10) 输出sum
#include "stdio.h" int main() {
int i,sum; i=1; sum=0; do { sum=sum+i; i++; }while(i<=10);
至少执 行一次
循环体语句
真 表达式 假
说明
printf("sum=%5d\n",sum); return 0;
7
举例
例5.2 设s=1×2×3×……×n,求s不大于400000时 最大的n。
#include <stdio.h>
int main( )
{ int n=1; long int s=1;
前n项的乘积
P81
while(s<=400000)
{
n=n+1;
s=s*n;
}
printf("不大于400000时的最大n为:%d\ns值为:%ld\n",n-1,s/n);
输入:1 输出:sum=55 输入:11 输出:sum=0
sum=55 sum=11
什么情况下两 者结果相同?
11
§5.3 for语句
P87
格式 for (表达式1;表达式2;表达式3) 语句
for (循环变量赋初值;循环条件;循环变量增值) 语句
执行 过程
求解表达式1
假 表达式2
真 循环体语句
求解表达式3
一、实现循环结构的控制语句 二、循环嵌套 三、循环结构程序举例
1
• while语句 • do-while语句 • for语句 • break、continue语句 • 几种循环的比较
2
P79
§5.1 while语句
表达式 不成立
格式 举例
while (表达式) 语句 求1~10的累加和。
成立 循环体语句
}
运行结果:
请输入学生成绩:23凵89凵67凵78凵94凵56凵34凵83凵90 凵67凵48凵72凵81凵65凵74凵87凵73凵67凵90凵98 20名学生的C语言平均成9绩为:71.8
§5.2 do-while语句 P85
格式
do 循环体语句
while(表达式);
举例 求1~10的累加和。
i=1 sum=0
#include "stdio.h"
int main()
i=1 sum=0
{
当i<=10
sum=sum+i i++
int i,sum; i=1; sum=0; while (i<=10) {
输出sum
sum=sum+i; i++; }
printf("sum=%5d\n",sum);
1 求1~100的累加和. 2 求1~10的奇数和. 3 求N!
int main( )
{
int i,j,result;
for(i=1;i<=9;i++)
{
for(j=1;j<=9;j++)
{
result=i*j;
//计算i行j列上的元素值
printf("%d*%d=%-3d\t",i,j,result);
}
printf("\n");
}
return 0;
}
32
result i=1, j=1 1*1
sum=sum+i; i++; } printf("sum=%d\n",sum); }
#include <stdio.h> void main() {
int i,sum=0; scanf("%d",&i); do {
sum=sum+i; i++; } while(i<=10) ; printf("sum=%d\n",sum); }
4、 while语句:先判断,后执行。 do-while语句:先执行,后判断。
17
§5.4 break/continue语句
格式
while (表达式1) {… if (表达式2) break;
… }
while (表达式1) {… if (表达式2) conitue;
… }
举例
结束整 个循环
结束本 次循环
i=1;
1
for(; i<=10;i++)
sum=sum+i;
2
for (i=1; ;i++) sum=sum+i;
3
for (i=1;i<=10 ;)
{
sum=sum+i;
i++;
}
表达式1可以省略, 但其后的分号不
可以省略。
for(i=1; i<=10;i++) sum=sum+i;
没有循环结
?
举例 利用公式:sum=1-3+5-7+9-11…
求前10项的和。
s:变化的符号 i:第i项 n:第i项的绝对值 t:第i项的值 sum:和
#include <stdio.h> void main() {
int s,i,sum,t,n; i=0;n=1,sum=0,t=1,s=1; 运行结果: while(i<10) { sum=sum+t; n=n+2; s=-s; t=s*n; i++; } printf("sum=%d\n",sum); }
… ... sum=0; for (i=1;i<=10;i++)
{if (i>5) break; sum=sum+i;}
printf(“sum=%5d\n”,sum); … ...
… ... sum=0; for (i=1;i<=10;i++)
{if (i<=5) continue; sum=sum+i;}
(1)先求解表达式1;
(2)求解表达式2,若其值为真,则 执行循环体语句,然后执行第(3)步; 若为假,则结束循环,转到第(5)步;
(3)求解表达式3;
(4)转向步骤(2);
(5)循环结束,执行for语句下面的一 个语句。
12
举例 求1~100的累加和。
#include <stdio.h> void main() {
printf(“sum=%5d\n”,sum); … ...
1到5的累加和
6到10的累加和
18
举例 例5.11 分析下面程序的运行结果。P90
i 第1次执行循环 0
i%10 0
条件表达式i%10==0成立,执 行break语句,跳出循环
#include <stdio.h> int main( ) { int i=0,a=0; while(i<20) { if(i%10==0) break; else i++; } i+=11;a+=i; printf("%d\n",a); return 0; }
1、循环体如果}包含一个以上的语句,必须使用复合语句形式。 2、在循环体中,必须有使循环条件趋向于不满足(假)的语句。 3、先执行,后判断。
10
举例 while和do-while循环的比较。
此程序 的功能?
#include <stdio.h> void main() {
int i,sum=0; scanf("%d",&i); while(i<=10) {
束条件,构 成了死循环
i=1 while (1) { sum=sum+i;
i++;}
for(i=1; i<=10;i++) sum=sum+i;
15
几种循环语句的比较
说明
1、 三种循环语句在处理循环问题时,一般可以 相互替代。
2、 对于循环次数固定的问题,用for语句实现 比较简单。
3、 对于循环次数不确定的问题,可用while语 句或do-while语句实现。
§dio.h> void main() {
int i,j; for (i=1;i<=4;i++) {
for (j=1;j<=5-i;j++) printf("%4d",i*j);
printf("\n"); } }
29
第六章 循环结构程序设计
12 3 4 24 6 36 4
printf(“%4d”,i*j); printf(“\n”);
} }
31
第六章 循环结构程序设计
12 4
34 68 9 12
16
举例 例5.16 打印乘法口诀表。 P95
1*1=1 2*1=2 … 9*1=9
1*2=2 … 1*9=9 2*2=4 … 2*9=18
9*2=18 … 9*9=81
#include "stdio.h"
运行结果:
4
举例 求1到10之间的偶数和
#include <stdio.h> void main() {
int i,sum=0; i=1; while (i<=10) { if (i%2==0) sum=sum+i; i++; } printf("%d\n",sum); }
运行结果:
5
举例 求N!
§5.5循环嵌套
思考3
#include <stdio.h> void main() {
int i,j; for (i=1;i<=4;i++) {
for (j=1;j<=4-i;j++) printf(“%4d”,’ ‘);
for (j=5-i;j<=4;j++) printf(“%4d”,i*j);
for (j=1;j<=4;j++) printf("%4d",i*j);
printf("\n"); } }
27
12 3 4 24 6 8 3 6 9 12 4 8 12 16
i=1,j=1 1*1 j=2 1*2 j=3 1*3 j=4 1*4
i=2,j=1 2*1 j=2 ……
i=3 i=4
§5.5循环嵌套
return 0;
}
?
说明 1、循环体如果包含一个以上的语句,必须使用复合语句形式。
2、在循环体中,必须有使循环条件趋向于不满足(假)的语句。
3、先判断后执行。
3
举例 求1到10的奇数和
#include "stdio.h" int main() { int i,sum; i=1; sum=0; while (i<=10) { sum=sum+i; i+=2; } printf("sum=%5d\n",sum); return 0; }
思考1
#include <stdio.h> void main() {
int i,j; for (i=1;i<=4;i++) {
for (j=1;j<=i;j++) printf("%4d",i*j);
printf("\n"); } }
28
第六章 循环结构程序设计
1 24 36 9 4 8 12 16
#include <stdio.h> void main() {
int i=1,n; float fac=1; printf("请输入n:"); scanf ("%d",&n); while (i<=n) { fac=fac*i; i++; } printf("%.0f\n",fac); }
6
运行结果:
j=2 1*2 j=3 1*3 ┇ j=9 1*9
i=2, j=1 2*1 j=2 2*2
┇ j=9 2*9 …… i=9, j=1 9*1 j=2 9*2 ┇ j=9 9*9
结束整个循环
运行结果:11
19
§5.5循环嵌套
第六章 循环结构程序设计
概念 一个循环体内又包含另一个完整的循环结构,称为循环嵌套。
举例 打印乘法口诀表。
for i=1 to 4 for j=1 to 4
输出i*j 换行
#include <stdio.h> void main() {
int i,j; for (i=1;i<=4;i++) {
P81
int i=1;
printf("请输入学生成绩:");
while(i<=20)
{
scanf("%f",&score);
total=total+score;
i++;
}
average=total/20;
printf("20名学生的C语言平均成绩为:% .1f\n",average);
return 0;
printf(“\n”); } }
30
第六章 循环结构程序设计
4 68 6 9 12 4 8 12 16
§5.5循环嵌套
思考4
#include <stdio.h> void main() {
int i,j; for (i=1;i<=4;i++) { for (j=1;j<=i-1;j++)
printf(“%4d”,’ ‘); for (j=i;j<=4;j++)
return 0;
}
运行结果:
8
举例 例5.3 现有某班20名学生的C语言成绩,求该班学生的C语
言的平均成绩。
total : 前i名学生 的成绩的和
score : 每一名学生 的成绩
average : 平均成绩
#include <stdio.h>
int main( )
{ float total=0,score,average;
int i,sum; sum=0; for (i=1;i<=100;i++)
sum=sum+i; printf("sum=%5d\n",sum); }
?
13
i=1; while (i<=100) { sum=sum+i; i++; }
1 求1~50的累加和. 2 求1~100的奇数和. 3 求N!
说明