四川省二级C语言23次考试试题文档格式.docx
《四川省二级C语言23次考试试题文档格式.docx》由会员分享,可在线阅读,更多相关《四川省二级C语言23次考试试题文档格式.docx(25页珍藏版)》请在冰豆网上搜索。
(共85分)
一、单项选择题(每小题1分,共10分)
1.若变量已定义并赋值,下列符合C语法的表达式是(16)
16(A)a:
=b+1(B)a=b=c+2
(C)int18.5%3(D)a=a+7=c+b
2.以下程序输出的结果是(17)
voidmain()
{chara[]="
HelloChina"
;
s[5]=0;
puts(s);
}
17(A)Hello(B)China(C)HelloChina(D)O
3.有以下程序
#include<
malloc.h>
{char*p,*q;
p=(char*)malloc(sizeof(char)*20);
q=p;
scanf("
%s%s"
p,q);
printf("
%s,%s\n"
若输入abcdef<
回车>
,则输出为(18)。
18(A)def,def(B)abc,def(C)abc,d(D)d,d
4.下列函数形式正确的是(19)。
19(A)doublefun(intx,inty)(B)fun(intx,y)
{z=x+y;
{intz;
returnz;
}returnz;
(C)fun(x,y)(D)doublefun(intx,inty)
{intx,y;
{doublez;
doublez=x+y;
z=x+y;
5.下列有关类和对象的说法不正确的是(20)。
20(A)对象是类的一个实例
(B)一个类只能有一个对象
(C)任何一个对象只能属于一个具体的类
(D)类与对象的关系和数据类型与变量的关系相似
6.派生类的对象对它的基类成员中(21)是可以访问的。
21(A)公有继承的公有成员(B)公有继承的私有成员
(C)保护继承的公有成员(D)私有继承的公有成员
7.已知学生的结构体描述如下:
structstudents
{intno;
charname[10];
charsex;
struct
{intday;
intmonth;
intyear;
}birth;
intscore;
};
用学生结构体定义了变量w:
structstudentsw;
设变量w中的"
生日"
是"
1982年5月29日"
下列对生日的正确赋值方法是(22)。
22(A)day=29;
(B)w.day=29
month=5;
w.month=5;
year=1982;
w.year=1982;
(C)w.birth.day=29;
(D)birth.day=29;
w.birth.month=5;
birth.month=5;
w.birth.year=1982;
birth.year=1982;
8.假定p1和p2是已赋值的int型指针,则下面有关运算中,(23)是非法的。
23(A)(p1+=4)=p2(B)p2=10-p1;
(C)if(p1!
=p2)printf("
!
="
);
(D)p1+=(p2-p1);
9.关于C/C++语言,以下叙述正确的是(24)。
24(A)C是面向过程的程序设计语言,C++不支持面向过程的程序设计
(B)C语言支持图形设计,C++不支持
(C)C程序由函数组成,而C++程序由类组成
(D)C是C++的子集
10.设有以下语句:
charx=3,y=6,z;
z=x^y<
<
2;
则z的值是(25)。
25(A)00010100(B)00011100
(C)00011011(D)00011000
二、读程序回答问题(每个选择3分,共45分)
1.下列程序运行的结果为(26)。
#include<
stdio.h>
{
inta=2,b=-1,c=2;
if(a<
b)
if(b<
c)c=0;
elsec+=1;
%d"
c);
26(A)3(B)2(C)1(D)0
2.下列程序运行的结果为(27)。
{
inta=15,b=21,m=0;
switch(a%3)
case0:
m++;
break;
case1:
switch(b%2)
default:
m);
27(A)1(B)2(C)3(D)4
3.以下程序运行后,文件test中的内容为(28)。
string.h>
voidfun(char*fname,char*st)
FILE*fp;
inti;
fp=fopen(fname,"
w"
for(i=0;
i<
strlen(st);
i++)
fputc(st[i],fp);
fclose(fp);
fun("
test"
"
world"
hello"
}
28(A)world(B)worldhello(C)helloworld(D)hello
4.读下列程序:
iostream.h>
unionvalue
{charch;
intn;
doublef;
}Data;
cout<
"
sizeof(Data)="
sizeof(Data)<
endl;
Data.ch='
a'
Data.ch<
Data.n=100;
Data.h<
Data.f=78.168;
Data.f<
①value是(29)。
29(A)共用体变量名(B)共用体名
(C)结构体变量名(D)结构体名
②程序的运行结果是(30)。
30(A)sizeof(Data)=13(B)sizeof(Data)=8
aa
100100
78.16878.168
(C)13(D)8
5.读下列程序:
staticcharstr[50]="
485057ehk105101"
*p=str;
intsum1=0,sum2=0;
while(*p!
='
\0'
)
if(*p>
=48&
&
*p<
=57)
sum1++;
elseif(*p>
=101&
=107)
sum2++;
else;
p++;
sum1<
'
'
sum2<
①程序的运行结果是(31)。
31(A)3,2(B)2,3(C)3,12(D)12,3
②while(*p!
)与(32)功能相同。
32(A)while(*p!
=0)(B)while(*p=0)
(C)while(*p<
>
)(D)while(*p!
0)
6.读下列程序:
voidfun(char*w,intn)
chart,*s1,*s2;
s1=w;
s2=w+n-1;
while(s1<
s2){t=*s1++;
*s1=*s2--;
*s2=t;
char*p;
p="
1234567"
fun(p,strlen(p));
puts(p);
①输出结果是(33)。
33(A)7654321(B)1711717(C)1714171(D)1234567
②若把程序中的语句:
while(s1<
}改写成:
while(s1<
s2){t=*s1;
*s1=*s2;
s1++;
s2++;
},则输出结果是(34)。
34(A)7654321(B)1711717(C)1714171(D)1234567
7.下列程序运行结果是(35)。
#defineX5
#defineYX+1
#defineZY*X/2
inta;
a=Y;
%d"
Z);
%d\n"
--a);
35(A)76(B)126(C)125(D)75
8.读下列程序:
intx;
voidsub(int*s,intx)
staticintt=0;
x+=s[t];
t++;
inta[]={3,8,4,2},i;
intx=0;
4;
i++)
sub(a,x);
%3d"
x);
①程序的执行结果是(36)。
36(A)3842(B)3111517
(C)0000(C)2483
②若把程序第二行的语句"
intx;
删除,运行结果是(37)。
37(A)3842(B)3111517
9.读下列程序分析运行结果
char*cat(char*str1,char*str2)
char*pt;
for(pt=str1;
*pt!
pt++);
while(*str2!
*pt++=*str2++;
return(pt);
char*p,s1[30]="
210"
s2[30]="
45"
p=cat(s1,s2);
p-s1);
①主函数中,执行第一个输出函数后的结果为(38)。
38(A)5(B)6(C)7(D)8
②主函数中,执行第二个输出函数后的结果为(39)。
39(A)5(B)6(C)7(D)8
10.下列程序的运行结果是(40)。
char*str[]={"
One"
Two"
Three"
Four"
};
char**ptr=str;
i<
3;
i++)
%s"
(ptr+1)[i]);
40(A)newohree(B)Two
(C)TwoThreeFour(D)指针运算非法,无输出
注意:
①请把下面“程序填空”中各小题答案写在主观题答题纸上
②每一个空只填一个语句或一个语句所缺的部分内容
三、程序填空(每空2分,共30分)
1.以下程序可把输入的十进制数以十六进制的形式输出。
charb[17]="
0123456789ABCDEF"
intc[64],d,i=0,base=16;
longn;
%ld"
&
n);
do{
c[i]=①;
i++;
n=n/base;
}while(n!
=0);
for(i--;
i>
=0;
--i)
d=②;
%c"
③);
\n"
2.有一个数是43634,其左右对称,求比它大的对称数中最小的那个。
longinti=43634,j;
intcount,ch[10];
do
j=i;
count=0;
while(j)
ch[count]=j%10;
j=①;
count++;
if(②)
}while
(1);
%ld\n"
3.以下程序能统计并输出1至100之间所有能被3整除但不能被7整除的所有正整数。
#defineM100
voidfun(intm,int*p,int*t)
inti,num=0;
for(i=1;
=m;
if(①)
②;
*t=num;
inta[M],n,k;
③;
for(k=0;
k<
n;
k++)
if((k+1)%5==0)
else
a[k]);
4.下面程序功能是从字符串s中删除任何在第二个字符串t中出现的字符,然后输出。
chars[81],t[20],*p1,*p2;
%s%s"
①);
p1=s;
*(p+i);
for(p2=t;
*p2;
p2++)
while(②)
strcpy(③);
s);
5.文件stu.txt中存放了一个学生各门课程的考试分数,数据之间以逗号分割。
下面程序将文件中的所有分数取出,计算出平均分,显示在屏幕上,还要把这个平均分数按原文件的数据格式记录在原文件中。
例如文件stu.txt中存放的为“60.5,81.1,93.5,90.5”,则程序运行后文件stu.txt中为“60.5,81.1,93.5,90.5,78.366669”。
intn=0;
floatx=0.0,y;
fp=①;
fscanf(②);
if(feof(fp))break;
x+=y;
n++;
x=x/n;
average=%f"
二级(C与C++语言)上机考试试卷(第一套)参考答案
一、程序调试题(文件名为test1-1.c)(40分)
磁盘上有一个名为test1-1.c的C程序文件,其功能是:
输入一个字符串,将其中的每一个连续的数字序列看作一个整数,将这些整数检索出来后依次放入一个longint型数组中,请改正程序中的错误,使程序能得出正确的结果.
注意:
不要增加或删除行,不要合适改程序结构.
#include<
/*改为:
math.h*/
main()
{
charstr[100],*p=str,help[15];
staticlongintnum[50];
inti=0,k=0,m,sign=0;
\ninputthestring:
p);
{if(*p>
=0&
=9)/*改为:
*p>
=’0’&
=’9’或*p>
=57*/
{sign=1;
help[k++]=*p;
elseif(sign=1)/*改为:
==*/
{intn=0;
while(--k>
=0)
num[i]+=(help[k]-48)*((longint)pow(n++,10));
/*改为:
pow(10,n++)*/
k=0;
sign=0;
else/*改为:
else;
*/
}while(*(p-1)!
for(m=0;
m<
i;
m++)
%d,"
num[m]);
/*改为:
%ld(即长整型格式输出)*/
}
评分标准:
每改对一处得6分,结果正确得4分
二、编程题(程序文件取名为test1-2.c)(60分)
请用函数调用方式编写程序,要求能实现:
(1)在被调函数中求出1到1000之内能被7或11整除,但不能被7和11同时整除的所有整数,并把它们放到数组a中.
(2)在主函数中将符合上述条件的整数个数和所有整数输出到屏幕以级文件test1-2.dat中
1.被调函数fun编写正确20分2.文件打开和关闭正确10分
3.函数调用正确5分4.屏幕输出和文件输出正确15分
5.输出格式正确5分6.程序结构合理5分
参考程序:
#include<
#defineM1000
intfun(int*a)
{intm,k=0;
for(m=1;
m<
=M;
m++)
if((m%7==0&
m%11!
=0)||(m%7!
m%11==0))
a[k++]=m;
returnk;
{inta[M],n,k;
clrscr();
/*清屏函数*/
fp=fopen("
test1-2.dat"
n=fun(a);
n);
fprintf(fp,"
{printf("
%5d"
if((k+1)%10==0)
二级(C与C++语言)上机考试试卷(第二套)参考答案
一、程序调试题(文件名为test2-1.c)(40分)
磁盘上有一个名为test2-1.c的C程序文件,其功能是:
求出数组中值最大的元素在数组中的下标,并将最大值增添在数组的最后,如:
876675896101401980431451777(原数组)
876675896101401980431451777980(增添后的数组)
请改正程序中的错误,合程序能得出正确的结果.
#defineN80
voidfun(int*s,int*t,i