求四川省历年C语言二级真题或模拟题
28级考试
两级(C和C++语言)钢笔试卷
时间:2008年4月19日
上午9点-165438+凌晨0点
第一部分
软件技术基础
(***15分)
一、是非题(每小题1分,***10分)
(判断以下问题是否正确。如果是,根据客观答题卡上相应的数字选择A,否则选择B)
1.在编程中,一维数组常用来表示线性表的顺序存储空间。( 1 )
2.数据在计算机内存中的表示是指数据的存储结构。( 2 )
3.Windows是一个多用户多任务的操作系统。( 3 )
4.影响中断响应顺序的技术有中断优先级和中断屏蔽。( 4 )
5.链表可以随机访问任意节点,而顺序表不能。( 5 )
6.作业和流程的主要区别在于,前者由用户提交,后者由系统自动生成。( 6 )
7.数据的逻辑结构从逻辑关系上描述数据,与数据的存储结构无关,独立于计算机。( 7 )
8.中断控制模式适用于外部存储器和CPU之间的大量数据交换。( 8 )
9.提供无错误的程序是提高软件可维护性的基本措施。( 9 )
10.软件结构是基于指令的控制层次。( 10 )
二、选择题(65438+每小题0分,***5分)
1.数据流图是用结构化方法描述(11)工作阶段的工具。
11(一)可行性分析(二)程序编码
(c)详细设计(d)需求分析
2.如果入栈序列是1,2,3,4,并且在入栈过程中可以拉出栈,那么不可能的出栈序列是(12)。
12 (A) 1,4,3,2 (B)
(C) 2,3,4,1
3.任意两个并发进程之间(13)。
13 (A)可能有同步也可能有互斥(b)一定有同步。
(c)它们必须相互独立;(d)必须相互排斥。
4.以下哪个特性不是分时操作系统(14)的主要特性?
14 (A)分时(b)独占
(c)交互性(d)多路径
5.在需求分析中,开发者主要向用户学习(15)。
15 (A)软件维护(b)软件结构
(c)该软件有什么作用?软件测试。
第二部分
C和C++语言编程
(***85分)
一、选择题(每小题1分,***10分)
1.C++语言对C语言做了很多改进,C++语言相对于C语言最根本的变化是(D)。
16 (A)增加了一些新的运算符(b)允许函数设置默认参数。
(c)原型(d)中引入了类和对象的概念
2.C++语言中决定函数返回值类型的是(b)。
17 (A) return语句中的表达式类型
(b)定义函数时指定的数据类型。
(c)调用此函数时主音函数的类型。
(d)调用函数时系统随机生成的类型。
3.在C语言中,操作数必须是整数的运算符是(a)。
18(A)%(B)/(C)=(D)"=
4.如果fp是一个指向文件的指针,并且文件的结尾已经被读取,那么函数feof(fp)的返回值是(c)。
19(A)EOF(B)-1(C)1(D)
5.已知:int a=15,b = 16;然后表达式(a & amp;b)和amp& ampbr的结果是(a)。
20(A)1(B)0(C)16(D)31
6.已知:int arr[10];arr数组元素的正确引用是(d)。
21(A)arr[10](B)arr[3.5](C)arr(5)(D)arr[10-10]
7.在以下程序中,循环后b的值为(c)。
vpod主接口()
{
int a=1,b = 10;
做
{
b-= a;
a++;
} while(b-& gt;10);
}
22 (A) -1 (B) -2 (C) 8 (D) 9
8.以下程序的输出是(23)。
#定义M(x,y,z) x*y+z
主()
{
int a=1,b=2,c = 3;
printf("%d\n ",M(a+b,b+c,c+a));
}
23(A)12(B)15(C)17(D)19
9.下面的程序将数组元素的最大值放入a[0]中,if语句中带下划线的条件表达式要用(24)填充。
主()
{
int a[10]={6,7,2,9,1,10,5,8,4,3},*p=a,I;
for(I = 0;我& lt10;i++,p++)
if()* a = * p;
printf("%d ",* a);
}
24(A)p & gt;a(B)* p & gt;a[0](C)* p & gt;* a[0](D)* p[0]& gt;a[0]
10.如果使指针变量p指向一个动态存储单元,用于在随后的程序段中存储整数数据,则应在下划线处填入(25)。
int * p;
p = malloc(sizeof(int));
25(A)int(B)int *(C)(* int)(D)(int *)
二、阅读程序答题(每题3分,***45分)
1.读取程序并写出程序运行结果。
# include & ltstdio.h & gt
无效资金(char *s,char t)
{
while(*s)
{ if(* s = = t)* s = t-' A '+' A ';
s++;
}
}
void main()
{
char s[100]= " abcddfefbdd ",c = ' d
fun(s,c);
printf("%s\n ",s);
}
程序运行后的输出结果是(b)。
26(A)abcddfeffdbd(B)abcddfeffdbd(C)abcaafeffaba(D)abcddfeffdbd
2.阅读程序并回答问题。
# include & ltstdio.h & gt
void fun(int a[],int n)
{
int i,t;
for(I = 0;我& ltn/2;i++)
{
t = a[I];a[I]= a[n-1-I];a[n-1-I]= t;
}
}
void main()
{
int b[10]={1,2,3,4,5,6,7,8,9,10 };
int i,s = 0;
fun(b,8);
for(I = 6;我& lt10;i++)s+= b[I];
printf("%d\n ",s);
}
(1)函数fun的函数是(a)。
27 (A)反转数组A的前n个元素(b)按升序排列数组元素。
(c)交换数组的第一个元素和最后一个元素(d)以降序排列数组元素。
(2)程序的运行结果是(a)
28 (A) 34 (B) 30 (C) 22 (D) 10
3.阅读程序并回答问题
# include & ltiostream.h & gt
void main()
{
int a=0,x = 0;
for(;!x & amp& ampa & lt10;a++)
{ a++;
x++;
}
cout & lt& lta & lt& ltendl
}
程序运行结果是:(d)。
29 (A) 10 (B) 4 (C) 3 (D) 2
4.阅读程序并回答问题。
# include & ltstdio.h & gt
无效资金(char *str)
{
int i,j = 0;
for(I = 0;str[i]!='\0';i++)
if(str[i]!= ' ')str[j++]= str[I];
s[j]= ' \ 0 ';
}
void main()
{
字符串[80];
int n;
printf("输入一个字符串:");
gets(str);
fun(str);
printf("%s\n ",str);
}
程序运行时,输入字符串asd_ab_123(注意:空格用“_”表示),程序运行结果为(A 30)。
30(A)asdab 123(B)ASD _ ab 123(C)asdab _ 123(D)ASD
5.阅读程序并回答问题。
# include & ltstdio.h & gt
# include & ltconio.h & gt
结构模型
{int a,b,c;};
void main()
{ struct mod st[3]={{1,2,3},{4,5,6},{7,8,9 } };
int total
total=st[0]。a+st[1]。b;
printf("total=%d\n ",total);
getch();
}
程序运行的总输出= (b)。
31 (A)5 (B) 6 (C) 7 (D) 8
6.有以下程序:
# include & ltstdio.h & gt
void main()
{
int x=10,y = 5;
开关(x)
{ case 1:x++;
默认:x+= y;
案例二:y-;
案例三:x-;
}
printf("x=%d,y=%d ",x,y);
}
程序输出结果是(a)。
(A) x=14,y=4 (B) x=15,y=4
(C) x=10,y=5 (D) x=15,y=5
7.阅读程序并回答问题。
# include & ltstdio.h & gt
整数f(整数m)
{
静态int n = 1;
m/= 2;
m = m * 2;
如果(m)
{ n * = m;
返回(f(m-2));
}
else返回(n);
}
void main()
{
int a,I,j;
for(I = 0;我& lt2;i++)
{
a = f(4+I);
printf("%d\n ",a);
}
}
(1)程序的第一个输出是(a)。
33 (A) 8 (B) 0 (C) 64 (D) 4
(2)第二个程序的输出结果是(c)。
34 (A) 8 (B) 0 (C) 64 (D) 4
8.有以下程序。如果程序被编译并连接生成可执行文件CAD.EXE,输入以下命令行:
CAD file 1 file 2 & lt;CR & gt(& ltCR & gt表示回车)
程序运行结果是(d)。
# include & ltstdio.h & gt
void main(int argc,char *argv[])
{
int I;
printf("%d\n ",argc);
for(I = 0;我& lt= argc-1;i++)
printf("%s ",argv[I]);
printf(" \ n ");
}
35 (A) 2 (B) 3
CAD file 1 file 2 file 1 file 2
第二条第四款第3项
CAD.EXE文件1文件2 CAD。EXEFILE1FILE2
9.下面这个程序的作用是将316表示为两个数之和,这两个加数可以分别被13和11整除。程序while语句下划线应填写(d)。
# include & ltstdio.h & gt
void main()
{ int i=0,j,k;
做{
i++;
k = 316-13 * I;
} while();
j = k/11;
printf(" 316 = 13 * % d+11 * % d ",I,j);
}
36(A)k/11(B)k % 11(C)k(D)k % 11 = = 0
10.阅读程序并回答问题。
# include & ltstdio.h & gt
void main()
{
int a=1,b=3,c=5,d=4,x;
如果(a & ltb)
if(c & lt;d)x = 1;
其他
如果(a & ltc)
if(b & lt;d)x = 2;
else x = 3;
else x = 6;
else x = 7;
printf("%d ",x);
}
(1)程序执行后,x的值为(b)。
37 (A)1 (B) 2 (C) 3 (D) 6
(1)当d的值改为2时,程序执行后x的值为(c)。
38 (A)1 (B) 2 (C) 3 (D) 6
11.下面这个程序的运行结果是(c)。
# include & ltstdio.h & gt
void sub(int x,int y,int *z)
{ * z = y-x;}
void main()
{
int a=1,b=2,c = 3;
子(a,b,和ampa);
sub(b,a,& ampb);
子(a,b,和ampc);
printf("%d,%d,%d\n ",a,b,c);
}
39 (A) 1,1,0 (B) 1,2,3 (C) 1,-1,-2 (D) 1,2,1
12.下面这个程序的输出是(D)。
# include & ltstdio.h & gt
# include & ltstring.h & gt
void main()
{ char *p1="abc ",*p2="ABC ",str[50]= " XYZ ";
strcpy(str+3,p2);
strcat(str+2,p 1);
printf("%s\n ",str);
}
40(A)xyzabcABC(B)xyzabcABC(C)yzabcABC(D)xyzabcABC
注:①请将以下“按程序填空”中问题的答案写在主观题答题卡上。
(2)每空只填写一条语句或一条语句的部分内容。
三、填空(每空2分,***30分)
1.fun函数是在S表示的字符串中找到指定字符的个数,并返回这个数。比如在main函数中,如果输入字符串abcdabacaa和指定的字符a,输出结果是5,即字符串abcdabacaa中有5个字符a。请填空。
# include & ltstdio.h & gt
#定义M 81
int fun(char *s,char c)
{
int i,CNT = 0;
for(I = 0;① ;i++)
if(*(s+i)==c)
cnt++;
②
}
void main()
{
char str[M],ch;
printf(" \ n请输入一个字符串:");
gets(str);
printf(" \ n请输入一个字符:");
ch = getchar();
printf(" \ n字符的编号是:%d\n ",③);
}
2.fun的作用是根据公式计算数列前n项的和S,计算结果由形参指针S返回;n的值大于或等于0。请填空。
# include & ltstdio.h & gt
无效资金(float *s,int n)
{
浮动t = 0.0
int i,k =-1;
for(I = 0;我& lt= n;i++)
{
k =①* k;
t = t+k * 1.0/②;
}
③
}
void main()
{
int n;
float s;
printf("输入n:");
scanf("%d ",& ampn);
乐趣(& amps,n);
printf("s=%f\n ",s);
}
3.下面这个程序的作用是求一个M*N二维数组中每一行元素的和,将和依次放入一个一维数组中并返回给主函数。例如,如果您有以下二维数组:
6 10 2 10 15
17 14 15 8 6
4 18 10 19 12
0 12 1 2 7
输出是:43 60 63 22。请填空。
#定义M 4
#定义N 5
# include & ltstdio.h & gt
fsum(int a[][N]),int b[])
{ int i,j;
for(I = 0;我& ltm,i++)
① ;
for(I = 0;我& ltm;i++)
for(j = 0;j & ltn;j++)
②= a[I][j];
}
void main()
{
int x[M][N],y[M],I,j;
printf("The %d x %d Array :\n ",M,N);
for(I = 0;我& ltm;i++)
{ for(j = 0;j & ltn;j++)
{③= rand()% 20;
printf("%6d ",x[I][j]);
}
printf(" \ n ");
}
fsum(x,y);
printf("每行之和:\ n ");
for(I = 0;我& ltm;i++)
printf("%6d ",y[I]);
printf(" \ n ");
}
4.以下程序查找ab.c文件中最长一行的字符数len及其行号line。请填空。
# include & ltstdio.h & gt
void main()
{
int line,I,j=0,len = 0;
char c;
FILE * fp
fp=fopen("ab.c "," r ");
倒带(FP);
while(fgetc(fp)!EOF)
{ I = 1;
while(fgetc(fp)!= ' \ n ')①;
j++;
如果(i & gtlen){ len = I;② ;}
}
printf("\n%d\t%d\n ",len,line);
③ ;
}
5.下面这个fun函数的作用是将形参X的值转换成二进制数,得到的二进制数在一维数组中逐位返回,二进制数的最低位在下标为0的元素中,以此类推。请填空。
# include & ltstdio.h & gt
int fun(int x,int b[])
{ int k=0,r;
做
{ r = x % 2;
b[①]= r;
x/=②;
} while(x);
返回③;
}
void main()
{
int k,n,a[20];
printf(" \ n输入n:");
scanf("%d ",& ampn);
k=fun(n,a);
while(k & gt;=0)
printf("%d ",a[k-]);
}