国家计算机题库之编程题.docx





《国家计算机题库之编程题.docx》由会员分享,可在线阅读,更多相关《国家计算机题库之编程题.docx(58页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、全国计算机等级考试c语言一一编程题1 . m个人的成绩存放在score数组中,请编写函数firn,它的功能是:将低于平均分的人数作为函数值返回,将低 于平均分的分数放在below所指的数组中。例如,当score数组中的数据为10、20、30、40、50、60、70、80、 90时,函数返【可的人数应该是4,bclow中的数据应为10、20、30、40。第一个for循环用来计算score数组中 分数的总和,然后用aver/=m求出平均值,第二个循环用来找出小于平均分的元素,并放到数组below中,这里要 注意j的递增方式。#include #include #includc int fiin(i
2、nt score,int m,int below) int iJ=0,aver=0;for(i=0;im;i+) aver+=scorei; aver/=m;for(i=0;im;i+) if(scoreiaver) below j+=scorei; return j;main() int i,n,below9;int score9=10,20,30,40,50,60,70,80,90);n=fun(score,9,below);printfifnbelow the average score are :*); fbr(i=0;in;i+) printf(M%4dM,belowi);2 .请编
3、写函数fun,它的功能是:求出1到1000之内能被7或11整除、但不能同时被7和11整除的所有整数 并将它们放在a所指的数组中,通过n返回这些数的个数。该题关键就是如何表示能被7或11整除,但不能同 时被7和11整除。用(i%7=0) | (i%l 1=0)来表示能被7或11整除,用!(i%7=0) & (i%l 1=0)来表示不 能同时被7和11整除。#include #include void fiin(int *a,int *n) int i,m=0;for(i=l ;il000;i+)if(i%7=0) II (i%ll=0) & !(i%7=0) & (i%ll=0) am=i;m+
4、=l;*n=m;main() int aa1000,n,k;clrscr();fun(aa,&n);for(k=0;kn;k-H-)if(k+1)% 10=0) printf(HnH); else printf(M%d,aak);3 .请编写函数void fun(int xjnt pp,int),它的功能是:求出能整除x且不是偶数的各整数,并按从小到大的 顺序放在pp所指的数组中,这些除数的个数通过形参n返回。例如,若x中的值为30,则有4个数符合要求, 它们是1,3,5,15。由于要求的数不能是偶数故编程时从1开始循环而步长为2这样正好保正i永远的奇数。 这里也要注意存放结果的数组pp的卜标
5、变化方式。#include #include void fun(int x,int pp,int *n) int ij=0;for( i=l;i=x;i=i+2)if(x%i=0) ppj+=i;*n=j;main() int x,aa1000,n,i;printfi(Hn please enter an integer number:nM);scanfi(H%dM,&x);fun(x,aa,&n);fbr(i=0;in;i-H-) printRd ,aai);4 .请编写一个函数void fun(char *tt,int pp),统计在字符串中H到N26个字母各自出现的次数,并依次放在pp
6、所指数组中。例如,当输入字符串abcdefgabcdeabc后,程序的输出结果应该是:3 33 22 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0000000本题采用的是字母的ASCII码值与数组pp下标的对应转换关系分别求出对应字母的个数。第- 个for是给pp赋初值0,第二个for用于控制在字符串内从头到尾移动。由于字母宜的ASCII码值为97而它 的个数要放在pp0中,而冒-97的值正好为0.#include #include void fun(char *tt,int pp) int i;for(i=0;i26;i+)PPfi=O;for(;*tt;tt+)if(*tt=
7、a) pp*tt-97+;)main() char aa1000;int bb26,k;clrscr();printf(nPlease enter a char string:);scanRs”,aa);fun(aa,bb);for(k=0;k26;k+) primff%d”,bbk);printffn);5 .请编写一个函数void fiin(int m,int k,int xx),该函数的功能是:将大于整数m且紧靠m的k个素数存入xx 所指的数组中。例如,若输入:17,5,则应输出:19,23,29,31,37。本题中的for循环用来判断个数是否为素数, 由于个数只能是k个所以用do-wh
8、ile循环来控制。#include #include void fiin(int m,int k,int xx) int iJ=0,p=m+l;do for( i=2;i=p) xxj+=p;P+; while(jk);main() int m,n,zz1000;printffn please enter two integers:*);scanf(%d%d,&m,&n);fun( m,n,zz);fbr(m=0;mn;m+) printff%d ”,zzm);6 .请编写一个函数void ftm(chara口,charb,int n)淇功能是删除一个字符串中指定下标的字符。其中,a指向 原字
9、符串,删除后的字符串存放在b所指的数组中,n中存放指定的下标。例如,输入一个字符串World,然后输 入3,则调用该函数后的结果为Wordo#include #include #define LEN 20void fun (char a,char b ,int n) int i,k=0;for(i=0;ai!=,0,;i+)if(i!=n) bk+=ai;bk=*0*;)main() FILE *wf; char strlLEN,str2LEN; int n;printf (Enter the string:nM);gets(strl);printf (MEnter the position
10、deleted:1);scanf (M%dn,&n);fun(strl,str2,n);printf (MThe new string is:%s nH,str2);wffbpen(Mout.datn,HwM);fun(nworldM,str2,3);用 rintRwf,”s”,str2);fclose(wf);7 .请编写个函数int fun(int *s,int t,int *k),用来求出数组的最大元素在数组中的下标并存放在k所指的存储 单元中。例如,输入如下整数:876 675 896 101 301 401 980 431 451 777则输出结果为:6,980。#include #
11、include int fiin(int *s,int t,int *k) int i,max;max=s0;for( i=0;imax) max=si;*k=i;main() int al 0=876,675,896,101,301,401,980,431,451,777,k; fun(a,10,&k);printfC%d,%dn”,k,ak);8 .编写函数ftm,函数的功能是:根据以下公式计算s,计算结果作为函数值返回;n通过形参传入。 s=l+l/(l+2)+l/(H-2+3)+.+1/(1+2+3+4+n),例如:若 n 的值为 11 时,函数的值为 1.833333。#includ
12、e float fun(int n) int i,sum=l;float s=l;for(i=2;i=n;i+) sum=sum+i; s=s+1.0/sum;return s; long chsdc(int n) int i,s;s=0;for(i=0;in。 p=m!/n!(m-n)!o 例如:m=12,n=8 时,运行结果为 495.0000000#include #include float fun( int m,int n) int ij,k;long int t=l,s=l,p=l;float q;for(i=l;i=m;i+) t*=i;for(j=l;j=n;j+) s*=j;
13、for(k=l;k=m-n;k+) p*=k;q=(float)t/s/p;return q;main() printf(Mnp=%lfn,fun(l 2,8);10 .编写函数fun,它的功能是:利用以下所示的简单迭代方法求方程cos(x)-x=0的一个实根。 Xn+l=cos(Xn) 迭代步骤如下:取X1初值为0.0;(2)x0=xl,把xl的值赋给x0;(3)xl=cos(xO),求出一个新的 xl;(4)若xO-xl的绝对值小于0.000001,则执行步骤,否则执行步骤(2);(5)所求xl就是方程cos(x)-x=0的一个实根,作为函数值返回。程序将输出结果Root=0.739085
14、o#include #include #include float fun() float x0,xl=0;do x0=xl;xl=cos(x0); while( fabs(x0-xl)le-006);return xl;main() printfIHroot=%fnH,ftin();11 .下列程序定义了 NxN的二维数组,并在主函数中自动赋值。请编写函数该函数的功能是: 使数组左下半三角元素中的值全部置成0o例如:a数组中的值为该题的关键是如何表示出左下半角的元素, 当从上往下到第i行时只有左边的i个元素要置为0(每行总是如此)。用外层for来控制行而内嵌的for来控 制每行的左边元素,故
15、而在内嵌for中j最大只能循环到i(即表示出第i行左边的i个元素)。a=,则返回主程序后a数组中的值应为0#include#include#include#define N 5int fun(int aN) int ij;for(i=0;iN;i+)for(j=0;j=i;j+) aiU=0;main() intaNN,ij;printR”* The array *nM);fbr(i=O;iN;i-H-)for(j=0;jN;j-H-) aij=rand( )%10;printff %4d”,ai 皿);fun(a);printffThe resultnH);fbr(i=O;iN;i-H-)f
16、or(j=0JN;j4-+) printR4d”,aij);12 .下列程序定义了 NN的二维数组,并在主函数中赋值。请编写函数fun,函数的功能是:求出数组周边元素 的平均值并作为函数值返回给主函数中的so例如:若a数组中的值为0127919 7 4 5a= 238314 56825 9141则返回主程序后s的值应为3.375。注意不能重复计算,第一个for循环求出第一列与最后一列的和,第二个for循环求出第一行与最后一行(已除去两头元素),要注意第二个for中起始为1,最后为N-2o#include #include #include #define N 5double fun (int
17、wN) int i,t=0;double s=0;for(i=0;iN;i+) s+=wi0+wiN-l;t+=2;for(l=l;iN-l;i+) s+=wrOi+wN-li;t+=2;s=s/t;return s;main() int aNN=0,1,2,7,9,1,9,7,4,5,2,3,8,3,1,4,5,6,8,2,5,9,1,4,1;int i,j;double s;printf(n* The array *nM);fbr(i=0;iN;i+)for(j=0yN;j-H-)printf(M%4dn,aij);s=fiin(a);printfif1* The result *nH);
18、printf(HThe sum is %lfn,s);13 .请编一个函数void fun(int ttMN,int ppN),tt指向一个M行N列的二维数组,求出二维数组每列中最小 元素,并依次放入pp所指一维数组中。二维数组中的数已在主函数中赋予。该题用fbr(i=0;ivN;i+)来控制一 列一列地找,而内嵌循环ibr(j=O;jvMJ+)用于控制同列内元素的比较。多重循环的嵌套总是最里层循环变化 最快,即外层循环改变一个值,内层循环就要循环完一次,对于多重循环一定要好好去体会和理解,在多数题H 中都要用到多重循环(一般为二重)。#include Ttconio.hTT#include
19、stdio.h#define M 3#define N 4void fun(int ttMN,int ppN) int ij;for(i=0;iN;i+) PP=tt0i;fora=0dM;j+)if(ttjiPpi) ppi=ttUi; main() int tMN=22,45,56,30,19,33,45,38,20,22,66,40;int pN,ij,k;printf(Hthe original data is:nn);fbr(i=0;iM;i+)fdr(j=O;jNJ+) print*6dllun(t,p);printf(ftnthe result is:n);for(k=0;kN;
20、k+) printf%4d,;pk);14 .请编写函数fun,函数的功能是求出二维数组周边元素之和,作为函数值返回。二维数组中的值在主函数中 赋予。例如:若二维数组中的值为1 35792 99946 999813570则函数值为61。该题的第一个for循环是计算矩阵的最上一行和最下一行的总和,第二个for是计算除两头元素以外的最 左-一列和最右一列的元素的和,最后sum就是周边元素的和。#include #include #define M 4#define N 5int fun(int aMN) int sum=0,i;for(i=0;iN;i+) sum+=a0i+aM-li;for(i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 国家 计算机 题库 编程

限制150内