内容发布更新时间 : 2024/12/23 23:56:55星期一 下面是文章的全部内容请认真阅读。
江苏省高等高等学校非计算机专业学生 计算机基础知识和应用能力等级考试上机试卷
二级 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 输出:10774 days
【含有错误的源程序】 #include
#define leap(int y) ((y)%4==0&&(y)0!=0||(y)@0==0) struct d
{ int y,m,d; };
int days(struct d d1, struct d d2)
{ int mon[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}};
int i; long td=0; for(i=d1.y;i td- =mon[leap(d1.y)][i]; td-=d1.d-1; for(i=1;i td+=mon[leap(d2.y)][i]; td+=d2.d-1; return td; } void main() { struct d1,d2; puts(“\\n first date:”); scanf(“%d-%d-%d”,&d1.y,&d1.m,&d1.d); puts(“\\n second date:”); scanf(“%d-%d-%d”,&d2.y,&d2.m,&d2.d); printf(“%d days”,days(d1.y,d2.y)); getch(); 1 } 【要求】 1. 将上述程序录入到文件myf1.c中,根据题目要求及程序中语句之间的逻辑关系对程序 中的错误进行修改。 2. 改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或编译预 处理命令,但不能增加其他语句 ,也不能删去整条语句。 3. 改正后的源程序(文件名为myf1.c)保存在T:盘根目录中功阅卷使用,否则不予评分。 /*二 编程题(24分) 【程序功能】 输入两个自然数P和Q(P (1) P≤K (2) K*K+M*M=N*N 【编程要求】 1.编写函数int chlm(int p,int q,int a[ ][3])实现以下功能:查找K,M在[p,q]范围内取值且 满足以上条件的所有整数组(K,M,N)。若找到则将这些整数组保存到a指向的数组中, 函数返回找到的整数组的组数。若找不到则函数返回0。 2.编写函数main实现以下功能:声明二维数组a和变量p、q,输入两个自然数并保存到p和q中(p 输入: 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 江苏省高等高等学校非计算机专业学生 计算机基础知识和应用能力等级考试上机试卷 二级 C语言 (本试卷完成时间 70分钟) /*一 改错题(16分) 【程序功能】 函数dtoh实现将参数num的值表示为一个十六进制形式的字符串,并将该字符串存储在一个动态申请的存储区内,函数返回动态存储区的起始地址。 【测试数据及运行结果】 输入:1234 输出:4d2 含有错误的源程序*/ #include char dtoh(unsigned num) { char digits[]=”0123456789abcdef”; char *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() { char *p; unsigned n; scanf(“%u”,&n); p=dtoh(n); printf(“%s”,p); free(p); getch(); } 【要求】 1. 将上述程序录入到文件myf1.c中,根据题目要求及程序中语句之间的逻辑关系对程序 中的错误进行修改。 2. 改错时,可以修改语句中的一部内容,调整语句次序,增加少量的变量说明或编译 预处理命令,但不能增加其他语句,也不能删去整条语句。 3 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. 编写函数int find(int x[][4],int m,int n)实现以下功能:若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*903 302*406=203*604 304*403=403*304 306*402=603*204 312*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