整理历届C语言上海市等级试题及参考答案.docx
《整理历届C语言上海市等级试题及参考答案.docx》由会员分享,可在线阅读,更多相关《整理历届C语言上海市等级试题及参考答案.docx(8页珍藏版)》请在冰豆网上搜索。
整理历届C语言上海市等级试题及参考答案
上海市高等学校计算机等级考试试卷
二级(C程序设计)
(本试卷答卷时间为120分钟)
试题一(28分,每小题4分)
解答下列各小题,把解答写在答卷纸的对应栏内。
(1)试写出下列命题的C语言表达式。
当字符变量m取英文字母时表达式的值为真。
(2)执行下述语句后,a,b,m,n变量的值分别是什么?
inta=1,b=2,c=3,d=4,m=5,n=6;
a=(m=a>b)&&(n=c>d)||++a==b--;
(3)执行下列语句后的输出结果是什么?
chars[81]="a_string",t[81];
strcpy(t,s);
printf("%d;%d\n%s\n",sizeof(s),strlen(s),t+2);
(4)写出下列C语句的功能。
#include
dogets(s);
while(strcmp(s,"passwd"));
(5)执行下列程序后的输出结果是什么?
#defineSQR(x)x*x
voidmain()
{
ints=8,a=2,b=3;
s=SQR(a+b)*4;
printf(“s=%d\n”,s);
}
(6)设有定义structdate{
intday;
charmonth;
intyear;
}dd,*pd=ⅆ
试写出引用结构变量dd的成员dd.day的其他两种描述形式。
(7)设有如下程序段:
inta[4]={0,4,5,13},*p;
p=&a[2];
printf("++(*p)=%d\n",++(*p));
printf("*--p=%d\n",*--p);
printf("*p++=%d\n",*p++);
printf("%d\n",a[0]);
试写出执行该程序段后的输出结果。
试题二(12分,每小题6分)
阅读下列程序,把程序的输出结果写在答卷纸的对应栏内。
(1)【程序2.1】
intk[]={65,30,3,123,831,54};
intj,m1=32767,m2=0,n1,n2;
for(j=0;j<6;j++)
if(m1>k[j])
{m1=k[j];
n1=j;}
elseif(m2{m2=k[j];n2=j;}printf("m1=%d,n1=%d\n",m1,n1);printf("m2=%d,n2=%d\n",m2,n2);}(2)【程序2.2】#includevoidfunc(int*x,inty){statick=3;y=*x+y;*x=y%k;k++;printf("*x=%d,y=%d\n",*x,y);}voidmain(){intx=12,y=5;func(&x,y);printf("x1=%d,y1=%d\n",x,y);func(&y,x);printf("x2=%d,y2=%d\n",x,y);}试题三(12分,每小题6分)下列程序中都有三个错误,按题中的计算要求,纠正错误,并以“将#XX”行改为“YYYY”的形式进行解答,把解答写在答卷纸的对应栏内。代码左边的#1、#2、…是附加的行号。(1)用冒泡排序法求出由21个整数组成的数组的中间值,并输出所有大于中间值的偶数。【程序3.1】#0#include#1voidmain()#2{#3inti,j,temp;#4intarray[21];#5for(i=0;i<21;i++)scanf("%d",array[i]);#6for(i=0;i<21;i++)#7for(j=0;j<20;j++)#8if(array[j]>array[j+1])#9{#10temp=array[j];#11array[j]=array[j+1];#12array[j+1]=temp;#13}#14printf("%d",array[10]);#15for(i=0;i<10;i++)#16if(array[i]/2==0)printf("%d",array[i]);#17}(2)用下面的方法可以计算y年m月d日是星期几(w):w=[y-1+(y-1)/4–(y-1)/100+(y-1)/400+y_d(y,m,d)]%7其中,符号/表示计算整数商,%表示计算余数,y_d(y,m,d)表示y年m月d日是从同年元旦算起到该日的总天数。【程序3.2】#1intday_tab[]={0,31,28,31,30,31,30,31,31,30,31,30,31};#2inty_d(inty,intm,intd){#3inti,all;#4y=y%4==0&&y%100||y%400==0;#5for(i=0;i<=m;i++)all+=day_tab[i];/*统计某月份(m月)之前的天数*/#6all+=y;/*对闰年考虑2月份是29天*/#7returnall+d;#8}#9voidmain(){#10inty=2005,m=7,d=11,w;#11w=y-1+(y-1)/4–(y-1)/100+(y-1)/400+y_d(y,m,d);#12w%=7;#13printf("%d年%d月%d日是星期%d\n",y,m,d,w);#14}试题四(18分,每小题9分)按指定的要求编写程序段,把解答写在答卷纸的对应栏内。(1)输入无符号整型范围内的整数,求出它的位数以及各位数字之和。(2)将长度为n的字符串s分成两个子串,前m(任意值)个字符生成子串s1,后n-m个字符生成子串s2。约定:当m≥n时,s1等于原串,s2为空串;当m≤0时,s1为空串,s2等于原串。编写程序段时,可以使用库函数strcpy。试题五(15分,每个空格3分)阅读下列问题描述和相应的程序,把应填入其中(n)处的内容写在答卷纸的对应栏内。【问题描述】本程序运行时,从键盘不断接收用户输入的字符串并进行处理,直到用户输入的字符串为“end”时终止。对用户输入的每个字符串的处理是:将字符串内的每一个十进制数字字符置换成下列表格中右边所对应的一个字符串(所有其他字符不变),然后将转换的结果显示在屏幕上;并分别计算每个数字的置换次数。十进制数字字符置换成0(Zero)1(One)2(Two)3(Three)4(Four)5(Five)6(Six)7(Seven)8(Eight)9(Nine)例如,若用户输入的字符串为Page112-Line3,则程序5的输出是:Page(One)(One)(Two)-Line(Three)数字0到9的置换次数分别是0211000000【程序5】#includevoidmain(){char*table[]={"(Zero)","(One)","(Two)","(Three)","(Four)","(Five)","(Six)","(Seven)","(Eight)","(Nine)"};charstr1[64],str2[255],*p;intj,k,n,no[10];for(;;){printf("Input:");gets((1));/*读入字符串*/for(k=0;k<10;k++)no[k]=0;if(strcmp(str1,"end")==0)(2)_;/*输入end时程序运行终止*/for(j=k=0;str1[j]!='\0';++j)/*对输入字符串进行扫描*/{if((3))/*当前字符不是数字字符*/{str2[k++]=str1[j];continue;}/*当前字符是数字字符*/n=str1[j]-'0';no[n]++;for(p=table[n];*p!='\0';++p)str2[k++]=(4);/*把要置换的字符串逐个连接到str2上*/}str2[k]=(5);/*置字符串结束符于str2末尾*/printf("%s\n",str2);for(k=0;k<10;k++)printf("no[%d]=%d\t",k,no[k]);1.环境影响评价依据的环境标准体系}安全评价的基本原则是具备国家规定资质的安全评价机构科学、公正和合法地自主开展安全评价。}试题六(15分,每个空格3分)阅读下列问题描述和相应的C程序,把应填入其中(n)处的内容写在答卷纸的对应栏内。【问题描述】建立一个带有头结点的单向链表,并将存储在字符串s中的字符依次转存到链表的各个结点中。然后,按相反顺序输出链表内容。 (4)是否满足环境功能区划和生态功能区划标准。【程序6】#include发现规划存在重大环境问题的,审查时应当提出不予通过环境影响报告书的意见;structnode{C.可能造成较大环境影响的建设项目,应当编制环境影响报告书chardata;structnode*next;2)预防或者减轻不良环境影响的对策和措施。主要包括预防或者减轻不良环境影响的政策、管理或者技术等措施。};(1)是否符合环境保护相关法律法规。(1)create_list(char*s){/*函数定义首部,确定函数值的返回类型*/structnode*head,*p,*q;为了有别于传统的忽视环境价值的理论和方法,环境经济学家把环境的价值称为总经济价值(TEV),包括环境的使用价值和非使用价值两个部分。head=(structnode*)malloc(sizeof(structnode));2.环境保护行政法规p=q=head;2.环境影响评价技术导则while(*s!='\0'){p=(structnode*)malloc(sizeof(structnode));p->data=(2);/*字符串中的字符存到链表中*/q->next=p;q=(3);/*工作指针q相应后移,为下一个字符转存作准备*/s++;}p->next=NULL;return(4);/*返回所建立的链表*/}voidpr_in_reverse_order(structnode*p)/*采用递归算法定义*/{if(p!=NULL){pr_in_reverse_order(p->next);/*先按相反顺序输出除去第一个节点后的链表内容*/printf("%2c",(5));/*输出第一个节点内容*/}}voidmain(){charstr[]="linklist";structnode*head;head=create_list(str);pr_in_reverse_order(head->next);}
{m2=k[j];
n2=j;}
printf("m1=%d,n1=%d\n",m1,n1);
printf("m2=%d,n2=%d\n",m2,n2);
(2)【程序2.2】
voidfunc(int*x,inty)
statick=3;
y=*x+y;
*x=y%k;
k++;
printf("*x=%d,y=%d\n",*x,y);
intx=12,y=5;
func(&x,y);
printf("x1=%d,y1=%d\n",x,y);
func(&y,x);
printf("x2=%d,y2=%d\n",x,y);
试题三(12分,每小题6分)
下列程序中都有三个错误,按题中的计算要求,纠正错误,并以“将#XX”行改为“YYYY”的形式进行解答,把解答写在答卷纸的对应栏内。
代码左边的#1、#2、…是附加的行号。
(1)用冒泡排序法求出由21个整数组成的数组的中间值,并输出所有大于中间值的偶数。
【程序3.1】
#0#include
#1voidmain()
#2{
#3inti,j,temp;
#4intarray[21];
#5for(i=0;i<21;i++)scanf("%d",array[i]);
#6for(i=0;i<21;i++)
#7for(j=0;j<20;j++)
#8if(array[j]>array[j+1])
#9{
#10temp=array[j];
#11array[j]=array[j+1];
#12array[j+1]=temp;
#13}
#14printf("%d",array[10]);
#15for(i=0;i<10;i++)
#16if(array[i]/2==0)printf("%d",array[i]);
#17}
(2)用下面的方法可以计算y年m月d日是星期几(w):
w=[y-1+(y-1)/4–(y-1)/100+(y-1)/400+y_d(y,m,d)]%7
其中,符号/表示计算整数商,%表示计算余数,y_d(y,m,d)表示y年m月d日是从同年元旦算起到该日的总天数。
【程序3.2】
#1intday_tab[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
#2inty_d(inty,intm,intd){
#3inti,all;
#4y=y%4==0&&y%100||y%400==0;
#5for(i=0;i<=m;i++)all+=day_tab[i];/*统计某月份(m月)之前的天数*/
#6all+=y;/*对闰年考虑2月份是29天*/
#7returnall+d;
#8}
#9voidmain(){
#10inty=2005,m=7,d=11,w;
#11w=y-1+(y-1)/4–(y-1)/100+(y-1)/400+y_d(y,m,d);
#12w%=7;
#13printf("%d年%d月%d日是星期%d\n",y,m,d,w);
#14}
试题四(18分,每小题9分)
按指定的要求编写程序段,把解答写在答卷纸的对应栏内。
(1)输入无符号整型范围内的整数,求出它的位数以及各位数字之和。
(2)将长度为n的字符串s分成两个子串,前m(任意值)个字符生成子串s1,后n-m个字符生成子串s2。
约定:
当m≥n时,s1等于原串,s2为空串;当m≤0时,s1为空串,s2等于原串。
编写程序段时,可以使用库函数strcpy。
试题五(15分,每个空格3分)
阅读下列问题描述和相应的程序,把应填入其中(n)处的内容写在答卷纸的对应栏内。
【问题描述】
本程序运行时,从键盘不断接收用户输入的字符串并进行处理,直到用户输入的字符串为“end”时终止。
对用户输入的每个字符串的处理是:
将字符串内的每一个十进制数字字符置换成下列表格中右边所对应的一个字符串(所有其他字符不变),然后将转换的结果显示在屏幕上;并分别计算每个数字的置换次数。
十进制数字字符
置换成
0
(Zero)
1
(One)
2
(Two)
3
(Three)
4
(Four)
5
(Five)
6
(Six)
7
(Seven)
8
(Eight)
9
(Nine)
例如,若用户输入的字符串为
Page112-Line3,
则程序5的输出是:
Page(One)(One)(Two)-Line(Three)
数字0到9的置换次数分别是0211000000
【程序5】
{char*table[]={"(Zero)","(One)","(Two)","(Three)","(Four)",
"(Five)","(Six)","(Seven)","(Eight)","(Nine)"};
charstr1[64],str2[255],*p;
intj,k,n,no[10];
for(;;){
printf("Input:
");
gets(
(1));/*读入字符串*/
for(k=0;k<10;k++)no[k]=0;
if(strcmp(str1,"end")==0)
(2)_;/*输入end时程序运行终止*/
for(j=k=0;str1[j]!
='\0';++j)/*对输入字符串进行扫描*/
if((3))/*当前字符不是数字字符*/
{str2[k++]=str1[j];
continue;
/*当前字符是数字字符*/
n=str1[j]-'0';
no[n]++;
for(p=table[n];*p!
='\0';++p)
str2[k++]=(4);/*把要置换的字符串逐个连接到str2上*/
str2[k]=(5);/*置字符串结束符于str2末尾*/
printf("%s\n",str2);
for(k=0;k<10;k++)printf("no[%d]=%d\t",k,no[k]);
1.环境影响评价依据的环境标准体系}
安全评价的基本原则是具备国家规定资质的安全评价机构科学、公正和合法地自主开展安全评价。
试题六(15分,每个空格3分)
阅读下列问题描述和相应的C程序,把应填入其中(n)处的内容写在答卷纸的对应栏内。
建立一个带有头结点的单向链表,并将存储在字符串s中的字符依次转存到链表的各个结点中。
然后,按相反顺序输出链表内容。
(4)是否满足环境功能区划和生态功能区划标准。
【程序6】
发现规划存在重大环境问题的,审查时应当提出不予通过环境影响报告书的意见;structnode{
C.可能造成较大环境影响的建设项目,应当编制环境影响报告书chardata;
structnode*next;
2)预防或者减轻不良环境影响的对策和措施。
主要包括预防或者减轻不良环境影响的政策、管理或者技术等措施。
};
(1)是否符合环境保护相关法律法规。
(1)create_list(char*s){/*函数定义首部,确定函数值的返回类型*/
structnode*head,*p,*q;
为了有别于传统的忽视环境价值的理论和方法,环境经济学家把环境的价值称为总经济价值(TEV),包括环境的使用价值和非使用价值两个部分。
head=(structnode*)malloc(sizeof(structnode));
2.环境保护行政法规p=q=head;
2.环境影响评价技术导则while(*s!
='\0')
{p=(structnode*)malloc(sizeof(structnode));
p->data=
(2);/*字符串中的字符存到链表中*/
q->next=p;
q=(3);/*工作指针q相应后移,为下一个字符转存作准备*/
s++;
p->next=NULL;
return(4);/*返回所建立的链表*/
voidpr_in_reverse_order(structnode*p)/*采用递归算法定义*/
if(p!
=NULL)
{pr_in_reverse_order(p->next);/*先按相反顺序输出除去第一个节点后的链表内容*/
printf("%2c",(5));/*输出第一个节点内容*/
charstr[]="linklist";
structnode*head;
head=create_list(str);
pr_in_reverse_order(head->next);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1