各位报名2019年上海市高校计算机等级考试二级C语言程序设计的同学,10月26日就要考试了,你准备好了吗?
虽然好多同学很认真准备了,但是没见过考试题型到底长啥样,又没有往年的真题可以参考下,心里还是没底。前几天发了去年的一套真题,今天在这里,再给大家一套2015年的考试真题练练手。同样没有答案,不会的自己好好思考一下,翻书查资料再巩固下自己的知识。加油!祝大家考试顺利!
2015上海市高等学校计算机等级考试试卷
二级 C语言程序设计 ( C 场)
(本试卷考试时间 120 分钟)
一、单选题 ( 本大题 10 道小题 ,每小题 1.5 分,共15 分),从下面题目给出的A、B、C、D四个可供选择的答案中选择一个正确答案。
1.下面标识符中,可以作为合法变量名的是( )。
A.m@q
B.Mo_day
C.mn/5
D.char
2.设有如下语句:
int s,num;
s=1005;num=2;
则表达式(float)s/num的值是()。
A.502.000000
B.502
C.502.500000
D.503.000000
3.设有如下定义语句:
chara[10]="ABC";
则printf("%s" , a+1);的输出结果为( )。
A.ABC
B.C
C.AB
D.BC
4.下列语句的输出结果是( )。
inta=0123,b=0456;
printf("%o\n",b-a);
A.0456
B.0123
C.333
D.579
5.以下的for语句循环执行的次数是()。
for(x=0,y=0;(y!=20&&(x<20));x++);
A.无限次
B.不确定
C.20次
D.19次
6.关于局部变量,下列说法正确的是( )。
A.定义该变量的程序文件中的函数都可以访问
B.定义处以下的任何语句都可以访问
C.形式参数也是一种局部变量,可用于函数之间传递数据
D.定义在复合语句中的局部变量,允许在该复合语句外访问
7.有如下语句:
chars[20]="welcome";
char*ps=s;
则不能引用字母c的表达式是( )。
A.ps+3
B.s[3]
C.ps[3]
D.ps+=3,*ps
8.设有如下语句:
int x,*p=&x;
则*&x相当于( )。
A.x
B.p
C.&x
D.&*p
9.若在fopen函数中使用文件的方式是"ab",该方式的含义是( )。
A.为读/写打开一个文件
B.向二进制文件尾增加数据
C.为输出打开一个文本文件
D.为读/写建立一个新的二进制文件
10.建立了如下图所示的链表结构,p,q为指向结点的指针。p指向当前数据为M的结点,以下( )语句段能够输出p所指结点的直接后继结点的数据项。
A.printf("%c",p->next);
B.printf("%c",p->data);
C.q=p->next; printf("%c",q);
D.p = p->next;
printf("%c",p->data);
二、程序填空题 ( 本大题 2 道小题 ,每空 2.5 分,共20 分)。
1.程序功能:从键盘输入一个整数,查找是否在数组中有相同的数值,如果有,则输出该值在数组中的位置,如果没有,则输出“not find”,结果请输出到文件out2.txt中。
#include
int main(void)
{
inta[10]={12,-5,0,45,100,-89,33,260,-1,92},i,x;
FILE *fp;
fp=fopen("out2.txt",_____(1)_____);
printf("input x:");
scanf("%d",_____(2)_____);
for(i=0;i<10;i++)
if(x==a[i])
_____(3)_____;
if(i<10)
fprintf(fp,"the pos of x is:%d\n",i);
else
fprintf(fp,"no find \n");
_____(4)_____; /* 关闭文件 */
return 0;
}
2.程序功能:输入一个包含数字的字符串,把字符串中的数字字符转换成数字,存放到数组中并输出。例如:输入aBcD123e45XYZ682,输出结果为:12345682。
#include
int fun(char s[],int arr[],int num)
{
inti,n=0;
for(i=0;i
{
if(_____(1)_____ )
{
arr[n] = _____(2)_____;
n++;
}
}
return n;
}
int main(void)
{
charstr[80];
int arr[80];
intnum=0,n,i;
printf("Enter a string:\n");
gets(_____(3)_____ );
while(str[num]!='\0')
num++;
n = fun(_____(4)_____ );
for(i=0;i
printf("%d",arr[i]);
return 0;
}
三、操作题
(一)程序调试题(3小题,第1、2小题各3处错,第3小题4处错,每错误点3分,共30分)
1. 程序调试题1
调试要求:下列程序(C:\KS\C_2_1.c)包含3个错误,请按题中的功能要求,调试并修改该程序(在所修改语句后加/*******/字样的注释),使其运行能得到正确的结果。将程序结果(包括C_2_1.c文件和C_2_1.EXE文件)保存到目录C:\KS\中。
功能说明:输入某用户某一个月的用电度数,计算并输出该月份他应缴的电费。电费实施阶梯电价分段计算方法,具体为:月用电量不超过100度(含100度,以下同),单价为0.6元/度;月用电量超过100度但不超过200度的,超过部分的单价为0.7元/度;月用电量在200度以上的部分,单价为0.9元/度。
运行示例:
输入:请输入月用电量: 280
输出:电费为: 202.00
说明:月用电量280度中100度单价为0.6元,100度单价为0.7元,80度单价为0.9元。
含错误源程序:
#include
int main(void)
{
float quantity;money;
printf("请输入月用电量: ");
scanf("%f", &quantity);
if (quantity<=100) money=quantity*0.6;
else if (quantity<=200) money=100*0.6+(quantity-100) 0.7;
else money=100*0.6+ (quantity-200)*0.9;
printf("电费为: %.2f\n", money);
return 0;
}
2. 程序调试题2
调试要求:下列程序(C:\KS\C_2_2.c)包含3个错误,请按题中的功能要求,调试并修改该程序(在所修改语句后加/*******/字样的注释),使其运行能得到正确的结果。将程序结果(包括C_2_2.c文件和C_2_2.EXE文件)保存到目录C:\KS\中。
功能说明:自定义一个表示平面中点的结构体类型,在主函数中输入两个点的坐标,通过调用函数计算两个点的中点坐标,最后在主函数中输出计算的结果。
运行示例:
含错误源程序:
#include
struct
{ float x;
float y;
};
struct point mid( struct point a,struct point b)
{ struct point c;
c.x=(a.x+b.x)/2;
c.y=(a.y+b.y)/2;
return c;
}
int main(void)
{ struct point p1,p2,p0(0,0);
printf("请输入第一个点坐标:");
scanf("%f,%f",&p1.x,&p1.y);
printf("请输入第二个点坐标:");
scanf("%f,%f",&p2.x,&p2.y);
p0=mid(p1,p2);
printf("中点坐标为:(%6.1f,%6.1f)\n ", p0);
return 0;
}
3. 程序调试题3
调试要求:下列程序(C:\KS\C_2_3.c)包含4个错误,请按题中的功能要求,调试并修改该程序(在所修改语句后加/*******/字样的注释),使其运行能得到正确的结果。将程序结果(包括C_2_3.c文件和C_2_3.EXE文件)保存到目录C:\KS\中。
功能说明:输入两个由整型数构成的集合(元素个数均为5)分别放到数组A和B中,求这两个集合的并集(并集的元素由两个集合中的所有元素构成,但重复的元素只取一个),最后输出并集中的元素。
运行示例:
含错误源程序:
#include
int join(int s1[],int s2[],ints3[])
int main(void)
{
int a[5],b[5],c[10];
int i,n;
printf ("请输入第一个集合内容,5个整型数\n");
for(i=0;i<5;i++)
scanf("%d",&a[i]);
printf ("请输入第二个集合内容,5个整型数\n");
for(i=0;i<5;i++)
scanf("%d",&b[i]);
n=join(a,b,c);
printf ("A,B并集元素为:\n");
for(i=0;i<=n;i++)
printf("%4d", &c[i]);
printf("\n");
return 0;
}
int join(int s1[],int s2[],ints3[])
{ int i ,j ,k=5;
for(i=0;i<5;i++)
{
s3[i]=s1[i];
for(j=0;j<5;j++)
if (s2[i]==s1[j]) return ;
if(j>=5) s3[k++]=s2[i] ;
}
return k;
}
(二)编程题(2小题,共35分,其中第1小题15分,第2小题20分)
1.编程题1
编程要求:请按题中的功能要求,编写程序并能得到正确的结果。将程序结果(包括C_4_1.c文件和C_4_1.EXE文件)保存到目录C:\KS\中。
程序功能:按示例格式完成以下要求。
(1) 输入10个整数(存入数组a),再输入整数x。
(2) 数组元素向左偏移x个位置后循环输出。
运行示例:
输入:22 55 66 99 44 33 77 11 0 88 3
输出:99 44 33 77 11 0 88 22 55 66
说明:输入x=3,先输出a[3]至a[9],再输出a[0]至a[2]
2.编程题2
编程要求:请按题中的功能要求,编写程序并能得到正确的结果。将程序结果(包括C_4_2.c文件和C_4_2.EXE文件)保存到目录C:\KS\中。
程序功能:按示例格式完成以下要求(验证西西弗斯串数学黑洞:任意一个数字串,连续进行特定运算,经有限步骤后,都无法逃逸123这个黑洞)。
(1) 输入整数n,如果n为零、负数或超过9位数,输出"Error"并结束运行。
(2) 拆分整数n的各个位数,统计各位数中的偶数位数、奇数位数和总位数,按"偶数位数-奇数位数-总位数"顺序组成一个新的整数(仍存为n),输出生成的新数。
(3) 如果生成的新数等于123,则结束运行,否则重复步骤(2)与(3)。
运行示例1:
输入:1507
输出:[1507] {1}134 {2}123
说明:原始数字为1507,第1次生成的数为134,第2次生成的数为123。示例中{1}与{2}为生成的次数标记,[]、{}与间隔空格都必须保留。
运行示例2:
输入:0
输出:Error
说明:输入为0、负数或超过9位数,输出"Error"。