全国计算机等级考试c 语言一一编程题.docx

上传人:无*** 文档编号:68335766 上传时间:2022-12-27 格式:DOCX 页数:55 大小:86.69KB
返回 下载 相关 举报
全国计算机等级考试c 语言一一编程题.docx_第1页
第1页 / 共55页
全国计算机等级考试c 语言一一编程题.docx_第2页
第2页 / 共55页
点击查看更多>>
资源描述

《全国计算机等级考试c 语言一一编程题.docx》由会员分享,可在线阅读,更多相关《全国计算机等级考试c 语言一一编程题.docx(55页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、全国计算机等级考试c语言一一编程题1 . m个人的成绩存放在score数组中,请编写函数fim,它的功能是:将低于平均分的人数作为函数值返回,将低 于平均分的分数放在below所指的数组中。例如,当score数组中的数据为10 20、30、40、50、60、70、80、 90时,函数返回的人数应该是4,below中的数据应为10、20、30、40o第一个fbr循环用来计算score数组中 分数的总和,然后用aver/=m求出平均值,第二个循环用来找出小于平均分的元素,并放到数组below中,这里要 注意j的递增方式。#include #include /include int fun(int

2、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) belowj+J=scorei; return j;main() int i,n,below9;int score9=10,20,30,40,50,60,70,80,90);n=fun(score,9,bclow);printfinbelow the average score are fbr(i=0;in;i-H-) printfl(,%4d,belowi);2 .请编写函数fun,

3、它的功能是:求出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 fun(int *a,int *n) int i,m=0;for(i=l;i1000;i+)if(l%7=0) II (i%ll=0) & !(i%7=0) & (i%ll=0) am=i;m+=l;*n=m;

4、jmain() int aa1000,n,k;clrscr();fun(aa,&n);for(k=0;kn;k+)if(k+l)%10=0) printf(MnH); else printf(H%d,aak);3.请编写函数void funfint x,int pp,int *它的功能是:求出能整除x且不是偶数的各整数,并按从小到大的 顺序放在pp所指的数组中,这些除数的个数通过形参n返回。例如,若x中的值为30,则有4个数符合要求, 它们是1,3,5,15。由于要求的数不能是偶数故编程时从1开始循环而步长为2这样正好保正i永远的奇数。 这里也要注意存放结果的数组pp的下标变化方式。#incl

5、ude #include void fun(int x,int pp,int *n) int ij=0;for( i=l;i=x;i=i+2)if(x%i=0) pplj+J=i;*n=j;main() int x,aa1000,n,i;printf(”n please enter an integer number:n*);scanf(M%dM,&x);fun(x,aa,&n);fbr(i=0;in;i-H-) printR%d ,aai);4 .请编写一个函数void fun(char *tt,int pp),统计在字符串中R到N26个字母各自出现的次数,并依次放在pp 所指数组中。例如,

6、当输入字符串abcdefgabcdeabc后,程序的输出结果应该是:3 3 322 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0000000本题采用的是字母的ASCII码值与数组pp下标的对应转换关系分别求出对应字母的个数。第一 个for是给pp赋初值0,第二个for用于控制在字符串内从头到尾移动。由于字母家的ASCII码值为97而它 的个数要放在pp0中而g97的值正好为0o#include #include void fun(char *tt,int pp) int i;for(i=0;i26;i+)ppi=0;for(;*tt;tt+)if(*tt=a) pp*tt-97+

7、;main() char aa1000;int bb26,k;clrscr();printfi(nnPlease enter a char string:*1);scanfi(”s”,aa);fun(aa,bb);fbr(k=0;k26;k+) printfT%d”,bbk); printffW);5 .请编写一个函数void ftin(int m,int k,int xx口),该函数的功能是:将大于整数m且紧靠m的k个素数存入xx 所指的数组中。例如,若输入:17,5,则应输出:19,23,29,31,37。本题中的for循环用来判断一个数是否为素数, 由于个数只能是k个所以用do-whil

8、e循环来控制。#include #include void fun(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;printRn please enter two integers:M);scanf(H%d%d,&m,&n);fun( m,n,zz);fbr(m=0;mn;m+) printff%d ”,zzm);6 .请编写一个函数void fun(char a,char b,int n),其功能是:删除一个字符串中指定下标的字符。其中,a指向 原字

9、符串,删除后的字符串存放在b所指的数组中,n中存放指定的下标。例如,输入一个字符串World,然后输 入3,则调用该函数后的结果为Wordo#include #include #define LEN 20void fiin (char a,char b ,int n) int i,k=0;for(i=0;ai!=*0*;i+)if(i!=n) bk+=ai;bk=(r;main() FILE *wf; char strlLEN,str2LEN; int n;printf (MEnter the string:nH);gets(strl);printf (Enter the position d

10、eleted:*);scanf (M%dn,&n);fun(strl,str2,n);printf (MThe new string is:%s nn,str2);wf=fbpen(Hout.datH,wM);fun(uworldM,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 fun(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);printfiCn%d,%dn,k,ak);8 .编写函数fun,函数的功能是:根据以F公式计算s,计算结果作为函数值返回;n通过形参传入。s=l+l/(l+2)+l/(l+2+3)+.+1/(1+2+3+4+n),例如:若 n 的值为 11 时,函数的值为 1.833333。#includ

12、e float fiin(int n) int i,sum=l;float s=l;for(i=2;i=n;l+) 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.000000。#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(Hnp=%lfnn,fun(l 2,8);10 .编写函数ftm,它的功能是:利用以下所示的简单迭代方法求方程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,则执行步骤(5),否则执行步骤(2);(5)所求xl就是方程cos(x)-x=0的一个实根,作为函数值返回。程序将输出结果Root=0.73

14、9085o#include #include #include float fiin() float x0,xl=0;do x0=xl;xl=cos(x0); while( fabs(x0-xl)le-006);return xl;main() printfi(Hroot=%fn,fiin();)11 .下列程序定义了 NxN的二维数组,并在主函数中自动赋值。请编写函数该函数的功能是: 使数组左下半三角元素中的值全部置成0o例如:a数组中的值为该题的关键是如何表示出左下半角的元素, 当从上往下到第i行时只有左边的i个元素要置为0(每行总是如此)。用外层for来控制行而内嵌的for来控 制每行的

15、左边元素,故而在内嵌for中j最大只能循环到i(即表示出第i行左边的i个元素)。197097238008456,则返回主程序后a数组中的值应为000 0#include#include#include#define N 5int fiin(int aN) int ij;for(i=0;iN;i+) for(j=0;j=i;j+) aiU=0;)main() int aNN,ij;printff* The array *nM);fbr(i=O;iN;i-H-)for(j=0;jN;j-H-) aij=rand( )%10;printn%4d,aiU); fiin(a);printffThe re

16、sultnH);fbr(i=O;iN;i-H-)for(j=OuNj-H-) printf(%4d,aij);12 .下列程序定义了 NxN的二维数组,并在主函数中赋值。请编写函数ftm,函数的功能是:求出数组周边元素 的平均值并作为函数值返回给主函数中的So例如:若a数组中的值为0127919 7 4 5a = 238314568259141则返回主程序后s的值应为3.375。注意不能重复计算,第一个for循环求出第一列与最后一列的和,第二 个for循环求出第一行与最后一行(已除去两头元素),要注意第二个for中起始为1,最后为N-2o#include #include #include #

17、define N 5double fun (int wN) int i,t=0;double s=0;for(i=0;iN;i+) s+=wi0+wiN-l;t+=2; for(i=l;iN-l;i+) s+=w0i+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 ij;double s;print.* The array *n”);for(i=0;iN;i-H-)for(j=0;jN;j-H-)printf(M%4dH,aij);s=fun(a)

18、;printff* The result *nH);printffThe sum is %lfnH,s);13 .请编一个函数void fun(int ttMN,int ppN),tt指向一个M行N列的二维数组,求出二维数组每列中最小 元素,并依次放入pp所指一维数组中。二维数组中的数已在主函数中赋予。该题用fbr(i=0;ivN;i+)来控制一 列一列地找,而内嵌循环for(j=0;jvM;j+)用于控制同列内元素的比较。多重循环的嵌套总是最里层循环变化 最快,即外层循环改变一个值,内层循环就要循环完一次,对于多重循环一定要好好去体会和理解,在多数题目 中都要用到多重循环(一般为二重)。#i

19、nclude conio.h”#include stdio.h#define M 3#define N 4void fun(int ttMN,int ppN) int ij;for(i=0;iN;i+) pp=ttOi;for(j=0;jM;j+)if(ttjippi) ppi=ttUi;)main() int tMN=22,45,56,30,19,33,45,38,20,22,66,40; int pN,ij,k;printfifthe original data is:nH);fbr(i=O;iM;i-H-)for(j=O;jNJ+) printfi(%6d,tij);fun(t,p);p

20、rintffnthe result is:nM);fbr(k=0;kN;k+) printf)(%4d,pk);14 .请编写函数fun,函数的功能是求出二维数组周边元素之和,作为函数值返回。二维数组中的值在主函数中 赋予。例如:若二维数组中的值为13 5 7 9299946999813570则函数值为61。该题的第一个for循环是计算矩阵的最上一行和最下一行的总和,第二个for是计算除两头元素以外的最 左一列和最右一列的元素的和,最后sum就是周边元素的和。#include #include #define M 4#define N 5int fun(int aMN) int sum=0,i

21、;for(i=0;iN;i+) sum+=a0i+aM-li;for(i=l;iM-l;i+) sum+=ai0+aiJN-l;return sum;main() intaaMN=135,7,9,2,9,9,9,4,69998,135,7,0;intiJ,y;printffThe original data is :n);fbr(i=0;iM;i+)for(j=0jNj+)printf(%6d,aaiU);y=fun(aa);printf(MnThe sum:%dnM,y);】5.请编写一个函数unsigned fun(unsigned w),w是一个大于10的无符号整数,若w是n(nN2)位

22、的整数,则函 数求出w的后nl位的数作为函数值返回。例如:w值为5923,则函数返回923;若w值为923,则函数返回23。 由于unsigned型整数在0-65535这间,只要它大于10000则对10000求余即得出后面4位,否则如果大于1000 则对1000求余得出后3位数,这样一层一层往小的判断。由于return的作用除了返回值以外,还有当执行到 return时就跳出该程序,所以可以连续的用if语句。#include #include unsigned fiin( unsigned w ) if(w=10000) return w% 10000;jf(w=1000) return w%1

23、000;if(w=100) return w%100;return w%10;main() unsigned x;printfif enter a integer number:);scanf( M%uM,&x);if(x10) printf(Mdata error!M);else printf (the result:%unH,fun(x);16.请编一个函数floatfun(double h),函数的功能是对变量h中的值保留2位小数,并对第三位进行四舍五入(规 定h中的值为正数)。例如:若h值为8.32433,则函数返回8.32;若h值为8.32533,则函数返回8.33h乘以1000 后

24、正好是原小数点后第三位做了新数的个位数,然后再进行加5运算时。如原小数点后第三位为4及以下则 加5后还是不能进一位(即四舍),如是5及以上则加5后该位就要向前进一位数(即五入)。进行加5运算后除 10再赋给一个整型变量此时就只有原小数点第二位及以前各位保留在整型变量中,最后再对整型变量除100, 这样又出现了两位小数。该题中,进行四舍五入后一定要赋给一个整型变量才能将不用部分彻底变成0o#include #include float fun(float h) long t;h=h*1000;t=(h+5)/10;return (float)t/100;main() float a;printf

25、ifTnter a:);scanfC%r,&a);printffThe original data is:);printff%fnn”,a);printffThe result :%6.2fnM,fun(a);17 .请编一个函数fun(char *s),该函数的功能是把字符串中的内容逆置。例如:字符串中原有的字符串为 abede场则调用该函数后,串中的内容为gfedeba。该题的算法是先分别找出字符串的两头,然后同时逐一往中 间移动,每移动一次都进行两字符的位置对换,直到中间字符(用s+is+n-l-i来控制)。由于s+i中一个地址,因 此要注意把它的内容取出再进行换位。/include #

26、include #include #define N 81fun(char *s) int i=O,t,n=strlen(s);for(;s+is+n-l-i;i+) t=*(s+i);*(s+i)=*(s+n-l-i);*(s+n-l-i)=t;main() char aN;printf(MEnter a string:); gets(a);prin氓The original string is:M);puts(a);fun(a);printfCXn”);printffThe string after modified:);puts(a);18 .编写程序,实现矩阵(3行3歹U)的转置(即行

27、列互换)。例如,若输入下面的矩阵:100200300则程序输出100 400 700400 500 600200 500 800700 800 900300 600 900这题的关键在于进行行列下标转换的算法,由矩阵的对称性我们不难看出在进行行列互换时aj在好是与 aj皿互换,因而只要我位让程序走完矩阵的左上角即可(用for(i=0;i2;iH)再套for(j=i+l;jv3;j+)来完成左上 角的走动。#include #include int ftin(int array33) int ij,t;fbr(i=0;i2;i+)fbr(j=i+l j3y+)t=arrayij;arrayi|j

28、=arrayji;array|ji=t;)main()int ij;int array33=l 00,200,300, 400,500,600, 700,800,900;clrscr();fbr(i=0;i3;i+)for(j=0;j3u4-+)printf(M%7dn,arrayi0);printffW);fun(array);printf(HConverted array:nH);fbr(i=0;iv3;i+)fbr(j=0J3u+)printf(%7d,arrayi|j);printf(n);19 .编写函数fim,该函数的功能是:从字符串中删除指定的字符。同一字母的大、小写按不同字符处

29、理。例如:若程序执行时输入字符串为:turbo c and borland c+从键盘上输入字符n,则输出后变为:turbo c ad borlad c+如果输入的字符在字符串中不存在,则字符串照原样输出。注:该题的算法是让i控制一个一个字符往后走,在移动过程中如果si不是要删的字符,则将其按顺序放到新 串中(新串亦是用s来做,只是用k来控制新串的下标,由于要删除一些元素,因此新串的下标总是比原下标i要 慢。因而可用此法即同一字符串变量的方法。#include #includc int fiin(char s,int c)int i,k=0;for(i=0;si;i+)if(si!=c) sk

30、+=si;sk=,0,;main() static char str=Hturbo c and borland c-H-n;char ch;clrscr();printft :%snM,str);printfif*scanf(M%cM,&ch);fun(str,ch);printf(Mstr=%snM,str);)20 .编写函数int fun(int lim,int aaMAX),该函数的功能是求出小于或等于lim的所有素数并放在aa数组中,该 函数返回所求出的素数的个数。注:循环for(i=2;i=k)用于判断在上一个fbr()循环中i能否走到k,如果能则表示在2到k-1 的数都不能整除k

31、,即k为素数。#include #include #define MAX 100int fiin( int lim, int aaMAX) int lj=0,k;for( k=2; klim; k+) for( i=2; i=k) aaj+=k;return j;main() int limit,i,sum;int aaMAX;printffn input a integer number:);scanf( %dM,&limit);sum=fun(limit,aa);fbr(i=O; isum; i-H-) ifti%10=0&i!=0)printfCW”);printff%5d”, aai)

32、;21 .编写函数ftin,对长度为7个字符的字符串,除首、尾字符外,将其余5个字符按ASCII码降序排列。 例如,若原来的字符串为CEAedca,则排序后输出为CedcEAa。/*该题采用的排序法是选择法进行降序排序,算法是用外fbr()循环从字符串的前端往后端走动,每走动一个字 符都用内嵌的for()循环在该字符后找出最小的字符与该字符进行换位。直到外for()循环走到最后一个字符。 此外,此题还要注意把首尾字符除开,即在最外层fbr()循环中从1开始,只到num-2即可。*/#includc #include #include int fun(char *s,int num) int i

33、 j,t;for(i=l;inum-2;i+)for(j=i+l;jnum-l ;j+) if(sisUD t=si;si=sj;sj=t;main() char s10;printf(输入7个字符的字符串:);gets(s);fun(s,7);printfTn%s”,s);22 .N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。请编写函数ftm,它的 功能是:找出学生的最高分,由函数值返回。#include #include #define N 8struct slist double s;struct slist *next;typedef struct sli

34、st STREC;double fiin( STREC *h ) double max ; int i; max=h-s; for(i=0; ismax) max=(h+i)-s; return max;STREC * creat( double *s) STREC *h,*p,*q; int i=0;h=p=(STREC*)malloc(sizeoflSTREC);p-s=0; while(is=si; i+; p-next=q; p=q;p-next=0; return h; outlist( STREC *h) STREC *p; p=h-next; printf(headn); do

35、printf(,-%2.0r,p-s); p=p-next; while(p!=0); printfCWW); main() double sN= 85,76,69,85,91,72,64,87), max;STREC *h; h=creat(s); outlist(h); max=fun( h);printwmax=%6.1 fnM,max);23 .请编写函数ftm,该函数的功能是:判断字符串是否为回文?若是则函数返回1,主函数中输出YES,否则返回 0,主函数中输出NOo回文是指顺读和倒读都一样的字符串。例如,字符串LEVEL是回文,而字符串123312就不是回文。#include #d

36、efine N 80 int fun(char *str) int i,n=0,fg=l;char *p=str; while (*p) n+; p+; for (i=0;in/2;i+)if (stri=strn-l-i);else fg=0;break; return fg;main() char sN;printfifEnter a string: *); gets(s);printf(MnnM); puts(s);iRftm(s) printfC YESn); else printR” NOW”);24 .请编写一个函数fim,它的功能是:将一个数字字符串转换为一个整数(不得调用C语言

37、提供的将字符串转换 为整数的函数)。例如,若输入字符串“-1234”,则函数把它转换为整数值-1234。#include #include long fun ( char *p) long s=O,t;int i=OJ,n=strlen(p),k,sl;if(pO=)i+; for(j=i;j=n-l;j+) t=pU-O; sl=10;for (k=j;kn-l;k+) t*=sl; s+=t;if(pO=*-*) return -s; else return s; main() char s6;long n; printff Enter a string:nH); gets(s);n=fu

38、n(s);printf(w%ldnM,n);25 .请编写个函数fun,它的功能是:比较两个字符串的长度,(不得调用C语言提供的求字符串长度的函数卜函 数返回较长的字符串。若两个字符串长度相同,则返回第一个字符串。例如,输入:beijing shanghai( 为回车键),函数将返回shanghaio#include char *fun ( char *s, char *t) char *ss=s, *tt=t;while(*ss)&(*tt) ss+; tt+; if(*tt) return; else return(s); main() char a20,b10,*p,*q;int i;p

39、rintf(MInput 1th string:M);gets( a);printf(Input 2th string:);gets( b);printfC%sn”,fun (a, b ); 26 .请编写一个函数ftm,它的功能是:根据以下公式求兀的值(要求满足精度0.0005,即某项小于0.0005时停止 迭代):X/2=l+l/3+lx2/3x5+lx2x3/3x5x7+lx2x3x4/3x5x7x9+.+lx2x3x.xn/3x5x7x(2n+l) 程序运行后,如果输入精度0.0005,则程序输出为3.14.o #include #include double fun (double

40、eps) double s;float n,t,pi;t=l;pi=0;n=1.0;s=1.0;while(fabs(s)=eps) pi+=s;t=n/(2*n+l);s*=t; n+; pi=pi*2; return pi;) main() double x;printR”Input eps:);scanf(M%lF,&x); printf(Hneps=%lf, PI=%lfnM, x, ftin(x);27 .请编写一个函数fun,它的功能是:求出1到m之内(含m)能被7或11整除的所有整数放在数组a中,通过n 返回这些数的个数。例如,若传送给m的值为50,则程序输出:7 11 14 21 22 28 33 35 42 44 49#include #include #define M 100void ftin (int m, int *a , int *n ) int i,k;*n=0;for(i=l,k=0; i=m; i+)if(i%7=0)ll(i%ll=0) ak+=i; (*n)+; )main() int aaM, n, k;fun ( 50, aa, &n );for ( k=0; kn; k+ )if(k+l)%20=0) printfC);else prints 4d, aa

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁