《计算机二级上机题库.docx》由会员分享,可在线阅读,更多相关《计算机二级上机题库.docx(273页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、5159015881一、程序填空题请补充fun函数,该函数的功能是:求能整除k且是偶数的数,把这些数保存在数组a中,并按从大到小输出。例如,当k=40时,依次输出402010842注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。#include#include void fun(int k,int a)(int i;int j=0;for(_l_;i=0;i) printf(%dn, ai); main ()(int k=l;int a100;printf(*nPlease input kn);scanf &k);fu
2、n(k, a);答案:1、j=l2,&3、j解析:本题中函数功能是求能整k的偶数。笫一空:求能整除k的偶数应该从1开始到k,逐个判断,所以这里循环条件中应补全j=l第二空:当前的i不但要能整除k,而且要求它是偶数,所以这里的逻辑关系应该是“&第三空:在fun函数中,通过for循环输入结果,根据已给出的循环条件中的已有代码i=0; i”,可知,这个循环是从最后一个元素到第一个元素的输出,根据结果数组a中元素的个数,第三空应填一j二、程序改错题下列给定程序中的功能是:读入一个英文本行,将其中每个单词的第一个字母改成大写,然后输出此文本(这里的单词”是指由空格隔开的字符串)。例如,若输入good l
3、uck!”,则应输出Good Luck!”。注意:请修改程序中的错误,不要改动main函数,不得增行或删行,也不得更改程序的结构。部分源程序给出如下。ttinclude#include#include/*orror*/ void top(char s)(int i=0;for(;*s;s+) if(if(*s=) i=0; else (if (*s!=,)i=l;*s=toupper (*s);main ()(char str81;printf(/znPlease enter an English text line:);gets(str);printf(*nnBefore changing:
4、n%s*,str);top(str);printf (z,nAfter changing:n%sn str);答案:void top(char *s)解析:本题中函数的功能是将其中每个单词的每一个字母改成大写。根据题干中给出的提示:单词是指由空格隔开的字符串,用来确定单词中的第个字母,也就是空格字符后面的第个字符,然后将其改写为大写字母。主函数中“top(str)”语句中变量str是数组的名称,所以top函数中的变量s应是指针型变量,应将“void top (char s)改为void top (char *s)”三、程序设计题假定输入的字符串中只包含字母和卡号。请编写函数fun,它的功能是:
5、除了字符串前导和尾部的州”号全部删除。形参r己指向字符串中第一个字母,形参v己指向字符串中最后一个字母。在编写函数时,不得使用C语言提供的字符串函数。例如,若字符串中的内容为删除后,字符串中的内容应当第#abcdefg#注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。部分源程序给出如下。#include #include #include void fun(char *s, char *r,char *v)void main ()(char str100,*p,*q;FILE *out;printf (Enter a string:n/z);g
6、ets(str);p=q=str;while(*p)p+;P-;while(*p=,#)p-;while(*q=#)q+;fun (str, q, p);printf (The string atrer deleted:n;puts(str);out=fopen Coutfi le. dat,w);strcpy(str,;fun(str,str+4, str+13);fprintf(out,%s, str);fclose(out);)答案:int i=0;char *q=s;while(qr)si=*q;q+;i+;while(qv)(if (*q!=#)(si=*q;i+;q+;)while
7、(*q)(si=*q;i+;q+;)si=0;解析:1、设置一个指针变量q指向字符串的头号位置,并使用循环,将从字符串头开始到笫一个字母的复制到字符串s。2、对第一个字母到最后一个字母之间的字符进行循环判断是否为州”,如果是则跳过,否则复制到字符串s.3,将最后个字母到串尾的州”复制到s,然后在新生成的字符串尾加0。2一、程序填空题请补充函数fun,该函数的功能是:按行统计NXN维矩阵元素中的最大值(均为整数),并把这些值按从大到小的顺序保存在数组b中。矩阵的维数在主函数中输入,并赋予随机数。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的横线上填入所编
8、写的若干表达式或语句。试题程序:#include #include include define N 20void fun(1)(int i, j;int t;for (i=0;in:i+)for (j=O;jn;j+)if(2)b i=a ij;for (i=0;in;i+)(for (j=0;jn;j+)if(3)(t=b i;b i=b j;b j=t;)void main()int a NN;int b N;int n;int i, j;system(CLS);printf (z*Input the dimension of array N*n);scanf &n);printf (/
9、z*The array * n*);for (i=0;in;i+)for (j=O;jn;j+)(a ij=rand()%20;while(a ij=0)a ij=rand()%30;printf (*%4d*, a ij);printf (n n);)for (i=0;in;i+)b Li=0;fun (a, b, n);printf(z,* THE RESULT *n);for (i=0;in;i+)printf (%d , b i);1、int a 0N, int b 口,int n2、b Eib j解析:形参的类型与个数应该与实参的类型和个数相对应,由实参的类型和个数可知【1】填int
10、 a N,int b 口,int n;2处所在for循环的功能是按行统计N X N维矩阵元素中的最大值,并把每行的最大值放在数组b中,因此【2】填b ib jo二、程序改错题下列给定程序中,函数fun的功能是:求k!(k13),所有阶乘的值作为函数值返回。例如,若 k=ll,则应输出39916800。请修改程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:include #include #include long fun(int k)/*found*/ if k0return(k*fun(k-l);/*found*/else if
11、 (k=0)return 1;)void main ()(int k=ll;system(CLS);printf C*%d!=%ld n ”, k, fun(k);(1)错误:if k0正确:if (k0)(2)错误:else if(k=0)正确:else if(k=0)解析:if后的表达式是判断条件,应该用括号括起来,因此把k0改为(k0),在计算阶乘的时候有个特例,就是0的阶乘为1,应该单独处理;k二0是一个赋值语句而不是判断语句,而此处需要一个判断语句,因此应改为else if(k=0)o三、程序设计题请编写函数fun,其功能是:求出1到500之内能被7或11整除、但不能同时被7和11整
12、除的所有整数,并将它们放在b所指的数组中。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:include ttinclude #include void fun(int *b, int *n)(void main ()(int aa 500, n, k;system(CLS);fun(aa,&n);for (k=0;kn;k+) if(k+l)%10=0) printf(*%5d*, aa k); printf (*n*);/*一行写9个数*/ elseprintf(*%5d , aa k);答案void fun(
13、int *b, int *n)(int i, j=0;for(i=l;i=500;i+)/*1到500之内*/if (i%7=0 II i%ll=0)&i%77!=0)/*能被7或11整除、但不能同时被7和11整除的所有整数*/ b j+=i;/*将它们存放在b所指的数组中*/*n=j ;/*通过n返回这些数*/)解析:题目要求广500之间能被7或11整除、但不能同时被7和11整除的所有整数,注意能同时被7和11整除的整数一定能被77整除,而不能被77整除的数不一定就能被7或11整除,通过if语句来实现,最后把符合条件的整数赋给b所指的数组中,最后通过形参中的指针变量n把b数组的长度返回到主函
14、数中。3一、程序填空题请补充fun函数,该函数的功能是判断一个数的个位数字和百位数字之和是否等于其十位上的数字,是则返回yes!”,否则返回no!。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。(include ttinclude char *fun(int n)(int t, s, a;t=n%10;s=n/10%10;a=1;if(t+a)=s) return 2;elsereturn 3;)main ()( int len=0; printf(Please input a datan); scanf(*%d*,
15、&len);printf(The result is:);printf fun(len);答案:1、 n/100%102、yes!3、no!解析:该函数的功能是判断一个数的个位数字和百位数字之和是否等于其十位上的数字。解题思路首先是截取整数的个位和百位,然后对个位、百位的数字求和和判断。第一空:fun函数中语句“t=n%10; s=n/10%10;”分别是截取个们和十位,a=1”是对百位的截取,所以第一空填“n/100%10”第二空:语句“if(t+a)=s)”是判断个位数字和百位数字之和是否等于其十位上的数字,如果等于,则返回yes,所以第二个空应填yes!”。如果不等于则返回第三个空,所以
16、填no!”二、程序改错题下列给定程序中,函数fun的功能是:求出以卜分数列的前m项之和,2/1,3/2,5/3,8/5,13/8,21/13和值通过函数值返回main函数。例如,若10,则应输出16.479905请修改程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include #include /*orror*/fun(int m)(int x, y, z, i;double s;s=0.0;x=2;y=l;for(i=l;i=m;i+)/*error*/s=s+(Double)x/y;z=x;x=x+y;y=z;retur
17、n s;main ()int m=10;printf(*nThe value of fun is:%lfn*, fun(m);答案:1、 double fun(int m)2、s=s+(double)x/y;解析:本题是求分数列的前m项之和。其中fun函数中的double s;和retum s;”语句,说明 fun函数具有double返回值,所以将fun(int m)改成double fun(int m)”。第二个标识下的s=s+(Double)x/y语句中,应该对x采用了强制转换,C语言的数据类型说明符区分大小写,所以应把大写Double改为“double”三、程序设计题编写函数fun,其功
18、能是:将所有大于1且小于整数n的非素数存入a所指数组中,非素数的个数通过m传回。例如,若输入11,则应输出468910注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:ttinclude #include void fun(int n, int *m, int a)main ()(int k, h, c100;FILE *out;printf(*nplease enter an integer number between 10 and 100:);scanf(*%d*,&h);fun(h,&k, c);printf
19、(*nnthere are %d non-prime numbers less than %d:,k,h);for(h=O;hk;h+)printf(*n%4d*,ch);out=fopen(*outfile. dat*,w);fun(10,&k, c);fprintf(out,*%dn*, k);for(h=O;hk;h+)fprintf(out,*%dn*, ch);fclose(out);)答案int i, j;int t=0;初始化数组个数for(i=2;in;i+)循环判断小于n的数是否为素数(j=2;while(ji)(if (i%j二二0)如果i不是素数at=i;t+;break
20、;j+;*m=t;解析:求素数的常用方法:从2到n-1除n,如果中间的任何数被整除,则不是素数根据求素数的方法判断数i是否为素数。把不是素数的留下来,其方法是,如果该数是素数则不处理,如果不是素数则放到数组a中,并且把数组的下标加1,为下一个不是素数的数放在数组中做准备。返回个数时,把a数组中已经写入的数的个数返回即可,即把数组a的最大下标加1返加回即可。一、程序填空题请补充main函数,该函数的功能是:从键盘输入3个整数,然后找出最大的数并输出。例如,输入:23,67,32,则输出最大值为67。注意:部分源程序给出如下。请勿改动主函数main中的何内容,仅在main函数的横线上填入所编写的若
21、干表达式或语句。试题程序:#include #include #include void main ()int 叫 n, x, max;system(CLS);printf (*nlnput three numbers:n*);scanf (%d,%d,%d,&m,&n,&x);printf (The three numbers are:%d,%d,%d nz,, m, n, x);if (mn)1;else2;i f (maxx)3;printf(max二%d n”, max);1、 max=m2、 max=n3、 max=x解析:该程序的功能是找出3个数中最大的数并放入变量max中。先比较
22、m和n,若mn则max的值为m,因此【1】填max二m;若水n则max的值为n,因此【2】填max二n;然后将max和x进行比较,如果maxx,则max的值为x,因此3填max=X。二、程序改错题下列给定程序中函数proc的功能是:先将在字符串s中的字符按逆序存放到t串中,然后把s中的字符按正序连接到t串的后面。例如,当s中的字符串为WXYZ时,则t中的字符串应为ZYXWWXYZ。请修改程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include #include #include #include void proc(cha
23、r *s, char *t )(int i, si;sl=strlen(s);for (i=0;isl;i+)/*found*/t i=s sl-1;for (i=0;isl;i+)t Lsl+i=s i;t 2*sl八(T;void main () char s 100, t 100;system(*CLS*);printf(*nPlease enter string s:);scanfs);proc (s, t);printf (The result is:%sn, t);错误:t i=s sl-1;正确:t i=s sl-l-i;解析:函数proc要实现将数组s中的元素逆序放在数组中3即
24、数组t中下标为i的元素在数组s 中的下标为slT-i,而数组s中下标为sl-l的元素为最后一个元素,因此语句t i=s sl-1;应改为t i=s sl-l-i;三、程序设计题请编写函数proc,其功能是:将s所指字符串中除了下标为偶数、同时ASCII码值也为偶数的字符外,其余的全部删除,串中剩余字符所形成的一个新串放在t所指的数组中。例如,若s所指字符串中的内容为IJKLMNO123456,其中字符I的ASCII码值为奇数,因此应当删除;其中字符J 的ASCII码值为偶数,但在数组中的下标为奇数,因此也应当删除;而字符2的ASCII码值为偶数,所在数组中的下标也为偶数,因此不应当删除,依此类
25、推,最后t所指的数组中的内容应是246。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:#include #include #include ttinclude void proc(char*s, char t )(void main ()(char s 100, t 100;system(CLS);printf(nPlease enter string S:);scanfs);proc (s, t);printf (nThe result is:%sn”, t);答案void proc(char *s, char
26、 t )(int i, j=0;for(i=0;s i!=,0; i+)/*从0下标开始判断,直至字符串结束*/if(i%2=0&s i%2=0)/*将卜.标为偶数、同时ASCII码值也为偶数的字符*/t j+=s i;/*放到t数组中*/t j=、(r;/*,(r作为字符串结束标志*/解析:根据题意,结果字符串为原始字符串中下标为偶数且ASCH码值也为偶数的字符的集合。因此只需要判断卜标为偶数的字符的ASCII码值是否为偶数即可。数组卜,标都是从0开始(0是特殊的偶数),所以要从下标为0处开始判断。一、程序填空题请补充main函数,该函数的功能是计算每个学生科目的平均分,并把结果保存在数组a
27、中。例如,当scoreNM=89,78,90,71,61,78.5,84,83,65,63,88.91.5,89,93,95,72.5,65,56,75,77四个学生的平均分是77.874.791.369.1注意部分源程序给11如下Q请勿改动主函数main和其他函数中的任何内容,仅在横线上填入所编写的若干表达式或语句。试题程序:include ttdefine N 4define M 5 main()(int i, j; static float scoreNM=(89,78,90,71,61),78.5,84,83,65,63,88,91.5,89,93,95,72.5,65,56,75,7
28、7);float aN;for(i=0;iN;i+)1;for(i=0;iN;i+)for(j=0;jM;j+)2;ai/=M;for(i=0;iN;i+)printf(*n Student%dtaverage=%5. If*, i+1, ai);答案:1、 ai=02、 ai+=scoreij解析:首先应求得每科成绩的总分,然后计算平均分,最后将结果保存在指定数组中。第一空:函数中的第一个for循环是对数组中的每一个元素赋初始值,求平均值的初值设置为0,所以笫-空填ai=0L笫二空:根据七i/二M;”语句,可知ai已经是二维数组的所有元素的和,所以第二空应填:*ai+=scoreijM二、程
29、序改错题下列给定程序中函数fun的功能:先将在字符串str中的字符按正序存放到s串中,然后把str中的字符按逆序连接到s串的后面。例如,当str中的字符串为asd时,贝ijs中的字符串应为asddsa。请修改程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include#include# i nc 1 udevoid fun(char *str, char *s)int i, si;sl=strlen(str);/*error*/for(i=0;i=sl;i+)s i=stri;for(i=0;isl;i+)ssl+i=strs
30、l-i-l;/*e rror*/ssl八O;main ()(char str100,s100;printf (*nplease enter string:z/);scanfstr);fun(str,s)printf(the result is:%sn”,s);)答案:1, for(i=0;isl;i+)2、s2*sl=,0;解析:第一标识下的for循环原意是将字符串str赋值给字符串s,其中si是字符串str的长度。因为字符串的长度是从0开始的,y/S-for (i=0; i=sl; i+)(i=0; isl; i+)ssl=0语句按照题意要求,s的字符串长度应是si长度的两倍,所以第二个标识
31、下ssl=0;改为s2*sl=0三、程序设计题请编写fun函数,其功能是将两个两们数的正整数x,y合并成一个整数放在z中。合并的方式是将 x的十位和个位依次放在z的个位和百位上,y的十位和个位数依次在z的千位和十位上。例如,当x=12,y=34,调用该函数后,z=3241.注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:ttinclude Winclude void fun(int x,int y, long *z) main ()( int x, y; long z: FILE *out; printf(*inp
32、ut x,y:); scanf(%d%d”,&x,&y); fun(x, y,&z);printf(*the result is :%ldn*,z); out=fopen(outfile. dat,w); for(x=0;x10;x+) fun(x+77, x+66,&z);fprintf(out,*%ldn*,z); fclose(out);)答案:*z=(y/10)*1000+(x%10)*100+(y%10)*10+x/10;解析:木题类型首先要考虑整数的位数分离,然后要进行位数合成。也就是先将数字的各位数拆开,改变排列顺序后,再组合成新的数字。1、分解两位数的正整数n的个位和十位数,可
33、用n%10和n/10实现。2、设x0, xl, x2, x3为一位数,则x0, xl*10, x2*100, x3*1000,可以分别使xO, xl, x2, x3构成个,十,百,千带权数,而x0+xl*10+x2*100+x3*1000构成四位数。本题最多只考虑四位数。6一、程序填空题请补充main函数,该函数的功能是:把字符串str中的字符向前移动一位,原来的第一个字符移动到字符串尾,结果仍然保存在原字符串中。例如,输入“nice to meet you!”,则结果输出“ice to meet you!nMo注意部分源程序给出如下Q请勿改动主函数main和其他函数中的任何内容,仅在横线上填
34、入所编写的若干表达式或语句。试题程序:ttinclude #include define M 80void main()(char str M, ch;int i;system(CLS);printf (*n Input a string:n);gets (str);printf (*n* original string *n);puts(str);ch=str 0;for (i=0;1;i+)str i=str i+1;2;printf(*n * new string *n);puts(str);1、 str i+12、 str i=ch解析:要使第一个字符移动到字符串尾,字符串中第二个到最
35、后一个字符都要前移一个位置,因此【1】填str i +门;当字符串中除第一个以外的字符移动完毕后,要将第一个字符放在新字符串的串尾,而第一个字符已保存在变量ch中,因此2填str i=ch。二、程序改错题下列给定程序中,函数proc的功能是:将长整型数中每一位上为奇数的数依次取出,构成一个新数放在t中。高位仍在高位,低位仍在低位。例如当s中的数为87654321时,t中的数为7531。请修改函数proc中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include #include #include void proc(long s
36、, long *t) int d;long sl=l;/*founcl*/t=0;while(s0) d=s%10;/*found*/if (d%2=0)*t=d*sl+*t;si*二10;s/=10;)void main() long s, t;system(CLS);printf( nPlease enter s:);scanf&s);proc (s,&t);printf (The result is :%ld n/z, t);)(1)错误:t=0;正确:*t=0;(2)错误:i f (d%2=0)正确:i f (d%2!=0)解析:由proc函数可知,变量t所指向内存用来存放结果数据,其
37、初始值应该为0,而t是指针型变量,因此应该把t=0改为*t=0;奇数是指不能被2整除的数,因此判断条件应改为d%2!=0。三、程序设计题已知学生的记录由学号和学习成绩构成,M名学生的数据已存入stu结构体数组中。请编写函数 proc,该函数的功能是:找出成绩最高的学生记录,通过形参返回主函数(规定只有一个最高分)o 已给出函数的首部,请完成该函数。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数proc的花括号中填入所编写的若干语句。试题程序:ttinclude Sinclude ttinclude ttinclude ttdefine M 10typedef
38、struct ss/*定义结构体*/ char num 10:int s; STU;void proc(STU a , STU *s)void main()STU stu M=S01,81,S02,89,S03,66,S04”,87,S05”,77,S06”,90,S07,79,S08”,61,S09”,80,S10”,71,m; int i;system(CLS);printf(*The original data*);for (i=0;iM;i+)printf (No=%s Mark=%dn”, stu i . num, stu i. s);proc (stu,&m);printf(*TH
39、E RESULT*n);printf (The top :%s,%d n”, m. num, m. s);答案void proc(STU a , STU *s)( int i;*s=a 0;for(i=0;isa i.s)*s=a i;/*将形参值返回主函数*/解析:要找出成绩最高的学生的记录,首先要把第一个学生的记录放在目标记录中。然后把目标记录的成绩依次与其他学生的成绩相比较,目标记录存放成绩较高学生的记录。比较完毕后,目标记录中存放的就是成绩最高的学生的记录。7一、程序填空题请补充函数fun,它的功能是:计算并输出n(包括n)以内能被3或7整除的所有自然数的倒数之和。例如,在主函数中从键
40、盘给n输入30后,输出为:s=l.226323.注辛.部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在横线上填入所编写的若干表达式或语句。试题程序:ttinclude double fun(int n)( int i;double sum=0.0;for(i=l;-1:i+)if(i%3=0_2i%7=0)sum+=3/i;return sum;void main () int n;double s;printf(*nlnput n:);scanf &n);s=fun(n);printf (nns=%fn”, s);答案:1、 i=n2、II3、1.0解析:该函数的功能是求在n以内所以被3或7整除的所以自然数的倒数之和。在fun函数中,首先通过循环对小于n的自然数进行判断,求得所以被3或7整除的自然数,并对其倒数求和。第一空:根据题目要求,对所有小于等于n的数值进行循环判断,条件应该是满足i=n,因此第一空应填i=n。第二空:判断是否能被3或7整除,其逻辑关系为或,所以应为第三空:是对满足能被3或7整除的数的倒数求和,函数的返回值为double型,所以i的倒数为1.0/i,因此第三空应填1.0二、程序改错题下列给定程序中,fun函数的功能是:按以下递归公式求函数值。当n