江苏等级考试二级C语言上机真题汇编.docx
《江苏等级考试二级C语言上机真题汇编.docx》由会员分享,可在线阅读,更多相关《江苏等级考试二级C语言上机真题汇编.docx(29页珍藏版)》请在冰豆网上搜索。
![江苏等级考试二级C语言上机真题汇编.docx](https://file1.bdocx.com/fileroot1/2022-11/27/97aa68ad-2175-4641-b504-912e0f4fc627/97aa68ad-2175-4641-b504-912e0f4fc6271.gif)
江苏等级考试二级C语言上机真题汇编
江苏省高等高等学校非计算机专业学生
计算机基础知识和应用能力等级考试上机试卷
二级C语言
(本试卷完成时间70分钟)
一、改错题(16分)
【程序功能】
输入两个正确日期且年份在1900-9999范围内,计算并输出两个日期之间间隔的天数。
例如:
2008-8-1和2009-8-1之间间隔的天数为365。
提示:
被4整除并且不能被100整除的年份是闰年,能被400整除的年份也是闰年,其他年份则是平年。
【测试数据与运行结果】
显示:
firstdate:
输入:
1980-2-1
显示:
seconddate:
输入:
2009-8-1
输出:
10774days
【含有错误的源程序】
#include
#defineleap(inty)((y)%4==0&&(y)%100!
=0||(y)%400==0)
structd
{inty,m,d;};
intdays(structdd1,structdd2)
{intmon[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},
{0,31,29,31,30,31,30,31,31,30,31,30,31}};
inti;longtd=0;
for(i=d1.y;itd=leap(i)?
366:
365;
for(i=1;itd-=mon[leap(d1.y)][i];
td-=d1.d-1;
for(i=1;itd+=mon[leap(d2.y)][i];
td+=d2.d-1;
returntd;
}
voidmain()
{structd1,d2;
puts(“\nfirstdate:
”);
scanf(“%d-%d-%d”,&d1.y,&d1.m,&d1.d);
puts(“\nseconddate:
”);
scanf(“%d-%d-%d”,&d2.y,&d2.m,&d2.d);
printf(“%ddays”,days(d1.y,d2.y));
getch();
}
【要求】
1.将上述程序录入到文件myf1.c中,根据题目要求及程序中语句之间的逻辑关系对程序
中的错误进行修改。
2.改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或编译预处理命令,但不能增加其他语句,也不能删去整条语句。
3.改正后的源程序(文件名为myf1.c)保存在T:
盘根目录中功阅卷使用,否则不予评分。
/*二编程题(24分)
【程序功能】
输入两个自然数P和Q(P(1)P≤K(2)K*K+M*M=N*N
【编程要求】
1.编写函数intchlm(intp,intq,inta[][3])实现以下功能:
查找K,M在[p,q]范围内取值且
满足以上条件的所有整数组(K,M,N)。
若找到则将这些整数组保存到a指向的数组中,
函数返回找到的整数组的组数。
若找不到则函数返回0。
2.编写函数main实现以下功能:
声明二维数组a和变量p、q,输入两个自然数并保存到p和q中(p若找不到则在屏幕上输出“outfound”,否则将查找结果保存到a数组中,输出a数组数据到屏幕及文件myf2.out中。
最后将考生本人的准考证号输出到文件myf2.out中。
【测试数据与运行结果】
输入:
p=12q=38
输出
121620
123537
152025
153639
163034
182430
202129
212835
243240
243645
*/
江苏省高等高等学校非计算机专业学生
计算机基础知识和应用能力等级考试上机试卷
二级C语言
(本试卷完成时间70分钟)
/*一改错题(16分)
【程序功能】
函数dtoh实现将参数num的值表示为一个十六进制形式的字符串,并将该字符串存储在一个动态申请的存储区内,函数返回动态存储区的起始地址。
【测试数据及运行结果】
输入:
1234
输出:
4d2
含有错误的源程序*/
#include
#include
chardtoh(unsignednum)
{chardigits[]=”0123456789abcdef”;
char*s;intn=0;unsignedun=num;
while(un)
{n++;un/=16;}
s=(char*)malloc((n+1)*sizeof(char));
if(s==null)
{printf(“Memoryrequestfailed!
\n”);
exit
(1);
}
s[n--]=”\0”;
while(num)
{s[n--]=digits[num/16];/*取一位十六进制数字字符*/
num/=16;
}
returns;
}
voidmain()
{char*p;unsignedn;
scanf(“%u”,&n);
p=dtoh(n);
printf(“%s”,p);
free(p);getch();
}
【要求】
1.将上述程序录入到文件myf1.c中,根据题目要求及程序中语句之间的逻辑关系对程序
中的错误进行修改。
2.改错时,可以修改语句中的一部内容,调整语句次序,增加少量的变量说明或编译
预处理命令,但不能增加其他语句,也不能删去整条语句。
3.改正后的源程序(文件名myf1.c)保存在T:
盘根目录共阅卷使用,否则不予评分。
二、编程题(24分)
【程序功能】
在给定的范围内查找并输出所有满足以下条件的整数对(a,b)及与(a,b)关联的反序数对(c,d):
(1)a小于b:
(2)a和b的十进制表示均是三位数且各位上的数字互不相同;(3)a的反序数(记作c)和b的反序数(记作d)也都是三位数并且a×b等于c×d。
例如,与整数对(302,406)关联的反序数对是(203,604),302×406=203×604,因此(302,406)是满足上述条件的整数对。
【编程要求】
1.编写函数intfind(intx[][4],intm,intn)实现以下功能:
若m和n的十进制表示不是三位数则函数返回0。
否则,将取值在[m,n]范围内所有满足上述条件的整数对以及与这些整数对关联的反序数对保存到x指向的二维数组中,函数返回x数组中保存的数据行数。
2.编写函数main实现以下功能:
声明一个100行4列的二维数组a,用a数组作实参调用find函数在[300,450]范围内查找,将找到的满足上述条件的整数对及关联的反序数对保存到a数组。
按以下格式将a数组中数据输出到屏幕及文件myf2.out中。
最后将考生本人准考证输出到文件myf2.out中。
【测试数据与运行结果】
输出:
301*309=103*903302*406=203*604304*403=403*304306*402=603*204
312*426=213*624314*413=413*314321*369=123*963324*423=423*324
402*408=204*804412*428=214*824
【要求】
1.源程序文件为myf2.c,输出结果文件名myf2.out。
2.数据文件的打开、使用、关闭均使用C语言标准库中缓冲文件系统操作函数实现。
3.源程序文件和运行结果均需要保存T:
盘根目录中供阅卷使用。
4.不要复制扩展名为obj和exe的文件到T:
盘中。
江苏省高等高等学校非计算机专业学生
计算机基础知识和应用能力等级考试上机试卷
二级C语言
(本试卷完成时间70分钟)
一、改错题(16分)
【程序功能】
对一个二维数组中的数据排序。
排序规则如下:
将整个数组中值最小的元素所在行调整为数组第1行(行下标为0),将除第1行外剩余行中值最小的元素所在行调整为数组第2行,将除第1、2行外剩余行中值最小的元素所在行调整为数组第3行,其他依此类推。
【测试数据与运行结果】
数组初始化数据:
输出:
34568210
82101234
54325432
12343456
【含有错误的源程序】
#include“stdio.h”
intgetmin(inta[],intn)
{inti,min=a[0];
for(i=1;iif(a[i]>min)
min=a[i];
returnmin;
}
voidlineswap(inta[],intb[],int*n)
{inti,t;
for(i=0;i{t=a[i];a[i]=b[i];b[i]=t;}
}
voidmain()
{inta[4]={{3,4,5,6},{8,2,1,0},{5,4,3,2},{1,2,3,4}},i,j;
for(i=0;i<3;i++)
{for(j=1;j<4;j++)
{if(getmin(a[j],4)lineswap(a[j],,inta[i],4);
}
}
for(i=0;i<4;i++)
{for(j=0;j<4;j++)printf(“%d“,a[i][j]);
printf”\n”);}
getch();
}
【要求】
1.将上述程序录入到文件myf1.c中,根据题目要求及程序中语句之间的逻辑关系对程序
中的错误进行修改。
2.改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或编译
预处理命令,但不能增加其他语句,也不能删去整条语句。
3.改正后的源程序(文件名为myf1.c)保存在T:
盘根目录中功阅卷使用,否则不予评分。
二、编程题(24分)
【程序功能】
计算由两个整数生成的两个合法代码的码距。
这里的合法代码定义为由16个二进制数字字符组成的字符串。
例如“0000000000100101”是一个合法代码。
码距是指两个合法代码中对应位数字字符不同的位数。
例如,合法代码”0000000000100101”和”0000000000001110”自又向左1、2、4、6位上具有不同数字字符,因此这两个合法代码的码距为4。
【编程要求】
1.编写函数inthamming(intx,inty,chara[],charb[])实现以下功能:
先将形参x和y分别转换为2个合法代码并按从低位到高位的顺序分别保存2个合法代码到a和b指向的数组中(不足16位时高位补字符0)再计算a数组和b数组中的两个合法代码的码距,函数返回该码距。
2.编写函数main实现以下功能:
声明字符数组a、b和变量m、n,输入两个整数并保存到m和n中,若m、n的值在0~32767范围内则用m、n和数组a、b作实参调用hamming函数,计算由m和n生成的两个合法代码的码距,将a、b数组中存储的合法代码及这两个代码的码距输出到屏幕及文件myf2.out中。
最后将考生本人的准考证输出到文件myf2.out中。
.
【测试数据与运行结果】
输入:
m=16n=38
输出:
a:
0000000000010000
b:
0000000000001000
distanceof16and8is2
【要求】
1.源程序文件为myf2.c,输出结果文件名myf2.out。
2.数据文件的打开、使用、关闭均使用C语言标准库中缓冲文件系统操作函数实现。
3.源程序文件和运行结果均需要保存T:
盘根目录中供阅卷使用。
4.不要复制扩展名为obj和exe的文件到T:
盘中。
江苏省高等高等学校非计算机专业学生
计算机基础知识和应用能力等级考试上机试卷
二级C语言
(本试卷完成时间70分钟)
一、改错题(16分)
【程序功能】
将一个实数转换为二进制科学计数法表示并输出。
二进制科学记数法是指将一个绝对值大于2或者小于1的实数记为a×2±n形式,其
中尾数a是用二进制表示的实数且1≤|a|<2,指数中的n是用二进制表示的整数。
例
如:
0.125的科学计算法表示是1.0×2-11
若用B代表基数2,则a×2±n可表示为aB±n的形式。
例如,1.0×2-11表示1.0B-11。
【测试数据与运行结果】
第一次运行时输入:
0
输出:
0.0B0
第二次运行时输入:
0.125
输出:
1.0B-11
第三次运行时输入:
315
输出:
1.00111011B+1000
【含有错误的源程序】
#include
voidoutBinary(intx)
{if(x/2)outBinary(x/2);
printf(“%d”,x%2);
}
voidoutFloatBinary(floatx)
{inte=0;
if(x==0)
{puts(0.0B0);
return;
}
if(x<0{putchar(‘-‘);x=-x;}
while(x>=2.0)
{e++;x/=2;}
while(x<1.0)
{e++;x*=2;}
printf(“1.”);x=(x-(int)x)*2;
do
{printf(“%d”,x);
x=(x-(int)x)*2;
}while(x!
=0);
if(e=0)printf(“B0”);
elseif(e>0)
{printf(“B+”);outBinary(e);}
else
{printf(“B-”);outBinary(-e);}
printf(“\n”);
}
voidmain()
{floata;
scanf(“%f”,&a);
outFloatBinary(a);
getch();
}
【要求】
1.将上述程序录入到文件myf1.c中,根据题目要求及程序中语句之间的逻辑关系对程序
中的错误进行修改。
2.改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或编译
预处理命令,但不能增加其他语句,也不能删去整条语句。
3.改正后的源程序(文件名为myf1.c)保存在T:
盘根目录中功阅卷使用,否则不予评分。
二、编程题(24分)
【程序功能】
求3000以内的亲密数对.
如果A的全部真因子(包括1,不包括A自身)之和等于B;B的全部真因子之和等于A,则称整数A和B为一对亲密数。
【编程要求】
1.编写函数intfrinum(longs[][2],longn)实现如下功能:
找到2~n分范围内的所有亲密数对,将这些亲密数对保存到s指向的二维数组中。
返回函数s数组中存储的亲密数对的对数。
2.编写函数main实现以下功能:
声明二维数组s和变量n,输入一个正整数并保存到n中,用二维数组s和变量n作为实参调用frinum函数,将n以内的所有的亲密数对输出到屏幕及文件myf2.out中。
最后将考生本人的准考证输出到文件myf2.out.
【测试数据与运行结果】
输入:
n=3000
输出:
(220,284)
(1184,1210)
(2620,2924)
【要求】
1.源程序文件为myf2.e,输出结果文件名myf2.out。
2.数据文件的打开、使用、关闭均使用C语言标准库中缓冲文件系统的文件操作函数实现。
3.源程序文件和运行结果均需要保存T:
盘根目录中供阅卷使用。
4.不要复制扩展名为obj和exe的文件到T:
盘中。
江苏省高等高等学校非计算机专业学生
计算机基础知识和应用能力等级考试上机试卷
二级C语言
(本试卷完成时间70分钟)
一、改错题(16分)
【程序功能】
函数replace的功能是用s2指向的字符串替换s1指向的字符串中第n个字符(下标为n-1)之后到第m个字符(下标为m-1)之前的m-n-1个字符组成的字串(m>n+1)。
例如,若s1指向的字符串为“abcd”、s2指向的字符串为“xyz”、n=1、m=3,则执行替换操作后s1指向的字符串为“axyzcd”。
【测试数据与运行结果】
显示:
s1=qwertyuiops2=zxc
inputn,m;
输入:
19
输出:
qzxcop
【含有错误的源程序】
#include
#include
voidreplace(chars1[],intn,intm,chars2[])
{chars[80]
inti,j,len1,len2,len;
len1=strlen(s1);
len2=strlen(s2);
if(m>n+1&&n{for(i=0;is[i]=s1[i];
for(j=0;js[i]=s2[j];
s[i]=’\0’;
len=strlen(s);
for(i=0;s1[m-1+i]!
=’\0’;i++)
s[len+i]=s1[m-1+i];
s[len+i]=‘\0’;
for(i=0;s[i]!
=’\0’;i++)
s[i]=s1[i];
s1[i]=’\0’;
}
}
voidmain()
{chars1[80]=”qwertyuiop”,s2[20]=”zxc”;intn,m;
puts(“s1=%ss2=%s\n”,s1,s2);
puts(“inputn,m:
”);
scanf(“%d%d”,n,m);
replace(s1,n,m,s2);
puts(s1);
getch();
}
【要求】
1.将上述程序录入到文件myf1.c中,根据题目要求及程序中语句之间的逻辑关系对程序
中的错误进行修改。
2.改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或编译
预处理命令,但不能增加其他语句,也不能删去整条语句。
3.改正后的源程序(文件名为myf1.c)保存在T:
盘根目录中功阅卷使用,否则不予评分。
二、编程题(24分)
【程序功能】
用乌勒姆公式an=n2-n+41(n=1,2,…,m)生成一个数列的前m项并找出其中的回文数。
【编程要求】
1.编写函数intnumseq(longa[],longb[],intm)实现以下功能:
用乌勒姆公式生成一个数列的前m项并保存到a指向的数组中,从a数组中找出所有回文数保存到b指向的数组中,函数返回b数组中回文数个数。
2.编写函数main实现以下功能:
声明一维数组a,b和变量m;输入数列的项数并保存到m,用数组a、b和变量m作为实参调用numseq函数,将生成的数列前m项以及其中的回文数分别保存到a和b数组中;按每行10个数据的格式将a、b数组中的数据输出到屏幕及文件myf2.out中。
最后将考生本人的准考证输出到文件myf2.out。
【测试数据与运行结果】
输入:
m=20
输出:
a:
4143475361718397113131
151173197223251281313347383421
b:
131151313383
【要求】
1.源程序文件为myf2.c,输出结果文件名myf2.out。
2.数据文件的打开、使用、关闭均使用C语言标准库中缓冲文件系统的文件操作函数实现。
3.源程序文件和运行结果均需要保存T:
盘根目录中供阅卷使用。
4.不要复制扩展名为obj和exe的文件到T:
盘中。
江苏省高等高等学校非计算机专业学生
计算机基础知识和应用能力等级考试上机试卷
二级C语言
(本试卷完成时间70分钟)
一、改错题(16分)
【程序功能】
已知指针数组name保存了n个字符串的首地址。
以下程序通过调整指针数组元素的值实现按字典序对n个字符串排序;输出排序后指针数组各元素指向的字符串;删除指针数
组中以元音字母开头的所有字符串首地址;输出指针数组各元素指向的字符串。
【测试数据与运行结果】
数组初始化数据:
{“Mary”,”George”,”Andy”,”Tom”,”Iris”}
输出:
AndyGeorgeIrisMaryTom
GeorgeMaryTom
【含有错误的源程序】
#include
#include
#include
voidsort(char*name[],intn)
{char*ptr;inti,j,k;
for(i=0;i{k=i;
for(j=i+1;jif(strcmp(name[k],name[j]>0)k=j;
if(k==i)
ptr=name[i],name[i]=name[k],name[k]=ptr;
}
}
intdelstr(char*name[],intn)
{inti,j,k;charc,s[5]={‘A’,’E’,’O’,’I’,’U’},*P;
for(i=0;i{p=name[i];
c=p;
c=toupper(c);/*toupper(c):
若c是小写则返回对应大写字母,否则返回c原值*/
for(k=0;k<5;k++)if(c==s[k]break;
if(k>=5)
{for(j=i;jn--;i--;
}
}
returnn;
}
voidprint(char*name[],intn)
{inti;
for(i=0;iprintf(“\n”);
}
voidmain()
{intn=5;
char*name[n]={“Mary”,”George”,”Andy”,”Tom”,”Iris”};
sort(name,n);print(name,n);
n=delstr(name,n);print(name,n);
getch();
}
【要求】
1.将上述程序录入到文件myf1.c中,根据题目要求及程序中语句之间的逻辑关系对程序
中的错误进行修改。
2.改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或编译
预处理命令,但不能增加其他语句,也不能删去整条语句。
3.改正后的源程序(文件名为myf1.c)保存在T:
盘根目录中功阅卷使用,否则不予评分。
二、编程题(24分)
【程序功能】
输入两个正整数x和y(2≤x<100,2≤y<1000,找出所有满足下列条件