第四章循环结构

上传人:汽*** 文档编号:568575897 上传时间:2024-07-25 格式:PPT 页数:56 大小:629.01KB
返回 下载 相关 举报
第四章循环结构_第1页
第1页 / 共56页
第四章循环结构_第2页
第2页 / 共56页
第四章循环结构_第3页
第3页 / 共56页
第四章循环结构_第4页
第4页 / 共56页
第四章循环结构_第5页
第5页 / 共56页
点击查看更多>>
资源描述

《第四章循环结构》由会员分享,可在线阅读,更多相关《第四章循环结构(56页珍藏版)》请在金锄头文库上搜索。

1、第第 四四 章章 循环结构循环结构4.1 用格里高利公式求用格里高利公式求的近似值的近似值 (while语句语句)4.2 统计一个整数的位数统计一个整数的位数 (do-while语句语句)4.3 判断素数判断素数 (break 和和 continue 语句语句)4.4 求求1!+2!+.+100! (循环嵌套循环嵌套)4.5 循环结构程序设计循环结构程序设计本章要点本章要点n什么是循环什么是循环? 为什么要使用循环为什么要使用循环? 如何实现循环如何实现循环?n实现循环时,如何确定循环条件和循环体实现循环时,如何确定循环条件和循环体?n怎怎样样使使用用while 和和do-while语语句句实

2、实现现次次数数不不确确定定的的循环循环?nwhile 和和do-while语句有什么不同语句有什么不同?n如何使用如何使用break语句处理多循环条件语句处理多循环条件?n如何实现多重循环如何实现多重循环?uforfor语句一般应用形式语句一般应用形式:for( 循环变量赋初值循环变量赋初值; 循环条件循环条件; 循环变量增值循环变量增值) 循环体语句循环体语句 #include void main() int i,sum=0; for( i=1; i=100; i+ ) sum+=i; printf(%d,sum);for (表达式表达式1;表达式;表达式2;表达式;表达式3) 循环结构回顾

3、循环结构回顾确定循环确定循环次数次数4.1 用格里高利公式求用格里高利公式求的近似值的近似值使用格里高利公式求使用格里高利公式求的近似值,要求精的近似值,要求精确到最后一项的绝对值小于确到最后一项的绝对值小于104。4.1.1 程序解析程序解析4.1.2 while语句语句 4.1.3 输入一批学生的成绩,统计平均分输入一批学生的成绩,统计平均分4.1.1 程序解析求程序解析求的近似值的近似值#include#include void main( ) int denominator, flag; double item, pi; flag = 1; denominator = 1 ; item

4、 = 1.0; pi = 0; while (fabs (item) = 0.0001) item = flag * 1.0 / denominator; pi = pi + item; flag = -flag; denominator = denominator +2; pi = pi * 4; printf ( “pi = %fn”, pi);不确定循不确定循环次数环次数for( i=1; i=100; i+ )4.1.2 while 语句语句while (条件条件) 循环体语句循环体语句; 真真假假while下一条语句下一条语句表达式表达式循环体语句循环体语句循环条件循环条件循环体循环

5、体u一般形式一般形式:while (表达式表达式) 循环体语句;循环体语句;u执行流程执行流程:当表达式为真(非当表达式为真(非0值)时,执行值)时,执行循环体语句;直到表达式为假,循环终止循环体语句;直到表达式为假,循环终止表达式表达式循环体循环体假假(0)真真(非非0)while4.1.2 while语句语句u特点:先判断表达式,特点:先判断表达式,后执行循环体(当型)后执行循环体(当型)求求1+2+1+2+100+100的和的和 sum=0; i=1; while(i=100) sum=sum+i; i+; 此处此处无分无分号号 ; ;u一般形式一般形式:while(表达式表达式) 循环

6、体语句循环体语句4.1.2 while语句语句说明:说明:循环体有可能一次也不执行循环体有可能一次也不执行(一开始条件(一开始条件就不成立)就不成立)当表达式为真(非当表达式为真(非0 0值)时,即可继续执值)时,即可继续执行循环行循环循环体包括一个以上语句的用循环体包括一个以上语句的用 组成复组成复合语句合语句有使有使循环循环趋向结束的趋向结束的语句语句,如如 i+i+无限循环无限循环: : 也即无循环结束条件也即无循环结束条件 while(1)while(1) 循环体循环体; ;下列情况,退出下列情况,退出whilewhile循环循环:l条件表达式不成立(为零)条件表达式不成立(为零)l循

7、环体内遇循环体内遇 breakbreak u特点:先判断表达式,特点:先判断表达式,后执行循环体(当型)后执行循环体(当型) sum=0; i=1; while(i=100) sum=sum+i; i+; printf(“%d”,sum);用一对大括号用一对大括号 将若将若干语句顺序组合在一干语句顺序组合在一起就是一个复合语句起就是一个复合语句例例 用用while循环求循环求1+2+100的累加和的累加和 #include void main() int i,sum=0; i=1; while(i=100) sum=sum+i; i+; printf(%d,sum);循环初值循环初值循环终值循

8、环终值循环变量增值循环变量增值循环条件循环条件循环体循环体循环结构的五要素:循环结构的五要素: 循环初值,循环条件,循环终值,循环变量增值,循环体循环初值,循环条件,循环终值,循环变量增值,循环体例例 用用while循环求循环求1+2+n的累加和的累加和 #include void main() int i,sum=0; i=1; while(i=100) sum=sum+i; i+; printf(%d,sum);求前求前n项的和项的和可用可用scanf读入读入n#include void main() int i,sum=0,n; i=1; printf(“Enter n: ”); sca

9、nf(“%d”,&n); while(i=n) sum=sum+i; i+; printf(%d,sum);while 语句和语句和for语句语句都是在循环前先判断条件都是在循环前先判断条件while 和和 for 的比较的比较while 语句说明语句说明表达式表达式1;while (表达式表达式2) 循环体语句循环体语句; 表达式表达式3;for(表达式表达式1; 表达式表达式2; 表达式表达式3) 循环体语句循环体语句for (i = 1; i = 10; i+) sum = sum + i; i = 1; while (i = 10) sum = sum + i; i+; 求求110的累

10、加和的累加和程序解析求程序解析求的近似值的近似值例例4-1#include#include void main( ) int denominator, flag; double item, pi; flag = 1; denominator = 1 ; item = 1.0; pi = 0; while (fabs (item) = 0.0001) item = flag * 1.0 / denominator; pi = pi + item; flag = -flag; denominator = denominator +2; pi = pi * 4; printf ( “pi = %fn

11、”, pi);精确到最后一项的精确到最后一项的绝对值小于绝对值小于104 ,即即|item| 104, 达达到精度要求,循环到精度要求,循环结束结束fabs(item) 0.0001精度要求给出了循环结束条件精度要求给出了循环结束条件程序解析求程序解析求的近似值的近似值#include#include void main( ) int denominator, flag; double item, pi; flag = 1; denominator = 1 ; item = 1.0; pi = 0; while(fabs (item) = 0.0001) item = flag * 1.0 /

12、 denominator; pi = pi + item; flag = -flag; denominator = denominator +2; pi = pi * 4; printf ( “pi = %fn”, pi);item=0.0 ?#include #include void main() int s; float n,t,pi; t=1; s=0; n=1.0; m=1; while(fabs(t)=1e-6) s=s+t; n=n+2; m=-m; t=m/n; pi=s*4; printf(pi=%fn,pi);例例4-2 从键盘输入一批学生的成绩,计算平均分从键盘输入一批学

13、生的成绩,计算平均分分析:分析:求累加和求累加和确定循环条件确定循环条件n不知道输入数据的个数,无法事先确定循环次数不知道输入数据的个数,无法事先确定循环次数n用用一一个个特特殊殊的的数数据据作作为为正正常常输输入入数数据据的的结结束束标标志志,比比如选用一个负数作为结束标志如选用一个负数作为结束标志。4.1.3 统计输入的一批学生的平均成绩统计输入的一批学生的平均成绩例例4-2 从键盘输入一批学生的成绩,计算平均分从键盘输入一批学生的成绩,计算平均分#include void main() int num; double grade, total; num = 0; total = 0;pr

14、intf(“Enter grades: n); scanf(“%lf”, &grade); /* 输入第输入第1个数个数*/while (grade = 0) /* 输入负数,循环结束输入负数,循环结束 */ total = total + grade; num+; scanf (“%lf”, &grade);if(num != 0) printf(“Grade average is %.2fn, total/num);else printf( Grade average is 0n);4.2 统计一个整数的位数统计一个整数的位数从键盘读入一个整数,统计该数的位数。从键盘读入一个整数,统计该数

15、的位数。4.2.1 程序解析程序解析4.2.2 do - while语句语句 4.2.3 循环语句的选择循环语句的选择例例4-3#includevoid main ( ) int count, number; count = 0;printf(“Enter a number: );scanf (%d, &number) ;if (number 0) number = -number; do number = number / 10; count +; while (number != 0);printf(It contains %d digits.n, count);4.2.1 程序解析统计一

16、个整数的位数程序解析统计一个整数的位数while (number != 0) number = number / 10; count +;4.2.2 do - while 语句语句do 循环体语句循环体语句 while (表达式表达式);先循环先循环后判断后判断真真假假表达表达式式循环体语句循环体语句do-while的下一条语句的下一条语句n while 是先判别条件,再决定是否循环;是先判别条件,再决定是否循环;n do-while 是是先先至至少少循循环环一一次次,然然后后再再根根据据循环的结果决定是否继续循环。循环的结果决定是否继续循环。while 和和 do-while 的比较的比较真

17、真假假表达式表达式循环体语句循环体语句do-while的下一条语句的下一条语句真真假假while的下一条语句的下一条语句表达式表达式循环体语句循环体语句while (number != 0) number = number / 10; count +;do number = number / 10; count +; while (number != 0);例例 while和和dowhile比较比较#include void main() int i,sum=0; scanf(%d,&i); do sum+=i;i+; while(i=10); printf(%d,sum);#include

18、void main() int i,sum=0; scanf(%d,&i); while(i=10) sum+=i;i+; printf(%d,sum);结论:当结论:当 whilewhile后的表达式第一后的表达式第一次的值为次的值为“真真”时,两种结果相时,两种结果相同,否则不同同,否则不同输入:输入:10输出:输出:sum=10 输出:输出:sum=10输入:输入:11 输出:输出:sum=11 输出:输出:sum=0三种循环结构:求三种循环结构:求1100的和的和 sum=0; i=1; while(i=100) sum=sum+i; i+; printf(%d,sum); sum=0

19、; i=1; do sum+=i; i+; while(i=100); printf(%d,sum); sum=0; for(i=1; i=100; i+) sum+=i; printf(%d,sum); 几种循环的比较几种循环的比较1 1、三种循环语句在处理循环问题时、三种循环语句在处理循环问题时, ,一般可以相互替代一般可以相互替代2 2、对于循环次数不确定的问题,可以用、对于循环次数不确定的问题,可以用whilewhile或或do-whiledo-while语句来实现。语句来实现。 whilewhile语句为先判断后执行,语句为先判断后执行,do-whiledo-while语语句则先执行

20、后判断。句则先执行后判断。3 3、对于、对于循环次数确定的问题,用循环次数确定的问题,用for语句更方便。语句更方便。for语句也语句也为先判断后执行。为先判断后执行。4.3 判断素数判断素数输入一个正整数输入一个正整数m,判断它是否为素数。判断它是否为素数。4.3.1 程序解析程序解析4.3.2 break语句语句 和和continue语句语句4.3.1 程序解析判断素数程序解析判断素数算算法法:一一个个正正整整数数m,除除了了能能被被1和和它它本本身身(m)整整除除外外,不不能能被其它数整除,该数就是素数。被其它数整除,该数就是素数。设设 i 取值取值 2, m-1 n如如果果m不不能能被

21、被该该区区间间上上的的任任何何一一个个数数整整除除,即即对对每每个个i,m%i 都不为都不为0,则,则m是素数是素数n只要找到一个只要找到一个i,使使m%i为为0,则,则m肯定不是素数肯定不是素数m不可能被大于不可能被大于 m/2 的数整除的数整除 i 取值取值 2, m-1 、 2, m/2 、 2, for(i = 2; i m/2) printf(yesn)else printf(non”);int main(void) int i, m;printf(“Enter a number: );scanf (%d, &m);for (i = 2; i m/2 ) printf(%d is a

22、 prime number! n, m); else printf(No!n); 例例4-4源程序判断素数源程序判断素数for (i = 2; i = m/2; i+) if (m % i = 0) printf(No!n); else printf(%d is a prime number! n, m); 根据素数定义,在根据素数定义,在for循循环中,只要有一个环中,只要有一个i能满能满足足m%i=0,则,则m就不是就不是素数,不用在检查素数,不用在检查m是是否能被其他数整除,可否能被其他数整除,可提前结束循环提前结束循环 n一般形式:一般形式:break; n功能:功能:放放在循环语句和

23、在循环语句和switch语句中语句中,用于,用于终终止并跳出循环体或止并跳出循环体或switch语句语句,接着执行循环,接着执行循环语句或语句或switch语句后面的语句。语句后面的语句。n说明:说明:break语句应该和语句应该和if语句配合使用,即条件满语句配合使用,即条件满足时,才执行足时,才执行break跳出循环跳出循环break只能只能终止并跳出最近一层的终止并跳出最近一层的循环循环(嵌套嵌套循环时循环时)。如果要跳出多层循环,用如果要跳出多层循环,用goto语句语句 break只只能用于循环语句和能用于循环语句和switch语句语句break语句语句求前求前5050项和项和for(

24、i=1; i50) break; sum+=i; printf(%d,sum);switch表达式表达式语句组语句组1break;语句组语句组2break;语句组语句组nbreak;语句组语句组break;.const 1const 2const ndefaultcase 表达式表达式2break;.假假(0)真真(非非0)for表达式表达式1表达式表达式3循环体循环体例例lt-area: break举例:举例:按不同的半径,按不同的半径,输出圆输出圆面积,面积,面积大于面积大于100时停止时停止#include #define PI 3.14159void main() int r; flo

25、at area; for(r=1;r100) break; printf(r=%d,area=%.2fn,r,area); 通常通常break语语句总是和句总是和if语语句连在一起句连在一起if(area=100) printf(r=%d,area=%.2fn,r,area); else break; 例例lt-char break举例:举例:小写字母转换成大写字母小写字母转换成大写字母,直至输入非直至输入非小写小写字母字母字符。字符。#include void main() char c; while(1) c=getchar(); if(c=a & c=z) putchar(c-a+A);

26、 else break; putchar(n);#include void main() char c; while(1) c=getchar(); if(c=a & c=A & c=Z) putchar(c); else break; putchar(n);只将小写字只将小写字母转成大写母转成大写字母输出字母输出将小写字母转成将小写字母转成大写字母输出大写字母输出如果是大写字母,如果是大写字母,则直接输出则直接输出一般形式:一般形式:continue;功能:结束本次循环,跳过循环体中尚未执行功能:结束本次循环,跳过循环体中尚未执行的语句,进行下一次是否执行循环体的判断的语句,进行下一次是否执

27、行循环体的判断,如果条件成立,继续执行循环。如果条件成立,继续执行循环。说明:说明:n仅用于循环语句中仅用于循环语句中ncontinue 语句仅结束语句仅结束本次本次循环,但循环,但break语句则是结束语句则是结束整个整个循环过程。循环过程。例例 输出输出1到到100之间能被之间能被9整除的数整除的数#includevoid main() int i; for(i=1; i=100; i+) if(i%9!=0) continue; printf(%dn,i); continue 语句语句表达式表达式2continue;.假假(0)真真(非非0)for表达式表达式1表达式表达式3表达式表达式

28、2break;.假假(0)真真(非非0)for表达式表达式1表达式表达式3分析:分析:i为循环变量,从为循环变量,从110 十个整数十个整数n, 用用scanf读入读入 正数的个数放入正数的个数放入num中中 正数的和放入正数的和放入sum中中 正数的平均值为正数的平均值为aver= sum/num例例li-count 求输入的十个整数中求输入的十个整数中正整数的个数正整数的个数及其和与平均值及其和与平均值#include void main() int i, n, num=0; float sum=0,aver; printf(“请输入请输入1010个数:个数:”); for(i=0;i10

29、;i+) scanf(%d,&n); if(n0) num+; sum+=n; else continue; if(n0) num+; sum+=n; 行不?行不?注意:注意:scanf的输入格式是用的输入格式是用12 45 69还是用还是用12,45,69for循环中循环中scanf的输入格式要用空格或回车的输入格式要用空格或回车4.4 求求1! + 2! + . + 100!累乘求阶乘,累加求和累乘求阶乘,累加求和(循环循环100次次) item = i ! sum = sum + item; 4.4.1 程序解析程序解析计算计算 i 的阶乘的阶乘4.4.2 嵌套循环嵌套循环用循环计算用循

30、环计算 i 的阶乘以及阶乘的和的阶乘以及阶乘的和4.4.2 嵌套循环嵌套循环 求求6!阶乘阶乘 item = 1; for (j = 1; j = 6; j+) item = item * j;累加和累加和for(i = 1; i = 100; i+) item = 1; for (j = 1; j = i; j+) item = item * j; sum = sum + item; 求阶乘求阶乘 1!=1 2!=1*2 =1!*2 3!=1*2*3=2!*3 j! = 1*2*.* j=(j-1)!*j 求阶乘的和求阶乘的和1! + 2! + . + 100!例例4-6 源程序源程序#in

31、clude void 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! = %en, sum); 求阶乘求阶乘 1!=1 2!=1*2 =1!*2 3!=1*2*3=2!*3

32、 j! = 1*2*.* j=(j-1)!*j内层循环的初始化内层循环的初始化for(i = 1; i = 100; i+) item = 1; for (j = 1; j = i; j+) item = item * j; sum = sum + item; 求求1! + 2! + . + 100!item = 1;for(i = 1; i = 100; i+) for (j = 1; j = i; j+) item = item * j; sum = sum + item; 求求1! + 1!*2! + + 1!*2!*100! 例例lt4-star :根据输入的边长,输出正方形:根据输入

33、的边长,输出正方形#includevoid main() int i,j,n; printf(input n: ); scanf(%d,&n); while(n0&n=20) for(i=1;i=n;i+) for (j=1;j=n;j+) printf(“ * ); printf(n); printf(input n: ); scanf(%d,&n); 例例lt4-99 循环嵌套,输出九九表循环嵌套,输出九九表1234567891234567892468101214161836912151821242791827364554637281.ij#include void main() int

34、i,j; for(i=1;i10;i+) printf(%4d,i); printf(n-n); for(i=1;i10;i+) for(j=1;j10;j+) printf(j=9)?%4dn:%4d,i*j);变量变量 i 控制行,变量控制行,变量 j 控制列控制列i=1, j 从从19循环,输出循环,输出 i*ji=2, j 从从19循环循环, 输出输出 i*jjifor(i=1;i10;i+) for(j=1;j10;j+) printf(%4d,i*j); printf(“n”);12345678912436991827364554637281.例例lt4-99a 循环嵌套,输出九九

35、表循环嵌套,输出九九表ij#include void main() int i,j; for(i=1;i10;i+) printf(%4d,i); printf(n-n); for(i=1;i10;i+) for(j=1;j=i;j+)printf(j=i)?%4dn:%4d,i*j);变量变量 i 控制行,变量控制行,变量 j 控制列控制列i=1, j 从从 1i 循环,输出循环,输出 i*ji=2, j 从从 1i 循环循环, 输出输出 i*jfor(i=1;i10;i+) for(j=1;ji;j+) printf(%4d,i*j); printf(“n”);i10printf假假(0)

36、真真(非非0)i=1j+j=1j=10真真(非非0)假假(0)i+for(i=1;i10;i+) for(j=1;j10;j+) printf(j=9)?%4dn:%4d,i*j);外循环外循环1次次内循环内循环10次次4.5 循环程序设计循环程序设计n循环程序的实现要点:循环程序的实现要点:归纳出归纳出哪些操作需要反复执行?哪些操作需要反复执行? 循环体循环体这些操作在什么情况下重复执行这些操作在什么情况下重复执行? 循环条件循环条件n选用合适的循环语句选用合适的循环语句for while do-whilen循环具体实现时考虑(循环条件):循环具体实现时考虑(循环条件):事先给定循环次数,首

37、选事先给定循环次数,首选for通通过过其其他他条条件件控控制制循循环环,考考虑虑while或或do-while#include int main(void) int i, mark, max, n; printf(Enter n: ) ; scanf (%d, &n); printf(Enter %d marks: , n); scanf (%d, &mark); /* 读入第一个成绩读入第一个成绩 */ max = mark; /* 假设第一个成绩是最高分假设第一个成绩是最高分 */ for (i = 1; i n; i+ ) scanf (%d, &mark); if (max mark)

38、 max = mark; printf(Max = %dn, max); return 0;例例4-7 输入一批学生的成绩,求最高分输入一批学生的成绩,求最高分(for)mark maxmaxmarkEnter n: 5Enter 5 maks:67 88 73 54 82Max = 88Enter n: 0#include void main() int mark, max; printf(“Enter marks:); scanf (%d, &mark); /* 读入第一个成绩读入第一个成绩 */ max = mark; /* 假设第一个成绩最高分假设第一个成绩最高分 */ while (

39、mark = 0) if(max mark) max = mark ; scanf (%d, &mark ); printf(Max = %dn, max);例例4-7 输入一批学生的成绩,求最高分输入一批学生的成绩,求最高分(while)例例lt4-chicken: 现有现有100元元,要求买要求买100只鸡,假定母鸡每只只鸡,假定母鸡每只3元,公鸡每只元,公鸡每只2元,小鸡每只元,小鸡每只5角。列出所有可能的买鸡方案。角。列出所有可能的买鸡方案。设母鸡个数为设母鸡个数为m,公鸡个数为,公鸡个数为g, 小鸡个数为小鸡个数为x。根据题意,有以下公式成立:根据题意,有以下公式成立:0.5*x+2

40、*g+m*2=100 #includevoid main() int x,g,m,n=0; for(m=0;m=100;m+) for(g=0;g=100;g+) x=100-m-g; if(0.5*x+2*g+m*3=100) n+; printf(“n第第%d种方案是:种方案是:” ,n); printf(“x=%d, g=%d, m=%dn”,x,g,m); #includevoid main() int x,g,m,n=0; for(x=0;x=100;x+) for(g=0;g=100;g+) m=100-x-g; if(0.5*x+2*g+m*3=100) n+; printf(“

41、n第第%d种方案是:种方案是:”,n); printf(“x=%d, g=%d, m=%dn”,x,g,m); 优化程序优化程序1、各种鸡至少买一只、各种鸡至少买一只2、各种鸡最多能买几只、各种鸡最多能买几只例例4-10 求求Fibonacci序列:序列:1,1,2,3,5,8,13,的前的前10项项 1, 1, 2, 3, 5, 8, 13, x1 x2 x x1 x2 xx1 = x2 = 1;x = x1 + x2;x1 = x2;x2 = x;x1 = 1;x2 = 1;printf (%6d%6d, x1, x2 ); /* 输出头两项输出头两项 */for (i = 1; i =

42、8; i+) /* 循环输出后循环输出后8项项 */ x = x1 + x2; /* 计算新项计算新项 */ printf(%6d, x); x1 = x2; /* 更新更新x1和和x2 */ x2 = x; 求求Fibonacci序列:序列:1,1,2,3,5,8,13,的前的前n项项例例4-11 古典算术问题搬砖头古典算术问题搬砖头某地需要搬运砖块,已知男人一人搬某地需要搬运砖块,已知男人一人搬3块,女人块,女人一人搬一人搬2块,小孩两人搬一块。块,小孩两人搬一块。问用问用45人正好搬人正好搬45块砖,有多少种搬法?块砖,有多少种搬法?for (men = 0; men = 45; men

43、+) for (women = 0; women = 45; 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=%dn, men, women, child);例例4-11 源程序源程序(2)for (men = 0; men = 15; men+)for (women = 0; women = 22; women+) child = 45 women men; if (men * 3 +

44、women * 2 + child * 0.5 = 45) printf(men=%d women=%d child=%dn, men, women, child);for (men = 0; men = 45; men+) for (women = 0; women = 45; 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=%dn, men, women, child);比较循环次数比

45、较循环次数4.5 循环程序设计习题循环程序设计习题习题习题4-9 输入一个整数,从高位开始逐个数字输出。输入一个整数,从高位开始逐个数字输出。12345 /10000 = 1 12345 %10000 =23452345 /1000 = 2 2345%1000 =345345 /100 = 3 345%100 =4545 /10 = 4 45%10 =55/1= 5 5%1=5(1) 如何得到如何得到10000 找输入数据对应的幂找输入数据对应的幂 pow=1; temp = x; while (x != 0) pow = pow * 10; x =x /10; pow = pow /10;(

46、2) 每次循环每次循环pow缩小缩小1/10(3) pow=0 结束结束例例4-8 将一个正整数逆序输出将一个正整数逆序输出确定:确定:循环条件循环条件和和循环体循环体(循环不变式循环不变式) 12345 5 4 3 2 112345 % 10 = 5 12345 / 10 = 1234 1234 % 10 = 4 1234 / 10 = 123 123 % 10 = 3 123 / 10 = 12 12 % 10 = 2 12 / 10 = 1 1 % 10 = 1 1 / 10 = 0 结束结束循环不变式循环不变式 x%10 x=x/10循环结束条件循环结束条件 x=0scanf( “%d

47、”, &x);while (x != 0) digit = x %10; x = x/10 ; printf( %d , digit);用用do-while实现?实现?例例4-9 求求500以内的全部素数,每行输出以内的全部素数,每行输出10个个for (m = 2; m = 500; m+) if (m是素数是素数) printf( %d, m);n = sqrt(m);for(i = 2; i n) printf(yesn)else printf(non”);for (m = 2; m = 500; m+) n=sqrt(m); for(i = 2; i n) printf(%d, m) 例例4-9 源程序源程序#include #include int main(void) int count, i, m, n; count = 0; for (m = 2; m = 500; m+) n = sqrt(m); for (i = 2; i n) /* 如果如果m是素数是素数 */ printf(%6d, m); count+; if (count %10 = 0) printf(“n”);

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 幼儿/小学教育 > 幼儿教育

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号