1、江苏省高等高等学校非计算机专业学生 计算机基础知识和应用能力等级考试上机试卷 二级 C语言 (本试卷完成时间 70分钟) 一、改错题(16分) 【程序功能】 输入两个正确日期且年份在1900-9999范围内,计算并输出两个日期之间间隔的天数。 例如:2008-8-1和2009-8-1之间间隔的天数为365。 提示:被4整除并且不能被100整除的年份是闰年,能被400整除的年份也是闰年,其他年份则是平年。 【测试数据与运行结果】 显示:first date: 输入:1980-2-1 显示:second date: 输入:2009-8-1
2、
输出:10774 days
【含有错误的源程序】
#include
3、d1.y;i 4、nd date:”);
scanf(“%d-%d-%d”,&d2.y,&d2.m,&d2.d);
printf(“%d days”,days(d1.y,d2.y));
getch();
}
【要求】
1. 将上述程序录入到文件myf1.c中,根据题目要求及程序中语句之间的逻辑关系对程序
中的错误进行修改。
2. 改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或编译预处理命令,但不能增加其他语句 ,也不能删去整条语句。
3. 改正后的源程序(文件名为myf1.c)保存在T:盘根目录中功阅卷使用,否则不予评分。
/*二 编程题(24 5、分)
【程序功能】
输入两个自然数P和Q(P 6、上条件的整数组。若找不到则在屏幕上输出“out found”,否则将查找结果保存到a数组中,输出a数组数据到屏幕及文件myf2.out中。最后将考生本人的准考证号输出到文件myf2.out中。
【测试数据与运行结果】
输入:
p=12 q=38
输出
12 16 20
12 35 37
15 20 25
15 36 39
16 30 34
18 24 30
20 21 29
21 28 35
24 32 40
24 36 45
*/
2
江苏省高等高等学 7、校非计算机专业学生
计算机基础知识和应用能力等级考试上机试卷
二级 C语言
(本试卷完成时间 70分钟)
/*一 改错题(16分)
【程序功能】
函数dtoh实现将参数num的值表示为一个十六进制形式的字符串,并将该字符串存储在一个动态申请的存储区内,函数返回动态存储区的起始地址。
【测试数据及运行结果】
输入:1234
输出:4d2
含有错误的源程序*/
#include 8、har *s; int n=0; unsigned un=num;
while(un)
{ n++; un/=16; }
s=(char*)malloc((n+1)*sizeof(char));
if(s==null)
{ printf (“Memory request failed!\n”);
exit(1);
}
s[n--]=”\0”;
while(num)
{ s[n--]=digits[num/16]; /*取一位十六进制数字字符*/
num/=16;
}
return s;
}
void main() 9、
{ char *p; unsigned n;
scanf(“%u”,&n);
p=dtoh(n);
printf(“%s”,p);
free(p); getch();
}
【要求】
1. 将上述程序录入到文件myf1.c中,根据题目要求及程序中语句之间的逻辑关系对程序
中的错误进行修改。
2. 改错时,可以修改语句中的一部内容,调整语句次序,增加少量的变量说明或编译
预处理命令,但不能增加其他语句,也不能删去整条语句。
3. 改正后的源程序(文件名myf1.c)保存在T:盘根目录共阅卷使用,否则不予评分。
二、编程题(24分)
【程序功能 10、
在给定的范围内查找并输出所有满足以下条件的整数对(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. 编写函数int find(int x[][4],int m,int n)实现以下功能:若m和n的十进制表示不是三位数则函数返回0。否则,将取值在[m,n]范围内所有 11、满足上述条件的整数对以及与这些整数对关联的反序数对保存到x指向的二维数组中,函数返回x数组中保存的数据行数。
2. 编写函数main实现以下功能:声明一个100行4列的二维数组a,用a数组作实参调用find函数在[300,450]范围内查找,将找到的满足上述条件的整数对及关联的反序数对保存到a数组。按以下格式将a数组中数据输出到屏幕及文件myf2.out中。最后将考生本人准考证输出到文件myf2.out中。
【测试数据与运行结果】
输出:
301*309=103*903 302*406=203*604 304*403=403*304 306*402=603*204
312* 12、426=213*624 314*413=413*314 321*369=123*963 324*423=423*324
402*408=204*804 412*428=214*824
【要求】
1. 源程序文件为myf2.c,输出结果文件名myf2.out。
2. 数据文件的打开、使用、关闭均使用C语言标准库中缓冲文件系统操作函数实现。
3. 源程序文件和运行结果均需要保存T:盘根目录中供阅卷使用。
4. 不要复制扩展名为obj和exe的文件到T:盘中。
4
江苏省高等高等学校非计算机专业学生
计算机基础知识和应用能力等级考 13、试上机试卷
二级 C语言
(本试卷完成时间 70分钟)
一、改错题(16分)
【程序功能】
对一个二维数组中的数据排序。排序规则如下:将整个数组中值最小的元素所在行调整为数组第1行(行下标为0),将除第1行外剩余行中值最小的元素所在行调整为数组第2行,将除第1、2行外剩余行中值最小的元素所在行调整为数组第3行,其他依此类推。
【测试数据与运行结果】
数组初始化数据: 输出:
3 4 5 6 8 2 1 0
8 2 1 0 1 2 3 4
14、
5 4 3 2 5 4 3 2
1 2 3 4 3 4 5 6
【含有错误的源程序】
#include “stdio.h”
int getmin(int a[],int n)
{ int i,min=a[0];
for(i=1;i 15、 16、]);
printf”\n”);}
getch();
}
【要求】
1. 将上述程序录入到文件myf1.c中,根据题目要求及程序中语句之间的逻辑关系对程序
中的错误进行修改。
2. 改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或编译
预处理命令,但不能增加其他语句 ,也不能删去整条语句。
3. 改正后的源程序(文件名为myf1.c)保存在T:盘根目录中功阅卷使用,否则不予评分。
二、编程题(24分)
【程序功能】
计算由两个整数生成的两个合法代码的码距。
这里的合法代码定义为由16个二进制数字字符组成的字符串。例如“00000 17、00000100101”是一个合法代码。
码距是指两个合法代码中对应位数字字符不同的位数。例如,合法代码”0000000000100101”和”0000000000001110”自又向左1、2、4、6位上具有不同数字字符,因此这两个合法代码的码距为4。
【编程要求】
1. 编写函数int hamming(int x,int y,chara [ ],char b[ ])实现以下功能:先将形参x和y分别转换为2个合法代码并按从低位到高位的顺序分别保存2个合法代码到a和b指向的数组中(不足16位时高位补字符0)再计算a数组和b数组中的两个合法代码的码距,函数返回该码距。
2. 编写函数mai 18、n 实现以下功能:声明字符数组a 、b和变量m、n,输入两个整数并保存到m和n中,若m、n的值在0~32767范围内则用m、n和数组a、b作实参调用hamming函数,计算由m和n生成的两个合法代码的码距,将a、b数组中存储的合法代码及这两个代码的码距输出到屏幕及文件myf2.out中。最后将考生本人的准考证输出到文件myf2.out中。.
【测试数据与运行结果】
输入:m=16 n=38
输出:
a:0000000000010000
b:0000000000001000
distance of 16 and 8 is 2
【要求】
1. 源程 19、序文件为myf2.c,输出结果文件名myf2.out。
2. 数据文件的打开、使用、关闭均使用C语言标准库中缓冲文件系统操作函数实现。
3. 源程序文件和运行结果均需要保存T:盘根目录中供阅卷使用。
4. 不要复制扩展名为obj和exe的文件到T:盘中。
6
江苏省高等高等学校非计算机专业学生
计算机基础知识和应用能力等级考试上机试卷
二级 C语言
(本试卷完成时间 70分钟)
一、改错题(16分)
【程序功能】
将一个实数转换为二进制科学计数法表示并输出。
二进制科学记数法是指将一个绝对值大 20、于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 < 21、stdio.h>
void outBinary(int x)
{ if(x/2) outBinary(x/2);
printf(“%d”,x%2);
}
void outFloatBinary(float x)
{ int e=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.”); 22、x=(x-(int)x)*2;
do
{ printf(“%d”,x);
x=(x-(int)x)*2;
}while(x!=0);
if(e=0) printf(“B0”);
else if(e>0)
{ printf(“B+”); outBinary(e);}
else
{ printf(“B-”); outBinary(-e); }
printf(“\n”);
}
void main()
{ float a;
scanf(“%f”,&a);
outFloatBinary(a);
getch 23、);
}
【要求】
1. 将上述程序录入到文件myf1.c中,根据题目要求及程序中语句之间的逻辑关系对程序
中的错误进行修改。
2. 改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或编译
预处理命令,但不能增加其他语句 ,也不能删去整条语句。
3. 改正后的源程序(文件名为myf1.c)保存在T:盘根目录中功阅卷使用,否则不予评分。
二、编程题(24分)
【程序功能】
求3000以内的亲密数对.
如果A的全部真因子(包括1,不包括A自身)之和等于B;B的全部真因子之和等于A,则称整数A和B为一对亲密数。
【编程要求】
1. 编写函数int 24、frinum(long s[][2],long n)实现如下功能:找到2~n分范围内的所有亲密数对,将这些亲密数对保存到s指向的二维数组中。返回函数s数组中存储的亲密数对的对数。
2. 编写函数main 实现以下功能:声明二维数组s和变量n,输入一个正整数并保存到n中,用二维数组s和变量n作为实参调用frinum函数,将n以内的所有的亲密数对输出到屏幕及文件myf2.out中。最后将考生本人的准考证输出到文件myf2.out.
【测试数据与运行结果】
输入: n=3000
输出:
(220,284)
(1184,1210)
(2620,292 25、4)
【要求】
1. 源程序文件为myf2.e,输出结果文件名myf2.out。
2. 数据文件的打开、使用、关闭均使用C语言标准库中缓冲文件系统的文件操作函数实现。
3. 源程序文件和运行结果均需要保存T:盘根目录中供阅卷使用。
4. 不要复制扩展名为obj和exe的文件到T:盘中。
8
江苏省高等高等学校非计算机专业学生
计算机基础知识和应用能力等级考试上机试卷
二级 C语言
(本试卷完成时间 70分钟)
一、改错题(16分)
【程序功能】
函数replace的功能是用s2指向的字符串替换s1指向的 26、字符串中第n个字符(下标为n-1)之后到第m个字符(下标为m-1)之前的m-n-1个字符组成的字串(m>n+1)。
例如,若s1指向的字符串为“abcd”、s2指向的字符串为“xyz”、n=1、m=3,则执行替换操作后s1指向的字符串为“axyzcd”。
【测试数据与运行结果】
显示: s1=qwertyuiop s2=zxc
input n,m;
输入: 1 9
输出: qzxcop
【含有错误的源程序】
#include 27、char s2[])
{ char s[80]
int i,j,len1,len2,len;
len1=strlen(s1);
len2=strlen(s2);
if(m>n+1&&n 28、
s[len+i]=‘\0’;
for(i=0;s[i]!=’\0’;i++)
s[i]=s1[i];
s1[i]=’\0’;
}
}
void main()
{ char s1[80]=” qwertyuiop”,s2[20]=”zxc”; int n,m;
puts(“s1=%s s2=%s\n”,s1,s2);
puts(“input n,m:”);
scanf(“%d%d”,n,m);
replace(s1,n,m,s2);
puts(s1);
getch();
}
【要求】
1. 将上述程序录入到文件myf 29、1.c中,根据题目要求及程序中语句之间的逻辑关系对程序
中的错误进行修改。
2. 改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或编译
预处理命令,但不能增加其他语句 ,也不能删去整条语句。
3. 改正后的源程序(文件名为myf1.c)保存在T:盘根目录中功阅卷使用,否则不予评分。
二、编程题(24分)
【程序功能】
用乌勒姆公式an=n2-n+41(n=1,2,…,m)生成一个数列的前m项并找出其中的回文数。
【编程要求】
1. 编写函数int numseq(long a[],long b[],int m)实现以下功能:用乌勒姆公式生成一个数列 30、的前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:
41 43 47 53 61 71 83 97 1 31、13 131
151 173 197 223 251 281 313 347 383 421
b:
131 151 313 383
【要求】
1. 源程序文件为myf2.c,输出结果文件名myf2.out。
2. 数据文件的打开、使用、关闭均使用C语言标准库中缓冲文件系统的文件操作函数实现。
3. 源程序文件和运行结果均需要保存T:盘根目录中供阅卷使用。
4. 不要复制扩展名为obj和exe的文件到T:盘中。
10
江苏省高等高等学校非计算机专业学生
32、计算机基础知识和应用能力等级考试上机试卷
二级 C语言
(本试卷完成时间 70分钟)
一、改错题(16分)
【程序功能】
已知指针数组name保存了n个字符串的首地址。以下程序通过调整指针数组元素的值实现按字典序对n个字符串排序; 输出排序后指针数组各元素指向的字符串;删除指针数
组中以元音字母开头的所有字符串首地址;输出指针数组各元素指向的字符串。
【测试数据与运行结果】
数组初始化数据: {“Mary”,”George”,”Andy”,”Tom”,”Iris”}
输出: Andy George Iris Mary Tom
33、 George Mary Tom
【含有错误的源程序】
#include 34、ptr;
}
}
int delstr(char *name[],int n)
{ int i,j,k; char c,s[5]={‘A’,’E’,’O’,’I’,’U’},*P;
for(i=0;i 35、
n--;i--;
}
}
return n;
}
void print(char*name[],int n)
{ int i;
for(i=0;i 36、
getch();
}
【要求】
1. 将上述程序录入到文件myf1.c中,根据题目要求及程序中语句之间的逻辑关系对程序
中的错误进行修改。
2. 改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或编译
预处理命令,但不能增加其他语句 ,也不能删去整条语句。
3. 改正后的源程序(文件名为myf1.c)保存在T:盘根目录中功阅卷使用,否则不予评分。
二、编程题(24分)
【程序功能】
输入两个正整数x和y(2≤x<100,2≤y<1000,找出所有满足下列条件的整数对(p,q):(1):p、q均为正整数;
(2):p、q的最大公约数等于 37、x且最小公倍数等于y。
提示:p、q的最小公倍数等于(p×q)/(p、q的最大公约数)。
【编程要求】
1. 编写函数int nucoup(int x,int y,int a[][2])实现如下功能:查找所有最大公约数是x并且
2. 最小公倍数是y的整数对,若找到则保存这些整数对到a指向的的数组中,函数返回找到的整数对的个数;若找不到则函数返回0。
3. 编写函数main 实现以下功能:声明二维数组a变量x、y,输入两个整数并保存到x和y中,用x,y和a数组作为实参调用numcoup函数,若找不到满足以上条件的整数对则输出“not found”到屏幕,否则输出a数组中数据到屏幕及文件 38、myf2.out中。最后将考生本人的准考证号输出到文件myf2.out。
【测试数据与运行结果】
输入: x=4 y=684
输出: 4 684
36 76
76 36
684 4
【要求】
1. 源程序文件为myf2.e,输出结果文件名myf2.out。
2. 数据文件的打开、使用、关闭均使用C语言标准库中缓冲文件系统操作函数实现。
3. 源程序文件和运行结果均需要保存T:盘根目录中供阅卷使用。
4. 不要复制扩展名为obj和exe的文件到T:盘中。
- 12 -
江苏省高等高等学校非计算机专业 39、学生
计算机基础知识和应用能力等级考试上机试卷
二级 C语言
(本试卷完成时间 70分钟)
一、改错题(16分)
【程序功能】
输入一个正确日期且年份在1900-9999范围内,计算并输出该日期是星期几。例如,
若输入2008-8-8,应输出Fri(星期五)。
提示:1900年1月1日是Mon(星期一)。能被4整除并且不能被100整除的年份是
闰年,能被400整除的年份也是闰年,其他年份则是平年。
【测试数据与运行结果】
第一次运行显示:input a date:
输入:1900-1-1
输出:Mon
第二次运行显示:i 40、nput a date:
输入:2008-8-8
输出:Fri
【含有错误的源程序】
#include 41、 long td=0;
for(i=1900;i 42、y,m,d)));
getch();
}
【要求】
1. 将上述程序录入到文件myf1.c中,根据题目要求及程序中语句之间的逻辑关系对程序
中的错误进行修改。
2. 改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或编辑
预处理命令,但不能增加其他语句 ,也不能删去整条语句。
3. 改正后的源程序(文件名为myf1.c)保存在T:盘根目录中供阅卷使用,否则不予评分。
二、编程题(24分)
【程序功能】
实现包含一个变元x的多项式合并同类项操作。
用结构数组存储一个多项式(一个数组元素存储多项式的一项)。结构数组元素的数据类型定义如下:
43、typedef struct
{ double coe; /* 系数 */
int exp; /* 变元x的指数*/
}TERM;
例如:将多项式-3x2+5x+0.5x2+x-1-2x按如下形式存储到一个结构数组中。
coe
-3
5
0.5
1
-1
-2
exp
2
1
2
1
0
1
【编程要求】
1. 编写函数int term(TERM a[],TERM b[],int n)实现以下功能:对a指向的数组中保存
2. 的多项式实施合并同类项操作,n为a数组中多项式的项数。将合并同类项后得到的多项式保存到b指向的数组 44、中。函数返回b数组中的多项式的项数。
3. 算法提示:可以先对a数组按exp值排序后再做合并同类项操作。
4. 编写函数main 实现以下功能:声明TERM型数组x和y,x数组用于保存合并同类项前多项式各项的系数和指数,y数组用于保存合并同类项后多项式各项的系数和指数。用x,y数组作为实参调用term函数。按所给输出格式将y数组中的数据输出到屏幕及文件myf2.out中。最后将考生本人的准考证输出到文件myf2.out。
【测试数据与运行结果】
测试多项式:-3x2+5x+0.5x2+x-1-2x
输出:-2.5x^2+4.0x^1-1.0
【要求】
1. 源程序文件为myf2. 45、c,输出结果文件名myf2.out。
2. 数据文件的打开、使用、关闭均使用C语言标准库中缓冲文件系统操作函数实现。
3. 源程序文件和运行结果均需要保存T:盘根目录中供阅卷使用。
4. 不要复制扩展名为obj和exe的文件到T:盘中。
2010年秋江苏二级C上机真题
江苏省高等学校非计算机专业学生
计算机基础知识和应用能力等级考试上机试卷(2010年秋)
二级C语言 (试卷代号C01)
(本试卷完成时间70分钟)
一、改错题(16分)
【程序功能】
46、 查找介于n1与n2(O 47、 1091 1103
1109 1123 1129 1153 1163 1187 1193
【含有错误的源程序】
#inelude 48、
size++;
}while(n<0);
for(i=0;i 49、 int prime(int)
{ int i;
for(i=2;i<=(int)sqrt(n);i++)
if(n%i==0)retum 0;
return 1;
}
void main()
{ int i,count=0,n1,n2;
scanf("%d%d",&n1,&n2);
for(i=n1;i<=n2;i++)
{ i 50、f(validate(int i)&&prime(int i))
{ count++;
printf("%d\t",i);
if(count%8==0)printf("\n");
}
}
}
【要求】
1. 将上述程序录入到文件myf1.C中,根据题目要求及程序中语句之间的逻辑关系对程序
中的错误进行修改。
2. 改错时,可以修改语句中的一部分内






