计算机一级第4章_第1页
计算机一级第4章_第2页
计算机一级第4章_第3页
计算机一级第4章_第4页
计算机一级第4章_第5页
已阅读5页,还剩88页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、41 for 语句语句for(i=1;i=100;i+)sum=sum+2;sum=sum+1;sum=0;sumsum=sum+3; sum=sum+100;sum=sum+i;规律是:规律是:#include main( ) int i, sum=0; ( i=1; i=100; i+ ) sum=sum+i; printf(1+2+3+.+100=%dn,sum); for语句的一般形式语句的一般形式for( 表达式表达式1; 表达式表达式2; 表达式表达式3 ) 循环体循环体 执行过程执行过程表达式表达式2处理表达式处理表达式1执行循环体执行循环体非非00处理表达式处理表达式3for(

2、 表达式表达式1; 表达式表达式2; 表达式表达式3 ) 循环体循环体 for ( i = 1; i = 100; i = i + 1 ) printf ( “*n” ); 输出输出100行行10个星号个星号“*” 语句是?语句是? 【例【例42】键盘输入十个学生的成绩,】键盘输入十个学生的成绩,输出各成绩和平均成绩。输出各成绩和平均成绩。 printf(n); ave=(float)sum/10; printf(ave=%fn,ave); for( i=1; i=10; i+) scanf(%d,&score); printf(%d ,score); sum=sum+score; m

3、ain( ) int i , score, sum=0; float ave; printf(Input score:n);Input score:95 100 65 45 60 89 78 80 83 70 95 100 65 45 60 89 78 80 83 70ave=76.500000 运行结果如下:运行结果如下:【例【例43】在】在3100之间所有之间所有3的倍数中,的倍数中,找出个位数为找出个位数为2的数。的数。 将最小的将最小的3的倍数的倍数3赋给赋给i 当当i的值小于等于的值小于等于100时时 输出输出i的值的值 i个位数是个位数是2?真真 假假 i的值增的值增3#inclu

4、de main( ) int i; for ( i=3; i=100; i=i+3 ) if( i%10=2 ) printf(%4d,i); printf(n); 【例【例44】输出】输出1!、2!、3!、n! 其中其中n!= 123n n的值从键盘输入的值从键盘输入 #include main ( ) int i,n; float fac; fac=1.0; printf(Input n:); scanf ( %d, &n ); for ( i=1; i=n; ) fac=fac*i; printf( %d!=%.0fn,i,fac); i+; #include main ( )

5、int i,n; float fac; fac=1.0; printf(Input n:); scanf ( %d, &n ); for ( i=1; i=n; i+ ) fac=fac*i; printf( %d!=%.0fn,i,fac); i+; 运行结果如下:运行结果如下:Input n:20 1!=12!=2 19!=12164509600422297620!=2432902023163674620 (注意,只保证前(注意,只保证前67位是准确的)位是准确的) fac=1.0;for ( i=1; i=n; i+ ) fac= fac * i ; printf( %.0fn,

6、fac); 2【例【例45】在两行上分别按顺序和逆序输】在两行上分别按顺序和逆序输出出26个英文大写字母。个英文大写字母。 #include main ( ) int i; for ( i=0; i=0; i- ) printf(%c , A+i);printf(n);printf(n);演示演示n用设断点的方法用设断点的方法 调试例调试例45程序程序【例【例46】 从键盘输入十个数,求其中最大值。从键盘输入十个数,求其中最大值。 #include main( ) int a,max,i; printf(“nmax=%dn,max); scanf(%d,&a); printf(%d ,

7、a);printf(Input data:);max=a;for ( i=1; i=9; i+ ) scanf(%d,&a); printf(%d ,a); if ( maxa )max=a;【例【例47】求】求 100141312111001413121110014131211 for ( i=1; i=100; i+ ) sum=sum+(float) 1 / i; sign=1; sign=-sign;signsign=1sum=sum+1/1i=1sign=-1sum=sum-1/2i=2sign=1sum=sum+1/3i=3 sign=1; for ( i=1; i=100

8、; i+ ) sum=sum+(float) sign/ i; sign=-sign; sum=0.0;printf(sum=%fn,sum); #include main( ) int i,sign; float sum; 运行结果运行结果sum=0.688172【例【例48】输出斐波纳契】输出斐波纳契(Fibonacci)级数级数1、1、2、3、5、8、13、 的前的前三十项。三十项。 规律:规律:前两项的值各为前两项的值各为1,从第三项起,从第三项起,每一项都是前两项的和。每一项都是前两项的和。 要求:要求:一行输出一行输出6项项n求解过程求解过程 +abnext 第第5项项+abnex

9、t 第第3项项abnext 第第4项项abnext 第第6项项+ 112812323535next=a+b;a=b; b=next;规律:规律: main( ) int i,n; long a,b,next; a=b=1; printf(%10ld%10ld,a,b); n=2;处理前两项处理前两项for ( i=3; i=30; i+ ) next=a+b; a=b; b=next; 处理后处理后28项项printf(%10ld,next); n+; if ( n%6=0 ) printf(n); 输出并控制换行输出并控制换行 运行结果如下:运行结果如下: 1 1 2 3 5 8 13 21

10、 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393 196418 317811 514229 83204042 while 语句语句【例【例49】从键盘输入若干个非从键盘输入若干个非0数据,数据,求它们的和。用求它们的和。用0结束循环的执行。结束循环的执行。 提示提示: 本题需要用循环结构本题需要用循环结构 用用for语句不方便语句不方便 下面用下面用while 语句语句 #include stdio#include .hmain( )main( ) int a,sum=0

11、; int a,sum=0; printf(Input data:n); scanf printf(Input data:n); scanf(%d,&a); (%d,&a); while ( a!=0 ) while ( a!=0 ) printf printf(%4d,a);(%4d,a); sum=sum+a; sum=sum+a; scanf scanf(%d,&a);(%d,&a); printf(nsum printf(nsum=%dn,sum); =%dn,sum); whilewhile关键字关键字 第一次运行:第一次运行:Input data:I

12、nput data:11 22 33 44 55 66 77 88 99 0 1 2 11 22 33 44 55 66 77 88 99sum=495第二次运行:第二次运行:0 (空一行)(空一行)sum=0当出现死循环时,可以用当出现死循环时,可以用Ctrl+Break强行结束执行强行结束执行 sum的初值的初值 while语句的一般形式:语句的一般形式: while ( 表达式表达式 ) 循环体循环体执行过程执行过程 表达式表达式循环体循环体非非00while ( 表达式表达式 ) 循环体循环体【例【例410】用】用while循环求循环求 1+2+3+100 #include main(

13、 ) int ,sum=0; printf(sum=%dn,sum); while ( i=100 ) sum=sum+i;i=1i+; 不同循环语句之间不同循环语句之间可以相互转换可以相互转换 【例【例411】用公式】用公式 求求的近似值,直到最后一项的绝对值小的近似值,直到最后一项的绝对值小于于10-4为止。为止。 71513114编程点拨:编程点拨: n先计算先计算 的近似值,再求的近似值,再求的近似值的近似值n不易确定从第几项起,绝对值小于不易确定从第几项起,绝对值小于10-4n本例用本例用while语句语句 47151311main ( ) int , ; float pi, pi=

14、sum*4 ; printf(pi=%fn,pi); #include 加入一行加入一行 while ( ) fabs(next) = 1e-4sum=sum+next;next=1.0,sum=0.0;sign=-sign;sign=1i=i+2; i=1next=(float)sign/i;fabs是库函数是库函数 求绝对值求绝对值 【例【例412】编写加、减、乘、除运算程序。】编写加、减、乘、除运算程序。执行效果:执行效果:请输入第请输入第1题,用题,用3#3退出。退出。2*3.5 2.000000*3.500000=7.000000请输入第请输入第2题,用题,用3#3退出。退出。3/0

15、 除数为除数为0!请输入第请输入第2题,用题,用3#3退出。退出。5.5&4.7 &是非法字符是非法字符!请输入第请输入第2题,用题,用3#3退出。退出。结束循环结束循环3#3 编程点拨:编程点拨:n本题用本题用while语句较方便语句较方便n加、减、乘、除、非法共五个分支加、减、乘、除、非法共五个分支 用用switch语句,且带语句,且带break语句语句 #include #include main ( ) int i=1,flag=0; float a,b,result; char sym; clrscr( ); printf(请输入第请输入第1题,用题,用3#3退出。退

16、出。n); scanf( %f%c%f,&a,&sym,&b ); while ( sym!=# ) 见下一页见下一页while ( sym!=# ) switch ( sym ) case +: result=a+b; break; case -: result=a-b; break; case *: result=a*b; break; case /: if ( b=0 ) flag=1; else result=a/b; break; default : flag=2; 见下一页见下一页while ( sym!=# ) 见上一页见上一页 if ( flag = 0

17、 ) printf(%f%c%f=%fn,a,sym,b,result); i+; if ( flag = 1 ) printf(除数为0!n); if ( flag = 2 ) printf(%c是非法运算符!n,sym); printf(请输入第%d题,用3#3退出。n,i ); scanf( %f%c%f,&a,&sym,&b ); i 说明:说明:n数据要与格式说明符相匹配。不要加空格数据要与格式说明符相匹配。不要加空格n编程时应考虑周全编程时应考虑周全n具有容错能力具有容错能力43 do - while 语句语句ndo-while和和while很相似很相似区别

18、:区别:nwhile 先判断表达式的值,后执行循环体先判断表达式的值,后执行循环体ndo-while先执行循环体,再判断表达式先执行循环体,再判断表达式 【例【例413】从键盘输入若干个非】从键盘输入若干个非0数据,求它们的和。用数据,求它们的和。用0结束循环结束循环的执行的执行 #include main( ) int a,sum=0; printf(Input data:n); do scanf(%d,&a); printf(%4d,a); sum=sum+a; while ( a!=0 ) ; printf(nsum=%dn,sum); do关键字关键字第一次运行第一次运行:In

19、put data:Input data:11 22 33 44 55 66 77 88 99 0 1 2 11 22 33 44 55 66 77 88 99 0sum=495第二次运行:第二次运行:0 0sum=0sum的初值与的初值与0的和的和 do-while语句的一般形式:语句的一般形式: do 循环体循环体 while ( 表达式表达式 ) ; 执行过程执行过程 非非0表达式表达式循环体循环体0do 循环体循环体 while ( 表达式表达式 ) ;ndo-while先执行一次循环体,后判断表先执行一次循环体,后判断表达式达式循环体至少被执行一次循环体至少被执行一次while先判断表

20、达式,后执行循环体先判断表达式,后执行循环体循环体有可能一次也不被执行循环体有可能一次也不被执行三种循环可以互相转换三种循环可以互相转换根据不同情况,选择具体循环根据不同情况,选择具体循环说明:说明:【例【例414】从键盘输入的一串字符(用】从键盘输入的一串字符(用#结束输入)按如下规则进行转换:结束输入)按如下规则进行转换: 如果为大写字母,则先转换为小写字母如果为大写字母,则先转换为小写字母 将将a转换为转换为c b转换为转换为d x转换转换为为z y转换为转换为a z转换为转换为b 其它字符不变其它字符不变【例【例414】从键盘输入的一串字符(用】从键盘输入的一串字符(用#结束输入)按如

21、下规则进行转换:结束输入)按如下规则进行转换:n如果为大写字母,则先转换为小写字母如果为大写字母,则先转换为小写字母n将将a转换为转换为c b转换为转换为d x转换转换为为z y转换为转换为a z转换为转换为bn其它字符不变其它字符不变a b c d x y z提示:提示:nif ( ch=A & chz if ( chz) ch=ch-26; 大写转小写大写转小写if ( ch=a & ch=z ) ch=ch+2; 小写转其后第二个字母小写转其后第二个字母#include main( ) char ch; printf(Input data:n); do ch=getcha

22、r( ); if ( ch=A & ch=a & chz) ch=ch-26; putchar( ch ); while ( ch!=#); Input data:UfYrq 2 yLb 3?# whats 2 and 3?# 不希望输出不希望输出#include main( ) char ch; printf(Input data:n); ch=getchar( ); while ( ch != # ) if ( ch=A & ch=a & chz) ch=ch-26; putchar( ch ); ch=getchar( ); 4.4 break语句和语句和

23、continue语句语句441 循环体中使用循环体中使用break语句语句 442 循环体中使用循环体中使用continue语句语句 4.4.1 循环体中使用循环体中使用break语句语句n结构化程序设计只有一个入口、一个出口结构化程序设计只有一个入口、一个出口 顺序、分支、循环结构满足其要求顺序、分支、循环结构满足其要求n为提高执行效率,常要提前终止循环为提高执行效率,常要提前终止循环 常用常用break语句实现提前终止循环语句实现提前终止循环 【例【例415】break语句示例语句示例#include main( ) int i,sum=0; for ( i=1; i=10; i+ ) i

24、f ( i%3 = 0 ) break; sum=sum+i; printf(i=%d,sum=%dn,i,sum); 运行结果:运行结果:i=3,sum=3 break; 关键字关键字 1和和2的和的和 i10 说明说明提前退出循环提前退出循环执行过程执行过程输出i和sum的值i=1i=i+1i10假真sum=sum+ii%3=0真假循环体第一个出口第一个出口第二个出口第二个出口 请注意请注意nbreak语句语句 只能在只能在switch语句体和循环体内使用语句体和循环体内使用n功能是功能是 提前退出提前退出本层本层的的switch语句体或循环体语句体或循环体 【例【例416】判断从键盘输入

25、的自然数】判断从键盘输入的自然数(大于(大于1)是不是素数。)是不是素数。 素数(质数)是指除了素数(质数)是指除了1和它本身和它本身外,没有其它因子的大于外,没有其它因子的大于1的整数。的整数。 例如例如2 3 13 17 23 等是素数等是素数4 12 20 等不是素数等不是素数: else #include main( ) int i , a; printf(Input a(1):); scanf(%d,&a); for ( i=2; ia-1 ) 用用2、3、a-1去试去试 若找到因子提前退出若找到因子提前退出 若真,说明正常退出,是素数若真,说明正常退出,是素数 若假,说明提

26、前退出,不是素数若假,说明提前退出,不是素数 printf(%d is a prime number.n,a); printf(%d is not a prime number.n,a); 第一次运行:第一次运行:Input a(1):11 11 is a prime number.第二次运行:第二次运行:Input a(1):15 15 is not a prime number. 运行情况运行情况 实际上要判断实际上要判断a是不是素数,只需用是不是素数,只需用2、3、 去除去除a即可即可 程序改写如下:程序改写如下: a#include #include main( ) int i,a,e

27、nd; printf(Input a(1):); scanf(%d,&a); end=(int)sqrt(double)a); for ( i=2; iend ) printf(%d is n, a); else printf(%d is not n, a); end的值可以是的值可以是a-1、a/2、 a更优化更优化 4.4.2 循环体中使用循环体中使用continue语句语句【例【例417】continue语句示例语句示例#include main( ) int i,sum=0; for ( i=1; i10 说明说明正常退出循环正常退出循环执行过程执行过程输出i和sum的值i=1

28、i=i+1i10假真sum=sum+ii%3=0真假循环体没增加出口没增加出口nbreak和和continue的的区别:区别: break结束本结束本层层循环循环 continue结束本结束本次次循环循环 45 循环语句的嵌套循环语句的嵌套 【例【例418】(】(1)输出以下内容:输出以下内容: * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 分析:分析:一行输出一行输出10个个“* ”的语句是的语句是for ( j=1; j=10; j+ ) printf(* ); 输出三行,每行输出输出三行,每行输出10个个“*”的语

29、句是的语句是for ( j=1; j=10; j+ ) printf(* );printf(n);for ( j=1; j=10; j+ ) printf(* );printf(n);for ( j=1; j=10; j+ ) printf(* );printf(n);分析:分析:一行输出一行输出10个个“* ”的语句是的语句是for ( j=1; j=10; j+ ) printf(* ); 输出三行,每行输出输出三行,每行输出10个个“*”的语句是的语句是for ( j=1; j=10; j+ ) printf(* );printf(n);for ( j=1; j=10; j+ ) pri

30、ntf(* );printf(n);for ( j=1; j=10; j+ ) printf(* );printf(n);for ( i=1; i=3; i+ ) for ( j=1; j=10; j+ ) printf(* ); printf(n); 【例【例418】(】(2)输出以下内容:输出以下内容: 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 #include main( ) int i,j; for ( i=1; i=3; i+ ) for ( j=1; j=10; j+ ) printf(n); pr

31、intf(%3d,j);每列上输出的值与每列上输出的值与j有关有关 【例【例418】(】(3)输出以下内容:输出以下内容: * * * * * * #include main( ) int i,j; for ( i=1; i=3; i+ ) for ( j=1; ; j+ ) printf(* ); printf(n); j=i每行输出的数量与每行输出的数量与i有关有关 n在一个循环体内又包含另一个循环。称在一个循环体内又包含另一个循环。称它为它为嵌套循环嵌套循环。nfor while do-while 可以可以互相嵌套互相嵌套 提示:提示: 例例44中已介绍求中已介绍求n!的程序。为了求各阶乘的程序。为了求各阶乘之和,在求之和,在求n!的程序段外面还要使用循环。的程序段外面还要使用循环。 【例【例419】求】求1!+2!+3!+20!main( ) int n,i; float fac, sum=0; printf(sum=%en,sum); for ( n=1;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论