南昌工程学院C语言程序设计基础循环结构PPT学习教案

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

while( ? )
{? 第17}页/共57页
while 语句
do~while 语句
while(表达式) {循环体}
do { 循环体 } while(表达式);
for 循环语句
for(表达式1;表达式2;表达式3) { 循环体}
几种循环的比较
1.三种循环可用来处理同一问题,一般情况可互相代替 2.do while语句至少执行一次循环。 3.while 与for可能一次也不执行。
先判断
while(表达式) ;
循环体
先循环
0 表达式 非0
循环体
0 while(表达式)
非0
后判
断 后循

第14页/共57页
一般情况
两者差不多-进入循环结构执行若干次后结束循
环;
极端情况
(1)死循环
(2) 无法进入循环
i=100,while(i<10)
第15页/共57页
for 循环语句(功能强)
控制循环 是否结束
改变循环条件
二、说明:
1、表达式1可以是逗号表达式,可省略,但其后的分号不能省; 2、表达式2也可省略,此时循环为无穷循环; 3、表达式3也可省略。
第19页/共57页
例 4.5 统计某班级中计算机课程中考试成绩高于80
分的人数(10人),用for 循环语句写该程序。
int fs, j,i=0; for (j=1; j<=10; j++)
南昌工程学院C语言程序设计基础循环结 构
会计学
1
while 语句
语法:while(表达式) {循环体}
说明 (1)while是关键字。 (2)循环体是多条语句,用{}。
while(表达式)
0 表达式 非0 循环体
第1页/共57页
while 语句
i=1; while(i<=10);
循环条 件
{
printf(“%d”,i);
第21页/共57页
1求数列 s=1+2+3…………. n 算法: 循环的条件:i<=n 重复做的:s=s+t;t++(加法运算) 循环的控制:i++等价t++
程序段: s=0; for(i=1;1<=n;i++)
s=s+i;
第22页/共57页
2求数列 s=1+1/2+1/3………….1/n
算法:
第11页/共57页
int i=0,j=1; float fs; while( j<=10 ) {
printf(“输入第 %d 个数”,j); scanf("%f",&fs); if ( fs >95)
i++; j++; } printf( “>95分人为%d“,i);
第12页/共57页
int i=0,j=1; float fs; do {
sum=sum+i; i++; }
1找循环不变式 2考虑问号 3循环条件
第3页/共57页
例1 main() { int i=0; while(i<=10)
{ printf(“*”); i++;}
}
例2 main() {
int i=1,sum=0; while(i<=100)
{ sum=sum+i; i++;}
第25页/共57页
3求数列 s=1-1/2+1/3-1/4………….1/n
程序段: s=0;m=1 for(i=1;i<=n;i++)
{ s=s+1.0/i*m; m=-m; }
第26页/共57页
练习 求数列 s=1-1/3+1/5-1/7+1/9…1/(2n-1)的和
分析:找出通项s=s+1.0/(2*i-1)
{ printf(“请输入第%d个学生成绩\n”, j); scanf(“%d”,&fs); if(fs>80) i++; } printf(“i=%d\n“,i);
第20页/共57页
例2:说明以下循环语句的循环次数。 (1) for (i=0; i<n-1;i++); 答:n-1次 (2) for( i=n; i>=0; i--); 答:n+1次 (3) i=1; while (i<n) ++i; 答:n-1次 (4) i=4; do i--; while(i<0); 答: 1次 (5) m=5;while(m<5) m+=2; 答: 0次 (6) for(i=1,j=2;i>j;i++,j--); 答: 0次
s=s+1.0/i; printf(“s=%f”,s);
第24页/共57页
练习:求数列 s=1/12+1/22+1/32….1/n2的和
int n, i; float s; printf(“ input n:“); scanf(“%d”,&n); for(i=1;i<=n;i++) s=s+1.0/(i*i); printf(“s=%f”,s);
float x;
while(m<=50)
{
printf(“请输入第%d个同学分数:\n”,m);
scanf(“%f”,&x);
if( x>=80)
n++;
/* 累加大于80 分的人数*/
m++;源自}printf(“大于80分的学生人数为%d个\n“,n);
第5页/共57页
从键盘输入5个学生的语文、数学、英语3门成绩,输出每个 学生的总分与平均成绩。
2
公式为:
6
的近似值,精确到
1 12
1 22
1 n2
1 n2
1010
1 算法分析 =sqrt(s*6)
double s=0; int i; for(i=1; 1.0/(i*i)>=1e-10;i++)
s=s+1.0/(i*i); printf("%f\n", sqrt(s*6));
第29页/共57页
printf(“sum=%d”,sum); }
第4页/共57页
例从3键一个盘班输有入学5生个5学0人生,的统语计该文班、学数生学语、文英成绩语中3门高于成8绩0分,输的出人每数 个
。把统学计生结果的在总屏分幕与上平输均出。成绩。
分析:成绩要通过键盘输入,设为x,高于80分的人数为n,总人数为
m。 int m=1,n=0;
统计某班级中计算机课程中成绩高于95分的学生人数。 假定(10人)
1 算法分析 将该班每人计算机课程成绩输入计算机,每输入一个成绩,
就与95进行比较,如果大于95,计数器加1,直到输完10个人成 绩为止。最后显示出统计的人数。
2 数据结构
用fs存放输入的数据,用变量j记录输入数据的个数,数据输 完成时j=10,用变i统计高于95分学生的人数。当成绩输完后, 输出i 累加后的结果。
第32页/共57页
7 求 n!
long int i,n,t=1; printf(“please input n:”); scanf(“%d”,&n); for(i=1;i<=n;i++)
t=t*i; printf(“n!=%ld\n”,t);
第33页/共57页
练习: s=1!+3! +5!........
}
第6页/共57页
1如何确定循环条件? 题目中有明确的提示!从键盘输入5个学生的
2 如何确定循环体?重复执行的语句! 从键盘输入5个学生的语文、数学、英语3门成绩,
输出每个学生的总分与平均成绩。 等价于: (1)输入1个学生的语文、数学、英语3门成绩; (2)计算总分与平均分 (3)输出总分与平均成绩。
printf(“输入第 %d 个数”,j) scanf("%f",&fs); if ( fs >95)
i++; j++; } while( j<=10); printf( “95分人为%d“,i);
第13页/共57页
while和
do-while
while(
do
表达式)
{循环体}
{循 环体} while(表达式)
第8页/共57页
do-while语句
语法: do{ 循环体 }
while(表达式);
循环体 0
while(表达式) 非0
i=1; wdohile(i<=10)
{ printf(“%d”,i); i++; }
while(i<=10);
注意: 1先执行循环体,再判断循环条件,循环至少执行一次。 2while()后的分号不能省略。
4求数列 s=1-1/3+1/5…直到最后一项的绝对值<10-5
int i=1,m=1; float s=0,t=1; while (fabs(t)>=1E-5) {t=1.0/(2*i-1);
s=s+m*t; m=-m; i++;} printf(“s=%f”,s);
第28页/共57页
练习:求
5 求数列
1 1 1 1 1 的和。
6 11
1 5n
1 500
int i; float sum=0; for(i=0;i<=100;i++) sum=sum+1.0/(1+i*5); printf("%f",sum);
第30页/共57页
程序
第31页/共57页
计算并输出n(包括n)以内能被5或9整 除的所 有自然 数的倒 数之和 。
int n,i=1,m=1; float s=0; printf(“input n:“); scanf(“%d”,&n); while(i<=n) {s+=m*1.0/(2*i-1);
m=-m; i++;} printf(“s=%f”,s);
{ s+=pow(-1,i+1)/(2*i-1));
第27页/共57页
第18页/共57页
int sum=0,i=1;
while(i<=10)
{
sum=sum+i;
i++;
}
sum=0; for(i=1;i<=10;i++)
{ sum=sum+i; i++;}结果是什么?
sum=0; for(i=1;i<=10;i++)
sum=sum+i;
for(表达式1; 表达式2;表达式3) { 循 环体 }
long int i,n,t=1,s=0; printf(“please input n:”); scanf(“%d”,&n); for(i=1;i<=n;i++)
第9页/共57页
例1: main() {
int i=1; do
{ printf(“ * ”); i++; }
while(i<=10); }
例2: main() {
int i=1,s=0; do
{ s=s+i; i+=2;
} while(i<=100); printf(“s=%d”,s); }
第10页/共57页
i++;
}
while(表达式)
0 表达式 非0 循环体
改变循环条件
思考:如果没有i++,程序如何执行?
第2页/共57页
10
求sum=∑i
i=1
sum=0 sumsum+1 sum sum+2 sum sum+3 ….. sum sum+10 sum=sum+?
int sum=0,i=1; while(i<=10) {
第16页/共57页
while和for结论:for语句书写结构更清晰
while( 表达式)
for(表达式1; 表达式2; 表达式3) { 循环体 }
while(表达式)
{循环 非0体表达}式
循环体
表达式1;
while( 表达式2
0
)
{
循环体;
表达式3;

表达式1
表达式2
T
F
循环体
表达式3
如何用while写for结构?
语法: for(表达式1; 表达式2; 表达式3)
{ 循环体 }
执行过程:
表达式1
表达式2
T
F
循环体
表达式3
1 先运算表达式1 2 再运算表达式2,真执行循环体 3 再运算表达式3,判断循环条件
若表达式2为假不执行循环体
注意:
(1)表达式1在不在循环里?执行几次? (2)先做循环,再运算表达式3!
若表达式2为假,表达式3如何运算? (3)循环体包含那些?
int j=1; float a,b,c,sum,aver; while(j<=5)
{ printf(“输入第 %d 个学生三门成绩\n”,j); scanf(“%f%f%f“,&a,&b,&c); sum=a+b+c; aver=sum/3; printf(“第%d个学生总分=%f,平均=%f”,j,sum,aver); j++;
第7页/共57页
例4 以下程序从键盘输入5,结果是多少?
#include<stdio.h> main() {
int n,i=1,sum=1; printf(“please input n\n”) scanf(“%d”,&n) while(i<=n)
{ sum=sum*i; i++;}
printf(“sum=%d”,sum); }
循环的条件:i<=n
重复做的:s=s+st=s+1t=.01/.i0/i 循环的控制:i++
(t是什么?)
程序段: s=0; for(i=1;i<=n;i++)
s=s+1.0/i;
第23页/共57页
int i,n; float s=0; printf(“please input n:“); scanf(“%d”,&n); for(i=1;i<=n;i++)
相关文档
最新文档