计算机二级考试VC部分试题及答案讲解.docx
- 文档编号:24054573
- 上传时间:2023-05-23
- 格式:DOCX
- 页数:57
- 大小:39.74KB
计算机二级考试VC部分试题及答案讲解.docx
《计算机二级考试VC部分试题及答案讲解.docx》由会员分享,可在线阅读,更多相关《计算机二级考试VC部分试题及答案讲解.docx(57页珍藏版)》请在冰豆网上搜索。
计算机二级考试VC部分试题及答案讲解
第一套
一、改错题
1.题目要求
下列给定程序中函数fun的功能是:
计算函数F(x,y,z)=(x+y)/(x-y)+(z+y)/(z-y)的值。
其中x和y的值不相等,z和y的值不相等。
例如,当x的值为9,y的值为11,z的值为15时,函数值为-3.50。
请改正程序中的错误,使它能得出正确的结果。
注意:
部分源程序在文件MODI1.C中,不得增行或删行,也不得更改程序的结构。
#include
#include
#include
/************found************/
#defineFU(m,n)((m/n))
floatfun(floata,floatb,floatc)
{floatvalue;
value=FU(a+b,a-b)+FU(c+b,c-b);
/************found************/
Return(Value);
}
main()
{floatx,y,z,sum;
printf("Inputxyz:
");
scanf("%f%f%f",&x,&y,&z);
printf("x=%f,y=%f,z=%f\n",x,y,z);
if(x==y||y==z){printf("Dataerror!
\n");exit(0);}
sum=fun(x,y,z);
printf("Theresultis:
%5.2f\n",sum);
}
2.算法分析
①#defineFU(m,n)((m/n))错误这样定义FU(m,n)造成语句value=FU(a+b,a-b)+FU(c+b,c-b)执行为value=(a+b/a-b)+(c+b/c-b),所以应该将语句#defineFU(m,n)((m/n))改为#defineFU(m,n)(m)/(n)
②语句Return(Value);错误C语言中大小写字母有不同的含义,此处希望执行返回value的值的操作,所以应该改为return(value);
二、填空题
1.题目要求
下列给定程序中,函数fun的功能是:
有N×N矩阵,以主对角线为对称线,对称元素相加并将结果存放在左下三角元素中,右上三角元素置为0。
例如,若N=3,有下列矩阵:
1 2 3
4 5 6
7 8 9
计算后结果为
1 0 0
6 5 0
10 14 9
请在程序的下划线处填入正确的内容并把下划线删除。
使程序得出正确的结果。
注意:
部分源程序在文件BLANK1.C中。
不得增行或删行,也不得改程序的结构!
#include
#defineN4
voidfun(int(*t)___1___)
{inti,j;
for(i=1;i {for(j=0;j { ___2___=t[i][j]+t[j][i]; ___3___=0; } } } main() { intt[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10},i,j; printf("\nTheoriginalarray: \n"); for(i=0;i {for(j=0;j printf("\n"); } fun(t); printf("\nTheresultis: \n"); for(i=0;i {for(j=0;j printf("\n"); } } 2.算法分析 ①[N] 形参t被定义为行数组指针变量,它指向包含N个元素的一位数组。 ②t[i][j] 以主对角线为对称线,对称元素相加的值应该赋予左下三角元素的t[i][j]。 ③t[j][i] 根据题意,为零的应该是右上三角元素的值。 三、编程题 1.题目要求 规定输入的字符串中只包含字母和*号。 编写函数fun,其功能是: 将字符串中的前导*号全部删除,中间和尾部的*号不删除。 例如,字符串中的内容为: *******A*BC*DEF*G****,删除后字符串中的内容应当是: A*BC*DEF*G****。 编写函数时,不得使用C语言提供的字符串函数。 注意: 部分源程序在文件PROG1.C中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。 #include voidfun(char*a) { } main() {chars[81]; voidNONO(); printf("Enterastring: \n");gets(s); fun(s); printf("Thestringafterdeleted: \n");puts(s); NONO(); } voidNONO() {/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */ FILE*in,*out; inti;chars[81]; in=fopen("in.dat","r"); out=fopen("out.dat","w"); for(i=0;i<10;i++){ fscanf(in,"%s",s); fun(s); fprintf(out,"%s\n",s); } fclose(in); fclose(out); } 2.算法分析 (1)主要数据结构 char*a (2)算法描述 ①记录第一个非*的符号的地址; ②将包括第一个在内的非*字符串全部赋予另一个数组。 3.实现代码 voidfun(char*a) { char*p=a; while(*p=='*')p++; for(;*p! ='\0';p++,a++) *a=*p; *a='\0'; } 4.程序调试及测试结果 经运行程序调试,将出现的错误分析如下: (1)编译错误 (2)连接错误 (3)运行错误 经过修改程序测试结果正确,符合要求。 第二套 一、改错题 1.题目要求 下列给定程序中,函数fun的功能是: 依次取出字符串中所有的数字字符,形成新的字符串,并取代原字符串。 请改正函数fun中的错误,使它能得出正确的结果。 注意: 部分源程序在文件MODI1.C中,不得增行或删行,也不得更改程序的结构。 #include #include #include voidfun(char*s) {inti,j; for(i=0,j=0;s[i]! ='\0';i++) if(s[i]>='0'&&s[i]<='9') /*************found**************/ s[j]=s[i]; /*************found**************/ s[j]=”\0”; } voidmain() {charitem[80]; system("CLS"); printf("\nEnterastring: ");gets(item); printf("\n\nThestringis: %s\n",item); fun(item); printf("\n\nThestringofchangingis: %s\n",item); } 2.算法分析 ①语句s[j]=s[i];错误。 程序在这里应该执行将是数字的字符赋予s[j]并将j自加1,所以这里应该改为s[j++]=s[i] ②语句s[j]=”\0”;错误。 这里应该是将字符‘\0’赋予s[j],而非字符串,所以应该改为s[j]=‘\0’ *二、填空题 1.题目要求 给定程序中,函数fun的功能是将形参给定的字符串、整数、浮点数写到文本文件中,再用字符方式从此文本文件中逐个读入并显示在终端屏幕上。 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意: 部分源程序在文件BLANK1.C中。 请勿改动main函数和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。 #include voidfun(char*s,inta,doublef) { /**********found**********/ __1__fp; charch; fp=fopen("file1.txt","w"); fprintf(fp,"%s%d%f\n",s,a,f); fclose(fp); fp=fopen("file1.txt","r"); printf("\nTheresult: \n\n"); ch=fgetc(fp); /**********found**********/ while(! feof(__2__)) { putchar(__3__); ch=fgetc(fp); } putchar('\n'); fclose(fp); } main() {chara[10]="Hello! ";intb=12345; doublec=98.76; fun(a,b,c); } 2.算法分析 ①FILE*易知这里是为了定义文件指针fp,因此这里应该填FILE*; ②fp这里是为了对该文件类型数据进行操作,因此填写fp; ③ch为了实现用字符方式从此文本文件中逐个读入并显示在终端屏幕上,此处应该填写ch。 三、编程题 1.题目要求 请编写函数fun,该函数的功能是: 将M行N列的二维数组中的字符数据,按列的顺序依此放到一个字符串中。 例如,若二维数组中的数据为 WWWW SSSS HHHH 则字符串中的内容应是: WSHWSHWSHWSH。 注意: 部分源程序在文件PROG1.C中。 请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 #include #defineM3 #defineN4 voidfun(char(*s)[N],char*b) { } voidmain() { FILE*wf; chara[100],w[M][N]={{'W','W','W','W'},{'S','S','S','S'},{'H','H','H','H'}}; inti,j; printf("Thematrix: \n"); for(i=0;i {for(j=0;j printf("%3c",w[i][j]); printf("\n"); } fun(w,a); printf("TheAstring: \n"); puts(a); printf("\n\n"); /******************************/ wf=fopen("out.dat","w"); fprintf(wf,"%s",a); fclose(wf); /*****************************/ } 2.算法分析 (1)主要数据结构 char(*s)[N],char*b (2)算法描述 将原数组行列互换后逐一记录至另一个以为数组,记录完成后将另一个数组的最后加上结束标志’\0’。 3.实现代码 voidfun(char(*s)[N],char*b) { inti,j,k=0; for(i=0;i for(j=0;j b[k++]=s[j][i]; b[k]='\0'; } 4.程序调试及测试结果 经运行程序调试,将出现的错误分析如下: (1)编译错误 (2)连接错误 (3)运行错误 经过修改程序测试结果正确,符合要求。 第三套 一、改错题 1.题目要求 下列给定程序中函数fun的功能是: 用冒泡法对6个字符串进行升序排列。 请改正程序中的错误,使它能得出正确的结果。 注意: 部分源程序在文件MODI1.C中,不得增行或删行,也不得更改程序的结构! #include #include #defineMAXLINE20 fun(char*pstr[6]) {inti,j; char*p; for(i=0;i<5;i++) { /**************found**************/ for(j=i+1,j<6,j++) { if(strcmp(*(pstr+i),*(pstr+j))>0) { p=*(pstr+i); /**************found**************/ *(pstr+i)=pstr+j; *(pstr+j)=p; } } } } main() {inti; char*pstr[6],str[6][MAXLINE]; for(i=0;i<6;i++)pstr[i]=str[i]; printf("\nEnter6string(1stringateachline): \n"); for(i=0;i<6;i++)scanf("%s",pstr[i]); fun(pstr); printf("Thestringsaftersorting: \n"); for(i=0;i<6;i++)printf("%s\n",pstr[i]); } 2.算法分析 ①语句for(j=i+1,j<6,j++)错误。 for语句中的各语句之间应该用“;”号隔开,而非“,”号,所以此处应该改为for(j=i+1;j<6;j++)。 ②语句*(pstr+i)=pstr+j;错误。 根据题意,这里程序想执行的是将数组的第j个元素赋予数组的第i个元素,而非将数组的第j个元素的地址赋予数组的第i个元素,所以这里应该改为*(pstr+i)=*(pstr+j);。 二、填空题 1.题目要求 下列给定程序中,函数fun的功能是: 将s所指字符串中的所有数字字符移到所有非数字字符之后,并保持数字字符串和非数字字符串原有的次序。 例如,s所指的字符串为def35adh3kjsdf7,执行后结果为defadhajsdf3537。 请在程序的下划线处填入正确的内容把下划线删除,使程序得出正确的结果。 注意: 部分源程序在文件BLANK1.C中。 不得增行或删行,也不得更改程序的结构! #include voidfun(char*s) {inti,j=0,k=0;chart1[80],t2[80]; for(i=0;s[i]! ='\0';i++) if(s[i]>='0'&&s[i]<='9') { /**********found**********/ t2[j]=s[i];___1___; } elset1[k++]=s[i]; t2[j]=0;t1[k]=0; /**********found**********/ for(i=0;i /**********found**********/ for(i=0;i<___3___;i++)s[k+i]=t2[i]; } main() {chars[80]="ba3a54j7sd567sdffs"; printf("\nTheoriginalstringis: %s\n",s); fun(s); printf("\nTheresultis: %s\n",s); } 2.算法分析 ①j++使j自加一,当下一次条件再一次满足条件时,能够把对应s[i]的元素记录到数组t2中的下一个元素中; ②s[i]=t1[i]将非数字的元素组成的数组t1 逐个地把它的元素赋给数组s; ③j将由数字组成的数组t2中的元 素在t1后逐个赋给数组s中第 k后的元素。 三、编程题 1.题目要求 编写函数fun,其功能是: 求ss所指字符串中指定字符的个数,并返回此值。 例如,若输入字符串123412132,输入字符为1,则输出3。 注意: 部分源程序在文件PROG1.C中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。 #include #include #defineM81 intfun(char*ss,charc) { } main() {chara[M],ch; voidNONO(); printf("\nPleaseenterastring: ");gets(a); printf("\nPleaseenterachar: ");ch=getchar(); printf("\nThenumberofthecharis: %d\n",fun(a,ch)); NONO(); } voidNONO() {/*本函数用于打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。 */ inti; FILE*rf,*wf; chara[M],b[M],ch; rf=fopen("in.dat","r"); wf=fopen("out.dat","w"); for(i=0;i<10;i++){ fscanf(rf,"%s",a); fscanf(rf,"%s",b); ch=*b; fprintf(wf,"%c=%d\n",ch,fun(a,ch)); } fclose(rf); fclose(wf); } 2.算法分析 (1)主要数据结构 char*ss,charc (2)算法描述 ①得出字符数组的所包含的字符数的值并 赋给m; ②逐一比较数组中与特定字符相同的字符,若有数组中有一个成立,就让j加上1,最后返回j的值,j的值就是所要求的数组中与特定字符相同的字符个数。 3.实现代码 intfun(char*ss,charc) { inti,j=0,m; m=strlen(ss); for(i=0;i if(ss[i]==c)j++; returnj; } 4.程序调试及测试结果 经运行程序调试,将出现的错误分析如下: (1)编译错误 (2)连接错误 (3)运行错误 经过修改程序测试结果正确,符合要求。 第四套 一、改错题 1.题目要求 下列给定程序中函数fun的功能是: 删除s所指字符中所有的小写字母c。 请改正程序中的错误,使它能得出正确的结果。 注意: 部分源程序在文件MODI1.C中,不得增行或删行,也不得更改的程序的结构! #include voidfun(char*s) {inti,j; for(i=j=0;s[i]! ='\0';i++) if(s[i]! ='c') /************found************/ s[j]=s[i]; /************found************/ s[i]=0; } main() {chars[80]; printf("Enterastring: ");gets(s); printf("Theoriginalstring: ");puts(s); fun(s); printf("Thestringafterdeleted: ");puts(s);printf("\n\n"); } 2.算法分析 ①语句s[j]=s[i];错误。 当数组中的元素部位c是则记录下该元素并将它赋给元素s[j],同时让j自加1,方便记录下下一个不是c的元素,所以这里应该改为s[j++]=s[i]; ②语句s[i]=0;错误。 根据题意,程序在这里想将所记录的最后一个不是c的元素的后面一位赋予结束符号“\0”,所以这里应该改为s[j]=’\0’。 二、填空题 1.题目要求 程序通过定义学生结构体变量,存储学生的学号、姓名和3门课的成绩。 函数fun的功能是: 将形参a所指结构体变量中的数据赋给函数中的结构体变量b,并修改b中的学号和姓名,最后输出修改后的数据。 例如,a所指变量中的学号、姓名和三门课的成绩依次是: 10001、"ZhangSan"、95、80、88,则修改后输出b中的数据应为: 10002、"LiSi"、95、80、88。 请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。 注意: 部分源程序在文件BLANK1.C中。 不得增行或删行,也不得更改程序的结构! #include #include structstudent{ longsno; charname[10]; floatscore[3]; }; voidfun(structstudenta) {structstudentb;inti; /**********found**********/ b=__1__; b.sno=10002; /**********found**********/ strcpy(__2__,"LiSi"); printf("\nThedataaftermodified: \n"); printf("\nNo: %ldName: %s\nScores: ",b.sno,b.name); /**********found**********/ for(i=0;i<3;i++)printf("%6.2f",b.__3__); printf("\n"); } main() {structstudents={10001,"ZhangSan",95,80,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 二级 考试 VC 部分 试题 答案 讲解