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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(2)从while语句与for语句的执行流程可以看出,它们的执行机制实质上 都是一样的,都是在循环前先判断条件,只是进入循环的条件的表达方 式不同,while语句的条件为“真”才进入循环体。for语句中的
“表达式3”要做的事情,已经被并入到while结构中的循环体中去做了。 (3)for语句结构一定可以改成while语句结构,但反过来不一定能改。 (4)for语句循环结构中的四个要素:循环变量初始化、循环条件、循环体
i=1 i=2
i = 100
j=1 j=1 j=2
j=1 j=2 …… j = 100
输出 1 1 (第 1 次输出) 输出 2 1 (第 2 次输出) 输出 2 2 (第 3 次输出) ………… 输出 100 1 (第 4951 次输出) 输出 100 2 (第 4952 次输出)
输出 100 100 (第 5050 次输出)
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(i = 1; i <= 100; i++) {
item = 1;
求item的和
for (j = 1; j <= i; j++)
item = item * j;
求i!
用嵌套循环求n 的阶乘的和
int i,j; double sum=0,item; for(i = 1; i <= 100; i++) {
、循环变量值的改变在while语句结构中得到了完全的体现,说明,这两 种循环结构的本质是一样的,程序的作用也是一样的。
作业
While语句的应用:1032、1034、1040: 1197
二重循环(for)应用:1227、1267 1182 1179
for简单应用 1033、1283、1281、1282、 1221、1224、1225
for循环嵌套程序与while()循环语句的使用
一、for循环嵌套程序的概念与设计 二、for循环嵌套程序的运行机制 三、 for循环嵌套程序设计举例 四、 while()语句循环程序的概念及其设计 五、 while()语句程序结构的一般形式与执行流程
内容在教材: P79-86上。
一、for循环嵌套程序的概念与设计
对应行的循环叫做外循环(i),对应列的循 环叫做内循环(j)。
二、for循环嵌套程序的运行机制与举例
for (i = 1; i <= 100; i++) for (j = 1; j <= i; j++) printf ("%d %d\n", i, j );
问题:每给定的一个i值,程序要 打印?行(次)。两个循环全部 结束后共需要打印?行(次)。
}
题号:1315
#include <stdio.h>
#include <math.h>
int main()
{
int count, i, m, n,sum=0;
Biblioteka Baidu
count = 0; /* 用来记录素数的个数*/
for (m = 2; m <= 500; m++) {
n = sqrt(m); /* 后面3行是对给定的m做素数测试 计算*/
#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()语句程序结构的一般形式与执行流程
}
【例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++) if(m % i == 0) break;
n=sqrt(m); for(i = 2; i <= n; i++)
if(i > n) printf("yes\n") else printf("no\n”);
if(m % i == 0) break; if (i > n) {count++ ;
sum=sum+m;}
一定要用嵌套循环的方法才能实现要求。
while (条件表达式) { 循环体语句;
一条语句,可以是常数1或0. 一般书写格式:
}
for(表达式1;表达式2;表达
式3)
表达式

循环条件 {循环体语句}

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