秋秋江苏计算机等级考试上机要点.docx

上传人:b****6 文档编号:7625450 上传时间:2023-01-25 格式:DOCX 页数:25 大小:96.65KB
下载 相关 举报
秋秋江苏计算机等级考试上机要点.docx_第1页
第1页 / 共25页
秋秋江苏计算机等级考试上机要点.docx_第2页
第2页 / 共25页
秋秋江苏计算机等级考试上机要点.docx_第3页
第3页 / 共25页
秋秋江苏计算机等级考试上机要点.docx_第4页
第4页 / 共25页
秋秋江苏计算机等级考试上机要点.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

秋秋江苏计算机等级考试上机要点.docx

《秋秋江苏计算机等级考试上机要点.docx》由会员分享,可在线阅读,更多相关《秋秋江苏计算机等级考试上机要点.docx(25页珍藏版)》请在冰豆网上搜索。

秋秋江苏计算机等级考试上机要点.docx

秋秋江苏计算机等级考试上机要点

【对2011年10月16日江苏省高校计算机等级考试C语言上机题的评价:

经过对C01和C02两套上机题的分析和考生现场考试状态观察,本次上机考试的难度与2011春相比有所下降,具体分析总结如下:

1、改错题难度下降幅度较大;

2、从考生上机完成的情况来看,C01试卷难度低于C02:

C01考场,凡是经过江苏省高校计算机C上机题多次模拟练习者都提前完成了上机考试;

C02考场,大多数对完成上机题感到有一定难度:

对于改错题,由于命题违背了“不能增加其它语句,也不能删去整条语句”的命题规定,学生按照规定,调不出正确答案(见后分析);对于编程题,考生如果参考了网上“★预测计算机等级考试的C语言上机编程题(矩阵)_张柏雄.doc”一文,C02编程题采用比较简易的、占用内存较多的方法,就很快做出来了(见下面C02题解和说明);

3、与2011年秋全国计算机C语言的上机题(网上“★2011年9月17日全国计算机等级考试C语言十道上机题及其解析_张柏雄.doc”)相比,难度差不多,但如果不熟悉全国计算机C语言的上机题命题思路,则感觉全国更难;同样,在高校“C语言程序”课中不对江苏省高校计算机考试C的上机题进行多次模拟练习,则对江苏省题也是一筹莫展,难以取得理想的成绩。

【C01原始题目】

江苏省高等学校非计算机专业学生

计算机基础知识和应用能力等级考试上机试卷(2011秋)

二级C语言(试卷代号C01)

(本试卷完成时间70分钟)

一、改错题(16分)

【程序功能】

验证猜想:

当f为41,x分别取1、2、3、4、…、40时,由多项式x2-x+f产生的数均为素数。

以下程序首先用多项式x2-x+f产生40个整数存放在a指向的数组中,然后判断a数组中各元素的值是否均为素数,如果是则输出“YES”,并将a指向的数组中的素数按每行10个数的形式输出“NO”。

【测试数据与运行结果】

屏幕输出:

YES

4143475361718397113131

151173197223251281313347383421

461103310971163123113011373144715231601

【含有错误的源程序】

#include

#include

intallprime(intn,inta[])

{inti,j,b[];

for(i=0;i

{b[i]=1;

for(j=1;j

if(a[i]%j==0)b[i]=0;

}

for(i=0;i

if(0=b[i])

return0;

return1;

}

voidmain()

{inti,j,x0=1,x1=40,f=41,a[40];

for(j=x0;j<=x1;j++)

a[j-1]=j*j-j+f;

j--;

if(allprime(j,a[]))

{printf("\nYES\n");

for(i=0;i

{printf("%d\t",a[i]);

if((i+1)%10==0)printf("\n");

}

}

else

printf("\nNO\n");

getch();

}

【要求】

1.打开T盘中myfl.c或将上述程序录入到myfl.c文件中,根据题目要求及程序中语句之间的逻辑关系对程序中的错误进行修改。

2.改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或编译预处理命令,但不能增加其它语句,也不能删去整条语句。

3.改正后的源程序(文件名myfl.c)保存在T盘的根目录中供阅卷使用,否则不予评分。

二、编程题(24分)

【程序功能】

在已有的一份姓名登记表中删除重复出现的姓名,输出处理后和姓名登记表。

【编程要求】

1、编写函数intdel_name(chars[][20],intn)。

函数功能:

在s指向的数组前n行中存储的n个字符串中删除重复出现的字符串,只保留第一次出现的字符串,函数返回s指向的数组中剩余的字符串个数。

2、编写函数main()。

函数功能:

声明name并用测试数据初始化,用name作实参调用函数del_name,将经过删除后name数组中剩余的字符输出到屏幕及数据文件myf2.out中。

最后将考生本人的准考证号输出到文件myf2.out中。

【测试数据与运行结果】

测试数据:

"Ann","Belle","David","Ann","Mary","Belle","Ken","Ann","Mark","Mary"

屏幕输出:

Ann

Belle

Devid

Mary

Ken

Mark

【要求】

1.源程序文件名为myf2.c,输出结果文件名为myf2.out。

2.数据文件的打开、使用、关闭均用C语言标准库中文件操作函数实现。

3.源程序文件和运行结果文件均需保存到T盘上,供阅卷使用。

4.不要复制扩展名为obj和exe的文件到T盘上。

C语言(试卷代号C01)答案

【C01改错题参考答案】

#include

#include/*库函数getch()需要而增加头文件*/

intallprime(intn,inta[])

{inti,j,b[40];

for(i=0;i

{b[i]=1;

for(j=2;j

if(a[i]%j==0)b[i]=0;

}

for(i=0;i

if(b[i]==0)/*错误2、逻辑判断表达式0=b[i],应该用b[i]==0*/

return0;

return1;

}

voidmain()

{inti,j,x0=1,x1=40,f=41,a[40];

for(j=x0;j<=x1;j++)

a[j-1]=j*j-j+f;

j--;

if(allprime(j,a))/*错误3、函数调用的实参a[]错误,应该用数组首地址a*/

{printf("\nYES\n");

for(i=0;i

{printf("%d\t",a[i]);

if((i+1)%10==0)printf("\n");

}

}

else

printf("\nNO\n");

getch();

}

 

【C01编程题参考答案】

【解题思路】C01编程题看起来比较容易,但隐藏杀机。

如何实现实参数组name,逐步将重复项删除,函数返回值是不重复的剩余字符串个数。

所以,解题时设置中间变量k,使它对字符串重复项删除的同时,自动减少。

此外设置标志变量flag,每次设置为1,只要出现一个重复项,则flag变为0,以后的重复字符串,再不使改变函数返回值了。

还有,不管第一次,还是以后出现重复项,在出现处都进行字符串向前移动动作:

for(m=j;m

#include

#include/*库函数exit(0)需要*/

#include

#include/*库函数getch()需要*/

intdel_name(chars[][20],intn)

{inti,j,k=n,m,flag;

for(i=0;i<=k;i++)

{flag=1;

for(j=i+1;j<=k;j++)

if(strcmp(s[i],s[j])==0)

{if(flag==1){--k;flag=0;}

for(m=j;m

}

}

returnk;

}

voidmain()

{intn=10,i,k;

charname[][20]={"Ann","Belle","David","Ann","Mary","Belle","Ken","Ann","Mark","Mary"};FILE*fp;

if((fp=fopen("myf2.out","w"))==NULL)

{printf("\nCan'topenthefile!

");exit(0);}

printf("\n");fprintf(fp,"\n");

k=del_name(name,n);

for(i=0;i

{printf("%s\n",name[i]);fprintf(fp,"%s\n",name[i]);}

printf("\nMynumberis:

1030107123\n");fprintf(fp,"\nMynumberis:

1030107123\n");

fclose(fp);

getch();

}

 

【C02原始题目】

江苏省高等学校非计算机专业学生

计算机基础知识和应用能力等级考试上机试卷(2011秋)

二级C语言(试卷代号C02)

(本试卷完成时间70分钟)

二、改错题(16分)

【程序功能】

核对密码。

首先在用户输入的表示密码的字符串中,找到ASCII编码值最大的字符并在其后插入子串"ve";然后再用加工后的密码字符串与程序内设置的密码作对比,若相同则输出“right”及用户输入的密码;若不相同则提示用户重新输入密码。

用户三次输入的密码均不正确时终止程序的运行。

【测试数据与运行结果】

输入:

love

屏幕输出:

wrong!

youhave2chances!

输入:

lo

屏幕输出:

right!

yourpasswordid:

lo

【含有错误的源程序】

#include

#include

#include

voidinsert(charstr[]);

voidmain()

{charstr1[80],str2[80],password[80]="love";

inti;

for(i=0;i<3;i++)

{printf("\npleaseinputpassword:

\n");

gets(str1);

strcpy(str2,str1);

insert(str2);

if(strcmp(password,str2)=0)

{printf("right!

\n");

break;

}

else

printf("wrong!

youhave2chances!

\n");

}

getch();

}

voidinsert(charstr[])

{charmax;

inti,j=0;

max=str[0];

for(i=1;str[i]!

='\0';i++)

if(str[i]>max)

{max=str[i];

j=i;

}

for(i=strlen(str);i>=j;i--)

str[i+2]=str[i];

str[i+1]=v,str[i+2]=e;

}

【要求】

1.将上述程序录入到文件myfl.c中,根据题目要求及程序中语句之间的逻辑关系对程序中的错误进行修改。

2.改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或编译预处理命令,但不能增加其它语句,也不能删去整条语句。

3.改正后的源程序(文件名myfl.c)保存在T:

盘的根目录中供阅卷使用,否则不予评分。

二、编程题(24分)

【程序功能】

将一个n阶方阵(n为偶数)分为四个n/2阶子方阵,然后将4个子方阵按顺时钟方向轮转一次。

如下图所示。

123456192021123

789101112252627789

131415161718313233131415

顺时钟轮转一次

192021222324222324456

252527282930282930101112

313233343536343536161718

 

【编程要求】

1.编写函数voidcycle(inta[][10],intm)。

函数功能:

将a指向的数组中存储的n阶方阵分成四个方阵(如上图所示),对矩阵做一次顺时钟轮转操作,轮转后的n阶方阵仍保存在a指向的数组中。

2、编写main()。

函数功能:

声明一个10行10列二维数组,输入方阵阶数n(n≤10且为偶数),在二维数组中生成一个n阶方阵(数组元素的值按行顺序置为1-n2)。

用二维数组作实参调用cycle函数。

将二维数组中存储的经过轮转操作后的方阵输出到屏幕和数据文件myf2.out中。

最后将考生本人的准考证号输出到文件myf2.out中。

【测试数据与运行结果】

输入:

n=6

屏幕输出:

192021123

252627789

313233131415

222324456

282930101112

343536161718

【要求】

1.源程序文件名必须取为myf2.c,输出结果文件名为myf2.out。

2.数据文件的打开、使用、关闭均用C语言标准库中的文件操作函数实现。

3.源程序文件和运行结果文件均需保存到T盘上,供阅卷使用。

4.不要复制扩展名为obj和exe的文件到T盘上。

【C02改错题参考答案】

#include

#include

#include

voidinsert(charstr[]);

voidmain()

{charstr1[80],str2[80],password[80]="love";

inti;

for(i=0;i<3;i++)

{printf("\npleaseinputpassword:

\n");

gets(str1);

strcpy(str2,str1);

insert(str2);

if(strcmp(password,str2)==0)/*1.逻辑表达式错误,正确是strcmp(password,str2)==0*/

{printf("right!

\n");

break;

}

else

printf("wrong!

youhave2chances!

\n");

}

getch();

}

voidinsert(charstr[])

{charmax;

inti,j=0;

max=str[0];

for(i=1;str[i]!

='\0';i++)

if(str[i]>max)

{max=str[i];

j=i;

}

for(i=strlen(str);i>=j;i--)

str[i+2]=str[i];

str[j+1]='v',str[j+2]='e',str[j+3]='\0';/*2字符赋值错,缺少字符串结束符,违背了命题几项规定*/

}

【C02改错题命题剖析】

对于函数voidinsert(charstr[])段,命题者意即找出字符串最大值位置max及其下标j,以后将字符串结束符'\0'后移两位,在最大值下标后加上"ve",意获得"love"结果。

但经过for(i=strlen(str);i>=j;i--)程序段后i变为0,失去了原始命题的初衷,只能获得"lveo"错误结果(详见下图显示),此外,字符串结束符'\0'不能作为字符进行移动处理!

【C02编程题参考答案】

#include

#include/*库函数exit()需要*/

#include/*库函数getch()需要*/

voidcycle(inta[][10],intn)/*取材于★预测计算机等级考试的C语言上机编程题(矩阵)_张柏雄.doc第2题解*/

{inti,j,b[3][3]={0};

for(i=0;i

for(j=0;j

b[i][j]=a[i][j+n/2];

for(i=0;i

for(j=0;j

a[i][j+n/2]=a[i][j];

for(i=0;i

for(j=0;j

a[i][j]=a[i+n/2][j];

for(i=0;i

for(j=0;j

a[i+n/2][j]=a[i+n/2][j+n/2];

for(i=0;i

for(j=0;j

a[i+n/2][j+n/2]=b[i][j];

}

voidmain()

{intx[10][10]={0},i,j,n=7;FILE*fp;

if((fp=fopen("myf2.out","w"))==NULL){printf("\nCan'topenthefile!

");exit(0);}

printf("\n");fprintf(fp,"\n");

while(n%2!

=0)/*要求输入数值是偶数*/

{printf("n=");scanf("%d",&n);}

for(i=0;i

for(j=0;j

x[i][j]=i*n+j+1;

cycle(x,n);

printf("\n");fprintf(fp,"\n");

for(i=0;i

{for(j=0;j

printf("%d\t",x[i][j]),fprintf(fp,"%d\t",x[i][j]);

printf("\n");fprintf(fp,"\n");

}

printf("\nMynumberis:

1030107123\n");fprintf(fp,"\nMynumberis:

1030107123\n");

fclose(fp);

getch();

}

江苏省高等学校非计算机专业学生

计算机基础知识和应用能力等级考试上机试卷(2012春)

二级C语言(试卷代号C01)

(本试卷完成时间70分钟)

三、改错题(16分)

【程序功能】

以下程序中函数voidcsort(charstr[][N],intn)对str指向的二级数组前n行中存储的n个字符串分别做如下处理:

从中间将字符串一分为二,左半部分字符子串按字符的ASCII码从大到小排序(若字符串长度为奇数,则中间字符不参加排序)。

【测试数据与运行结果】

测试字符串:

”abcdefgh”,”123498765”

屏幕输出:

dcbaefgh

432198765

【含有错误的源程序】

#include

#include

#include

#defineN80

voidcsort(charstr[][N],intn);

voidmain()

{chars[2][N]="abcdefgh","123498765";inti;

csort(s,2);

for(i=0;i<2;i++)

puts(s);

getch();

}

voidcsort(charstr[][N],intn)

{inti,j,k,len,half;

chartemp;

for(i=0;i

{len=strlen(str[i][0]);

half=len/2;

for(j=0;j

for(k=j+1;k

if(str[i][j]

{temp=str[i][j];

str[i][j]=str[i][k];

str[i][k]=temp;

}

}

}

【要求】

4.打开T盘中myfl.c文件或将上述程序录入到myf1.c文件中,根据题目要求及程序中语句之间的逻辑关系对程序中的错误进行修改。

5.改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或编译预处理命令,但不能增加其它语句,也不能删去整条语句。

6.改正后的源程序(文件名myfl.c)保存在T盘的根目录中供阅卷使用,否则不予评分。

二、编程题(24分)

【程序功能】

对于所给的一个自然数n,查找并输出所有满足以下条件的等差数列:

⑴公差为1;⑵数列中各项数值之和等于n。

【编程要求】

1、编写函数intfound(inta[][30],intn)。

函数功能:

查找满足上述条件的所有等差数列并依次将其保存到a指向的数组中(一行保存一个数列),函数返回找到的数列个数。

2、编写函数main()。

函数功能:

声明一个二级整型数组用于保存查找结果,输入一个整数并保存到变量n中(n≤600)。

用n和整型数组作实参调用found函数,将找到的所有等差数列输出到屏幕及数据文件myf2.out中。

最后将考生本人的准考证号输出到文件myf2.out中。

【测试数据与运行结果】

输入m=500

屏幕输出:

891011121314151617181920212223242526272829303132

5960616263646566

9899100101102

500

Mynumberis11234567

【要求】

5.源程序文件名为myf2.c,输出结果文件名为myf2.out。

6.数据文件的打开、使用、关闭均用C语言标准库中文件操作函数实现。

7.源程序文件和运行结果文件均需保存到T盘上,供阅卷使用。

8.不要复制扩展名为obj和exe的文件到T盘上。

【改错题解答:

myf1.c】

#include

#include

#include

#defineN80

voidcsort(charstr[][N],intn);

voidmain()

{char

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

当前位置:首页 > 人文社科 > 视频讲堂

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

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