2020年上海市高等学校信息技术水平考试试卷二级 C程序设计(B 场)
(本试卷考试时间 120 分钟)
一、单选题 ( 本大题 10 道小题 ,每小题 1.5 分,共 15 分),从下面题目给出的A、B、C、D四个可供选择的答案中选择一个正确答案。
1.下列描述中错误的是:(_____)
A.C语言是一种结构化程序设计语言。
B.使用顺序、选择、循环三种基本结构构成的程序只能解决简单问题。
C.结构化程序设计提倡不滥用goto语句。
D.结构化程序设计可以采用自顶向下、逐步细化的方式。
2.C语言中,用户可以使用的标识符是:(______)
A.2019-nCov
B.char
C.user.name
D.myInt
3.设有定义:int x=1, y=2; 则下列语句中错误的是:(_____)
A.x *= y-4;
B.x = x?x:y;
C.x = y>=0;
D.(x+1)++;
4.若变量x,y都是int型数,以下表达式中不能正确表示数学关系|x-y|<10的是:(______)
A.fabs(x-y) < 10
B.(x-y)>-10 && (x-y)<10
C.(x-y)<-10 || (x-y)>10
D.(x-y)*(x-y) < 100
5.设有定义: int i; char s; 以下代码段和选项中功能相同的是:(_____)
switch(s)
{
case 'a': i=1; break;
case 'b': i=2; break;
}
A.i=(s=='a' ? 1 : 2);
B.if (s=='a') i=1; else i=2;
C.if (s=='a') i=1; if (s=='b') i=2;
D.i=2; if (s=='a') i=1;
6.设有定义: int x; 以下代码段循环体执行次数是:(_____)
x = 100;
while ( x < 100 )
x = x+3 ;
A.死循环
B.2次
C.1次
D.0次
7.以下程序运行后,输出结果是:(_____)
int fun(int x)
{
static int a=3;
a=a+x;
return(a);
}
int main(void)
{
int k=1, m=2, n;
n=fun(k);
n=fun(m);
printf("%d\n",n);
return 0;
}
A.3
B.4
C.6
D.9
8.下列语句中,正确的是:(_____)
A.char str[80]; str = "program";
B.char str[ ]; str = "program";
C.char str1[80], str2[ ] = "program"; str1 = str2;
D.char str[ ]= { 'p', 'r', 'o', 'g', 'r', 'a', 'm', '\0' };
9.以下代码段运行后,正确的输出值是:(_____)
int a[10]={10,20,30,40,50,60,70,80,90,100 },p1=a,p2;
p2=&a[5];
printf("%d",p2-p1);
A.60
B.50
C.6
D.5
- 设已建立以下链表结构,指针p,s分别指向如图所示节点,则可以将s所指节点插入到链表末尾的语句序列是:(_____)
A.p=p->next; s->next=p; p->next=s;
B.s->next= NULL; p=p->next; p->next=s;
C.p=p->next; p->next=s->next; s->next=p;
D.p=(p).next; (p).next=(s).next; (s).next=p;
二、程序填空题 ( 本大题 2 道小题 ,每空 2.5 分,共 20 分)。
- 程序功能:假设一个数组中有10个数据,计算该数组的标准差。
标准差的计算公式:
标准差= (其中:x0是x1,x2,...... xn的平均值)
说明:标准差是一组数据平均值分散程度的一种度量,一个较大的标准差,代表大部分数值和其平均值之间差异较大;一个较小的标准差,代表这些数值较接近平均值。
运行示例(无输入):
#include <stdio.h>
#include <___(1)___> //填空(1)
double fun_sum(double x[])
{ //函数fun_sum的功能是计算x数组的标准差
double sum, total=0,avg,std;
int i ;
sum = ___(2)___; //填空(2)
for (i=0; i<10; i++)
sum += x[i];
avg = sum/10;
for (i=0; i<10; i++)
total += (x[i]-avg)*(x[i]-avg);
std = sqrt(___(3)___); //填空(3)
return std;
}
int main(void)
{
double xx[10]={8,2.5,13,15,55,87.5,27,19,34.5,90};
printf("%f", ___(4)___); //填空(4)
return 0;
}
- 程序功能:输入一个长度小于80的字符串,查找其中的大写字母,并按原输入的顺序生成一个新的字符串输出到屏幕,同时保存到文件file.txt中。
运行示例:
#include <stdio.h>
#include <string.h>
int main(void)
{
char s[80],t[80];
int i,j=0;
FILE *fp;
gets(s);
fp=fopen("file.txt","w");
for(i=0; i< ___(1) ; i++) //填空(1)
if(s[i]>='A' ___(2) s[i]<='Z') //填空(2)
{
t[j]=s[i];
j++;
}
t[j]= ___(3) ; //填空(3)
puts(t);
fprintf(fp, "___(4) ",t); //填空(4)
fclose(fp);
return 0;
}
三、操作题
(一)程序调试题(3小题,第1、2小题各3处错,第3小题4处错,每改正1处得3分,共30分)
- 程序调试题1
调试要求:下列程序包含3个错误,请按题中的功能要求,调试并修改该程序(在所修改语句后加/*******/字样的注释),使其运行能得到正确的结果。将结果(包括B_2_1.c文件和B_2_1.exe文件)保存到目录C:\KS\中。
功能说明:交通堵塞时骑自行车快还是打车快?假设在交通堵塞时,打车花费时间10分钟,汽车每秒行走12米。 而骑自行车开锁、锁车花费时间1分钟,每秒行走3米。 请判断走不同的距离去办事,骑车快还是打车快。
运行示例1:
运行示例2:
带错误源程序:
#include <stdio.h>
#include <math.h>
#define EPS=1.e-8
int main(void)
{
float distance, bike, taxi;
printf("请输入距离:");
scanf("%d",&distance);
bike=1*60+distance/3.;
taxi=10*60+ distance/12.;
if(fabs(taxi-bike) < EPS)
printf("Same time\n");
else (taxi<bike)
printf("Taxi Fast\n");
else
printf("Bike Fast\n");
return 0;
}
- 程序调试题2
调试要求:下列程序包含3个错误,请按题中的功能要求,调试并修改该程序(在所修改语句后加/*******/字样的注释),使其运行能得到正确的结果。将结果(包括B_2_2.c文件和B_2_2.exe文件)保存到目录C:\KS\中。
功能说明:利用泰勒级数
计算cos(x)的值(x是弧度),要求最后一项的绝对值小于10-5,并统计出此时累加了多少项。
运行示例1:
运行示例2:
带错误源程序:
#include<stdio.h>
#include<math.h>
int count=1;
double cos_x(x) ;
int main()
{
float x;
double cosx;
scanf("%f",&x);
cosx=cos_x(x);
printf("cos(%.6f)=%lf count=%d\n",x,cosx,count);
return 0;
}
double cos_x(float x)
{
double sum =1,t=1;
int n=0;
while(fabs(t)<=1.e-5)
{
n=n+2;
t=- x*x/n/(n-1);
sum=sum+t;
count++;
}
return(sum);
}
- 程序调试题3
调试要求:下列程序包含4个错误,请按题中的功能要求,调试并修改该程序(在所修改语句后加/*******/字样的注释),使其运行能得到正确的结果。将结果(包括B_2_3.c文件和B_2_3.exe文件)保存到目录C:\KS\中。
功能说明:本程序定义一个电影的结构体类型,包括电影名和群众评分两个成员。结构体数组中已经存放了5部电影名。首先输入5部电影的群众评分,找出群众评分最高的电影,并输出其电影名和群众评分。
运行示例
带错误源程序:
#include <stdio.h>
int n=5;
struct film
{
char name[80]; //电影名
float score; //群众评分
};
int main(void)
{
int i,result=0;
struct f[5]= { {"阿甘正传"}, {"泰坦尼克号"},
{"当幸福来敲门"},{"蝴蝶效应"},{"罗马假日"}
};
printf("输入%d部电影群众评分:\n",n);
for (i=0; i<n; i++)
{
printf("电影 %s群众评分: ",f[i].name);
scanf("%f",&f[i].score);
}
for (i=0; i<=n; i++)
{
printf("\t%-12s%6.2f\n",f[i].name,f[i].score);
if(f[result].score>f[i].score)
result=i;
}
printf("群众评分最高的电影为:%s,其评分为:%6.2f\n",name,score);
return 0;
}
(二)编程题(2小题,第1小题15分,第2小题20分,共35分)
1.编程题1
编程要求:请按题中的功能要求,编写程序并能得到正确的结果。将程序结果(包括B_4_1.c文件和B_4_1.exe文件)保存到目录C:\KS\中。
程序功能:垃圾分类。某公司有A楼,B楼两幢办公大楼,管理人员要求对大楼产生的垃圾袋上贴标签,标签上是一个2位正整数,十位数字表示大楼名称,其中,1表示A楼,2表示B楼,个位上数字表示垃圾类型,如下表所示:
输入一个2位正整数,如果输入的数据不符合要求,则输出"输入的整数不是有效标签!";否则,输出大楼名及其垃圾类型。
运行示例1:
运行示例2:
运行示例3:
运行示例4:
2.编程题2
编程要求:请按题中的功能要求,编写程序并能得到正确的结果。将程序结果(包括B_4_2.c文件和B_4_2.exe文件)保存到目录C:\KS\中。
程序功能:奇偶校验。给用户输入的由0和1组成的字符串尾部添加校验位,用户输入一个由0和1组成的字符串到字符数组(数组的长度为100),若其中字符1的个数为奇数,则在原字符串的末尾添加一个1,否则添加一个0。并输出添加0或1校验后的字符串。
输入格式: 输入长度小于100由0和1组成的字符串
输出格式: 输出添加了校验后的字符串
运行示例1:
运行示例2: