国家计算机等级考试二级上机操作题.doc_第1页
国家计算机等级考试二级上机操作题.doc_第2页
国家计算机等级考试二级上机操作题.doc_第3页
国家计算机等级考试二级上机操作题.doc_第4页
国家计算机等级考试二级上机操作题.doc_第5页
已阅读5页,还剩16页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

二、基本操作题(共18分) 请补充函数proc(),该函数的功能是计算下面公式SN的值: SN=1+1/3十4/5+2N-1/SN-1 例如,当N=20时,SN=29031674。 注意:部分源程序给出如下。 请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的横线上填入所编写的若干表达式或语句。 试题程序: #include #include #include double proc(int n) double s=10,sl=00; int k; for(【k=2】;k=n;k+) sl=S; 【s+=(2*k一1)sl】 return 【s】 ; ) void main() int k=0: double sum; system(CLS); printf(nPlease input N=); scanf(d,&k); sum=proc(k); printf(nS=If,sum); )三、程序改错题(共24分) 下列给定程序中,函数proc()的功能是根据整型形参n,计算如下公式的值: Y=1-1(22)+1(33)-1(44)+(-1)(n+1)(nn) 例如,n中的值为l0,则应输出0817962。 请修改程序中的错误,使它能得到正确结果。 注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include #include #include double proc(int n) double y=10; f|*found* int J=1; int i; for(i=2;i=n;i+) j=-l*j;*found* y+=1(i*i); ) return(y); ) void main() int n=10: system(CLS): printf(nThe result islfn,proc(n); )四、程序设计题(共18分) 编写一个函数,从传人的M个字符中找出最长的一个字符串,并通过形参指针max传回该串地址(用*作为结束输入的标志)。 注意:部分源程序给出如下。 请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括号中填人所编写的若干语句。 试题程序: #include #include #include char*proc(char(*a)81,int num) ) void main() char ssl081,*max; int n,i=0; printf(输入若干个字符串:); gets(ssi); puts(ssi); while(!strcmp(ssi,*)= =0) i+: gets(ssEi); puts(ssi); ) n=i: max=proe(SS,n); printf(nmax=sn,max); 二、基本操作题程序填空题 【1】k=2【2】s+=(2*k一1)sl【3】s 【解析】由题目中所给公式可知,多项武的第一项为1。变量s中存放多项式的和,其初始值为l。因此,循环从第二项开始,因此,【1】处填“k=2”;变量sl中存放各项表达武的值,由公式可知,【2】处填“s+=(2*k-1)sl”;题目中要求将多项式的和返回到主函数当中,因此,【3】处填“s”。 三、程序改错题 (1)错误:int j=1;正确:double j=10; (2)错误:y+=1(i*i); 正确:y+=j(i*i); 【解析】由函数proc()可知,变量j的作用是控制每一项符号的变化,并且作为运算的分子,应改为double型变量。因此,“int j=1;”应改为“double j=10;”。变量y中存放多项式的值,多项式中的每一项符号由变量j决定。因此,“y+=1(i*i);”应改为“y+=j(i*i);”。 四、程序设计题 char*proc(char(*a)81,int M) char*max; int i=0: max=aO: for(i=0;iif(strlen(max)max=ai; return max; 返回最长字符串的地址 【解析】本题首先要定义一个字符指针用于保存最长的字符串,并使其初始值指向第一个字符串;再循环遍历字符串数组,通过if语句比较字符串的长度,并把最长的字符串地址赋给字符指针;最后返回最长字符串的地址。 二、基本操作题(共18分) 请补充main()函数,该函数的功能是:输入两个正整数numl和num2,求这两个数的最大公约和最小公倍数。 例如,若输入的两个正整数为12,4,则它们的最大公约数为12,最小公倍数为4。 注意:部分源程序给出如下。 请勿改动main()函数和其他函数中的任何内容,仅在main()函数的横线上填人所编写的若干表达式或语句。 试题程序: #include #include void main() int a,b,numl,num2,t; system(CLS): printf(nInput two numbers:n); scanf(d,d,numl,&num2); if(numl a=num2; b=numl: else a=numl; b=num2; ) while(【b!=0】) t= 【ab】 a=b; b=t: printf(“greatest common divisor: dn,a); printf(least common multiple: dn, 【numl*num2a】; 三、程序改错题(共24分) 下列给定程序中函数proc的功能是:取出长整型变量s中偶数位上的数,依次构成一个新数放在t中。例如,当s中的数为l23456789时,t中的数为2468。请修改程序中的错误,使它能得出正确的结果。 注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include #include #include /*found* void proc(long S,long t) long sl=10; s=10; *t=s10; /*found* while(s s=sl00; *t=s10*sl+*t; sl=sl*10; ) void main() long S,t; system(CLS): printf(nPlease enter S:); scanf(ld,&s); proc(S,&t); printf(The result is:ldn,t); 四、程序设计题(共18分) 请编写函数proc(),其功能是:将str所指字符串中除下标为偶数、同时ASCIl码值为奇数的字符外,其余的字符都删除,串中剩余字符所形成的一个新串放在t所指的数组中。例如,若str所指字符串中的内容为ABCDEFGl2345,其中字符B的ASCIl码值为偶数,所在元素的下标为奇数,因此必须删除;而字符A的ASCIl码值为奇数,所在数组中的下标为偶数,因此不应当删除。依此类推,最后t所指的数组中的内容应是ACEG。 注意:部分源程序给出如下。 请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括号中填人所写的若干语句。 试题程序: #include #include #include #include voidproc(char*str,chart) ) voidmain() charstr100,t100; system(CLS); printf(nPleaseenterstringstr:); scanf(S,str); proc(str,t); printf(nTheresultiS:sn,t);二、基本操作题程序填空题 【1】b!=0【2】ab3numl*num2a 【解析】由程序可知,变量b中存放两个正整数中较小的那个数,while循环求两个正整数的公约数。因此【1】填“b!=0”;【2】填“ab”【3】处是求两个正整数最小公倍数的表达式,因此【3】填“numl*num2a”。 三、程序改错题 (1)错误:voidproc(10ngS,longt) 正确:voidproc(longs,long*t) (2)错误:while(sO) 【解析】从主函数中实参可知,形参的第二个变量是长整型的指针变量。因此“voidproc(longs,longt)”应改为“voidproc(longs,long*t)”;要从低位开始取出长整型变量s中偶数位上的数,每次变量S要除以100,然后判断其是否大于0来决定是否要继续,因此“while(s0)”。 四、程序设计题 voidproc(char*str。chart3) inti,j=0; for(i=0;stri!=O;i+)从数组的第一个元素开始,到其最后一个 if(i2=0&stri21=o)下标为偶数、同时ASCIl码值为奇数的字符 tj+=stri;如果成立,则把它放到t数组中 ti=o;字符串结束标志为0 【解析】题目中要求将字符串str中下标为偶数,同时ASCIl码值为奇数的字符放在数组t中。首先,需要检查字符串str中下标为偶数的字符其ASCIl码值是否为奇数,将符合要求的字符放在数组t中。最后,为新的字符串数组添加结束符。二、基本操作题(共18分) 请补充main()函数,该函数的功能是:如果数组arr的前一个元素比后一个元素小,则把它保存在数组bb中并输出。 例如,若数组中的元素为:“40,68,62,33,35,52,48,95,66,73”,则输出:“40,33,35,48,66”。 注意:部分源程序给出如下。 请勿改动函数()main和其他函数中的任何内容,仅在main()函数的横线上填入所编写的若干表达式或语句。 试题程序: #include #include #defineMl0 voidmain() inti,n=0; intarrM=(40,68,62,33,35,52,48,95,66,73); intbbM; system(CLS); for(i=0;i【1】;i+) if(arri【2】; printf(n*displaybb*n); for(i=0;iprintf(bbd=2d,【3】); 三、程序改错题(共24分) 给定程序中,函数proc()的功能是:使数组中的元素的值缩小5倍。 请修改程序中的错误,使它能得出正确的结果。 注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include #include #include floatmlO; /*found* intproc(void) intj; printf(Insubfuncaftercallingn); for(j=0;j10;j+) /*found* printf(f,mj5); voidmain() inti; printf(Inmainbeforecallingn); for(i=0;i10;i+) mi=i+20; printf(f,mi); proc(); printf(nlnmainaftercallingn); for(i=0;i10;i+) printf(f,mi5); 四、程序设计题(共18分) 学生的记录由学号和成绩组成,M名学生的数据已在主函数中放入结构体数组stu中,请编写函数proc(),其功能是:按分数的高低排列学生的记录,高分在前。 注意:部分源程序给出如下。 请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括号中填入所编写的若干语句。 试题程序: #include #defineMl6 typedefstruct charnuml0; intS; STREC: voidproc(STRECa) inti,j; STRECt; for(i=1;i排序* for(j=0;jif(ajs的记录,高分在前* t=aj;aj=aj+1;aj+1=t;) voidmain() STRECstuM=GA005,85),GA003,76, GA002,69,GA004,85),GA001,91), GA007,72),GA008,64),GA006,87), GA015,85),GA013,91),GA012,64), GA014,91),GA011,66),GA017,64, GA018,64),GA016,72; inti; proc(stu); printf(Thedataaftersorted:n); for(i=0;i if(i4=0) 每行输出4个学生记录 printf(n); printf(s4d,stui,num,stuis); printf(n); 二、基本操作题程序填空题 【1】M-1【2】bbn+=arri【3】i,bbi 【解析】由整个for循环可知,变量i为数组arr的下标,题目中要求取出前一个元素比后一个元素小的元素,所以只需要判断前M-1个元素即可。因此,【1】处填“M-1”;如果第i个元素比第i+1个元素小,将第1个元素放入数组bb中,因此,【2】处填“bbn+=arri”。最后,要输出数组bb中的每一个元素。因此,【3】处填“i,bbi”。 三、程序改错题 (1)错误:intproc(void) 正确:voidproc(void) (2)错误:printf(f,mj5); 正确:pfintf(f,mj5); 【解析】由主函数中的函数调用可知,函数proe()没有返回值。因此“intproc(void)”应改为“voidproc(void)”。题目中要求使数组中元素的值缩小到l5,而不是对5取余。因此,“printf(f,mj5);”应改为“printf(”f”,mEjl5);”。 四、程序设计题 voidproc(STRECa) inti,j; STRECt; for(i=1;im;i+)用冒泡法来按从高到低排序 for(j=0;jif(ajsaj+1s)按分数的高低排列学生的记录,高分在前 t=aj;aj=aj+1;aj+1=t; 【解析】要按分数的高低排列学生的记录,可以使用冒泡排序法。将每一个学生的成绩与其他学生的成绩相比较,对不符合要求的记录交换位置。 二、基本操作题(共18分) 给定程序的功能是计算score中m个人的平均成绩aver,将低于aver的成绩放在be-low中,通过函数名返回人数。 例如,当score=10,20,30,40,50,60,70,80,90,m=9时,函数返回的人数应该是4,below=10,20,30,40。 注意:部分源程序给出如下。 请勿改动main()函数和其他函数中的任何内容,仅在横线上填人所编写的若干表达式或语句。 试题程序: #include #include intfun(intscore,intm,intbelow) inti,j=0; floataver=00; for(i=0;iaver+=scorei; aver=(float)m; for(i=0;iif(scoreibelowj+=【scorei】; returnj; voidmain() inti,n,below9; intscore9=10,20,30,40,50,60,70,80,90; n=fun(score,9,【below】); printf(nBelowtheaveragescoreare:dn,n); for(i=0;iprintf(d,【belowi】); 三、程序改错题(共24分) 下列给定程序中函数fun()的功能是:用递归算法计算斐波拉契数列中第n项的值。从第l项起,斐波拉契数列为:1,1,2,3,5,8,13,21, 例如,若给n输入7,则该项的斐波拉契数值为l3。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构! 试题程序: #include longfun(intg) /*found* switch(g); case0:return0; |*found* casel:case2:returnl; return(fun(g-1)+fun(g-2); voidmain() longfib;intn; printf(Inputn:); scanf(d,&n); printf(n=dn,n); fib=fun(n); printf(fib=dnn,fib); 四、程序设计题(共18分) 某学生的记录由学号、8门课程成绩和平均分组成,学号和8门课程的成绩已在主函数中给出,请编写函数,其功能是:求出该学生的平均分,并放入记录的ave成员中。 例如,学生的成绩是:855,76,695,85,91,72,645,875,则他的平均分应为78875。 注意:部分源程序给出如下。 请勿改动main()函数和其他函数中的任何内容,仅在函数fun()部位中填入你编写的若干语句。 试题程序: #include #defineN8 typedefstruct charnum10; doublesN; doubleave; STREC; voldfun(STREC*a) voidmain() STRECs=GA005,855,76,695,85,91,72,64.5,87.5; inti; fun(&s); printf(Thessstudentdata:n,s.num); for(i=0;iprintf(41fkn,ssi); printf(nknave=73fkn,s.aVe); printf(n); 二、基本操作题程序填空题 【1】scorei或*(score+i)【2】below【3】belowi或*(below+i) 【解析】fun()函数的功能是返回低于平均成绩的人数,通过for循环遍历数组score,求和存入变量aver,然后计算出平均值。第二个循环将低于平均成绩的数据赋值数组b,因此第【1】处填“scorei”或“*(score+i)”;在主函数中调用函数fun()时,最后一个参数应填入数组名blew,即将低分考生数据存入数组blew中,然后语句“printf(nBelowtheaveragescoreare:dn);”输出低分考生个数,n值即fun()函数返回值也就是低分考生的人数值。最后利用循环输出below中的结果。 三、程序改错题 (1)错误:switch(g); 正确:switch(g) (2)错误:casel:case2:returnl; 正确:casel;case2:returnl; 【解析】此题考查C语言的语法规则,switch(表达式)后不应该带有“;”,case语句常量后应该是“:”。 switch语句的一般形式如下: switch(表达式) case常量表达式1:语句1; case常量表达式2:语句2; case常量表达式n:语句i; default:语句n+1; 四、程序设计题 voidfun(STREC*a) inti; a-ave=00; for(i=0;ia-ave=a-ave+a-si; *求各门课程成绩的总和* a-ave=a-aveN;*求平均分* 【解析】本题考查的是指向结构体类型的指针变量做参数和结构体类型成员的运算。fun()函数中求出平均成绩,要带回主函数则必须定义一个指针类型的形参STREC*a,同时引用成员使用指向运算符,a-ave和a-si。二、基本操作题(共18分) 请补充函数proc(),函数proc()的功能是求7的阶乘。 注意:部分源程序给出如下。 请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的横线上填入所编写的若干表达式或语句。 试题程序: #include longproc(intn) if(【n1】) return(n*proc(【n-1】); elseif(【n=1】) returnl; voidmain() intk=7: printf(d!=ldn,k,proc(k); 三、程序改错题(共24分) 下列给定的程序中,函数proc()的功能是:用选择法对数组中的m个元素按从小到大的顺序进行排序。 例如,排序前的数据为:1132-5214 则排序后的数据为:-52111432 请修改程序中的错误,使它能得到正确结果。 注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include #defineM20 voidproc(inta,intn) inti,j,t,P; /*found* for(j=0;j p=j; for(i=j;iif(aip=i; t=ap; ap=aEj3; /*found* ap=t; voidmain() intarrM=11,32,-5,2,14,i,m=5; printf(排序前的数据:); for(i=0;iprintf(d,arri); printf(n); proc(arr,m); printf(排序后的顺序:); for(i=0;iprintf(d,arri); printf(n); 四、程序设计题(共18分) 请编写函数proc(),该函数的功能是:将放在字符串数组中的M个字符串(每串的长度 不超过N),按顺序合并组成一个新的字符串。 例如,若字符串数组中的M个字符串为: ABCD BCDEFG CDEFGHI 则合并后的字符串内容应该是ABCDBCDEFGCDEFGHl。 注意:部分源程序给出如下。 请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括号中填入所编写的若干语句。 试题程序: #include #include #defineM3 #defineN20 voidproc(chararrMN,char*b) voidmain() charstrMN=ABCD,BCDEFG,CDEFGHl),i; chararr100=#; printf(”Thestrin9:kn”); for(i=0;iputs(stri); printf(n); proc(str,arr); printf(TheAstring:n); printf(S,arr); printf(nn); 二、基本操作题程序填空题 【l】n1【2】n-1【3】n=1 【解析】本题求阶乘是由函数递归调用来实现的。阶乘公式为N!=N*(N-1)!,因此【l】处填“n1”;由递归的性质可知【2】处填“n-1”;直到N=1时结束递归调用,因此【3】处填“n=l”。 三、程序改错题 (1)错误:for(j=0;jn-1;j+); 正确:for(j=0;jn-1j+) (2)错误:ap=t; 正确:aj=t; 【解析】for循环结束的标志是for后的一个语句,如果for后面直接跟一个分号,说明是一个空循环不执行任何功能,因此“for(j=0;jn-1;j+);”后面的分号应该去掉;当ai四、程序设计题 voidproc(chararrMN,char*b) inti,j,k=0; for(i=0;im;i+)i表示其行下标 for(j=0;arrij!=0;j+)由于每行的个数不等,因此用aij!=0来作为循环结束 的条件 bk+=arrij;把二维数组中的元素放到b的一维数组中, bk=0;最后把b赋0作为字符串结束的标志 ) 【解析】字符串数组中每一行都是一个一个完整的字符串,其结束标志为0。因此通过字符串的结束标志来判断每一个字符串是否结束,将字符串数组中的所有字符串均赋值新的一维数组b来完成字符串的合并。 /n-1;j+);”后面的分号应该去掉;当ai二、基本操作题(共18分) 请补充main()函数,该函数的功能是:把一个字符串中的所有小写字母字符全部转换成大写字母字符,其他字符不变,结果保存原来的字符串中。 例如,当strM=abcdefl23ABCD,结果输出:ABCDEFl23ABCD。 注意:部分源程序给出如下。 请勿改动main()函数和其他函数中的任何内容,仅在横线上填人所编写的若干表达式或语句。 试题程序: #include #include #include #defineM80 voidmain() intj; charstrM=abcdefl23ABCD; char*pf=str; system(CLS); printf(*originalstring*n); puts(str); 【1】 while(*(pf+j) if(*(pf+j)=a&*(pf+j)c&b+ca&a+cb) if(a=b&b=c) /*found* returnl; elseif(a=bb=ca=c) return2; /*found* elsereturn3; elsereturn0; voidmain() inta,b,C,shape; printf(nlnputa,b,C:); scanf(ddd,&a,&b,&c); printf(na=d,b=d,c=dn,a,b,c); shape=proc(a,b,c); printf(nnTheshape:dn,shape); 四、程序设计题(共18分) 请编写函数proc(),其功能是:将str所指字符串中下标为偶数的字符删除,串中剩余字符形成的新串放在t所指数组中。 例如,当str所指字符串中的内容为abcdefg,则在t所指数组中的内容应是bdf。 注意:部分源程序给出如下。 请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括号中填入所编写的若干语句。 试题程序: #include #include #include #include voidproc(char*str,chart) voidmain() charstr100,t100; system(CLS); printf(nPleaseenterstringstr:); scanf(S,str); proc(str,t); printf(nTheresultis:sn,t); 二、基本操作题程序填空题 【1】j=0【2】*(pf+j)-32【3】j+ 【解析】由程序中可知,变量j为字符数组的下标,其初始值为0。因此【l】处填“j=0”;大写字母的ASCIl码值比小写字母的4、32,要将小写字母变为大写字母,因此,【2】处填“*(pf+j)-32”;要将字符串数组中的所有小写字母变为大写字母,需要检查其中的每一个字符,因此,【3】处填“j+”。 三、程序改错题 (1)错误:returnl; 正确:return3; (2)错误:return3; 正确:returnl; 【解析】三条边都相等的三角形为等边三角形,按题目中要求,等边三角形返回3,若不是等边三角形也不是等腰三角形则返回l,因此,“returnl;”应改为“return3;”;“return3;”应改为“returnl;”。 四、程序设计题 voidproc(char*str,chart) inti,i=0,k=strlen(str);k是放字符串的长度的变量 for(i=1;itj+=stri;把下标为奇数的数放到t数组中 ti=o;因为t是字符串,因此必须用0作为结束标志 【解析】题目要求将下标为偶数的字符删除,其余字符放在新的字符数组t中。首先取出字符串str中下标为奇数的字符,将其赋值给新的字符串t,最后用0作为字符串结束的标志。二、基本操作题(共18分) str是一个由数字和字母字符组成的字符串,由变量num传人字符串长度。请补充函数proc(),该函数的功能是:把字符串str中的数字字符转换成数字并存放到整型数组bb中,函数返回数组bb的长度。 例如,str=abcl23de45f967,结果为:l234567。 注意:部分源程序给出如下。 请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的横线上填入所编写的若干表达式或语句。 试题程序: #include #defineM80 intbbM; intproc(charstr,intbb,intnum) inti,n=0; for(i=0;i if(【stri=0&stri=9】) bbn=【stri-O】; n+; return【n】; voidmain() charstrM; intnum=0,n,i; printf(Enterastring:n); gets(str); while(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论