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