for循环语句嵌套程序与while()语句循环程序的设计

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

二、for循环嵌套程序的运行机制与举例
for (i = 1; i <= 100; i++) for (j = 1; j <= i; j++) printf ("%d %d\n", i, j );
i=1 i=2 j=1 j=1 j=2 j=1 i = 100 j=2 …… j = 100
问题:每给定的一个i值,程序要 打印?行(次)。两个循环全部 结束后共需要打印?行(次)。
(2)从while语句与for语句的执行流程可以看出,它们的执行机制实质上 都是一样的,都是在循环前先判断条件,只是进入循环的条件的表达方 式不同,while语句的条件为“真”才进入循环体。for语句中的 “表达式3”要做的事情,已经被并入到while结构中的循环体中去做了。 (3)for语句结构一定可以改成while语句结构,但反过来不一定能改。 (4)for语句循环结构中的四个要素:循环变量初始化、循环条件、循环体 、循环变量值的改变在while语句结构中得到了完全的体现,说明,这两 种循环结构的本质是一样的,程序的作用也是一样的。
分析嵌套循环的执行过程 for(i = 1; i <= 100; i++) { item = 1; 求item的和 for (j = 1; j <= i; j++) 求i! item = item * j; sum = sum + item; }

对应于外层循环变量 i 的每个值
内层循环变量 j 从1到i变化一个轮 次;
作业
While语句的应用:1032、1034、1040: 1197 二重循环(for)应用:1227、1267 1182 1179 for简单应用 1033、1283、1281、1282、 1221、1224、1225

【例1315】 求500以内的素数个数与全部之和
for (m = 2; m <= 500; m++) if (m是素数)
某个数m是否素数的判定: 对500个数m的素数判定: n = sqrt(m); for (m = 2; m <= 500; m++){ for(i = 2; i <= n; i++) n=sqrt(m); if(m % i == 0) break; for(i = 2; i <= n; i++) if(i > n) printf("yes\n") if(m % i == 0) break; else printf("no\n”); if (i > n) {count++ ; sum=sum+m;} 一定要用嵌套循环的方法才能实现要求。 }
for(表达式1; 表达式2; 表达式3){
循环体语句
} 表达式1; while (表达式2) { for的循环体语句; 表达式3; }
for (i = 1; i <= 10; i++) sum = sum + i;
i = 1;
循环变量赋初值
while (i <= 10){
循环条件
循环体 sum = sum + i; i++; 循环变量的改变 }
题号:1315 #include <stdio.h> #include <math.h> int main() { int count, i, m, n,sum=0; count = 0; /* 用来记录素数的个数*/ for (m = 2; m <= 500; m++) { n = sqrt(m); /* 后面3行是对给定的m做素数测试 计算*/ for (i = 2; i <= n; i++) if (m % i == 0) break; /* 只要有一个i 可整除,则m就不是素数,跳出i循环,
/* 45人正好搬45块砖,程序版本2 */ #include <stdio.h> int main() { int child, women, men; for(men = 0; men <= 15; men++) for(women = 0; women <= 22; women++){ child = 45 - women - men; /*由总人数的限制求小孩数*/ if(men * 3 + women * 2 + child * 0.5 == 45) printf("men=%d,women=%d,child=%d\n", men, women, child); } return 0; }
对while语Байду номын сангаас应用几点说明
(1)while语句中的表达式可以是任意合法的表达式(比如常量1,0等)。
比如,while(1) 表示条件永远为真,而while(0) 表示条件永远为假。循 环体语句与for 语句结构中的循环体一样,是一个“语句段”。在
while(1){ }循环体中,一定有一个“if() break; ”语句退出死循环。
for循环嵌套程序与while()循环语句的使用
一、for循环嵌套程序的概念与设计 二、for循环嵌套程序的运行机制 三、 for循环嵌套程序设计举例 四、 while()语句循环程序的概念及其设计 五、 while()语句程序结构的一般形式与执行流程
内容在教材: P79-86上。
一、for循环嵌套程序的概念与设计

内外层循环变量不能相同 分别用 i 和 j
(1179)
#include <stdio.h> 问题:如果给定的不是一个固定数100, 而是一个可变的量n,程序怎么改? int main() { int i, j; double item, sum; /* item 存放阶乘 */ sum = 0; for (i = 1; i <= 100; i++) { item = 1; /*内层循环的初始化,每次求阶乘都从1开始 */ for (j = 1; j <= i; j++) /* 内层循环算出 item = i! */ item = item * j; sum = sum + item; } printf("1! + 2! + 3! + … + 100! = %e\n", sum); return 0; }
三、for嵌套循环程序设计示例
【例1179】求1! + 2! + …. + 100!
用for循环计算 n 的阶乘 int i; double item=1; for (i = 1; i <= n; i++){ item = item *i ; } 用嵌套循环求n 的阶乘的和 int i,j; double sum=0,item; for(i = 1; i <= 100; i++) { item = 1; for (j = 1; j <= i; j++) item = item * j; sum = sum + item; }
转到m循环上。 */
if(i > n){ /* 对m是素数情况处理 */ sum=sum+m; count++; } } printf("%d %d\n", count,sum); }
【例】 古典算术问题-搬砖头
某工地需要搬运砖块,已知男人一人搬3块,女人一人搬2块,小孩两 人搬一块。 问:用45人正好搬45块砖,有多少种搬法?(派工方法) 分析:这是一个组合的问题,由三个因素决定搬法的种数。 ①每类人的数量(待求的量); ②每类人能搬的砖块数量(已知的约束条件); ③砖块的总数和人数的总数(已知的约束条件)45块、45人; 各类人数的取值与其他类人数的取值无关,但最后加起来正好45人。 因此,对于每类人数的取值要反复地试,最后确定正好满足45人搬45 块砖的人数组合。显然要用循环程序计算,其中,以每类人的人数作为 循环变量,在允许的取值范围内循环,这样就要用到三重循环。(枚举 法、试凑法)
1182题与此题相似 /* 45人正好搬45块砖,程序版本1 * 全枚举法/
#include <stdio.h> int main() { int child, women, men; for(men = 0; men <= 15; men++) /*最多需要几个男人?*/ for(women = 0; women <= 22; women++) /*最多需要几个女
【例1032】用while()循环语句编写程序
#include <stdio.h> int main() { int a,b; while(scanf(“%d%d”,&a,&b) != EOF)//EOF输入方法: enter,ctrl+z,enter { printf("%d\n",a+b); } return 0; }
四、 while()语句循环程序的概念及其设计
在循环程序的实际的应用过程中,我们会碰到很多没 有办法能以具体数值的方式,明确给出的循环结束条件 的问题。这时候就没有办法用for()循环语句来编写程序 了,需要引进while()循环语句结构。
另一种方式的循环结束条件: 当“scanf()函数”的返回 值=EOF时,表示后面已经没有数据可读了,因此循环就可以 结束了。 这个循环结束条件可用“逻辑表达式”表示为: 当 (scanf(“%d%d”,&a,&b)!=EOF) 时,还要继续做循 环动作,否则,循环结束。 “当”=while();
人?*/
for(child = 0; child <= 45; child++) /*最多需要几个儿童?*/ if(men+women+child==45 && men*3+women*2+child*0.5==45) printf("men=%d,women=%d,child=%d\n", men, women, child); return 0; }
输出 1 1 (第 1 次输出) 输出 2 1 (第 2 次输出) 输出 2 2 (第 3 次输出) ………… 输出 100 1 (第 4951 次输出) 输出 100 2 (第 4952 次输出) 输出 100 100 (第 5050 次输出)
答案:共需要打印:1+2+3+‥‥‥100=5050次。
五、while()语句程序结构的一般形式与执行流程
while (条件表达式) { 循环体语句; }
表达式

一条语句,可以是常数1或0. 一般书写格式: for( 表达式 1 ;表达式 2 ;表达 式3) {循环体语句} 循环条件

{
循环体语句
}
循环体
While的下一条语句
While语句的执行流程
把for语句改写成while语句
【1227】打印以n为边长的矩阵图形的程序设计 #include <stdio.h> int main() { int n,i,j; scanf("%d",&n); for(i=1;i<=n;i++){ for(j=1;j<=n;j++) printf("#"); printf("\n"); } return 0; 对应行的循环叫做外循环(i),对应列的循 } 环叫做内循环(j)。
相关文档
最新文档