国家计算机二级c语言历年上机真题及基础知识1参考模板_第1页
国家计算机二级c语言历年上机真题及基础知识1参考模板_第2页
国家计算机二级c语言历年上机真题及基础知识1参考模板_第3页
国家计算机二级c语言历年上机真题及基础知识1参考模板_第4页
国家计算机二级c语言历年上机真题及基础知识1参考模板_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

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

文档简介

1/41第一套1.填空题请补充main函数,该函数的功能是:从键盘输入一个字符串并保存在字符str1中,把字符串str1中下标为偶数的字符保存在字符串str2中并输出。例如,当str1=“cdefghij”,则str2=“cegi”。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。试题程序:}答案及评析:【1】″%s″,str1 【2】%c 【3】str2【解析】填空1:本题考查对标准输入函数scanf()的调用格式,当输入字符串时,格式控制字符串为″%s″,题目要求输入的字符串保存在str1中,所以地址表列应为字符串的首地址,即为str1。填空2:本题考查对标准输出函数printf()的调用格式,当输出为字符型变量时,格式控制字符串为″%c″。填空3:题目要求将str1中下标为偶数的字符保存在字符串str2中并输出,所以printf()函数的输出表列是str22.改错题在主函数中从键盘输入若干个数放入数组中,用0结束输入并放在最后一个元素中。下列给定程序中,函数fun()的功能是计算数组元素中值为负数的平均值(不包括0)。例如:数组中元素的值依次为43,-47,-21,53,-8,12,0,则程序的运行结果为-25.333333。请改正程序中的错误,使它能得到正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include<conio.h>#include<stdio.h>doublefun(intx[]){doublesum=0.0;intc=0,i=0;/**********************found***********************/while(x[i]==0){if(x[i]<0){sum=sum+x[i];c++;}i++;}/**********************found***********************/sum=sum\c;returnsum;}main(){intx[1000];inti=0;clrscr();printf("\nPleaseentersomedata(endwith0):");do{scanf("%d",&x[i]);}while(x[i++]!=0);printf("%f\n",fun(x));}答案及评析:(1)错误:while(x[i]==0)正确:while(x[i]!=0)(2)错误:sum=sum\c;正确:sum=sum/c;【解析】错误1:此处考查的是对循环条件的理解,当被判断的数组元素为0时,说明这是数组的最后一个元素,此时要跳出循环。错误2:C语言中的除法运算符是"/",而不是"\"。3.编程题请编写一个函数intfun(int*s,intt,int*k),用来求出数组的最小元素在数组中的下标并存放在k所指的存储单元中。例如,输入如下整数:234345753134436458100321135760则输出结果为6,100。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:#include<conio.h>#include<stdio.h>intfun(int*s,intt,int*k){}main(){inta[10]={234,345,753,134,436,458,100,321,135,760},k;clrscr();fun(a,10,&k);printf("%d,%d\n",k,a[k]);}答案及评析:intfun(int*s,intt,int*k){inti;*k=0;/*k所指的数是数组的下标值*/for(i=0;i<t;i++)if(s[*k]>s[i])*k=i;/*找到数组的最小元素,把该元素的下标赋给k所指的数*/returns[*k];/*返回数组的最小元素*/}【解析】本题中直接使用指针变量k,但在使用时要注意对k的指针运算,此外,一开始应让*k的值为数组中的某一下标值,即*k=0。第二套1.填空题请补充函数fun(),该函数的功能是:从‘a’到‘z’统计一个字符串中所有字母字符各自出现的次数,结果保存在数组alf中。注意:不区分大小写,不能使用字符串库函数。例如,输入:“A=abc+5*c”,结果为:a=2,b=1,c=2。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。试题程序:}答案及评析:【1】alf[i]=0 【2】*p+=32 【3】p++【解析】填空1:数组alf[26]用来存放字母字符出现的次数,在使用之前需要清零。填空2:题目要求不区分大小写,所以可以先将所有的大写字母都转换为对应的小写字母,然后一并记录出现的次数。将大写字母转换为对应的小写字母,只需将ASCII码加上32就可以了。填空3:指针p指向字符串tt,通过p自加1来移动指针,访问字符串中的所有字符。2.改错题下列给定程序中函数fun()的功能是:从低位开始取出长整型变量s中奇数位上的数,依次构成一个新数放在t中。例如,当s中的数为4576235时,t中的数为4725。请改正程序中的错误,使它能得到正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include<stdio.h>#include<conio.h>/**********************found***********************/intfun(longs,long*t){longs1=10;*t=s%10;while(s>0){/**********************found***********************/s=s%100;*t=s%10*s1+*t;s1=s1*10;}}main(){longs,t;clrscr();printf("\nPleaseenters:");scanf("%ld",&s);fun(s,&t);printf("Theresultis:%ld\n",t);}答案及评析:(1)错误:intfun(longs,long*t)正确:voidfun(longs,long*t)(2)错误:s=s%100;正确:s=s/100;【解析】错误1:函数由指针来完成参数的传递,所以没有返回值,应定义函数的类型为void。错误2:此处要注意特殊运算符号"%"--取余和"/"--整除的区别。将一个数整除100则可得到由其百位数以上的数组成的新数字,将一个数整除100取余则可得到由十位数和个位数组成的新数。3.编程题请编写一个函数fun(),它的功能是:求出一个4×M整型二维数组中最小元素的值,并将此值返回调用函数。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:#defineM4#include<stdio.h>fun(inta[][M]){}main(){intarr[4][M]={11,3,9,35,42,-4,24,32,6,48,-32,7,23,34,12,-7};printf("min=%d\n",fun(arr));}答案及评析:fun(inta[][M]){inti,j,min=a[0][0];for(i=0;i<4;i++)for(j=0;j<M;j++)if(min>a[i][j])min=a[i][j];/*求出二维数组的最小值*/returnmin;}【解析】此类求最大值或最小值的C语言问题,我们可以采用逐个比较的方式。要求数组中的所有元素走动一遍,并从中找出最大、最小值,要注意一开始应使min存放数组中的第一个元素的值。可按逐行查找也可按逐列查找的方式,本题采用的是逐行查找的方式。即行下标在外层循环,列下标在内层循环,因为在循环的嵌套中越在内层循环,循环变化就越快。第三套1.填空题请补充函数fun(),该函数的功能是求一维数组x[N]的平均值,并对所得结果进行四舍五入(保留两位小数)。例如:当x[10]={15.6,19.9,16.7,15.2,18.3,12.1,15.5,11.0,10.0,16.0},结果为:avg=15.030000。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。试题程序:}答案及评析:【1】sum+=x[i] 【2】avg*1000 【3】(avg+5)/10【解析】填空1:通过for循环求出10个数的累加和,存于变量sum中。填空2:为了实现四舍五入保留两位小数的功能,应将平均值先扩大1000倍。填空3:将平均值加上5,再除以10,实现四舍五入的功能。2.改错题下列给定程序中,函数fun()的功能是:先从键盘上输入一个3行3列的矩阵的各个元素的值,然后输出主对角线元素之积。请改正函数fun()中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include<stdio.h>intfun(){inta[3][3],mul;inti,j;mul=1;for(i=0;i<3;i++){/**********************found***********************/for(i=0;j<3;j++)scanf("%d",&a[i][j]);}for(i=0;i<3;i++)/**********************found***********************/mul=mul*a[i][j];printf("Mul=%d\n",mul);}main(){fun();}答案及评析:(1)错误:for(i=0;j<3;j++)正确:for(j=0;j<3;j++)(2)错误:mul=mul*a[i][j];正确:mul=mul*a[i][i];【解析】错误1:循环结构中,要给变量j赋初值0。错误2:主对角元素的行号和列号相等,所以参加乘法的是a[i][i],而不是a[i][j]。3.编程题学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun(),它的功能是:把分数最低的学生数据放在h所指的数组中。注意:分数低的学生可能不只一个,函数返回分数最低学生的人数。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:#include<stdio.h>#defineN16typedefstruct{charnum[10];ints;}STREC;intfun(STREC*a,STREC*b){}main(){STRECs[N]={{"GA005",82},{"GA003",75},{"GA002",85},{"GA004",78},{"GA001",95},{"GA007",62},{"GA008",60},{"GA006",85},{"GA015",83},{"GA013",94},{"GA012",78},{"GA014",97},{"GA011",60},{"GA017",65},{"GA018",60},{"GA016",74}};STRECh[N];inti,n;FILE*out;n=fun(s,h);printf("The%dlowestscore:\n",n);for(i=0;i<n;i++)printf("%s%4d\n",h[i].num,h[i].s);/*输出最低分学生的学号和成绩*/printf("\n");out=fopen("out19.dat","w");fprintf(out,"%d\n",n);for(i=0;i<n;i++);fprintf(out,"%4d\n",h[i].s);fclose(out);}答案及评析:intfun(STREC*a,STREC*b){inti,j=0,min=a[0].s;for(i=0;i<N;i++)if(min>a[i].s)min=a[i].s;/*找出最小值*/for(i=0;i<N;i++)if(min==a[i].s)b[j++]=a[i];/*找出成绩与min相等的学生的记录,存入结构体b中*/returnj;/*返回最低成绩的学生人数*/}【解析】该程序使用循环嵌套,第1个for语句的作用是找出最小值。第2个循环的作用是找出与min相等的成绩,也即最低成绩的学生记录,并存入b中。第四套1.填空题请补充函数fun(),该函数的功能是:分类统计一个字符串中元音字母和其他字符的个数(不区分大小写)。例如,输入aeiouAOUpqrt,结果为A:2E:1I:1O:2U:2other:4。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。试题程序:}答案及评析:【1】bb[i]=0 【2】bb[5]++ 【3】p++;【解析】填空1:数组bb[6]用来存放5个元音字母和其他字符的个数,在使用之前需要清零。填空2:数组元素bb[5]用来存放其他字符的个数,当指针p所指的字符不是元音字母时,则认为是其他字符,bb[5]加1。填空3:指针p指向字符串str,通过p自加1来移动指针,访问字符串中的所有字符。2.改错题下列给定的程序中,函数fun()的功能是:计算并输出k以内最大的6个能被7或11整除的自然数之和。K的值由主函数传入,若k的值为500,则函数的值为2925。请改正程序中的错误,使它能得到正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include<stdio.h>#include<conio.h>intfun(intk){intm=0,mc=0,j;/**********************found***********************/while(k>=2)&&(mc<6){/**********************found***********************/if((k%7=0)||(k%11=0)){/**********************found***********************/m=k;mc++;}k--;}returnm;}main(){clrscr();printf("%d\n",fun(500));}答案及评析:(1)错误:while(k>=2)&&(mc<6)正确:while((k>=2)&&(mc<6))(2)错误:if((k%7=0)||(k%11=0))正确:if((k%7==0)||(k%11==0))(3)错误:m=k;正确:m=m+k;【解析】错误1:C语言规定while语句后的表达式两侧必须要有圆括号。错误2:if语句的判断条件应用关系运算符,而不是赋值运算符。错误3:根据题意,将满足条件的数求累加和。3.编程题请编写一个函数fun(),它的功能是:将ss所指字符串中所有下标为偶数位置的字母转换为小写(若该位置上不是字母,则不转换)。例如,若输入ABC4efG,则应输出aBc4efg。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:#include<conio.h>#include<stdio.h>#include<string.h>voidfun(char*ss){}main(){chartt[81];clrscr();printf("\nPleaseenteranstringwithin80characters:\n");gets(tt);printf("\n\nAfterchanging,thestring\n\%s",tt);fun(tt);printf("\nbecomes\n\%s\n",tt);}答案及评析:voidfun(char*ss){inti;for(i=0;ss[i]!='\0';i++)/*将ss所指字符串中所有下标为偶数位置的字母转换为小写*/if(i%2==0&&ss[i]>='A'&&ss[i]<='Z')ss[i]=ss[i]+32;}【解析】从C语言的学习中我们知道,只要将小写字母减去32则转成大写字母,将大写字母加上32则转成小写字母。该程序是用if语句实现该功能转化的。第五套1.填空题从键盘输入一组无符号整数并保存在数组xx[N]中,以整数0结束输入,要求这些数的最大位数不超过4位,其元素的个。例如:当xx[8]={123,11,25,222,42,333,14,5451}时,bb[4]={25,42,333,5451}。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。试题程序:}答案及评析:【1】xx[i]%10 【2】bb[n++]=xx[i] 【3】n【解析】填空1:将一个整数对10取余,则得到这个整数的个位数,将一个整数除以10再对10取余,则得到这个整数的十位数。由程序可以看出,变量s保存了整数的十位数,所以应该将整数的个位数保存于变量g中。填空2:当整数的个位与十位的数字之和大于5时,则将这个整数存于数组bb中,同时,变量n记录了满足条件的无符号整数的个数。填空3:题目要求满足条件的无符号整数的个数由fun函数返回,所以函数返回n。2.改错题下列给定程序中,函数fun()的功能是:在字符串str中找出ASCⅡ码值最小的字符,将其放在第一个位置上,并将该字符前的原字符向后顺序移动。例如,调用fun()函数之前给字符串输入fagAgBDh,调用后字符串中的内容为AfaggBDh。请改正程序中的错误,使它能得到正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include<stdio.h>/**********************found***********************/voidfun(charp){charmin,*q;inti=0;min=p[i];while(p[i]!=0){if(min>p[i]){/**********************found***********************/p=q+i; min=p[i];}i++;}while(q>p){*q=*(q-1);q--;}p[0]=min;}main(){charstr[80];printf("Enterastring:");gets(str);printf("\nTheoriginalstring:");puts(str);fun(str);printf("\nThestringaftermoving:");puts(str);printf("\n\n");}答案及评析:(1)错误:voidfun(charp)正确:voidfun(char*p)(2)错误:p=q+i;正确:q=p+i;【解析】错误:由于本题中函数的功能是对字符串进行处理,而不是对单个字符进行处理,因此,函数的参数应为字符串指针。错误2:使指针q指向ASCII码最小的字符本题解答需要3个步骤:(1)找到字符串中ASCII码值最小的字符,并保存。(2)将该字符复制,并将该字符前面的字符串顺次后移。(3)将ASCII码值最小的字符赋给字符串的第1个字符。找到ASCII码值最小的字符可以通过定义一个字符min,该字符初始时等于字符串的第1个字符,若字符串的下一个字符小于min,则将下一个字符赋给min,如此循环到字符尾,即可得到ASCII码值最小的字符,同时令指针q指向最小字符。之后对最小字符前面的子串顺次后移,可采用while语句实现。此题需要熟练掌握和灵活应用C语言的字符与整型变量的关系以及字符串操作。3.编程题N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。请编写函数fun(),它的功能是:找出学生的最低分,由函数值返回。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:#include<stdio.h>#include<stdlib.h>#defineN8structslist{doubles;structslist*next;};typedefstructslistSTREC;doublefun(STREC*h){}STREC*creat(double*s){STREC*h,*p,*q;inti=0;h=p=(STREC*)malloc(sizeof(STREC));p->s=0;while(i<N)/*产生8个节点的链表,各分数存入链表中*/{q=(STREC*)malloc(sizeof(STREC));p->s=s[i];i++;p->next=q;p=q;}p->next=NULL;returnh;/*返回链表的首地址*/}outlist(STREC*h){STREC*p;p=h;printf("head");do{printf("->%2.0f",p->s);p=p->next;}/*输出各分数*/while(p!=NULL);printf("\n\n");}main(){doubles[N]={56,89,76,95,91,68,75,85},min;STREC*h;h=creat(s);outlist(h);min=fun(h);printf("min=%6.1f\n",min);}答案及评析:doublefun(STREC*h){doublemin=h->s;while(h!=NULL)/*通过循环找到最低分数*/{if(min>h->s)min=h->s;h=h->next;}returnmin;}【解析】在本题中,h为一个指向结构体的指针变量,若要引用它所指向的结构体中的某一成员时,要用指向运算符"->"。由于是链表,所以要使h逐一往后移动,使用的是h=h->next。第六套1.填空题请补充main函数,该函数的功能是:从一个字符串中截取前面若干个给定长度的子字符串。其中,str1指向原字符串,截取后的字符存放在str2所指的字符数组中,n中存放需截取的字符个数。例如:当str1=“cdefghij”,然后输入4,则str2=“cdef”。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。试题程序:}答案及评析:【1】″%d″,&n 【2】str2[i]=str1[i]; 【3】str2【解析】填空1:本题考查对标准输入函数scanf()的调用格式,由后面的程序可以知道,变量n保存了要截取的字符数,注意在n前面不要忘了取址符‘&'。填空2:截取前n个字符,就是将字符串str1的前n个字符依次赋给字符串str2的前n个字符。填空3:本题考查对标准输出函数printf()的调用格式,根据题意,应输出截取后的字符串,即字符串str2。2.改错题下列给定程序中,函数fun()的功能是:依次取出字符串中所有的字母,形成新的字符串,并取代原字符串。请改正程序中的错误,使它能得到正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include<stdio.h>#include<conio.h>voidfun(char*s){inti,j;for(i=0,j=0;s[i]!='\0';i++)/**********************found***********************/if((s[i]>='A'&&s[i]<='Z')&&(s[i]>='a'&&s[i]<='z'))s[j++]=s[i];/**********************found***********************/s[j]="\0";}main(){charitem[80];clrscr();printf("\nEnterastring:");gets(item);printf("\n\nThestringis:\%s\n",item);fun(item);printf("\n\nThestringofchangingis:\%s\n",item);}答案及评析:(1)错误:if((s[i]>='A'&&s[i]<='Z')&&(s[i]>='a'&&s[i]<='z'))正确:if((s[i]>='A'&&s[i]<='Z')||(s[i]>='a'&&s[i]<='z'))(2)错误:s[j]="\0";正确:s[j]='\0';【解析】错误1:字母包括小写字母和大写字母,这里是"或"的关系,所以用"||"运算符。错误2:字符串的结束标志符为字符,而不是字符串。3.编程题下列程序定义了N×N的二维数组,并在主函数中自动赋值。请编写函数fun(inta[][N]),该函数的功能是:使数组右上半三角元素中的值全部置成0。例如a数组中的值为a=456179326,则返回主程序后a数组中的值应为000100320注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:#include<conio.h>#include<stdio.h>#include<stdlib.h>#defineN5intfun(inta[][N]){}main(){inta[N][N],i,j;clrscr();printf("*****Thearray*****\n");for(i=0;i<N;i++)/*产生一个随机的5*5矩阵*/{for(j=0;j<N;j++){a[i][j]=rand()%10;printf("%4d",a[i][j]);}printf("\n");}fun(a);printf("THERESULT\n");for(i=0;i<N;i++){for(j=0;j<N;j++)printf("%4d",a[i][j]);printf("\n");}}答案及评析:intfun(inta[][N]){inti,j;for(i=0;i<N;i++)for(j=i;j<N;j++)a[i][j]=0;/*将数组右上半三角元素中的值全部置成0*/}【解析】本题旨在考查控制数组中右上半三角元素的算法,也就是两个千篇一律的循环语句,希望学习者能够掌握消化。第七套1.填空题str是全部由小写字母字符和空格字符组成的字符串,由num传入字符串的长度。请补充函数fun(),该函数的功能是:统计字符串str中的单词个数,结果由变量num传回。每个单词之间都由空格隔开,并且字符串str开始不存在空格。例如:str=“howdoyoudo”,结果为:num=4。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。试题程序:}答案及评析:【1】i<*num 【2】n++ 【3】*num=n【解析】填空1:*num传入字符串的长度,所以for循环中变量i的变化范围是从0到*num-1。填空2:如果当前判断的字符是小写字母,并且它的下一个字符是空格或者是字符串结束标记符,则表示当前字符是一个单词的最后一个字母,统计单词数的变量n要加上1。填空3:题目要求结果由变量num传回,所以要将n的值赋给指针num所指的单元。2.改错题下列给定程序中,fun()函数的功能是:根据形参m,计算下列公式的值。t=1-1/2+1/3-1/4+…+(-1)(m+1)/m例如,若输入5,则应输出0.783333。请改正程序中的错误,使它能得到正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include<conio.h>#include<stdio.h>/**********************found***********************/intfun(intm){doublet=1.0,j=1.0;inti;/**********************found***********************/for(i=1;i<m;i++){j=-1*j;t+=j/i;}returnt;}main(){intm;clrscr();printf("\nPleaseenter1integernumber:");scanf("%d",&m);printf("\nTheresultis%lf\n",fun(m));}答案及评析:(1)错误:intfun(intm)正确:doublefun(intm)(2)错误:for(i=1;i<m;i++)正确:for(i=2;i<=m;i++)【解析】错误:函数的返回值为实型数,所以应定义为double类型。错误2:根据题目的公式,参加运算的数应从2到m,包括m。3.编程题请编写函数fun(),它的功能是:求出1到1000之内能被5或13整除、但不能同时被5和13整除的所有整数并将它们放在a所指的数组中,通过n返回这些数的个数。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:#include<conio.h>#include<stdio.h>voidfun(int*a,int*n){}main(){intaa[1000],n,k;clrscr();fun(aa,&n);for(k=0;k<n;k++)if((k+1)%10==0){printf("%5d",aa[k]);printf("\n");/*一行写10个数*/}elseprintf("%5d",aa[k]);}答案及评析:voidfun(int*a,int*n){inti,j=0;for(i=1;i<=1000;i++)/*求1到1000之内能被5或13整除、但不能同时被5和13整除的所有整数,并放入数组a中*/if((i%5==0||i%13==0)&&i%65!=0)a[j++]=i;*n=j;/*传回满足条件的数的个数*/}【解析】注意本题题目是找出能被5或13整除但不能同时被5和13整除的所有整数。能同时被5和13整除的整数一定能被65整除,且不能被65整除的数不一定就是能被5或13整除的数。所以可得出程序中的if()。按运算优先级可知(i%5==0||i%13==0),注意,两边必须要有小括号。第八套1.填空题请补充函数fun(),该函数的功能是:把从主函数中输入的字符串str2接在字符串str1的后面。例如:str1=“Howdo”,str2=“youdo?”,结果输出:Howdoyoudo?注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。试题程序:}答案及评析:【1】*(p1+i) 【2】*p2 【3】*p2++【解析】填空1:变量i用来记录字符串str1的长度,当指针指到字符串str1结束标志符‘\0'时,while循环结束,变量i停止累加。填空2:指针p2指向字符串str2,通过for循环将字符串str2接在str1后面,循环结束的条件是指针p2所指的字符是字符串结束标志符‘\0'。填空3:指针p2最初指向字符串str2的首字符,通过自加1,使指针p2依次向后移动,指向str2的各个字符,实现将字符串str2接在str1后面的功能。2.改错题下列给定程序中,函数fun()的作用是:将字符串tt中的小写字母都改为对应的大写字母,其他字符不变。例如,若输入"edS,dAd",则输出"EDS,DAD"。请改正程序中的错误,使它能得到正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include<stdio.h>#include<string.h>#include<conio.h>/**********************found***********************/charfun(chartt[]){inti;for(i=0;tt[i];i++){/**********************found***********************/if((tt[i]>='A')&&(tt[i]<='Z'))tt[i]-=32;}return(tt);}main(){inti;chartt[81];clrscr();printf("\nPleaseenterastring:");gets(tt);printf("\nTheresultstringis:\n%s",fun(tt));}答案及评析:(1)错误:charfun(chartt[])正确:char*fun(chartt[])(2)错误:if((tt[i]>='A')&&(tt[i]<='Z'))正确:if((tt[i]>='a')&&(tt[i]<='z'))【解析】错误1:函数的返回值是字符串的首地址,是指针类型,所以在函数名前要加'*'号。错误2:题目要求将小写字母改为大写字母,所以if语句的判断条件是小写字母。3.编程题请编写函数fun(),该函数的功能是:移动一维数组中的内容,若数组中有n个整数,要求把下标从p到n-1(p≤n-1)的数组元素平移到数组的前面。例如,一维数组中的原始内容为1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,p的值为6。移动后,一维数组中的内容应为7,8,9,10,10,11,12,13,14,15,1,2,3,4,5,6。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:#include<stdio.h>#defineN80voidfun(int*w,intp,intn){}main(){inta[N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};inti,p,n=15;printf("Theoriginaldata:\n");for(i=0;i<n;i++)printf("%3d",a[i]);printf("\n\nEnterp:");scanf("%d",&p);fun(a,p,n);printf("\nThedataaftermoving:\n");for(i=0;i<n;i++)printf("%3d",a[i]);printf("\n\n");}答案及评析:voidfun(int*w,intp,intn){inti,j,t;for(i=p;i<=n-1;i++)/*循环右移n-p次*/{t=w[n-1];for(j=n-2;j>=0;j--)/*实现循环右移*/w[j+1]=w[j];w[0]=t;}}【解析】本题采用"循环右移"的算法。和我们在前面分析的稍有不同的是,一个是整型数组,一个是字符型数组。第九套1.填空题str是一个由数字和字母字符组成的字符串,由变量num传入字符串长度。请补充函数fun(),该函数的功能是:把字符串str中的数字字符转换成数字并存放到整型数组bb中,函数返回数组bb的长度。例如:str=“Bcd123e456hui890”,结果为:123456890。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。试题程序:}答案及评析:【1】s[i]>=′0′&&s[i]<=′9′ 【2】s[i]-′0′ 【3】n【解析】填空1:如果当前字符的ASCII码大于字符′0′的ASCII码,而小于字符′9′的ASCII码,则说明当前字符是数字字符。填空2:将数字字符转换为数字的方法是,用当前数字字符的ASCII码减去字符′0′的ASCII码。填空3:题目要求函数返回数组bb的长度,而变量n记录了数字字符的个数,也就是数组bb的长度,所以函数应该返回n。2.改错题下列给定程序中,函数fun()的功能是:从n个学生的成绩中统计出高于平均分的学生人数,人数由函数值返回,平均分存放在形参aver所指的存储单元中。例如输入8名学生的成绩:8565.56995.5875562.575则高于平均分的学生人数为4(平均分为74.312500)。请改正程序中的错误,使它能得到正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include<stdio.h>#include<conio.h>#defineN20intfun(float*s,intn,float*aver){/**********************found***********************/intave,t=0;intcount=0,k,i;for(k=0;k<n;k++)t+=s[k];ave=t/n;for(i=0;i<n;i++)/**********************found***********************/if(s[i]<ave)count++;/**********************found***********************/aver=ave;returncount;}main(){floats[30],aver;intm,i;clrscr();printf("\nPleaseenterm:");scanf("%d",&m);printf("\nPleaseenter%dmark:\n",m);for(i=0;i<m;i++)scanf("%f",s+i);printf("\nThenumberofstudents:%d\n",fun(s,m,&aver));printf("Ave=%f\n",aver);}答案及评析:(1)错误:intave,t=0;正确:floatave,t=0.0;(2)错误:if(s[i]<ave)正确:if(s[i]>ave)(3)错误:aver=ave;正确:*aver=ave;【解析】错误1:ave和t分别用来存放成绩的平均值和总分,应为实型数。错误2:根据题意,找出高于平均分的数,所以此处的关系运算符应为">"错误3:aver是指针,而ave是一个数,不能将一个数赋值给一个指针,而要用符号'*'。3.编程题请编写一个函数fun(),它的功能是:比较两个字符串的长度,(不得调用C语言提供的求字符串长度的函数),函数返回较短的字符串。若两个字符串长度相等,则返回第1个字符串。例如,输入nanjing<CR>nanchang<CR>(<CR>为回车键),函数将返回nanjing。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:#include<stdio.h>char*fun(char*s,char*t){}main(){chara[20],b[10],*p,*q;inti;printf("Input1thstring:");gets(a);printf("Input2thstring:");gets(b);printf("%s",fun(a,b));}答案及评析:char*fun(char*s,char*t){inti,j;for(i=0;s[i]!='\0';i++);/*求字符串的长度*/for(j=0;t[j]!='\0';j++);if(i<=j)/*比较两个字符串的长度*/returns;/*函数返回较短的字符串,若两个字符串长度相等,则返回第1个字符串*/elsereturnt;}【解析】本题中,第1个for循环的作用是求出s的字符个数i,第2个for循环的作用是求出t的字符个数j,因为任何循环都要控制一条语句,所以在每一个for循环条件后面必须要有一个分号。本题也可用如下技巧:#include<string.h>/*一定要注意在最前面加#include<string.h>*/char*fun(char*s,char*t){if(strlen(s)>=strlen(t)returns;elsereturnt;}第十套1.填空题请补充函数fun(),该函数的功能是判断一个数的个位数字和百位数字之和是否等于其十位上的数字,是则返回“yes!”,否则返回“no!”。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。试题程序:}答案及评析:【1】n/100%10 【2】″yes!″ 【3】″no!″【解析】填空1:由程序可以知道,变量g保存了整数的个位数,变量s保存了整数的十位数,所以变量b应该保存整数的百位数。将整数除以100再对10取余,则得到这个整数的百位数。填空2:当个位数字和百位数字之和等于十位数字时,则返回″yes!″。填空3:当个位数字和百位数字之和不等于十位数字时,则返回″no!″。2.改错题下列给定的程序中,函数fun()的功能是:用选择法对数组中的n个元素按从大到小的顺序进行排序。请改正程序中的错误,使它能得到正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include<stdio.h>#defineN20voidfun(inta[],intn){inti,j,t,p;/**********************found***********************/for(j=0;j<n-1;j++);{p=j;for(i=j;i<n;i++)if(a[i]>a[p])p=i;t=a[p];a[p]=a[j];/**********************found***********************/a[p]=t;}}main(){inta[N]={11,32,-5,2,14},i,m=5;printf("排序前的数据:");for(i=0;i<m;i++)printf("%d",a[i]);printf("\n");fun(a,m);printf("排序后的顺序:");for(i=0;i<m;i++)printf("%d",a[i]);printf("\n");}答案及评析:(1)错误:for(j=0;j<n-1;j++);正确:for(j=0;j<n-1;j++)(2)错误:a[p]=t;正确:a[j]=t;【解析】错误1:根据C语言语法,for循环中循环条件后不加分号,除非做空操作。错误2:将两数进行交换的常用语句,借助第三个变量。3.编程题下列程序定义了N×N的二维数组,并在主函数中赋值。请编写函数fun(),函数的功能是:求出数组周边元素的平方和并作为函数值返回给主函数中的s。例如:若a数组中的值为a=012791112155221611197910254141则返回主程序后s的值应为310。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:#include<stdio.h>#include<conio.h>#include<stdlib.h>#defineN5intfun(intw[][N]){}main(){inta[N][N]={0,1,2,7,9,1,11,21,5,5,2,21,6,11,1,9,7,9,10,2,5,4,1,4,1};inti,j;ints;clrscr();printf("*****Thearray*****\n");for(i=0;i<N;i++){for(j=0;j<N;j++){printf("%4d",a[i][j]);}printf("\n");}s=fun(a);printf("*****THERESULT*****\n");printf("Thesumis:%d\n",s);}答案及评析:intfun(intw[][N]){inti,j,k=0;ints=0;for(i=0;i<N;i++)for(j=0;j<N;j++)if(i==0||i==N-1||j==0||j==N-1)/*只要下标中有一个为0或N-1,则它一定是周边元素*/{s=s+w[i][j]*w[i][j];/*将周边元素求平方和*/}returns;/*返回周边元素的平方和*/}【解析】该题采用逐一判断的方式,周边元素的下标一定有一个是0或N-1,且只要下标中有一个为0或N-1,则它一定是周边元素。2009年9月真题选择题:(1)数字信号处理器由于在其内部设计了能够高速处理多路数字信号的电路,可以用在需要快速处理大量复杂信息的领域。下列哪一个设备不需要数字信号处理器?

A)雷达B)彩色电视机C)数字音视频设备D)数字图像处理设备

(2)八进制数1507转换成十进制数是多少?

A)838B)839C)840D)841

(3)数据包要求从源主机出发,最终到目的主机。下列哪一个设备可为数据包选择输出路径,将它从一个网络传送到另一个网络?

A)通信线路B)路由器C)WWW服务器D)调制解调器

(4)当电子邮件软件从邮件服务器读取邮件时,可以使用下列哪一个(些)协议?

Ⅰ.简单邮件传输协议SMTP

Ⅱ.邮局协议POP3

Ⅲ.交互式邮件存取协议IMAP

A)仅ⅠB)仅ⅡC)仅Ⅱ和ⅢC)仅Ⅰ和Ⅲ

(5)在下载的普通程序中隐含了一些非法功能的代码,用于窃取用户私密信息或执行其他恶意程序,这种恶意软件的攻击方式称为

A)特洛伊木马B)后门陷阱C)逻辑炸弹D)僵尸网络(6)下列关于ADSL技术的叙述中,哪些是正确的?

Ⅰ.它是在普通电话线上的一种心得高速宽带技术

Ⅱ.它为用户提供上、下行对称的传输速率

Ⅲ.ADSL宽带接入方式可用于网络互联业务

A)仅Ⅰ和ⅡB)仅Ⅱ和ⅢC)仅Ⅰ和ⅢD)全部填空题:

(1)为了改变指令系统计算机指令过多的状态而设计的一种计算机系统结构称为精简指令系统计算机,其英文缩写为

【1】

(2)标准的URL由三部分组成:协议类型、

【2】

和路径/文件名。

答案:(1)B (2) B (3) B (4) C (5) A(6)C填空题:(1)RISC(2)主机名2009年3月真题选择题:(1)下列哪一个不是指令系统中包含的指令类型?A)存储控制类指令B)数据传送类指令C)算术逻辑类指令D)判定控制类指令(2)计算机存储容量大小为1TB,相当于多少GB?A)256GBB)512GBC)1024GBD)2048GB(3)下列哪一个不属于广域网?A)X.5B)FDDIC)ISDND)ATM(4)下列哪一个不属于应用层协议?A)用户数据报协议UDPB)文件传瑜协议FTPC)域名服务DNSD)电子邮件协议SMTP(5)下列哪一个不属于实施信息认证的方法?A)身份识别B)消息验证C)密钥管理D)数字签名(6)密钥管理包括密钥的产生、存储、装入、分配、保护、丢失、销毁以及保密等内容,其中最关键和最困难的问题是A)解决密钥的丢失和销毁B)解决密钥的分配和存储C)解决密钥的产生和装入D)解决密钥的保护和保密填空题:(1)在WWW环境中,信息页由【1】语言来实现。

(2)Internet通过【2】将分布在世界各地的数以万计的广域网、城域网与局域网互联起来。

答案:(1) A (2) C (3) B (4) A (5) C(6)B填空:(1)HTML(2)网络互联设备2008年9月真题选择题:(1)下列关于系统软件的叙述中,哪条是不正确的?A)系统软件是在应用软件基础上开发的B)系统软件应提供友好的编程接口C)系统软件与硬件密切相关D)数据库管理系统属于系统软件(2)计算机硬件功能部件中,完成对数据加工的部件是A)运算器B)控制器C)存储器D)输入/输出设备(3)多媒体网络应用及实时通信要求网络高速率、低延迟传输。下列哪一种技术满足这类应用要求?A)ATMB)FDDIC)FRD)X.25(4)下列哪一个不是Internet提供的主要服务A)WWW服务B)数字视频影像服务C)电子邮件服务D)文件传输(5)下列哪个不是对网络进行服务攻击的结果?A)网路丧失服务能力B)网络通信线路瘫痪C)网站主页被涂改D)网站WWW服务器瘫痪(6)针对操作系统安全,为了防止由于误操作而对文件造成破环,要采用的方法是A)保密B)保护C)审计D)认证填空题:(1)为了保证Internet正常工作,要求联入Internet的计算机都遵从相同的通信协议,即【1】协议。(2)一般的加密体制可分为两种:单钥加密体制和【2】加密体制。答案:1)A2)A3)A4)B5)B6)B填空:1.TCP/IP2.双钥2008年4月真题选择题:(1)计算机应用已经渗透到社会生活的各个领域,特别是多媒体技术的发展,使得指纹识别、图像声音处理的应用不断发展。这一类应用属于下列哪一个应用领域?A)人工智能B)科学和工程计算机C)数据和信息处理D)过程控制(2)下列哪一项不是高级程序设计语言?A)FORTRANB)JAVAC)C++D)VisualASM(3)下列关于广域网技术的叙述,哪个不正确?A)X.25执行过程复杂,增加了网络传输延迟B)帧中继的产生为了保证数据传输的质量C)ATM技术采用异步传输与分组交换技术D)建立综合业务数字网的目的之一为用户提供标准接口(4)下列关于域名和IP地址的叙述中,哪一条是不正确的?A)在Internet中访问一台主机必须使用它的主机名B)03是一个C类IP地址C)IP地址采用的分层结构D)主机名一IP地址是一一对应的(5)一个加密体制或称密码体制是由下列哪些部分组成的?I.明文空间II.密文空间III.密钥空间IV.加密算法V.解密算法A)仅I,II和IIIB)仅I,II,IV和VC)仅I,III,IV和VD)全部(6)下列哪一项不是计算机病毒的特征?

A)传染性

B)结构性C)隐蔽性

D)可激发性填空题:(1)计算机网路是由多台计算机互联而成,为保证网络中计算机间的数据交换,要求计算机在交换数据的过程中遵守相应的网络协议,一个网络协议由语法、【1】和时序三个要素组成。(2)电子邮件程序向邮件服务器发送邮件时,使用的协议是【2】答案:(1)C(2)D(3)B(4)A(5)D(6)B填空题:(1)语义(2)STMP2007年9月真题选择题:(1)下列哪一种设备不是输入设备A)键盘B)光笔C)数/模转换器D)声音识别器(2)下列关于系统软件的叙述中,哪一个是不正确的?A)操作系统管理计算机的软、硬件资源B)解释程序先将源程序转换成目标代码后,边解释边执行C)Informix是一种数据库管理系统D)故障诊断程序是一类服务性程序(3)IP地址由网络地址和主机地址两部分组成,C类网络的主机地址长度是A)4B)6C)8D)12(4)下列关于超文本的叙述中,哪一个是不正确的?A)超文本是一种信息组织形式B)超文本采用非线性的网状结构组织信息C)超媒体进一步扩展了超文本所链接的信息类型D)超文本是由结点和链路组成的一个网络(5)一个数字签名算法至少应该满足三个条件,下列哪个不属于数字签名算法应满足的条件:A)签名者事后不能否认自己的签名B)接收者能够验证签名,其他人不能伪造签名C)数字签名必须是所签文件的物理部分D)当发生签名真伪争执时,有第三方能够解决争执(6)一个功能完备的网络系统应该提供基本的安全服务功能,其中解决网络中信息传输源节点用户与目的节点用户身份真实性问题的功能是A)保密B)认证C)完整性服务D)访问控制填空题:(1)【1】是用户接入Internet的入口点,一方面它为用户提供Internet接入服务,另一方面也为用户提供各类信息服务。(2)在密码学中,将信息源称作【2】。答案:(1)C(2)B(3)C(4)D(5)C(6)B填空题:(1)ISP(2)明文2007年4月真题选择题:(1)完成辅助诊断疾病的软件属于下列哪一类计算机软件?A)系统软件B、科学计算软件C)人工智能软件D、数据和信息处理软件(2)下列有关高级语言的叙述中,哪一个是不正确的?A)高级语言又称为算法语言B)高级语言独立于计算机硬件C)高级语言程序可以直接在计算机上执行D)用高级语言编写的程序其通用性和移植性好(3)IP地址是Internet赖以工作的基础,它由网络地址和主机地址两部分组成,其中C类网络的主机地址数最多为A)64个B)128个C)256个D)512个(4)电子邮件服务程序从邮件服务器中读取邮件时可以使用邮局协议,下列哪个是邮局协A)POP3B)IMAPC)HTTPD)SMTP(5)下列哪一项不属于邮件服务器的主要功能?A)接收用户发送来的邮件B)为收件人定期清理邮箱C)根据收件人地址将邮件发送到对方服务器中D)根据收件人地址将其他邮件服器发送来的邮件分发到相应的电子邮箱(6)密钥管理包括密钥的产生、存储、装入、分配、保护、销毁以及保密等内容,其中最关键和最困难的问题是A)密钥的分配和存储B)密钥的产生和装入C)密钥的保护和保密D)密钥的销毁填空题:(1)将文本、音频、视频、动画、图形和图像等各种媒体综合起来的技术称为【1】技术。(2)Internet服务提供商(ISP)是用户接入Intemet的入口点,一般用户计算机接入Internet有两种方式:一种是通过电话网,另一种是通过【2】。(3)三元组法和十字链表法都可以用于【3】矩阵的存储表示。(4)有关键码值为10,20,30,的三个结点,接所有可能的插入顺序去构造二叉排序树,能构造出【4】棵不同的二叉排序树。(5)对于给出的一组权{10,12,16,21,30},通过霍夫曼

温馨提示

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

评论

0/150

提交评论