江苏省计算机二级C上级考试试题及答案上机.docx
《江苏省计算机二级C上级考试试题及答案上机.docx》由会员分享,可在线阅读,更多相关《江苏省计算机二级C上级考试试题及答案上机.docx(23页珍藏版)》请在冰豆网上搜索。
江苏省计算机二级C上级考试试题及答案上机
2012春江苏省高校计算机等级考试
二级C语言上机试卷1
(本试卷完成时间为70分钟)
一、改错题(16分)
【程序功能】
以下程序中函数voidcsort(charstr[][N],intn)对str指向的二维数组前n行中存储的n
个字符串分别作如下处理:
从中间将字符串一分为二,左半部分字符子串按字符的ASCII码值
从大到小排序(若字符串的长度为奇数,则中间字符不参加排序)。
【测试数据与运行结果】
测试字符串:
"abcdefgh","123498765"
屏幕输出:
dcbaefgh
432198765
【含有错误的源程序】
以下源程序已保存在T盘myf1.c文件内,考生可直接打开该文件的调试程序。
1#include
2#include
3#include
4#defineN80
5voidcsort(charstr[][N],intn);
6voidmain()
7{chars[2][N]="abcdefgh","123498765";
8inti;
9csort(s,2);
10for(i=0;i<2;i++)
11puts(s);
12getch();
13}
14voidcsort(charstr[][N],intn)
15{inti,j,k,len,half;
16chartemp;
17for(i=0;i18{len=strlen(str[i][0]);
19half=len/2;
20for(j=0;j21for(k=j+1;k22if(str[i][j]23{temp=str[i][j];
24str[i][j]=str[i][k];
25str[i][k]=temp;
26}
27}
28}
【要求】
1.打开T盘中myf1.c文件或将上述程序录入到myf1.c文件中,根据题目要求及程序中
语句之间的逻辑关系对程序中的错误进行修改。
2.改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或编译预
处理命令,但不能增加其他语句,也不能删去整条语句。
3.将改正后的源程序(文件名myf1.c)保存在T盘中供阅卷使用,否则不予评分。
二、编程题(24分)
【程序功能】
对于所给的一个自然数n,查找并输出所有满足以下条件的等差数列:
(1)公差为1;
(2)数列中各项数值之和等于n。
【编程要求】
1.编写函数intfound(inta[][30],intn)。
函数的功能:
查找满足上述条件的所有等差
数列并依次将其保存到a指向的数组中(一行保存一个数列),函数返回找到的数列个数。
2.编写函数main()。
函数的功能:
声明一个二维整型数组用于保存查找结果,输入一个整
数并保存到变量n中(n≤600)。
用n和整型数组作实参调用found函数,将找到的所有等差数
列输出到屏幕及数据文件myf2.out中。
最后将考生本人的准考证号输出到文件myf2.out中。
【测试数据与运行结果】
输入:
n=500
屏幕输出:
8910111213141516171819202l2223242526272829303132
59606l6263646566
9899100101102
500
【要求】
1.源程序文件名为myf2.c,输出结果文件名为myf2.out。
2.数据文件的打开、使用、关闭均用C语言标准库中的文件操作函数实现。
3.源程序文件和运行结果文件均需保存在T盘中供阅卷使用。
4.不要复制扩展名为obj和exe的文件到T盘中。
参考答案
一、改错题
第7行{chars[2][N]="abcdefgh","123498765";改为{"abcdefgh","123498765"}
第11行puts(s);改为puts(s[i])
第18行{len=strlen(str[i][0]);改为str[i]
第21行for(k=j+1;k二、编程题
#include
#include
intfound(inta[][30],intn)’
{inti,k=0,s=0,j,count,l=0;
for(i=1;i<=n;i++)
{for(s=0,j=i;ss=s+j;
if(s==n)
{count=0;
for(k=i;ka[1][count++]=k;
l++;
}
}
returnl;
}
voidmain()
{inti,j,n,m,a[10][30]={0};
FILE*fp;
fp=fopen("myf2.out","w");
printf("inputn:
");
scanf("%d",&n);
m=found(a,n);
for(i=0;i{
for(j=0;a[i][j];j++)
{printf("%d",a[i][j]);
fprintf(fp,"%d",a[i][j]);
printf("\n");
fprintf(fp,"\n");
}
fprintf(fp,"Myexamnumberis:
0012400124");fclose(fp);
getch();
}
2011春江苏省二级C上机考试真题第2套
江苏省高等学校非计算机专业学生
计算机基础知识和应用能力等级考试上机试卷(2011年春)
二级C语言(试卷代号C02)
(本试卷完成时间70分钟)
一、改错题(16分)
【程序功能】
统计一个字符串中包含的字母串个数并找出其中最长的字母串。
所谓字母串是指一个连续的字母序列(不区分大小写),字母串之间用非字母字符分隔。
函数count的功能是统计p指向的字符串中包含的字母串个数,找出的最长字母串存放在pmax指向的数组中,函数返回字母串的个数。
【测试数据与运行结果】
测试数据:
youareteaeher234too.
屏幕输出:
a=youareteacher234too.
numberis4
maxstringis:
teacher
【含有错误的源程序】
#include
#include
#include
intcount(charp[],charpmax[])
{intj=0,k,m=0;
chartemp[100];
while(*p)
{while((!
isalpha(*p))&&*p)p++;
k=0;
if(*p!
='\0')m++;
while(isalpha(*p))
temp[k++]=*p++;
temp[k]="\0";
if(k{j=k;
pmax=temp;
}
}
returnm;
}
voidmain()
{chara[100]="youareteacher234too.",max[100];
inti;
i=count(a[],max[]);
if(i==0)
printf("a=%S:
Noletterstrings!
\n",a);
else
prinff("a=%s\nnumberis%d\nmaxstringis:
%s\n",a,i,max);
}
【要求】
1.将上述程序录入到文件myf1.c中,根据题目要求及程序中语句之间的逻辑关系对程序中的错误进行修改。
2.改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或编译预处理命令,但不能增加其他语句,也不能删去整条语句。
3.改正后的源程序(文件名myf1.c)保存在T:
盘根目录中供阅卷使用,否则不予评分
二、编程题(24分)
【程序功能】
将一个二维数组中的若干行数据按要求插入到另一个二维数组中。
【编程要求】
1.定义符号常量N代表4
2.编写函数intinsert_row(inta[][N],intn,intb[][N],intm)。
已知形参a指向的二维数组(简称a数组)前n行数据已按每行数据之和升序排列,形参b指向的二维数组中有m行数据。
insert_row函数实现将b数组中m行数据插入到a数组中,完成插入操作后a数组中所有行的数据仍按每行数据之和升序排列。
函数返回a数组中有效数据的行数。
3.编写main函数。
函数功能是声明两个二维数组x和y并用测试数据初始化,用x和y
数组作为实参调用insert_row函数将y数组中的两行数据插入到x数组中。
输出x数组中全部数据到屏幕及文件myf2.out中。
最后将考生本人的准考证号字符串输出到文myf2.
out中。
【测试数据与运行结果】
测试数据:
x数组原数据:
2234
9101112
y数组数据:
1357
5101520
屏幕输出:
2234
1357
9101112
5101520
【答案】
改错1:
将第13行 "temp[0]="\0" 修改为 temp[0]='\0'
改错2:
将第 14行 if(kj)
改错3:
将第16行 pmax=temp,修改为strcpy(pmax,temp);
改错4:
将第24行i=count(a[],max[])修改为i=count(a,max);
2011春江苏省计算机二级C上机真题1
二级C语言上机试卷
(本试卷完成时间为70分钟)
一、改错题(16分)
【程序功能】
对存储在string数组内的英文句子中所有以a开始并以e结尾的单词做加密处理。
加密规则:
若单词长度为偶数个字符,则将组成该单词的所有字母循环左移一次;否则循环右移一次。
例如,单词able经循环左移一次后变为blea;单词abide经循环右移一次后变为eabid。
【测试数据与运行结果】
测试数据:
sheisabletoabideher.
屏幕输出:
sheisbleatoeabidher.
【含有错误的源程序】
#include
#include
voidwordchange(charstr[])
{inti,j,k,m;
charc;
for(i=0;str[i];i++)
{for(j=i,k=i;isalpha(str[k]);k++);
if(str[j]=='a'||str[k-1]=='e')
{if((k-j)%2=0)
{c=str[j];
for(m=k-1;m>j;m--)
str[m]=str[m+1];
str[k-1]=c;
}
else
{c=str[k-1];
for(m=k-1;m>j;m--)
str[m]=sty[m-1];
str[j]=c;
}
}
i=k;
}。
}
voidmain()
{charstring[80]="sheisabletoabideher.";
wordchange(string[80]);
puts(string);
}
【要求】
1.将上述程序录入到文件myf1.c中,根据题目要求及程序中语句之间的逻辑关系对程
序中的错误进行修改。
2.改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或编译预处理命令,但不能增加其他语句,也不能删去整条语句。
3.改正后的源程序(文件名myf1.c)保存在T盘根目录中供阅卷使用,否则不予评分。
二、编程题(24分)
【程序功能】
矩阵数据生成及排序。
【编程要求】
1.编写函数voidcresort(inta[][3],intn)。
函数功能是先根据a指向的二维数组中第1列(列下标为0)和第2列(列下标为1)的值按下表所列规则生成第3列各元素的值,再以行为单位重排a数组的各行,使得所有行按第3列元素值从小到大排列。
第3列生成规则:
对任意的i(0<=i<=n-1)有:
2.编写main函数。
函数功能是声明5行3列二维数组a并用测试数据初始化,用数组a
作为实参调用cresort函数,将a数组中的数据输出到屏幕及文件myf2.out中。
最后将考生本人的准考证号字符串输出到文件myf2.out中。
【测试数据与运行结果】
测试数据:
27160
11120
690
7130
850
屏幕输出:
27161
691
852
11123
7134
【要求】
1.源程序文件名为myf2.C,输出结果文件名为myf2.out。
2.数据文件的打开、使用、关闭均用C语言标准库中缓冲文件系统的文件操作函数实现。
3.源程序文件和运行结果文件均需保存在T盘根目录中供阅卷使用。
4.不要复制扩展名为obj和exe的文件到T盘中。
参考答案
一、改错题
if(str[j]=='a'||str[k-1]=='e')改为&&
if((k-j)%2=0)改为==
for(m=k-1;m>j;m--)改为m=j;mwordchange(string[80]);改为string
二、编程题
#include
#defineN5
intisprime(intm)
{inti;
for(i=2;i<=m/2;i++)
if(m%i==0)return0;
retum1;
}
voidcresort(inta[][3],intn)
{inti,j,k,m,c,t;
for(i=0;i{c=isprime(a[i][0])+isprime(a[i][1]);
switch(c)
{case0:
a[i][2]=1;break;
case2:
a[i][2]=4;break;
case1:
if(isprime(a[i][0]))a[i][2]=3;
elsea[i][2]=2;break;
}
}
for(i=0;i{k=i;
for(j=i+1;j
江苏省高等学校非计算机专业学生
计算机基础知识和应用能力等级考试上机试卷(2010年秋)
二级C语言(试卷代号C01)
(本试卷完成时间70分钟)
一、改错题(16分)
【程序功能】
查找介于n1与n2(O(1)该数的十进
制表示中有且仅有两个相同的数字位;
(2)该数是素数。
【测试数据与运行结果】
测试数据:
n1=900
n2=1200
屏幕输出:
91191992997799199710091013
10191021103110331051106110911103
1109112311291153116311871193
【含有错误的源程序】
#inelude
#include
intvalidate(intn)
{inti,j,k=0,num[5]={0},size=0;
do
{num[size]=n%10;
n=n/10;
size++;
}while(n<0);
for(i=0;ifor(j=i+1;jif(num[i]==num[j])
k=k+1;
if(k>1)
return1;
else
return0;
}
intprime(int)
{inti;
for(i=2;i<=(int)sqrt(n);i++)
if(n%i==0)retum0;
return1;
}
voidmain()
{inti,count=0,n1,n2;
scanf("%d%d",&n1,&n2);
for(i=n1;i<=n2;i++)
{if(validate(inti)&&prime(inti))
{count++;
printf("%d\t",i);
if(count%8==0)printf("\n");
}
}
}
【要求】
1.将上述程序录入到文件myf1.C中,根据题目要求及程序中语句之间的逻辑关系对程序
中的错误进行修改。
2.改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或编译预
处理命令,但不能增加其他语句,也不能删去整条语句。
3.改正后的源程序(文件名myf1.c)保存在T:
盘根目录中供阅卷使用,否则不予评分。
二、编程题(24分)
【程序功能】
字符串变换。
【编程要求】
1.编写函数voidchange(char*a,char*b,char*c)。
函数功能是首先把b指向的字符串逆向存放,然后将a指向的字符串和b指向的字符串按排列顺序交叉合并到c指向的数组中,两个字符串中过长的剩余字符接在c指向数组的尾部。
例如,当a指向的字符串为
"abcdefg",b指向的字符串为"1324"时,C指向的数组中字符串应为"a4b2c3dlefg"。
2.编写main函数。
函数功能是声明字符型数组s1、s2和t,用测试数据初始化数组s1和
s2,再用s1、s2和t作为实参调用函数change,将数组s1、s2和t中的字符串输出到屏幕及文件myf2.out中。
最后将考生本人的准考证号字符串输出到文件myf2.out中。
【测试数据与运行结果】
测试数据:
s1:
abcdefg
s2:
1324
屏幕输出:
s1:
abcdefg
s2:
4231
Theresultis:
a4b2c3dlefg
【要求】
1.源程序文件名为myf2.c,输出结果文件名为myf2.out。
2.数据文件的打开、使用、关闭均用C语言标准库中缓冲文件系统的文件操作函数实现。
3.源程序文件和运行结果文件均需保存在T:
盘根目录中供阅卷使用
4.不要复制扩展名为obj和exe的文件到T:
盘中。
二级C语言上机试卷2010春C上机真题第一套
(本试卷完成时间为70分钟)
一、改错题(16分)
【程序功能】
验证3(n范围内的任意两个相邻素数的平方之间至少存在4个素数。
例如,5和7是两个相邻素数,5^2(25)与7^2(49)之间存在6个素数:
293137414347。
【测试数据与运行结果】
显示:
inputn:
输入:
10
输出:
3~5k=5
1113171923
5~7k=6
293137414347
【含有错误的源程序】
#include
样include
intprime(intn)
{inti,flag=1;
for(i=1;i<=sqrt(n);i++)
if(n%i==0)flag=0;
returnflag;
}
intfun(inta[],intn)
{inti,k=0;
for(i=3;i<=n;i++)
if(prime(i))a[k++]=i;
returnk;
’voidfun1(intm,intn,intb[])
{inti,k=0;
if(m>n)return0;
for(i=m*m;iif(prime(i))b[k++]=i;
returnk;
}
voidmain()
{inta[50]={0},b[100]={0},i,m,k,j,n;
printf("inputn:
");
scanf("%d",&n);
m=fun(a,n);
for(i=O;i{k=fun1(a[i],a[i+1],b[O]);
printf("%d~%dk=%d",a[i],a[i+1],k);
if(k<4){printf("false");break;}
for(j=0;j{if(j%10=O)prinff("\n");
printf("%5d",b[j]);
}
printf("\n");
}
getch();
}
【要求】
1.将上述程序录入到文件myf1.c中,根据题目要求及程序中语句之间的逻辑关系对程序中的错误进行修改。
2.改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或编译预处理命令,但不能增加其它语句,也不能删去整条语句。
3.改正后的源程序(文件名myf1.c)保存在T:
盘根目录中供阅卷使用,否则不予评分。
二、编程题(24分)
【程序功能】
在给定范围内查找k使得用公式k^2+k+17生成的整数满足以下条件:
该数的十进制表示中低3位数字相同,去掉低3位后的整数是回文数。
例如,当k=461时用公式生成的整数
是212999,该数满足所给条件。
【编程要求】
1.编写函数intfindnum(intn1,intn2,longa[][2])实现以下功能:
k依次取n1~n2范围
内的每个整数,分别用每个k及公式k2+k+17生成整数y,若y满足给定条件,则将k值及y
值保存到a指向的数组中,函数返回a数组中k的个数。
2.编写函数main实现以下功能:
声明二维数组a和变量n1、n2,输入两个整数并保存到
n1、n2中,用n1、n2及a数组作实参调用findnum函数,按所给格式输出a数组中的数据到屏
幕及文件myf2.out中。
最后将考生本人的准考证号输出到文件myf2.out中。
【测试数据与运行结果】
输入:
n1=1,n2=10000
输出:
knumber
461212999
586343999
383914741777
【要求】
1.源程序文件名为myf2.c,输出结果文件名为myf2.out。
2.数据文件的打开、使用、关闭均用c语言标准库中缓冲文件系统的文件操作函数实现。
3.源程序文件和运行结果文件均需保存在T:
盘根目录中供阅卷使用。