四川计算机二级c语言31次笔试和机考真题和答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
四川省普通高等学校计算机应用知识和能力
第三十一次等级考试
二级(C与C++语言) 笔 试 试 卷
时间: 2009年10月 24 日
上午 9:00—11:00
第一部分
软件技术基础
(共15分)
一、是非判断题(每小题1分,共10分)
( 判断下列各题是否正确,如正确,在客观答题纸上对应编号选A,否则选B )
1. 数据在计算机内存中的表示是指数据的存储结构。 ( A )
2. 作业与进程的主要区别是前者是由系统自动生成,后者是由用户提交。 ( B )
3. 从逻辑上可以把数据结构分为线性结构和非线性结构。 ( A )
4. 在设备管理中,通道是处理输入、输出的软件。 ( B )
5. 链表可以随机访问任意一个结点,而顺序表则不能。 ( B )
6. 栈顶的位置是随着进栈和退栈操作而变化的。 ( A )
7. 处于等待状态的进程,若其等待的事件已发生,就立即转入运行状态。 ( B )
8. 任何两个并发进程之间一定存在互斥关系。 (B )
9. 在面向过程方法的软件生存期内,能准确确定软件系统必须做什么和必须具备的
功能阶段是需求分析。 ( A )
10.在软件测试的基本方法中,静态测试不用测试用例。 ( A )
二、选择题(每小题1分,共5分)
1. 若进栈序列为1,2,3,4,且进栈过程中可以出栈,则不可能出栈的序列是( 11 ) 。
11 (A) 1,4,3,2 (B) 2,3,4,1 (C) 3,1,4,2 (D) 3,4,1,2
2. 操作系统本身是计算机系统软件的重要组成部分,而其物质基础是( 12 )。
12 (A) 系统硬件 (B) 程序 (C) 数据结构 (D) 标准程序库
3. 外部设备完成了预定的输入/输出操作所引起的中断是( 13 )。
13 (A) 外中断 (B) I/O中断 (C) 程序中断 (D) 标准程序库
4. 以下的准则中哪个不是软件设计应遵循的( 14 )。
14 (A) 抽象准则 (B) 模块化准则 (C) 信息屏蔽准则 (D) 综合性准则
5. 在结构化设计方法中,设计功能模块算法属于软件开发中的 ( 15 )阶段。
15 (A) 详细设计 (B) 需求分析
(C) 总体设计 (D) 编程调试
第二部分
C与C++语言程序设计
(共85分)
一、单项选择题 ( 每小题1分,共10分 )
1. 已知:char s[]="China",*p; (考点:字符指针)
p=s;
则下列叙述正确的是( 16 ) 。
16 (A) s和p完全相同 (B) *p与s[0]不等 (C) *p与 s[0]相等 (D) *s与p相等
2. 以下可以作为函数fopen中第一个参数的正确格式是(17)。(*考点:文件)
17 (A) c:prog\file1.dat (B) c:\\prog\\file1.dat
(C) "c:\prog\file1.dat" (D) "c:\\prog\\file1.dat"
3. 若有定义:
union data
{
int i;
float j;
char s[5];
}k;
则在Turbo C 2.0环境中sizeof(k)的值是(18)。(考点:共用体类型)
18 (A) 2 (B) 5 (C) 11 (D) 0
4. 下面四个选项中,合法的用户自定义标识是( 19 )。(考点:标识符命名)
19 (A) int (B) a_b3 (C) 3_bc (D) #mm
5. 已知结构体:( 20 )。(考点:存储类型extern)
struct student
{
char name[20];
struct
{ int year;
int month;
}birth;
char sex;
}stu;
20 (A) stu.birth=2009; (B) stu.year=2009;
(C) stucent.birth.year=2009; (D) stu.birth.year=2009;
6. 下面程序的输出结果是( 21 )。(考点:宏定义)
# include
# define M 4
# define N 2*M+1
# define K N/2-5
void main()
{ printf("%d\n",K); }
21 (A) 2 (B) 1 (C) 0 (D) 3
7. 有以下结构体及其变量的定义:
struct node
{ int data;
struct node *next;
}*p,*q,*r;
如图所示,指针p、q、r分别指向此链表中的三个连续结点。
若要将q所指结点从链表中删除,使p所指结点与r所指结点连接,不能完成指定操作的语句是( 22 )。(考点:链表)
22 (A) p->next=q->next; (B) p->next=p->next->next;
(C) p->next=r; (D) p=q->next;
8. 下列程序段中,不是无限循环的是( 23 )。(考点:循环语句)
23 (A) (B)
k=0; j=100;
do while(1)
{ ++k; } { j=j%100+1;
whiel(k-->=0); if( j>100 ) break; }
(C) (D)
s=3333; for( ; ; );
while(s%2+s++%2);
9. 不能把字符串"Hello!"赋给字符数组b的选项是( 24 )。(考点:字符数组赋值)
24 (A) char b[10]={ 'H','e','l','l','o','!','\0'};
(B) char b[10]; b="Hello!";
(C) char b[10]; strcpy(b, "Hello!");
(D) char b[10]= "Hello!";
10. 若变量已正确定义并赋值,以下符合C语言语法的表达式是 ( 25 ) 。(考点:表达式)
25 (A) a:=b+1 (B) a=b=c+2 (C) int 18.5%3 (D) a=a+7=c+b
二、读程序回答问题 ( 每个选择3分,共45分 )
1. 在下面程序中(考点:数组、函数(地址参数)、删除字符算法)
# include
void fun(char *s)
{
int i,j;
for(i=0,j=0;s[i]!='\0';i++)
if(s[i]>='0' && s[i]<='9')
{ s[j]=s[i];
j++;
}
s[j]='\0';
}
void main()
{
char s[20]="ab12cd34";
fun(s);
printf("%3d %3d\n",sizeof(s),strlen(s));
printf("%s\n",s);
}
(1) 第1个printf输出的结果为( 26 )。
26 (A) 8 8 (B) 20 8 (C) 20 20 (D) 20 4
(2) 第2个printf输出的结果为( 27 )。
27 (A) abcd (B) ab12cd (C) 1234 (D) ab12cd34
2. 下列程序的输出结果是( 28 )。(考点:函数(地址参数和普通参数)、指针运算)
void fun(char *c,int d)
{
*c=*c+1;
d=d+1;
}
void main()
{
char a='
A',b='a';
fun(&b,a);
printf("%c,%c\n",a,b);
}
28 (A) B,A (B) a,B (C) A,B (D) A,b
3. 下列程序的输出结果是( 29 )。(考点:带参数的宏定义)
# include "stdio.h"
# define GOOD(y) 2.84+y
# define PR(a) printf("\n%d",(int)(a))
# define PRINT(a) PR(a);putchar('\n')
void main()
{
int x=2;
PRINT(GOOD(5)*x);
}
29 (A) 11 (B) 15 (C) 13 (D) 12
4. 下列程序运行后的输出结果是( 30 )。(考点:结构体类型、函数(普通参数)、全局变量和局部变量)
# include "stdio.h"
struct tree
{
int x;
char *s;
}t;
func(struct tree t)
{
t.x=10;
t.s="computer";
return(0);
}
void main()
{
t.x=1;
t.s="minicomputer";
fun(t);
printf("%d,%s\n",t.x,t.s);
}
30 (A) 10,computer (B) 1,minicomputer
(C) 1,computer (D) 10,minicomputer
5. 下列程序编译连接后生成可执行文件CAD.EXE,输入以下命令行:
CAD FILE1 FILE2
程序的运行结果是( 31 )。(考点:命令行参数)
# include "stdio.h"
void main(int argc,char *argv[])
{
int i;
printf("%d\n",argc);
for(i=0;i<=argc-1;i++)
printf("%s",argv[i]);
printf("\n");
}
31 (A) 2 (B) 3
cadfile1file2 cadfile1file2
(C) 2 (D) 3
CAD.EXEFILE1FILE2 CAD.EXEFILE1FILE2
6. 有下列程序:(考点:for循环嵌套、continue语句、break语句)
# include "stdio.h"
void main()
{
int i,j,x=0;
for(i=0;i<2;i++)
{
x++;
for(j=0;j<=3;j++)
{
if(j%2)
continue;
x++;
}
x++;
}
printf("%d\n",x);
}
(1)该程序的运行结果是( 32 )
32 (A) 6 (B) 4 (C) 8 (D) 2
(2)若将程序中的continue 改为break,则输出结果为( 33 )
33 (A) 6 (B) 4 (C) 8 (D) 2
7. 有如下程序:(考点:文件打开方式、文件操作函数、函数调用)
# include "stdio.h"
# include "string.h"
void fun(char *fname,char *st)
{
FILE *myf;
int i;
myf=fopen(fname,"w");
for(i=0;i
fclose(myf);
}
void main()
{
fun("text","world");
fun("text","hello");
}
(1) 运行该程序后,文件text中的内容为( 34 )。
34 (A) world (B) worldhello (C) hello (D) helloworld
(2) 若将文件打开方式"w"改为"a",则运行程序后,文件text中的内容为( 35 )。
35 (A) world (B) worldhello (C) hello (D) helloworld
8. 有如下程序:(考点:递归函数 )
# include "stdio.h"
int fun(int n)
{
int y;
if(n==1)
y=1;
else if(n==2)
y=2;
else
y=n+fun(n-2);
return y;
}
void main()
{
int x;
scanf("%d",&x);
printf("%d",fun(x));
}
若输入x的值为8,则程序的输出结果为( 36 )。
36 (A) 16 (B) 36 (C) 30 (D) 20
与函数fun等价的非递归程序为( 37
)。
37 (A) int fun(int n) (B)
{ int i,s=0;
for(i=n;i>=1;i=i-2)
s=s+i;
return s;
}
(C) int fun(int n) (D)
{ int i,s=0;
for(i=n;i>=1;i--)
s=s+i;
return s;
}
9. 有如下程序:(考点:数组、函数、静态存储类型)
# include
int fun(int *x,int n)
{
static int s=0,i;
for(i=0;i
return s;
}
void main()
{
int x[5]={1,2,3,4,5},y[4]={6,7,8,9},s;
s=fun(x,5)+fun(y,4);
printf("%d\n",s);
}
(1) 程序的运行结果为( 38 )。
38 (A) 15 (B) 30 (C) 45 (D) 60
(2) 若将fun函数中的static去掉,则程序的运行结果为( 39 )。
39 (A) 15 (B) 30 (C) 45 (D) 60
10. 有如下程序:(考点:循环、switch语句)
# include
void main()
{
char ch;
while((ch=getchar())!='\n')
{
switch(ch)
{
case '1': case '2': putchar(ch+2);
case '3': case '4': putchar(ch+2); break;
default: putchar(ch+2);
}
}
}
若输入135<回车>,程序的运行结果为( 40 )。
40 (A) 135 (B) 357 (C) 3357 (D) 3333557
注意:① 请把下面“程序填空”中各小题答案写在主观题答题纸上
② 每一个空只填一个语句或一个语句所缺的部分内容
三、程序填空 ( 每空2分,共30分 )
1. 函数fun的功能是:将n×n(1
1 2 3 若m=2,则处理后的方阵为: 2 2 3
4 5 6 8 10 6
7 8 9 14 16 18
在main函数中调用fun函数,并分行输出处理后的方阵。请填空。(考点:矩阵处理算法)
# include
void fun(int a[][10],int n,int m)
{
int i,j;
for(i=0;i
a[i][j]=a[i][j]*m;
}
void main()
{
int w[10][10]={{1,2,3},{4,5,6},{7,8,9}},m,i,j;
scanf("%d",&m);
fun(② ,3,m);
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%4d",w[i][j]);
printf(③ );
}
}
2. 下面程序的功能是输出所有的5位4倍反序数。请填空。
说明:当一个5位整数的4倍刚好是其反序数,则称其为5位4倍反序数。例如21978的反序数是87912,而87912=4*21978,所以21978就是一个5位4倍反序数。输出结果为:21978 87912
(考点:循环、逆置整数算法)
# include
void main()
{
long n,k,t,m,j=0;
for(n=10000;n<=99999;n++)
{
m=0;
t=n;
for(k=1;k<= ① ;k++)
{
② ;
③ ;
}
if(m==4*n)
{
j++;
printf("%ld %ld\n",n,m);
}
}
}
3. 下面程序的功能是:对一整型数组中下标是3的倍数
的元素进行升序排序,其余元素保持不变。请填空。(考点:数组、排序算法)
# include
void main()
{
int a[16]={16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1};
int i,j,t;
for(i=0;i<16;① )
for(j=i+3;j<16; ② )
if(③ )
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
for(i=0;i<16;i++)
printf("%4d",a[i]);
}
4. 已知磁盘文件test.dat中有10个大于2的正整数,下列程序能判断和输出文件中10个数中的所有素数。请填空。(考点:文件、函数参数、判素数算法)
# include
int prime(① ,int n)
{
int i,j,k=0,flag=0;
for(i=0;i
for(j=2;jif(② ==0)
{ flag=0;
break;
}
else
flag=1;
if(flag)
{ ③ =a[i];
k++;
}
}
return k;
}
void main()
{
int n,i,a[10];
FILE *fp;
if((fp=fopen("test.dat","r"))==NULL)
{
printf("Can not open the file!\n");
exit(0);
}
for(n=0;n<10;n++)
fscanf(fp,"%d",&a[n]);
n=prime(a,n);
for(i=0;i
fclose(fp);
}
5. 程序的功能是计算:s=1-12+123-1234+12345的值,请填空。(考点:循环、序列处理算法)
# include
void main()
{
int i,s=0,t=0,k=1;
for(i=1;i<=5;i++)
{
t=t*10+ ① ;
s=s+ ② ;
k= ③ ;
}
printf("s=%d\n",s);
}
第一部分 软件技术基础
一、是非判断题(每小题1分,共10分)
1~10:ABABB ABBAA
二、选择题(每小题1分,共5分)
1~5 :CABDA
第二部分 C与C++语言程序设计
一、单项选择题 (每小题1分,共10分)
1、A 2、D 3、B 4、B 5、D
6、D 7、D 8、C 9、B 10、B
二、读程序题(每个选择3分,共45分)
1、D C 2、D 3、D 4、B 5、D
6、C A 7、C B 8、D A 9、D C 10、C
三、程序填空题(每空2分,共30分)
1、① i ② w ③ "\n"
2、① 5 ② m=m*10+t%10 ③ t=t/10
3、① i+=3 ② j+=3 ③ a[i]>a[j]
4、① int a[] ② a[i]%j ③ a[k]
5、① i ② t*k ③ -k
四川省计算机二级考试第三十一次C与C++语言笔试试卷 第 1 页 共 10 页
四川省计算机二级考试第十九次C与C++语言笔试试卷 共10页 第1页