C语言循环结构 PPT课件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
while (i <= 10){ 循环条件
循环体
sum = sum + i;
i++;
循环变量的改变
}
22:55
第17页
例5-6 从键盘输入一批学生的成绩,计算平均 分。
分析:
➢求累加和 ➢确定循环条件
• 不知道输入数据的个数,无法事先确定循环次数 • 用一个特殊的数据作为正常输入数据的结束标志,
比如选用一个负数作为结束标志。
scanf("%lf", &grade); /* 输入第1个数*/ while (grade >= 0) { /* 输入负数,循环结束 */
total = total + grade;
num++;
Enter grades: 67 88 73 54 82 -1
scanf (“%lf”, &grade); }
22:55
第18页
#include <stdio.h>
Int main(void) { int num;
Enter grades: -1 67 88 73 54 82
double grade, total;
Grade average is 0
num = 0; total = 0;
printf(“Enter grades: \n");
ia
22:55
第7页
这个问题与例5-1 类似,只是所求级 数和的初值和终值 不一样,是由键盘 任意输入的,为避 免计算机错误,要 求初值a要小于终 值b 。
算法流程图如右图:
22:55
第8页
/*exam5_2.c 求几何级数的和*/
#include <stdio.h>
main()
{ int i,j,a,b,sum=0;
一、break语句 break语句的作用是从一种控制结构中跳出来 。
Grade average is 72.80
if(num != 0)
printf(“Grade average is %.2f\n", total/num);
else
printf(" Grade average is 0\n");
return 0;
} 22:55
第19页
§5.3 do~while语句
22:55
第21页
【例5-7】 将例5-6用do_while语 句重写。
22:55
第22页
#include <stdio.h>
Int main(void) { int num;
double grade, total; num = 0; total = 0;
Enter grades: -1 67 88 73 54 82 Grade average is 0
i++; } printf("sum=%d\n",sum); }
22:55
第14页
【例5-5】输入一个正整数n,求n!。
计 算 表 达 式 : n!=n*(n-1)*(n2)*…*2*1。用i代表循环变量, s代表n!的结果值。
编程时既可以采用for循环, 也可以采用while循环
求任意正整数n的阶乘的算 法流程图如图 :
第25页
/*exam5_8.c 求sin(x)的值*/ #include <stdio.h> #include <math.h> main() {
double s,t,x; int n=1; scanf("%lf",&x); t=x; s=x; do {
n=n+2; t=t*(-x*x)/(n*(n-1)); s=s+t; }while(fabs(t)>=1e-7); printf("sin(%lf)=%lf\n",x,s); }
22:55
第12页
<循环语句体>:是用一对花括号括起来的复合语句。
注意:在<循环语句体>中要有使<表达式>的值为假 (或<表达式>的值为零)的语句,否则会使程序出现 无限循环而发生错误。
注意:由于while循环是先判断<表达式>的值,后决 定是否执行<循环语句>,因此,有可能一次也不执 行<循环语句>。
(-x2)/(n*(n-1)) (n=3,5,7,9……) 用s代表sin(x)的值,t代表每一项的值, 则:t=t*(-x2) / (n*(n-1)); s=s+t; x的值是用弧度值表示的 (10=/180弧度),如: 3000.523598775
算法流程图如后图:
22:55
第24页
22:55
22:55
程序运行结果: 1.57 sin(1.570000)=1.000000
第26页
while 和 do-while 的比较
• while 是先判别条件,再决定是否循环; • do-while 是先至少循环一次,然后再根据循
环的结果决定是否继续循环。
循环体语句
假
表达式
真
表达式
假
真 循环体语句
do-while的下一条语句
22:55
第4页
for循环语句注意: ① <初始表达式>可以省略,但须保留分号(;),同时在 for之前必须给循环变量赋值,如:
i=1; for ( ; i<=100; i+ +) sum=sum+i;
② <条件表达式>一般不可省略,否则为无限循环。 如:for(i=1;; i++)
sum =sum+i; 相当于条件总为真,程序会一直不停的执行直到“数据 溢出”。
22:55
第15页
/*exam5_5.c while应用:求n!*/
#include <stdio.h>
main()
{
int i,n; long s;
printf("please enter a integer:\n");
scanf("%d",&n);
if(n>=0)
{
s=1;
i=1;
while(i<=n)
⑤ 条件表达式可以是关系表达式、数值表达式。只要表 达式的值0。就执行循环语句。
如:for( i=0; (c=getchar())!= ‘\n’; i+=c);
22:55
第6页
⑥ 初始表达式、循环表达式可以是逗号表达式 如:for (sum=0, i=1; i<=100; i++, i++)
相当于:sum=0;
while的下一条语句
22:55
第27页
循环语句的选择
if(循环次数已知)
使用for语句
else
/* 循环次数未知 */
if (循环条件在进入循环时明确)
使用while语句
else /* 循环条件需要在循环体中明确 */ 使用do-while语句
22:55
第28页
§5.4 用于循环中的break和continue语句
22:55
第3页
功能:先计算<初始表达式>的值,然后判断<条件表达式> 的值,若该值为“假”,则退出循环,执行循环体下面的 语句;若该值为“真”,则执行<循环体语句>,然后计算 <循环表达式>的值,再判断<条件表达式>的值,重复以上 的操作。
for语句的流程图如图 :
一般情况下,<循环体 语句>是由一对花括括 起来的复合语句。
for(i=1; i<=100; i=i+2) ⑦ for循环也可以嵌套,执行时是由外向里,逐层进行, 先执行外层循环,再进入内层循环;退出时相反,由 里向外逐层退出,先退出内层循环,然后退到上一层 循环。
【例5-2】任意从键盘输入两个整数a、b(a<b),求它
ib
们之间的几何级数的和,数学表达式为。 i
§5.1 for语句
循环的意思就是让程序重复地执行某些语句 。 C语言提供的循环结构有三种:for语句、while语句和 do_while语句。 for语句既可以用于循环次数已知的情况,也可用于循 环次数预先不知道的情况。 for语句的一般形式为:
for (<初始表达式>);<条件表达式>;<循环表达式>) <循环体语句>
{
s=s*i;
i++;
}
printf("%d!=%ld",n,s);
}
else
printf("Invalid input!");
}
22:55
试改为for循环?
第16页
while 和 for 的比较
for (i = 1; i <= 10; i++) sum = sum + i;
i = 1; 循环变量赋初值
do { printf(“Enter grades:");Enter grades: 67 88 73 54 82 -1 scanf (“%lf”, &grade); Grade average is 72.80
total = total + grade;
num++;
} while (grade >= 0) ; /* 输入负数,循环结束 */
22:55
第13页
【例5-4】 将例5-1用while语句重写,求简单几何 级数的和 。
Hale Waihona Puke Baidu
/*exam5_4.c 用while求简单几何级数的和*/ #include <stdio.h>
main()
{
int i=1,sum=0; while(i<=100) {
程序运行结果: sum=5050
sum=sum+i;
22:55
第5页
③ <循环表达式>亦可省略,但在循环语句体中必须有 语句来修改循环变量,以使条件表达式的值在某一时 刻为0,从而能正常结束循环。 如:for(sum=0, i=1; i<=100;)
{ sum = sum +i; i++;
}
④ 三个表达式均省略,即for(;;),为无限循环,程序 中要避免这种情况的发生。
循环语句概述
问题:求1~100的累计和。 根据已有的知识,可以用“1+2+……+100”来求解,但 显然很繁琐。现在换个思路来考虑: 首先设置一个累计器sum,其初值为0,利用sum =sum+ i 来计算(i依次取1、2、……、100),只要解决以下3个问 题即可:
(1)将i的初值置为1; (2)每执行1次“sum = sum+ i”后,i增 1; (3)当n增到101时,停止计算。此时,sum的值就是 1~100的累计和。
do_while语句是另一种用于产生循环动作的语句。 一般形式为:
do { <循环体语句> }while(<表达式>);
do_while语句的流程图 :
功能:先执行一次<循环体语句>,然后计算<表达式>的值, 若该值为“真”,则重复以上的操作,直到该值为“假”, 则退出循环语句,执行下一条语句。
22:55
第20页
注意 :
<循环语句体>应该是用一对花括号括起来的复合 语句。
要有可以使<表达式>的值为“假”(即<表达式>的 值等于零)的语句,否则会使程序出现无限循环而 发生错误。
do_while 循 环 与 while 循 环 的 区 别 , 不 论 情 况 怎 样 , do_while循环中的<循环语句体>至少会执行一次。
printf("Please input two number:\n");
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("sum=%d\n",sum);
}
22:55
第9页
【例5-3】编写一个程序,在屏幕上打印出 具有8行7列的如下图案:
printf(“Grade average is %.2f\n", (total+1)/(num-1));
return 0;
}
22:55
第23页
【 例 5 - 8 】 求 sin(x)=x-x3/3!+x5/5!-x7/7!+… 直 到 最后一项绝对值小于le-7(即10-7)为止。 分析:
多项式从第二项起,每一项都是前一项乘以一个因子,
printf("*"); printf("\n"); } }
22:55
第11页
§5.2 while语句
While语句也是一种用于产生循环动作的语句, 一般形式为:
while(<表达式>) <循环体语句>
while语句的流程图
功能:先计算<表达式>的值,若 该值为“假”,则跳出循环,执 行循环体后面的语句;若该值为 “真”,则执行<循环体语句>, 然后回过头来再检查<表达式>的 值,重复以上的操作。
这是一个很有规律的图案, 可采用二重循环嵌套的方 式:第1层控制行数,第2 层控制列数。
算法流程图如下图:
22:55
第10页
/*exam5_3.c 打印图案*/ #include <stdio.h> main() {
int i,j; for(i=1;i<=8;i++) { for(j=1;j<=7;j++)
22:55
第1页
根据已有的知识,单独实现每一步都不难。 但是,由于需要经常使用这种重复计算结 构(称为循环结构),C语言提供了循环语 句来实现,以简化、并规范循环结构程序 设计。
在C语言中,可用以下语句实现循环:
(1)用for语句。
(2)用do-while语句。
(3)用while语句。
22:55
第2页