求四川省历年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-]);

}