计算机二级考试VC部分试题及答案汇总.docx

上传人:b****5 文档编号:6661320 上传时间:2023-01-08 格式:DOCX 页数:48 大小:39.78KB
下载 相关 举报
计算机二级考试VC部分试题及答案汇总.docx_第1页
第1页 / 共48页
计算机二级考试VC部分试题及答案汇总.docx_第2页
第2页 / 共48页
计算机二级考试VC部分试题及答案汇总.docx_第3页
第3页 / 共48页
计算机二级考试VC部分试题及答案汇总.docx_第4页
第4页 / 共48页
计算机二级考试VC部分试题及答案汇总.docx_第5页
第5页 / 共48页
点击查看更多>>
下载资源
资源描述

计算机二级考试VC部分试题及答案汇总.docx

《计算机二级考试VC部分试题及答案汇总.docx》由会员分享,可在线阅读,更多相关《计算机二级考试VC部分试题及答案汇总.docx(48页珍藏版)》请在冰豆网上搜索。

计算机二级考试VC部分试题及答案汇总.docx

计算机二级考试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,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 预防医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1