C语言程序设计6-2

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

while(i<=n/2&& w= =0) while(i<=sqrt(n) && w= =0) while(i<=sqrt(n+1) && w= =0)
例4 P129 6.7 1)分解因子 1)分解因子
main() { int a, sum,i; printf(“input a data: “); scanf(“%d”,&a); printf(“%d its factors are : 1 ”, a); sum=1; for (i=2; i<=a;i++) {if(a%i= =0) {printf(“%d ”,i); sum=sum+i; a=a/i; i=1;} } }
多层循环
for( ) 均可互相嵌套
3) for( ; ; ) {.... for ( ; ; ) {...} }
2) do {.... do {...} while( ); } while;
内层循环
三. 执行
例 1 P129 6.4

5
第6章 第2节
从外层循环进入内层循环, 从外层循环进入内层循环, 只有当内层循环执行完后才返回到外层循环
例1 设圆半径分别为 设圆半径分别为1,2,….10, 计算圆面积 输出小于 计算圆面积,,输出小于 输出小于100的面积值。 的面积值。 的面积值 循环次数不能确定, 可以假设为半径为1,2,…10, 在循环体中引入 解: 循环次数不能确定 可以假设为半径为 一个条件, 判断面积是否>100, 如成立 则结束循环。 如成立, 则结束循环。 一个条件 判断面积是否 # include “stdio.h” main() {int r; float area; float pi=3.14159; for(r=1;r<=10;r++) {area=pi*r*r; if(area>100.0) break; printf(“area=%f\n”,area);} }
例4: 输入一个大于或等于 的正整数 判断其是否为素数(算法:P28,图2.23) 输入一个大于或等于3的正整数 判断其是否为素数(算法: 的正整数, 图
main() main() {int n,w,i; {int n,w,i; w=0; w=0; i=2; scanf(“%d”,&n); scanf(“%d”,&n); for(i=2; i<=n-1&&w = = 0; i++) do{ if(n%i = =0) w=1; if(n%i = =0) w=1; if(w= =0) printf(“%d is a prime”, n) else i++; else printf(“%d is not a prime”, n) } while( i<=n-1&& w= =0) } if(w= =0) printf(“%d is a prime”, n); ; else printf(“%d is not a prime”, n); ; main() } {int n,i; scanf(“%d”,&n); for(i=2; i<=n-1; i++) if(n%i = =0) break; if(i>=n) printf(“%d is a prime”, n) else printf(“%d is not a prime”, n) }
# include “math.h” main() {float x, resul; long i; printf(“input a data”); scanf(“%f”,&x); resul=x; for(i=1;i<=100000;i++) {resul=resul/3.0; if(fabs(resul)<=0.001) break; } printf(“resul=%f”,resul); }
第6章 第9节
<法3> 用单层循环 单层循环 认为: 认为: a+aa +aaa+aaaa+..... a*100+第二 项 第二 a*10+第一项 第一项 main() {int a, n, i; long sum, term; printf(“input a,n=“); scanf(“%d,%d”,&a,&n); sum=0;term=0; for(i=1; i<=n; i++) { term=term+a; sum=sum+term; a=a*10; } printf(“resulte=%ld\n”,sum); }
三重循环
法二 在100——999范围内,将所有的三位数分解,再判断 范围内, 范围内 将所有的三位数分解, main( ) { int i,j,k,a; for (a=100; a<=999;a++) {k=a%10; j=(a/10)%10; i=a/100; if(a= = i*i*i+j*j*j+k*k*k) printf(“%6d”,a); } }
为下一次作准备
第6章 第9节
例3 P129 6.6 打印“水仙花”数 打印“水仙花” 穷举法” 即用所有可能的数据试算,如条件成立, 解:法一 用“穷举法”,即用所有可能的数据试算,如条件成立,则输出结 果 main( )
{ int i,j,k; for (i=1; i<=9; i++) for(j=0;j<=9;j++) for(k=0;k<=9;k++) { if (i*100+j*10+k==i*i*i+j*j*j+k*k*k) printf(“%6d”, i*100+j*10+k);} }
第6章 第6节
§6.6
一. 概念
循环的嵌套(难点) 循环的嵌套(难点)
形成
循环中又包含另一个(或多个) 循环中又包含另一个(或多个)循环 二. 使用 while() , do .... While()
1) while( ) {.... while( ) {....} } 4) while( ) {.... do {....} while( ); }
例6.5 将100~200之间不能被 整除的数输出 之间不能被3整除的数输出 ~ 之间不能被
根据题意,凡能被 整除的数 就不输出。 整除的数, 根据题意,凡能被3整除的数,就不输出。 main() { int n; for(n=100; n<=200; n++) {if (n%3= = 0) continue; printf(“%d”,n); }
第6章 第8节
二 . continue语句 continue语句 结束本次循环。即跳过循环体中 后面尚未执行的语句, 结束本次循环。即跳过循环体中continue后面尚未执行的语句, 后面尚未执行的语句 接着进行下一次是否循环的判断。 跳过一轮循环 跳过一轮循环) 接着进行下一次是否循环的判断。(跳过一轮循环
n个a
例2 P129 6.3 求Sn=a+aa+aaa+...+aa....a 之值,其中 为一个数值。例如: 之值,其中a为一个数值 例如: 为一个数值。 2+22+222+2222+22222(此时 此时n=5), n由键盘输入。 由键盘输入。 此时 由键盘输入 解: <法1> 用双重循环 认为: 认为: a+aa +aaa+aaaa+.....
main() { int i=1; long mul=1; while(i<=5) {mul=mul*i; * i++;} printf(“mul=%ld\n”,mul);}
printf(“sum=%ld\n”,sum); }
求j!
用for 语句 main() {long mul, sum=0.0; int i,j; for(j=1;j<=5;j++) {{mul=1.0; for(i=1;i<=j;i++) 求j! mul=mul*i; } sum=sum+mul;} printf(“sum=%ld\n”,sum); } 例2 打印“九九表” 打印“九九表” 1*1=1 2*1=2 2*2=4 3*1=3 3*2=6 3*3=9 ..... 9*1=9 9*2=18 9*3=27 ....
求:1+2!+3!+4!+5!

n
n
求: 5!
main() { int j=1, sum=0; while(j<=5) {sum=sum+j; j++;} printf(“sum=%d\n”,sum);} 解:
main( ) {long mul, sum=0; int i,j=1; while(j<=5) {i=1,mul=1; while(i<=j) {mul=mul*i; i++;} sum=sum+mul; j++ }
第6章 第8节
例2 任一数值,连续除以 ,直到商的绝对值 任一数值,连续除以3,直到商的绝对值≤0.001为止 为止 循环次数不能确定, 解: 循环次数不能确定 可以假设一个大的循环次数 , 在循环体中 引入一个条件, 判断商是否≤0.001, 如成立 则结束循环。 如成立, 则结束循环。 引入一个条件 判断商是否
第6章 第6节
9*9=81
解: 有9行, 可用 for(i=1; i<=9; i++) ..... 行 行共有i例 第i行共有 例 行共有 for(j=1;j<=i; j++)
第6章 第8节
程序 main() { int i, j; for (i=1;i<=9;i++) { for(j=1;j<=i;j++j); printf(“\n”); } }
100*a+10*a+a * *
main() {int a , n, i, j, t; long sum1,sum2; printf(“input a,n=“); scanf(“%d,%d”,&a,&n); sum1=0; for(i=1;i<=n;i++) { sum2=a;t=1; for(j=2;j<=i;j++) {t=t*10; sum2=sum2+t*a;} sum1=sum1+sum2; } printf(“resulte=%ld”,sum1); }
§6.7 §6.8
一. break语句 break语句
几种循环的比较 几种循环的比较
——自学
break语句和 break语句和continue语句 语句和continue语句
1).用于 用于switch语句中。作用:从switch语句中跳出 语句中。 用于 语句中 作用: 语句中跳出 两种用途 2).用于循环中。 用于循环中。 用于循环中 作用: 当前层循环体中跳出 循环体中跳出, 为止, 作用:从当前层循环体中跳出,即循环到此 为止, 不再执行(中止整个循环)。 不再执行(中止整个循环)。
}
§6.9
程序举例
第6章 第9节
例1 用下面公式计算 ,直到某一项的绝对值小于 -6 用下面公式计算π,直到某一项的绝对值小于10
π / 4 = 1 1 / 3 + 1 / 5 1 / 7 + ...
解: <法2> 用do…while(); #include”math.h” #include”stdio.h” main() {int s; float n, t, pi; pi=0; n=1.0;s=1;t=s*1.0/n; do{pi=pi+t; n=n+2; s=(-1)*s; s=(为下一累加作准备 t=1.0*s/n; } while(fabs(t)>1ewhile(fabs(t)>1e-6); pi=pi*4.0; printf(“pi=%f\n”,pi); }
# include “math.h” main() {float x, resul; long i; printf(“input a data”); scanf(“%f”,&x); result=x; do resul=resul/3.0; while (resul>0.001) printf(“resul=%f”,resul); }
第6章 第9节
<法2> 用单层循环 单层循环 认为: 认为: a+aa +aaa+aaaa+..... 第二项aa*10+a 第二项 第一 项a*10+a main() {int a, n, i; long sum, term; printf(“input a,n=“); scanf(“%d,%d”,&a,&n); sum=0;term=0; for(i=1; i<=n; i++) { term=term*10+a; sum=sum+term; } printf(“resulte=%ld\n”,sum); }
相关文档
最新文档