C语言新教材PPT课堂课件-第九节(习题课)

上传人:枫** 文档编号:567697806 上传时间:2024-07-22 格式:PDF 页数:82 大小:1.09MB
返回 下载 相关 举报
C语言新教材PPT课堂课件-第九节(习题课)_第1页
第1页 / 共82页
C语言新教材PPT课堂课件-第九节(习题课)_第2页
第2页 / 共82页
C语言新教材PPT课堂课件-第九节(习题课)_第3页
第3页 / 共82页
C语言新教材PPT课堂课件-第九节(习题课)_第4页
第4页 / 共82页
C语言新教材PPT课堂课件-第九节(习题课)_第5页
第5页 / 共82页
点击查看更多>>
资源描述

《C语言新教材PPT课堂课件-第九节(习题课)》由会员分享,可在线阅读,更多相关《C语言新教材PPT课堂课件-第九节(习题课)(82页珍藏版)》请在金锄头文库上搜索。

1、一一一一、数数数数的的的的分分分分离离离离、素素素素数数数数、随随随随机机机机数数数数、最最最最大大大大最最最最小小小小值值值值:( (1) 1) 判判判判断断断断一一一一个个个个数数数数是是是是否否否否为为为为素素素素数数数数素素数数:只只能能被被1和和它它本本身身整整除除的的数数。 要要判判断断一一个个正正整整数数m是是不不是是素素数数,需需需需要要要要用用用用大大大大于于于于1 1且且且且小小小小于于于于它它它它本本本本身身身身的的的的正正正正整整整整数数数数去去去去除除除除它它它它,只只只只要要要要它它它它能能能能被被被被其其其其中中中中的的的的一一一一个个个个数数数数整整整整除除除除

2、,就就说说明明它它不不不不是是是是素素素素数数数数。若若所所有有的的数数都都不不能能被被它它整整除除,说说明明它它是是素素数数。输输输输出出出出31003100之之之之间间间间的的的的所所所所有有有有素素素素数数数数main() int i,n,k=0; for(n=3;n100;n+) for(i=2;in;i+) if(n%i= =0) break;if(n%i= =0) break; if(i= =n) if(i= =n) printfprintf(“%4d”,n);(“%4d”,n); k+; if(k%10= =0) printf(“n”); ( (2) 2) 随随随随机机机机数数数

3、数 函函数数random(random(int int num)num)用用于于产产生生0,num)区区间间的的一一个个整整数数。其其包包含含在在“ “stdlibstdlib.h”.h”头头文文件件中中 为为了了使使每每一一次次运运行行都都产产生生一一组组新新的的随随机机数数,可可以以使使用用randomize()randomize()函函函函数数数数是是每每次次均均产产生生不不同同的的随随机机数数。其其包包含含在在头头文文件件“ “time.h”time.h”中中( (3) 3) 最最最最大大大大值值值值与与与与最最最最小小小小值值值值 我我们们需需要要将将将将最最最最大大大大值值值值(或

4、或或或最最最最小小小小值值值值)保保保保存存存存在在在在一一一一个个个个变变变变量量量量中中中中(假假设设设设变变量量名名为为max和和min),变变变变量量量量的的的的初初初初值值值值我我们们一一般般设设为为数数数数列列列列中中中中的的的的第第第第一一一一个个个个值值值值。产产产产生生生生2020个个个个5050到到到到200200之之之之间间间间的的的的随随随随机机机机整整整整数数数数,并并并并求求求求出出出出其其其其中中中中的的的的素素素素数数数数、最最最最大大大大值值值值和和和和最最最最小小小小值值值值。#include #include stdlibstdlib.h.h#includ

5、e time.h#include time.hmain() int a20,b20,max,min,k,i,j=0; randomize();randomize(); for(i=0;i20;i+) ai=random(151)+50;产产产产生生生生2020个个个个50,20050,200区区区区间间间间内内内内的的的的随随随随机机机机数数数数 for(i=0;i20;i+) for(k=2;kai;k+)for(k=2;kai;k+) if(ai%k=0) break; if(ai%k=0) break; if(k=ai)if(k=ai) bj=ai; j+; for(i=0;ij;i+)

6、 printf(%4d,bi); printf(n);从从从从a a数数数数组组组组中中中中找找找找出出出出其其其其中中中中的的的的素素素素数数数数放放放放在在在在b b数数数数组组组组中中中中输输输输出出出出b b数数数数组组组组中中中中的的的的各各各各个个个个元元元元素素素素 max=a0; min=a0;max=a0; min=a0; for(i=1;imax) max=ai; if(aimin) min=ai; printf(max=%4d,min=%4dn,max,min);求求求求出出出出a a数数数数组组组组中中中中的的的的最最最最大大大大值值值值与与与与最最最最小小小小值值值值

7、(4 4)数数数数字字字字分分分分离离离离 有有些些题题中中经经常常要要要要求求求求将将将将一一一一个个个个数数数数中中中中的的的的每每每每一一一一位位位位数数数数字字字字或或或或者者者者其其其其中中中中的的的的某某某某些些些些位位位位数数数数字字字字输输输输出出出出,就就需需要要使使用用到到数数字字分分离离技技术术。 如如在在求求求求解解解解水水水水仙仙仙仙花花花花数数数数、完完完完数数数数、同同同同构构构构数数数数、最最最最大大大大公公公公约约约约数数数数和和和和最最最最小小小小公公公公倍倍倍倍数数数数以以以以及及及及费费费费波波波波拉拉拉拉切切切切数数数数列列列列等等等等内内内内容容容容

8、时时都都需需要要使使用用到到数数字字分分离离技技术术水水水水仙仙仙仙花花花花数数数数:是是一一个个三三位位数数,其其各各位位数数字字的的立立方方和和等等于于该该数数本本身身。如如:153=13+53+33完完完完数数数数:一一个个数数等等于于它它的的所所有有因因子子(不不包包括括它它本本身身)之之和和。如如:6=1+2+3同同同同构构构构数数数数:一一个个数数等等于于它它的的平平方方数数的的右右端端。如如5的的平平方方是是25最最最最大大大大公公公公约约约约数数数数:使使用用辗辗转转相相除除法法进进行行求求解解例例例例:给给给给出出出出一一一一个个个个不不不不多多多多于于于于4 4位位位位的的

9、的的正正正正整整整整数数数数,要要要要求求求求:求求求求出出出出它它它它是是是是几几几几位位位位数数数数,并并并并且且且且按按按按逆逆逆逆序序序序打打打打印印印印出出出出各各各各位位位位数数数数字字字字 main() int i,j,k=0; scanf(%d,&i); while(i!=0i!=0) printf(%4d,i%10i%10); i=i/10; k+; printf(nk=%dn,k);P120P120P120P120习习习习题题题题6.6.6.6.6 6 6 6 求求求求水水水水仙仙仙仙花花花花数数数数,如如如如:153=13+53+33 对对100100999999的的每每

10、个个数数进进行行处处理理判判断断: 分分别别取取出出这这个个数数的的个个位位数数、十十位位数数、百百位位数数; 判判断断这这个个数数是是否否等等于于其其个个位位数数、十十位位数数、百百位位数数的的立立方方和和; 如如果果是是,说说明明这这个个数数是是水水仙仙花花数数,就就输输出出这这个个数数。for i=100 to 999a=i/100b=i/10%10c=i%10i =a3+b3+c3YN输输出出水水仙仙花花数数i i对对100100999999的的每每个个数数进进行行处处理理判判断断: 分分别别取取出出这这个个数数的的个个位位数数、十十位位数数、百百位位数数; 判判断断这这个个数数是是否

11、否等等于于其其个个位位数数、十十位位数数、百百位位数数的的立立方方和和; 如如果果是是,说说明明这这个个数数是是水水仙仙花花数数,就就输输出出这这个个数数。main() int i,a,b,c; for(i=100;i=999;i+) a=i/100; /*/*取取出出百百位位数数* */ / b=i/10%10; /*/*取取出出十十位位数数* */ / c=i%10; /*/*取取出出各各位位数数* */ / if(i=a*a*a+b*b*b+c*c*c) printf(“%d ”,i); for i=100 to 999a=i/100b=i/10%10c=i%10i =a3+b3+c3Y

12、N输输出出水水仙仙花花数数i i输输输输出出出出1 1999999所所所所有有有有同同同同构构构构数数数数(出出出出现现现现在在在在它它它它的的的的平平平平方方方方数数数数右右右右侧侧侧侧)如如如如:5 5出出出出现现现现在在在在2525右右右右侧侧侧侧,2525出出出出现现现现在在在在625625右右右右侧侧侧侧 main()longk,m,n;for(k=1;k=999;k+)m=k*k;if(k10)n=m%10m%10;elseif(k100)n=m%100m%100;elsen=m%1000m%1000;if(k=n)printf(”%dn”,k);k k为为为为一一一一位位位位数数

13、数数k k为为为为2 2位位位位数数数数k k为为为为3 3位位位位数数数数结结结结果果果果: :11115255256366362512525125765776765776376141376376141376625390625625390625求求用用100元元钱钱买买100只只鸡鸡(每每种种鸡鸡的的只只数数1)的的所所有有买买法法,其其中中:1只只公公鸡鸡5元元、1只只母母鸡鸡3元元、3只只小小鸡鸡1元元。main()inti,j,k;for(i=1;i=20;i+)for(j=1;j=34;j+)k=100-i-j;if(k%3=0)&(i*5+j*3+k/3=100)&i&j&k)Pr

14、int(“%d,%d,%dn”,i,j,k);5*20=1005*20=1003*34=1023*34=102保保保保证证证证三三三三数数数数加加加加起起起起来来来来为为为为100100k k为为为为整整整整数数数数3 3数数数数都都都都必必必必须须须须大大大大于于于于0 03 3种种种种价价价价格格格格之之之之和和和和为为为为100100运运运运行行行行结结结结果果果果: :418784187881181811811248412484二二二二、求求求求累累累累加加加加、连连连连乘乘乘乘的的的的算算算算法法法法:1 1、循循循循环环环环条条条条件件件件n次次数数控控制制(加加多多少少项项n,2

15、0,100)n用用误误差差控控制制(直直到到某某一一项项小小于于或或大大于于一一个个数数)n使使用用终终止止标标记记2 2、循循循循环环环环体体体体n求求和和n求求每每一一项项:从从前前一一项项求求出出后后一一项项、单单独独求求每每一一项项n为为下下一一项项作作准准备备3 3、 循循循循环环环环初初初初值值值值:n设设为为0、设设为为第第一一项项n注注意意双双重重循循环环设设初初值值的的位位置置main() int i,n,a; unsigned long s=0,t=0; printf(“please input a,n:n”); scanf(“%d,%d”,&a,&n); for(i=1;

16、i=n;i+) t=t+a; a=a*10; s=s+t; printf(“s=a+aa+aaa+=%ldn”,s);P120P120P120P120习习习习题题题题6.6.6.6.3 3 3 3 求求求求:s=a+s=a+s=a+s=a+aaaaaaaa+ + + +aaaaaaaaaaaa+ + + +for i=1 to nt=t+at=t+aa=a*10a=a*10s=s+ts=s+t输输入入a,n输输出出s s的的值值s=0,t=0输输入入:2,3 2,3 输输出出:s=a+s=a+aaaa+ +aaaaaa+ +=246=246a=2n=3t=2a=20s=2t=22a=200s=

17、2+22t=222a=2000s=2+22+222(1 1 1 1)给给给给累累累累乘乘乘乘器器器器赋赋赋赋初初初初值值值值,一一一一般般般般为为为为1 1 1 1;(2 2 2 2)用用用用循循循循环环环环语语语语句句句句实实实实现现现现累累累累乘乘乘乘;forforforfor(循循循循环环环环变变变变量量量量赋赋赋赋初初初初值值值值;循循循循环环环环条条条条件件件件;循循循循环环环环变变变变量量量量改改改改变变变变规规规规律律律律)(3 3 3 3)循循循循环环环环体体体体设设设设计计计计。 累累累累乘乘乘乘器器器器当当当当前前前前值值值值= = = =累累累累乘乘乘乘器器器器原原原原值

18、值值值* * * *循循循循环环环环变变变变量量量量当当当当前前前前值值值值; 求求求求累累累累乘乘乘乘积积积积。 如如如如:123.100123.100123.100123.100基基本本方方法法:属属于于“累累乘乘器器”类类型型问问题题。 累累累累乘乘乘乘器器器器赋赋赋赋初初初初值值值值求求n!=1 2 3 nvoid main() double sum=1; int i;for(i=1;i=100;i+) sum=sum*i;printf( sum=%lf ,sum);累累乘乘思思考考整整数数连连乘乘结结果果一一定定是是整整数数,而而本本例例中中结结果果数数值值相相当当大大,用用long

19、long型型都都无无法法存存放放,因因此此将将存存放放累累乘乘结结果果的的变变量量s s定定义义为为doubledouble型型。 main() int i,n; float t=1; scanf(“%d”, &n); for(i=1;i=n;i+) t=t*i; printf(“n!=%fn”,t);求求求求n!n!n!n!,n n n n从从从从键键键键盘盘盘盘输输输输入入入入。for i=1 to nt=t*i输输入入n输输出出t的的值值t=1P120P120P120P120习习习习题题题题6.6.6.6.4 4 4 4 求求求求:1+2!+3!+1+2!+3!+1+2!+3!+1+2!

20、+3!+20!+20!+20!+20!main() int i; float sum=0,t=1; for(i=1;i=20;i+) t=t*i; sum=sum+t; printf(“1!+2!+20!=%fn”,sum);for i=1 to 20t=t*isum=sum+t输输出出sum的的值值sum=0,t=1t=1sum=1t=1*2=2!sum=1+2!t=2!*3=3!sum=1+2!+3!main() int i, t; float a=2,b=1,sum=0; /*a/*a表表示示分分子子,b b表表示示分分母母* */ / for(i=1;i=20;i+) sum=sum+

21、a/b; t=a; a=a+b; /*/*将将前前一一项项分分子子、分分母母之之和和作作 为为下下一一项项的的分分子子* */ / b=t; /*/*将将前前一一项项的的分分子子作作为为下下一一项项的的分分母母* */ / printfprintf(“sum=%fn”,sum); P120P120P120P120习习习习题题题题6.6.6.6.8 8 8 8 求求求求:2/12/12/12/1,3/23/23/23/2,5/35/35/35/3,13/813/813/813/8,。for i=1 to 20sum=sum+a/bt=aa=a+bb=t输输出出sumsum的的值值a=2,b=1,

22、sum=0计计算算 main( )float sum , term,x ; int n , k ,sign ; scanf ( ”%d%f” , &n , &x ) ;sum=x ; term=x ;sign=1 ;for ( k=2 ; k=n ; k+ + ) term *=x*x / ( 2*k-2) / (2*k-1) ; sign = - sign ; sum + = sign* term ; printf ( ”sum =%fn” , sum ) ; 方方方方法法法法一一一一第第第第一一一一项项项项直直直直接接接接赋赋赋赋值值值值计计计计算算算算单单单单项项项项累累累累加加加加符符

23、符符号号号号变变变变量量量量, ,实实实实现现现现正正正正负负负负号号号号转转转转换换换换main()floatsum=0,term,x;intn,j,k,sign;scanf(”%d%f”,&n,&x);sign=-1;for(j=1;j=n;j+) term=1;for(k=1;k=2*j-1;k+)term*=x/k;for(k=1;k=2*j-1;k+)term*=x/k;sign=-sign;sum+=sign*term; printf(”sum=%fn”,sum);方方方方法法法法二二二二赋赋赋赋初初初初值值值值每每每每次次次次循循循循环环环环重重重重新新新新赋赋赋赋初初初初值值值

24、值计计计计算算算算单单单单项项项项一一一一个个个个语语语语句句句句累累累累加加加加符符符符号号号号变变变变量量量量图图形形 1: (方方法法一一)main() int i,j; for (i=1;i=5;i+) for (j=1;j=5;j+) printf (“ *”); printf(“n”); * * * * * * * * * * * * * * * * * * * * * * * * *三三三三、简简简简单单单单图图图图形形形形打打打打印印印印:图图形形 1:(方方法法二二)main() int i; for (i=1;i=5;i+) printf (“ * * * * *n”);

25、* * * * * * * * * * * * * * * * * * * * * * * * *图图形形 2:(法法一一)main() int i,j; for (i=1;i=5;i+) for ( j=1;ji;j+) printf ( “ “); for ( j=1;j=5;j+) printf (“ *”); printf(“n”); * * * * * * * * * * * * * * * * * * * * * * * * *图图形形 2:(法法二二)main() int i,j; for (i=1;i=5;i+) for ( j=1;ji;j+) printf ( “ “);

26、printf (“ * * * * *n”); * * * * * * * * * * * * * * * * * * * * * * * * *图图形形 3:main() int i,j; for (i=1;i=5;i+) for (j=1;j=5-i:j+) printf ( “ “); for (j=1;j=5;j+) printf (“ *”); printf(“n”); * * * * * * * * * * * * * * * * * * * * * * * * *图图形形 4 :main() int i,j; for (i=1;i=5;i+) for (j=1;j=i;j+) p

27、rintf (“ *”); printf(“n”); * * * * * * * * * * * * * * * 图图形形 5:main() int i,j; for (i=1;i=5;i+) for (j=1;j=5-i;j+) printf (“ “); for (j=1;j=i;j+) printf (“*”); printf(“n”); * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *图图形形6:main() int i,j,k; for(i=1;i=4;i+) for(j=1;j=4-ij=

28、4-i;j+) printf( ); for(k=1;k=2*i-1k=2*i-1;k+) printf(*); printf(n); for(i=1;i=3;i+) for(j=1;j=i;j=i;j+) printf( ); for(k=1;k=7-2*i;k=7-2*i;k+) printf(*); printf(n); 打打打打印印印印如如如如下下下下乘乘乘乘法法法法表表表表:1234567891234567891 11234567892 2246810121416183 33691215182124274 448121620242832365 5510152025303540456

29、6612182430364248547 7714212835424956638 8816243240485664729 991827364554637281 main()intj,k;printf(”);for(k=1;k=9;k+)printf(”%5d”,k);printf(”n”);for(j=1;j=9;j+)printf(”%5d”,j);for(k=1;k=9;k+)printf(”%5d”,j*k);printf(”n”);五五五五个个个个空空空空格格格格显显显显示示示示第第第第一一一一行行行行第第第第一一一一行行行行显显显显示示示示后后后后要要要要换换换换行行行行显显显显示示示

30、示9 9行行行行, ,循循循循环环环环9 9次次次次显显显显示示示示每每每每一一一一行行行行的的的的第第第第一一一一个个个个字字字字每每每每一一一一行行行行显显显显示示示示后后后后要要要要换换换换行行行行显显显显示示示示乘乘乘乘积积积积四四四四、迭迭迭迭代代代代方方方方法法法法:这这种种方方法法是是使使使使用用用用某某某某个个个个公公公公式式式式反反反反复复复复校校校校正正正正根根根根的的的的近近近近似似似似值值值值,使使之之逐逐步步精精确确化化,最最后后得得得得到到到到满满满满足足足足精精精精度度度度要要要要求求求求的的的的结结结结果果果果。P1206.10P1206.10 猴猴猴猴子子子子

31、吃吃吃吃桃桃桃桃:第第第第一一一一天天天天吃吃吃吃总总总总数数数数的的的的一一一一半半半半多多多多一一一一个个个个,第第第第二二二二天天天天吃吃吃吃剩剩剩剩下下下下的的的的一一一一半半半半多多多多一一一一个个个个,到到到到第第第第十十十十天天天天想想想想再再再再吃吃吃吃时时时时剩剩剩剩一一一一个个个个,求求求求第第第第一一一一天天天天共共共共有有有有多多多多少少少少个个个个?设设第第i天天未未吃吃前前有有xi个个,由由题题意意得得:x1/2-1x2x2/2-1x3x9/2-1x10已已知知x10=1所所以以x10=1x9=(x10+1)*2x8=(x9+1)*2x1=(x2+1)*2 main

32、()intk,x1,x2;x2=1;for(k=1;k=9;k+)x1=(x2+1)*2;x1=(x2+1)*2;x2=x1;x2=x1;printf(”总总数数=%dn”,x1);相相相相当当当当于于于于第第第第十十十十天天天天x10=1x10=1x10=1x10=1 x9=(x10+1)*2x9=(x10+1)*2 x8=(x9+1)*2x8=(x9+1)*2 x1=(x2+1)*2x1=(x2+1)*2k=1k=1时时时时,x1x1为为为为第第第第九九九九天天天天k=2k=2时时时时,x1x1为为为为第第第第8 8天天天天迭迭迭迭带带带带方方方方法法法法在在在在计计计计算算算算几几几几何

33、何何何中中中中非非非非常常常常实实实实用用用用P1206.11P1206.11用用迭迭迭迭代代代代方方方方法法法法,迭迭代代公公式式:xn+1=(xn+a/xn)/2要要求求前前后后二二次次求求出出的的x的的差差的的绝绝对对值值小小于于10-5凭凭经经验验给给x0指指定定一一个个值值x1=(x0+a/x0)/2计计算算:x1=(x0+a/x0)/2x2=(x1+a/x1)/2重重复复计计算算:x3=(x2+a/x2)/2x0=x1x1=(x0+a/x0)/2每每次次计计算算后后判判断断:xn=(xn-1+a/xn-1)/2|x1-x0|10-5是是否否成成立立xn+1=(xn+a/xn)/2直

34、直到到|xn-xn-1|10-5为为止止自自自自己己己己给给给给或或或或题题题题意意意意给给给给定定定定的的的的范范范范围围围围内内内内不不不不用用用用花花花花太太太太多多多多精精精精力力力力关关关关心心心心公公公公式式式式由由由由来来来来#includemain()floata,x0,x1;scanf(”%f,%f”,&a,&x0);x1=(x0+a/x0)/2; dox0=x1;dox0=x1;x1=(x0+a/x0)/2;x1=(x0+a/x0)/2;while(while(fabsfabs(x1-x0)=1e-5);(x1-x0)=1e-5);printf(%f的的平平方方根根=%fn

35、”,a,x1);x x0 0=x=x1 1 x x1 1=(x=(x0 0+a/x+a/x0 0)/2)/2每每每每次次次次算算算算完完完完马马马马上上上上判判判判断断断断, ,否否否否则则则则x1x1被被被被覆覆覆覆盖盖盖盖掉掉掉掉P1206.11P1206.11用用迭迭迭迭代代代代方方方方法法法法,迭迭代代公公式式:xn+1=(xn+a/xn)/2迭迭代代结结束束条条件件改改为为n n次次次次凭凭经经验验给给x0指指定定一一个个值值x1=(x0+a/x0)/2x2=(x1+a/x1)/2重重复复n次次计计算算:x3=(x2+a/x2)/2x1=(x0+a/x0)/2x0=x1xn=(xn-

36、1+a/xn-1)/2main()floata,x0,x1;intk;scanf(”%f,%f,%d”,&a,&x0,&n);for(k=1;k=1e-5);printf(x=%fn,x0);x xn n+1+1=x xn n f(f(x xn n)/f)/f ( (x xn n) )f(f(x xn n) )=2x xn n3-4x xn n2+3x xn n6f f ( (x xn n)=6x)=6xn n28x xn n 3初初初初值值值值到到到到误误误误差差差差足足足足够够够够小小小小停停停停止止止止P120 6.9P120 6.9P120 6.9P120 6.9一一球球从从100米米

37、高高度度自自由由落落下下,每每次次落落地地后后又又反反跳跳回回原原高高度度的的一一半半,在在、再再落落下下。求求它它在在第第十十次次落落地地时时,共共经经过过多多少少米米?第第十十次次反反弹弹多多高高?1010mm1 12 23 35m5m2.52.5mmhh2 2=h=h1 1/2/2hhn n=hhn n-1-1/2/2S=hS=h1 1+h+h2 2+h+hn nmain()inti;floath=100,s=100;for(i=2;i=10;i+)h=h/2;s=s+h*2;h=h/2;printf(nTotal:%fmetres.n,s);printf(lastheight:%fme

38、tres.n,h);第第第第一一一一次次次次降降降降落落落落100100米米米米第第第第二二二二次次次次做做做做到到到到第第第第十十十十次次次次1 12 23 34 45 56 67 78 89 910101111第第第第十十十十次次次次反反反反弹弹弹弹五五五五、查查查查询询询询问问问问题题题题: 查查查查询询询询、排排排排序序序序非非非非常常常常重重重重要要要要常常用用的的排排序序方方法法有有四四种种:顺顺序序交交换换法法、选选择择法法、冒冒泡泡法法、插插入入法法(1 1)顺顺顺顺序序序序排排排排序序序序法法法法( (n=10)n=10)指指导导思思想想:先先先先设设设设定定定定a0a0中中

39、中中存存存存放放放放最最最最小小小小值值值值,然然后后用用a0分分别别与与其其后后的的每每一一个个数数aj(j=1.9)进进行行比比较较,在在比比较较过过程程中中如如如如果果果果发发发发现现现现有有有有比比比比a0a0小小小小的的的的数数数数,就就将将a0a0与与与与ajaj互互互互换换换换,一一遍遍扫扫描描之之后后,a0就就是是10个个数数中中最最小小的的数数,重重复复此此算算法法,只只是是每每次次比比较较时时,进进行行比比较较的的数数的的范范围围向向后后移移一一个个位位置置。反反反反复复复复执执执执行行行行( (n-1)n-1)次次次次上上述述操操作作将将将将数数数数组组组组a a中中中中

40、的的的的1010个个个个数数数数按按按按照照照照由由由由大大大大到到到到小小小小的的的的顺顺顺顺序序序序排排排排好好好好( (使使使使用用用用顺顺顺顺序序序序交交交交换换换换法法法法) )#define N 10#define N 10mainmain( ) int aN,i,j,k,t; for(i=0;iN;i+) scanf(%d,&ai); for (i=0;iN-1;i+)for (i=0;iN-1;i+) for (j=i+1;jN;j+) for (j=i+1;jN;j+) if (ajai) t=aj; aj=ai; ai=t; if (ajai) t=aj; aj=ai; a

41、i=t; for(i=0;iN;i+) printf(%5d,ai);(2 2)选选选选择择择择排排排排序序序序法法法法指指导导思思想想:不不急急于于交交换换,先先先先找找找找出出出出a0a0到到到到a9a9中中中中的的的的最最最最小小小小数数数数所所所所在在在在的的的的位位位位置置置置k k,一一遍遍扫扫描描完完之之后后,在在把把a0与与ak进进行行交交换换,重重复复次次算算法法9次次。将将将将数数数数组组组组a a中中中中的的的的1010个个个个数数数数按按按按照照照照由由由由大大大大到到到到小小小小的的的的顺顺顺顺序序序序排排排排好好好好( (使使使使用用用用选选选选择择择择法法法法)

42、)#define N 10#define N 10main( ) int aN,i,j,k,t; for(i=0;iN;i+) scanf(%d,&ai); for (i=0;iN-1;i+)for (i=0;iN-1;i+) k=i; k=i; for(j=i+1;jN;j+) for(j=i+1;jN;j+) if(ajak) k=j; if(ajak) k=j; t=ai; ai=ak; ak=t; t=ai; ai=ak; ak=t; for(i=0;iN;i+) printf(%5d,ai);(3 3)冒冒冒冒泡泡泡泡法法法法指指导导思思想想:是是将将将将相相相相邻邻邻邻的的的的两两

43、两两个个个个数数数数进进进进行行行行比比比比较较较较,若若前前一一个个数数比比后后一一个个数数大大,在在交交换换两两元元素素的的内内容容,否否则则不不交交换换。从从而而把把最最大大的的数数放放在在最最后后位位置置。#define N 10#define N 10main( ) int aN,i,j,k,t; for(i=0;iN;i+) scanf(%d,&ai); for (i=0;iN-1;i+)for (i=0;iN-1;i+) for(j=0;jN-i-1;j+) for(j=0;jN-i-1;j+) if(aj+1aj) if(aj+1aj) t=aj; aj=aj+1; aj+1=

44、t; t=aj; aj=aj+1; aj+1=t; for(i=0;iN;i+) printf(%5d,ai);有有有有N N个个个个数数数数已已已已按按按按由由由由小小小小到到到到大大大大的的的的顺顺顺顺序序序序排排排排好好好好,要要要要求求求求输输输输入入入入一一一一个个个个数数数数,把把把把它它它它插插插插入入入入到到到到原原原原有有有有序序序序列列列列中中中中,而而而而且且且且仍仍仍仍然然然然保保保保持持持持有有有有序序序序。输输输输入入入入数数数数据据据据时时时时,使使使使其其其其数数数数据据据据排排排排列列列列仍仍仍仍然然然然有有有有序序序序解解题题思思想想: 先先找找找找到到到到

45、待待待待插插插插入入入入的的的的位位位位置置置置,然然后后将将将将从从从从该该该该位位位位置置置置起起起起到到到到数数数数组组组组的的的的最最最最后后后后位位位位置置置置的的的的所所所所有有有有元元元元素素素素均均均均向向向向后后后后移移移移一一一一个个个个位位位位置置置置。 main() int a100,i,j,n,x; scanf(%d,&n); /* 确确定定数数组组元元素素中中的的个个数数 */ for (i=0;in;i+) scanf(%d,&ai); /* 给给数数组组的的每每个个元元素素赋赋初初值值 */ scanf(%d,&x); /* 输输入入待待插插入入的的数数据据 *

46、/ for (i=0;in;i+)for (i=0;ix) break; if (aix) break; /* /* 找找找找到到到到待待待待插插插插入入入入的的的的位位位位置置置置i */i */ for (j=n-1;j=i;j-)for (j=n-1;j=i;j-) aj+1=aj; aj+1=aj; /* /* 从从从从aiai到到到到an-1an-1之之之之间间间间的的的的数数数数组组组组军军军军后后后后移移移移一一一一位位位位*/*/ ai=x; /*ai=x; /*把把把把数数数数据据据据x x放放放放到到到到aiai位位位位置置置置处处处处*/*/ for (i=0;i=n;i

47、+) printf(%5d,ai); printf(n); 12 34 -9 2 16 39 121 -7 6 23-934-9343412-922341221616341639 121 -7-7121393416122-7661213934161262323121393423用用用用插插插插入入入入排排排排序序序序法法法法使使使使任任任任意意意意十十十十个个个个数数数数据据据据升升升升序序序序 main() int i,j,m,k; static a10=12,34,-9,6,8,7,44,56,121,0; for(i=1;i=9;i+) for(j=0;jai) break;if(aja

48、i) break; m=ai;m=ai; for(k=i-1;k=j;k-) for(k=i-1;k=j;k-) ak+1=ak; ak+1=ak; aj=m; aj=m; for(i=0;i=9;i+) printf(%5d, ai); printf(n); 寻寻寻寻找找找找待待待待插插插插入入入入位位位位置置置置j j将将将将j j后后后后的的的的元元元元素素素素后后后后移移移移一一一一个个个个位位位位置置置置, , 插插插插入入入入main( ) int x50,y,n,i; scanf(%d,&n); for(i=0;in;i+)for(i=0;in;i+) scanfscanf(%d

49、,&xi);(%d,&xi); printfprintf(%5d,xi);(%5d,xi); printf(n); for(i=0;i=(n-1)/2;i+)for(i=0;i=(n-1)/2;i+) y=xi; y=xi; xi=xn-1-i; xi=xn-1-i; xn-1-i=y; xn-1-i=y; for(i=0;in;i+)for(i=0;in;i+) printfprintf(%5d,xi);(%5d,xi); printf(n); 方方法法一一 将将将将n(n=50)n(n=50)个个个个整整整整数数数数按按按按逆逆逆逆序序序序重重重重放放放放在在在在数数数数组组组组中中中中。

50、main( ) int x100,n,m,i,j; scanf(%d,&n); for(i=0;in;i+) for(i=0;in;i+) scanf scanf(%d,&xi);(%d,&xi); for(j=1;j=n;j+)for(j=1;j=n;j+) m=x0; m=x0; for(i=0;in-j;i+)for(i=0;in-j;i+) xi=xi+1; xi=xi+1; xn-j=m; xn-j=m; for(i=0;in;i+)for(i=0;in;i+) printfprintf(%5d,xi);(%5d,xi); printf(n); 方方法法二二 把把10个个整整数数存存

51、放放在在一一个个一一维维数数组组中中,输输入入一一个个数数、找找出出该该数数是是数数组组中中第第几几个个元元素素的的值值,若若该该数数不不在在数数组组中中,则则打打印印出出“无无此此数数”main()inta10=45,7,-34,12,18,3,-2,-13,100,22,x,k;scanf(”%d”,&x);for(k=0;k10;k+)for(k=0;k10;k+)if(x=ak)break;if(x=ak)break;if(k10)printf(”%d是是第第%d个个元元素素的的值值n”,x,k+1);elseprintf(”无无此此数数n”);第第第第1 1个个个个a0a0第第第第1

52、010个个个个a9a9两两两两种种种种结结结结果果果果:找找找找到到到到:0=0=k10k=10k=10折折折折半半半半查查查查找找找找法法法法P1417.9把把10个个整整数数(以以以以按按按按从从从从小小小小到到到到大大大大顺顺顺顺序序序序排排排排列列列列)存存放放在在一一个个一一维维数数组组中中,输输入入一一个个数数、要要求求用用折折折折半半半半查查查查找找找找法法法法找找出出该该数数是是数数组组中中第第几几个个元元素素的的值值,若若该该数数不不在在数数组组中中,则则打打印印出出“无无此此数数”top=0top=0botbot=9=9mid=4mid=4botbot=3=3mid=2mi

53、d=2botbot=2=2mid=1mid=1有有有有序序序序每每每每做做做做一一一一次次次次减减减减少少少少一一一一半半半半main()inta10=3,6,8,12,18,19,20,35,38,39;intx,bot,top,mid;scanf(”%d”,&x);top=0;bot=9;while(top=(top=botbot) ) mid=(top+bot)/2;if(x=amid)break;elseif(xamid)bot=mid-1;elsetop=mid+1;if(top=(top0)x1=x;elsex2=x;if(y*y10)x1=x;elsex2=x;while(whi

54、le(fabsfabs(y)=1e-6);(y)=1e-6);returnx;returnx;main()main()floatx1,x2;floatx1,x2;dodoprintfprintf(inputx1,x2:);(inputx1,x2:);scanfscanf(%f,%f,&x1,&x2);(%f,%f,&x1,&x2);while(f(x1)*f(x2)=0);while(f(x1)*f(x2)=0);printfprintf(Arootofequationis%8.2fn,root(x1,x2);(Arootofequationis%8.2fn,root(x1,x2);计计计计算

55、算算算2 2x x3 3-4x-4x2 2+3x-6+3x-6的的的的值值值值中中中中点点点点函函函函数数数数值值值值左左左左边边边边函函函函数数数数值值值值以以以以上上上上两两两两函函函函数数数数值值值值同同同同号号号号,中中中中点点点点为为为为x1x1,否否否否则则则则中中中中点点点点为为为为x2x2做做做做到到到到y y值值值值逼逼逼逼近近近近0 0为为为为止止止止两两两两边边边边界界界界点点点点函函函函数数数数值值值值为为为为异异异异号号号号才才才才有有有有解解解解直直直直接接接接调调调调用用用用函函函函数数数数求求出出10个个数数中中最最大大数数及及其其在在10个个数数中中的的位位置

56、置main()intmax,p,k,x;scanf(”%d”,&max);p=1;for(k=2;kmax)p=k;max=x;if(xmax)p=k;max=x;printf(”max=%d,position=%dn”,max,p);输输输输入入入入第第第第一一一一个个个个数数数数从从从从第第第第二二二二个个个个数数数数开开开开始始始始循循循循环环环环存存存存放放放放比比比比较较较较过过过过的的的的最最最最大大大大数数数数位位位位置置置置计计计计数数数数器器器器 求求出出10个个数数中中与与888靠靠最最近近的的数数及及其其在在10个个数数中中的的位位置置#includemain()intn

57、ear,p,k,x;scanf(”%d”,&near);p=1;for(k=2;k=10;k+) scanf(”%d”,&x);if(abs(x-888)abs(near-888)abs(x-888)abs(near-888) p=k;near=x;printf(”near=%d,position=%dn”,near,p);输输输输入入入入第第第第一一一一个个个个数数数数从从从从第第第第二二二二个个个个数数数数开开开开始始始始循循循循环环环环存存存存放放放放比比比比较较较较过过过过的的的的最最最最近近近近数数数数位位位位置置置置计计计计数数数数器器器器p140例例7.9有有3个个字字符符串串,

58、找找出出其其中中最最大大者者思思思思考考考考题题题题:有有有有100100个个个个字字字字符符符符串串串串,找找找找出出出出其其其其中中中中最最最最大大大大者者者者实实实实验验验验题题题题:用用用用循循循循环环环环找找找找比比比比较较较较好好好好找找找找六六六六、统统统统计计计计问问问问题题题题:1分分别别统统计计100个个数数中中正正负负数数个个数数2统统计计100个个数数中中素素数数个个数数P138例例7.8统统计计一一篇篇英英文文文文章章中中单单词词个个数数P1417.10有有一一篇篇文文章章,共共有有三三行行文文字字,每每行行有有80个个字字符符。要要求求分分别别统统计计出出其其中中英

59、英文文大大写写字字母母、小小写写字字母母、数数字字、空空格格以以及及其其它它字字符符的的个个数数。 #include#include#includemain()chartext80;intj,k,upper=0,lower=0,digit=0,space=0,other=0;for(j=1;j=3;j+) gets(text);for(k=0;k=0;i-) if(stri=c) for(k=i;strk!=0;k+) strk=strk+1; strk=0; puts(str); #include stdio.hmain()char str80,c; int i,j; gets(str);

60、c=getchar(); j=0;for(i=0;stri!=0;i+) if(stri!=c) strj=stri;j+; strj=0; puts(str); 判判判判断断断断一一一一字字字字符符符符串串串串是是是是否否否否为为为为另另另另一一一一个个个个字字字字符符符符串串串串的的的的子子子子串串串串,若若若若是是是是则则则则返返返返回回回回第第第第一一一一出出出出现现现现的的的的起起起起始始始始位位位位置置置置,否否否否则则则则则则则则返返返返回回回回0 0main() static char s120=I love China!; static char s220=love; int

61、 i,j,k,m=0; for(i=0;s1i!=0;s1i!=0;i+) if(s1i= =s20)if(s1i= =s20) for(j=1,k=i+1;s2j!=0;j+,k+)for(j=1,k=i+1;s2j!=0;j+,k+) if(s1k!=s2j) break; if(s1k!=s2j) break; if(s2j=0) if(s2j=0) m=i; break;m=i; break; printf(station is %dn,m);矩矩矩矩阵阵阵阵操操操操作作作作:(1)矩矩阵阵的的主主对对角角线线、副副对对角角线线的的概概念念 (2)如如何何实实现现矩矩阵阵转转置置、求求

62、解解矩矩阵阵中中指指定定的的元元素素之之和和等等问问题题(如如如如求求求求解解解解右右右右上上上上三三三三角角角角、左左左左下下下下三三三三角角角角的的的的元元元元素素素素之之之之和和和和)(3)打打印印杨杨辉辉三三角角形形(用用一一维维和和二二维维分分别别实实现现)main() static int a10; int i,j; a0=1; for (j=0;j35;j+) printf( ); printf(%6d,a0); printf(n); for(i=1;i0;j-) aj=aj+aj-1; for (j=0;j35-3*i;j+) printf( ); for (j=0;j=i;j

63、+) printf(%6d,aj); printf(n); 求求解解各各行行元元素素的的过过程程main()int a1010; int i,j; for (i=0;i10;i+) ai0=1;aii=1; for (j=1;ji;j+) aij=ai-1j-1+ai-1j; for(i=0;i10;i+) for(j=0;j=i;j+) printf(%6d,aij); printf(n); for (i=0;i10;i+) for (j=0;j35-3*i;j+) printf( ); for (j=0;jbk)j=1;elsej=-1;returnj;main()main() print

64、fprintf(”%dn”,(”%dn”,comprecompre(”book”,bootee”);(”book”,bootee”); 自自自自取取取取的的的的函函函函数数数数名名名名每每每每个个个个字字字字符符符符串串串串有有有有一一一一个个个个 n n先先先先出出出出现现现现 n n,则则则则停停停停止止止止比比比比较较较较 两两两两个个个个不不不不等等等等,也也也也停停停停止止止止比比比比较较较较比比比比到到到到结结结结束束束束a a比比比比b b长长长长a a比比比比b b短短短短出出出出现现现现不不不不同同同同字字字字符符符符,但但但但a a比比比比b b大大大大相相相相反反反反调调

65、调调用用用用的的的的主主主主函函函函数数数数main()char s180,s280; int i,k; gets(s1); gets(s2); i=0; while(s1i!=0&s2i!=0) if(s1i!=s2i) break;if(s1i!=s2i) break; else i+; k=s1i-s2i;k=s1i-s2i; if(k0) printf(s1s2n); else if(k0) printf(s10) printf(s1s2n); else if(k0) printf(s1s2n); else printf(s1=s2n); 方方方方法法法法三三三三6 6、自自自自定定定

66、定义义义义strlenstrlen(字字字字符符符符串串串串 ) )函函函函数数数数intlenintlen(chara)(chara) intintk;k;while(ak!=0)k+;while(ak!=0)k+;returnk;returnk; main()main() printfprintf(”%dn”,(”%dn”,lenlen(”book”);(”book”); 自自自自定定定定义义义义的的的的函函函函数数数数名名名名调调调调用用用用的的的的主主主主函函函函数数数数一一一一直直直直累累累累加加加加到到到到字字字字符符符符串串串串结结结结束束束束八八八八、递递递递归归归归问问问问题

67、题题题:1 1 P161P161例例例例8.98.9HanoiHanoi塔塔塔塔问问问问题题题题2 2P1868.17P1868.17将将将将整整整整数数数数转转转转换换换换成成成成字字字字符符符符串串串串,如如如如:345345“345”“345”#includevoidc(intn)if(n/10!=0)c(n/10);putchar(n%10+0);main()intm;scanf(”%d”,&m);c(m);若若若若要要要要逆逆逆逆序序序序,怎怎怎怎样样样样修修修修改改改改程程程程序序序序这这这这两两两两句句句句对对对对调调调调抽抽抽抽象象象象在在在在:为为为为什什什什么么么么再再再再

68、次次次次调调调调用用用用自自自自己己己己能能能能完完完完成成成成:345/10=34345/10=34, 34/10=334/10=30 04848,1 149491%10+48=491%10+48=493%10+48=513%10+48=51P161例例8.9Hanoi塔塔问问题题根根据据习习题题课课思思路路voidmove(charx,chary)voidmove(charx,chary) printfprintf(”%c=%cn”,x,y);(”%c=%cn”,x,y);voidvoid hanoihanoi( (intint n,charn,char one,charone,char

69、two,chartwo,charthree)three)if(n=1)move(one,three)if(n=1)move(one,three)elseelsehanoihanoi(n-1,one,three,two);(n-1,one,three,two);move(one,three);move(one,three);hanoihanoi(n-1,two,one,three);(n-1,two,one,three);main()scanf(”%d”,&m)hanoi(m,A,B,C); 从从从从1 1塔塔塔塔移移移移到到到到2 2塔塔塔塔调调调调用用用用自自自自己己己己借借借借助助助助C

70、C将将将将n-1n-1块块块块移移移移到到到到B Bn-1n-1块块块块都都都都移移移移到到到到B B后后后后,最最最最后后后后一一一一块块块块移移移移到到到到A A调调调调用用用用自自自自己己己己借借借借助助助助A A将将将将n-1n-1块块块块移移移移到到到到C C上上机机不不要要打打64块块,运运行行时时间间太太长长年年薪薪10万万第第一一天天给给1元元第第二二天天给给2元元给给多多长长时时间间?8.13用用递递归归方方法法求求main() intn;floatx,p(int,float);printf(nPleaseinputnandx:);scanf(%d,%f,&n,&x);if(

71、n0)printf(n0,inputerror!);elseprintf(p%d(%g)=%gn,n,x,p(n,x);floatp(floatp(intintn,floatx)n,floatx)floaty;floaty;if(n=0)y=1;if(n=0)y=1;elseif(n=1)y=x;elseif(n=1)y=x;elsey=(2*n-1)*x-p(n-1,x)-(n-1)*p(n-2,x)/n;elsey=(2*n-1)*x-p(n-1,x)-(n-1)*p(n-2,x)/n;returny;returny;函函函函数数数数申申申申明明明明1n=01n=0p pn n(x)=xn=1(x)=xn=1(2n-1)(2n-1) x-x-p pn n-1-1(x)-(n-1)(x)-(n-1) p pn n-2-2(x)/nn1(x)/nn1 返返返返回回回回值值值值

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

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

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