




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、全国计算机等级考试(Windows 2000版) -三级c语言上机考试 第25次考试考前强化辅导2008年9月1数学问题题型:21.素数问题 该类型的题大致分为5种,关键在于判断一个数是素数,最好把这段代码掌握,这样,该类问题可迎刃而解。 在四位数问题中,也有一些题的条件是该数或新组成的数是否为素数,这些题一般提供了判断素数的函数,可直接使用,不需自己编写素数的判断代码。3题型(1) 程序PROG1.C的功能是: 计算500800区间内素数的个数cnt,并按所求素数的值从大到小的顺序, 再计算其间隔减、加之和,即第1个素数-第2个素数+第3个素数-第4个素数+第5个素数 . 的值sum。请编写
2、函数countValue( )实现程序的要求,最后main()函数调用函数writeDAT()把结果cnt和sum输出到文件OUT.DAT中。 注意: 部分源程序存放在PROG1.C中。请勿改动主函数main( )和输出数据函数writeDAT()的内容。 4答案#include int cnt,sum; void countValue() int i,j,k=1; for(i=800;i=500;i-) for(j=2;j=i) cnt+; sum+=k*i; k=-1*k; void main()5分析 本题要求从大到小的顺序进行加减运算,因此这里采用从800开始循环到500这样就能保证出
3、来的素数就是从大到小,内嵌的for()再加上if()是用来判断是否为素数。其中k用来控制加减运算。结果out.dat:44130 6题型(2) 实现功能是:找出所有100以内(含100)满足I,I+4,I+10都是素数的整数I(I+10也在100以内)的个数cnt以及这些I之和sum。请编写函数countValue()实现程序要求,最后调用函数writeDat()把结果cnt和sum输出到文件out.dat中。7源程序#includeint cnt,sum;int isPrime(int number) int i,tag=1; for(i=2;tag & i=number / 2; i+)
4、if(number % i =0) tag =0; return tag;void countValue()void main()8答案void countvalue() int i,j; for(i=3;i=90;i+) if(isprime(i)&isprime(i+4)&isprime(i+10) cnt+; sum+=i; 9分析 该题是较简单的编程题之一,只要注意在for()循环中i不能大于90(由于要求I+10也要100内)即可。同时,还需注意土题目中已经编写了判断素数的函数isprime,可直接调用该函数来判断是否为素数。结果:7 201 10题型(3)请编写一个函数jsValu
5、e(int m,int k,int xx),该函数的功能是:将大于整数m且紧靠m的k个素数存入数组xx传回。最后调用函数writeDat()读取10组数据,分别得出结果且把结果输出到文件out.dat中。例如:若输入17,5,则应输出:19,23,29,31,37。请勿改动主函数main()和写函数writeDat()的内容。11源程序#includevoid jsValue(int m,int k,int xx)main() int m,n,zz100; prinf(“n请输入两个整数:”); scanf(%d%d,&m,&n); jsValue(m,n,zz); for(m=0;mn;m+
6、)printf(%d ,zzm); printf(n); writeDat();wtiteDat() int m,n,zz100,i; FILE *.in,*out; in=fopen(in.dat,r); out=fopen(out.dat,w); for(i=0;i10;i+) fscanf(in,%d %d,&m,&n); jsValue(m,n,zz); for(m=0;m0;i+) for(j=2;ji;j+) if(i%j=0) break; /*注:素数为只能被自己和1整除的数.如果i%j 等于0,说明i不是素数,跳出本层循环*/ if(i=j) xxs+=i;k-; 13下列程
7、序的功能是:选取出100以上1000以内所有个位数字与十位数字之和被10除所得余数恰是百位数字的素数(如293)。计算并输出上述这些素数的个数CNT以及这些素数值的和SUM。请编写函数COUNTVALUE()实现程序要求,最后调用函数WRITEDAT()把结果CNT和SUM输出到文件OUT.DAT中.题型(4)14void countvalue() int i,j; for(i=100;i1000;i+) for(j=2;ji;j+) if(i%j=0) break; if(j=i&(i%10+i/10%10)%10=i/100) cnt+; sum+=i; 答案运行结果: 15 682515
8、2.6/9问题 该类型的题目只有这一个题。较为简单。原题: 程序PROG1.C的功能是:计算出自然数SIX和NINE满足条件SIX + SIX + SIX = NINE + NINE的个数cnt,以及满足此条件所有的SIX与NINE的和SUM。请编写函数countValue()实现程序的要求, 最后main()函数调用函数writeDAT()把结果cnt和sum输出到文件OUT.DAT中。 其中的S,I,X,N,E各代表一个十进制数字,允许代表的数字相同, 但S和N不能为0。例如:944 + 944 + 944 = 1416 + 1416 注意: 部分源程序存放在PROG1.C中。 16答案#
9、include long cnt,sum; void countValue() int i; printf(“n”); for(i=666;i=999;i=i+2) if(i%100/10=(3*i/2)%1000/100)&(3*i/2)/1000 =(3*i/2)%100/10) cnt+; sum+=i+3*i/2; void main()17分析 由于有SIX+SIX+SIX=NINE+NINE可看出SIX的3倍必须大于等于2000(右边是一个四位数字的数可知),因此从666开始循环,再由三个数的和是个偶数(右边为一个数的2倍可知)可循环时步长为2。再由SIX和NINE中有一个共同数字
10、I所以得出第一个if()判断,还有NINE中有一共同数字N所以得出第二个if()判断。 该题结果: 4 9430 183.完全平方数问题 程序PROG1.C的功能是: 在三位整数(100至999)中寻找符合下面条件的整数,并依次从小到大存入数组b中。条件如下:某数既是完全平方数,又有两位数字相同, 例如144、676等。 请考生编制函数int jsValue(int bb)实现此功能, 满足该条件的整数的个数通过所编制的函数返回。最后调用函数writeDat( )把结果输出到文件out.dat中。 注意: 部分源程序存放在PROG1.C中。请勿改动主函数main()和写函数writeDat()
11、的内容。 19答案int jsvalue(int bb) int i,j,k=0,g,s,b,temp=0; for(i=100;i=999;i+) g=i%10; s=i/10%10; b=i/100; temp=(int)sqrt(i); if(i= temp * temp)&(g=s|s=b|b=g) bbk+=i; return k;20分析 注:注意在i=(int)sqrt(i)*(int)sqrt(i)中只有当i是完全平方数时开平方后再取整才不会丢失任何数据。 原型:float sqrt(float x); 用法:#include 功能:计算x的平方根。 说明:x应大于等于零。 结
12、果:9 100 121 144 225 400 441 484 676 900214.回文数问题 程序PROG1.C的功能是: 寻找并输出11至999之间的数m, 它满足m、m*m和m*m*m均为回文数。所谓回文数是指其各位数字左右对称的整数,例如121,676,94249等。满足上述条件的数如m=11,m*m=121,m*m*m=1331皆为回文数。请考生编制函数int jsValue(long m)实现此功能, 如果是回文数, 则函数返回1, 反之则返回0。最后把结果输出到文件out.dat中。 22答案int jsValue(long n)int i=0;int j=0;int aa10
13、=0;int b=1; while(n) aaj+=n%10; n=n/10; for(i=0;ij/2;i+) if(aai!=aaj-i-1) b=0; return (b); 23分析结果out.dat:m= 11,m*m= 121,m*m*m= 1331m= 101,m*m= 10201,m*m*m= 1030301m= 111,m*m= 12321,m*m*m= 1367631 245.平方根问题 请编写函数countValue(int n),它的功能是:求n以内(不包括n)同时能被3与7整除的所有自然数之和的平方根s,s作为函数返回值,最后结果s输出到文件out.dat中。 例如若
14、n为1000时,函数值应为:s = 153.909064。 注意: 部分源程序存放在PROG1.C中。 25答案double countValue(int n) int i=0; int sum=0; for(i=0; in; i+) if (i%21=0) sum+=i; s=sqrt(sum); return (s); 26分析结果:153.909064134.465609105.29957382.613558111.78103666.40783195.577194157.149610309.45112737.229021 276.Fibonacci数列问题 编写函数jsValue, 它的
15、功能是: 求Fibonacci数列中大于t的最小的一个数, 结果由函数返回。其中Fibonacci数列F(n)的定义为: F(0)=0,F(1)=1 F(n)=F(n-1)+F(n-2) (n2) 最后调用函数writeDat()读取10个数据t, 分别得出结果且把结果输出到文件out.dat中。 例如: 当t = 1000时, 函数值为: 1597。 28int jsValue(int t) int f0=0; int f1=1; int fn=1; while(fn=t) f0=f1; f1=fn; fn=f1+f0; return (fn); main()答案29结果结果out.dat:
16、15971442332339876109876102584377307.级数问题 某级数的前两项A1=1,A2=1,以后各项具有如下关系: An=An-2+2An-1 下列程序的功能是:要求依次对于整数M=100,1000和10000求出对应的n值,使其满足:Sn=M,这里Sn=A1+A2+.+An, 并依次把n值存入数组单元b0,b1和b2中,请编制jsValue()函数来实现此功能, 最后调用函数writeDat()把数组b中的值输出到out.dat文件中。 请勿改动主函数main()和写函数writeDat()的内容。 31答案 jsValue() int a1=1,a2=1,a12,s
17、n; int n=2; sn=a1+a2; while(1) a12=a1+2*a2; if(sn=100) b0=n; if(sn=1000) b1=n; if(sn=10000) b2=n;break; sn=sn+a12; a1=a2; a2=a12; n+; 32结果结果out.dat:6911 338.迭代方程问题 下列程序的功能是:利用以下所示的简单迭代方法求方程:cos(x)-x=0的一个实根。xn+1=cos(xn)迭代步骤如下: (1)取X1初值为0.0; (2)X0=X1,把X1的值赋给X0; (3)X1=COS(X0),求出一个新的X1; (4)若X0-X1绝对值小0.0
18、00001,执行步骤(5),否则执行步骤(2); (5) 所求X1就是方程cos(X)-X=0的一个实根,作为函数值返回。 请编写函数countvalue()实现程序的要求,最后调用函数RITEDAT()把结果输出到文件OUT17.DAT中。34答案 float countValue() float x0=0.0, x1=0.0; while(1) x0=x1; x1=cos(x0); if(fabs(x0-x1)=0.000001); return (x1); 36分析 原型:float fabs(float x); 用法:#include 功能:求浮点数x的绝对值 说明:计算|x|, 当x
19、不为负时返回x,否则返回-x 该迭代法的基本算法是:反复赋值直到x0-x1的绝对值小于0.00001。故而可用do-while循环。这是一个典型的算法 。379.解不定方程组 下列程序的功能是:设A,B,C为三个不零的正整数,计算并输出下列不定方程组解的个数CNT以及满足此条件的所有A,B,C之和SUM。不定方程组为: A+B+C=13 A-C=5请编写函数COUNTVALUE()实现程序要求,最后调用函数RITEDAT()把结果CNT和SUM输出到文件OUT.DAT中。#include int cnt,sum; void countvalue()void main()38答案 void co
20、untvalue() int a=0; for(a=6;a0) cnt+;sum+=13; 注:由A-C=5对A+B+C=13进行变换可得B=18-2*A,题中要求三个数都要大于0,所以A必须从6开始(为了保证C不小于等于0),进而可得只要B大于0即可(即18-2*A0)。3910.整除及参数传递问题 请编写函数void countValue(int *a,int *n),它的功能是: 求出1到1000之内能被7或11整除但不能同时被7和11整除的所有整数,其结果以从小到大的顺序放在数组a中,并通过形式参数n传递这些数的个数。 注意: 部分源程序存在文件PROG1.C文件中。 40答案 voi
21、d countValue(int *a,int *n) int i=0; int cnt=0; for(i=1;i=1000;i+) if(i%7=0&i%11) *a=i; cnt=cnt+1; a+; else if(i%7&i%11=0) *a=i; cnt=cnt+1; a+; *n=cnt;41运行结果 7 11 14 21 22 28 33 35 42 44 49 55 56 63 66 70 84 88 91 98 99 105 110 112 119 121 126 132 133 140 143 147 161 165 168 175 176 182 187 189 196
22、198 203 209 210 217 220 224 238 242 245 252 253 259 264 266 273 275 280 286 287 294 297 301 315 319 322 329 330 336 341 343 350 352 357 363 364 371 374 378 392 396 399 406 407 413 418 420 427 429 434 440 441 448 451 455 469 473 476 483 484 490 495 497 504 506 511 517 518 525 528 532 546 550 553 560
23、561 567 572 574 581 583 588 594 595 602 605 609 623 627 630 637 638 644 649 651 658 660 665 671 672 679 682 686 700 704 707 714 715 721 726 728 735 737 742 748 749 756 759 763 777 781 784 791 792 798 803 805 812 814 819 825 826 833 836 840 854 858 861 868 869 875 880 882 889 891 896 902 903 910 913
24、917 931 935 938 945 946 952 957 959 966 968 973 979 980 987 990 9944211.求方差问题 请编制函数ReadDat( )实现从文件IN.DAT中读取1000个十进制整数到数组xx中; 请编制函数Compute( )分别计算出xx中偶数的个数even, 奇数的平均值ave1, 偶数的平均值ave2以及所有偶数的方差totfc的值, 最后调用函数WriteDat()把结果输出到OUT.DAT文件中。 计算方差的公式如下: 1 N-1 totfc = (xxi - ave2) *(xxi - ave2) N i=0 设N为偶数的个数,
25、 xxi为偶数, ave2为偶数的平均值。 原始数据文件存放的格式是: 每行存放10个数, 并用逗号隔开。(每个数均大于0且小于等于2000) 注意: 部分源程序存放在PROG1.C中。 请勿改动主函数main()和输出数据函数WriteDat()的内容。 43#include #include #define MAX 1000int xxMAX, odd=0,even=0;double ave1=0.0,ave2=0.0,totfc=0.0;void WriteDat(void);int ReadDat(viod)FILE *fp;if(fp=fopen(IN.DAT , r)=NULL) return 1;fclose(fp);return 0;void Compute(void)void main()源程序44答案 答案分为两部分,一部分补齐ReadDat函数中的代码,另一部分完成题目要求算法。int ReadDat(void) FILE *fp ; int i; if(fp=fopen(in.dat,r)=NULL) return 1; f
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年山东海阳市益民殡仪服务有限公司公开招聘工作人员5人笔试参考题库附带答案详解
- 保育员幼儿户外游戏护理
- 中学体育与健康课程与教学论 高职课件 第一章绪论学习资料
- 小班劳动课程微课
- 二零二五版教职工岗位工作协议
- 全新土地出资入股协议书
- 新入伙合伙人协议书二零二五年
- 二零二五养猪承包的合同范例
- 房子抵押还款协议书
- 2025届湖南省邵东县十中高三下学期模拟检测试题一(期末考试)数学试题
- 自然辩证法知到课后答案智慧树章节测试答案2025年春浙江大学
- 陕09J01 建筑用料及做法图集
- 伏特加、朗姆酒、特基拉ppt课件
- DB36T 1532-2021百香果栽培技术规程_(高清版)
- 2021新苏教版科学四年级下册7.太阳教案
- 第二节欧洲西部
- 高分子化学第六章_离子聚合
- 一年级100道口算题
- 天猫淘宝店铺运营每日巡店必做的事
- 拌合站验收指南
- 护士资格(执业)证书遗失补办申请表
评论
0/150
提交评论