四川C语言二级考试真题含

四川省普通高等学校计算机应用知识和能力

c语言技能考试历年真题 c语言技能考试历年真题山东职高c语言技能考试历年真题 c语言技能考试历年真题山东职高


c语言技能考试历年真题 c语言技能考试历年真题山东职高


第二十九次等级考试

二级(C与C++语言) 笔 试 试 卷

时间: 2008年10月 18 日

上午 9:00—11:00

部分

软件技术基础

(共15分)

一、是非判断题(每小题1分,共10分)

( 判断下列各题是否正确,如正确,在客观答题纸上对应编号选A,否则选B )

1. 在设备管理中通道是处理输入、输出的软件。 ( 1 )

2. 从逻辑上可以把数据结构分为线性结构和非线性结构。 ( 2 )

3. 若无进程处于运行状态,则就绪队列为空。 ( 3 )

4. 在单处理器系统中,程序的并发执行,实质上是程序的交替执行。 ( 4 )

5. 分页存储管理中,页面不能映射到不连续的内存块中。 ( 5 )

6. 瀑布模型的突出缺点是不适应用户需求的变化。 ( 6 )

7. 栈和队列的共同特点是允许在端点之外处插入和删除元素。 ( 7 )

8. 为了便于对照检查,测试用例应由输入数据和预期的输出结果两部分组成。 ( 8 )

9. 在软件生存期内,能确定软件系统必须做什么和必须具备的功能阶段是编码。 ( 9 )

10.在结构化分析中,用于描述加工逻辑的主要工具有三种,即:结构化语言、判定表、判定树。 ( 10 )

二、选择题(每小题1分,共5分)

1. 软件开发中,模块设计的原则是( 11 ) 。

11 (A) 低偶合、高内聚 (B) 高偶合、高内聚

(C) 高偶合、低内聚 (D) 低偶合、低内聚

2. 进程从运行状态进入就绪状态的原因可能是( 12 )。

12 (A) 时间片用完 (B) 等待某一

(C) 等待的已发生 (D) 被选中占有处理机

3. 队列的作原则是( 13 )。

13 (A) 先进后出 (B) 先进先出

(C) 只进不出 (D) 只出不进

4. 以下( 14 )不是实时作系统的特点。

14 (A) 高可靠性 (B) 及时响应

(C) 高效性 (D) 通用性

5. 程序流程图是用于描述结构化方法中 ( 15 )工作阶段的工具。

15 (A) 可行性分析 (B) 程序编码

(C) 详细设计 (D) 需求分析

第二部分

C与C++语言程序设计

(共85分)

一、单项选择题 ( 每小题1分,共10分 )

1. 下列关于C++语言类的描述中错误的是( 16 ) 。

16 (A) 类用于描述事物的属性和对事物的作

(B) 类与类之间通过封装而具有明确的性

(C) 类与类之间必须是平等的关系,而不能组成层次结构

(D) 类与类之间可以通过一些方法进行通信和联络

2. C++中,已知有如下定义:

const int D=5;

int i=1;

long int f=0;

char c=15;

则下列选项错误的是( 17 )。

17 (A) ++i; (B) D--; (C) c++; (D) --f;

3. 下面关于类和对象的描述中,错误的是 ( 18 )。

18 (A) 类就是C语言中的结构体类型,对象就是C语言中的结构体变量

(B) 类和对象之间的关系是抽象和具体的关系

(C) 对象是类的实例,一个对象必须属于一个已知的类

(D) 类是具有共同行为的若干对象的统一描述体

4. 设有定义:int n=0,p=&n,q=&p,则下列选项中正确的赋值语句是( 19 )。

19 (A) p=5; (B) q=5; (C) q=p; (D) p=5;

5. 设有定义:char s[20]= "ab101ncd"; 则sizeof(s)和strlen(s)的值为( 20 )。

20 (A) 6,6 (B) 20,6 (C) 20,7 (D) 20,10

6. 在C语言的函数中( 21 )。

21 (A) 必须有形参 (B) 形参必须是变量名

(C) 可以有也可以没有形参 (D) 数组名不能作为形参

7. 下列程序输出结果是( 22 )。

# include "stdio.h"

# define SQR(x) xx

void main()

{ int a=10,k=2,m=1;

a/=SQR(k+m)/SQR(k+m);

printf("%dn",a);

}22 (A) 10 (B) 1 (C) 9 (D) 0

8. 已知学生记录描述如下

struct student

{ int no;

char name[20];

char ;

struct

{ int year;

int month;

int day;

}birth;

};

struct student s;

设变量s中“生日”是“1982年5月29日”,对“生日”的正确赋值方式是( 23 )。

23 (A) year=1982;month=5;day=29;

(B) birth.year=1982;birth.month=5;birth.day=29;

(C) s.year=1982;s.month=5;s.day=29;

(D) s.birth.year=1982;s.birth.month=5;s.birth.day=29;

9. 有下列程序输出结果是 ( 24 )。

# include

void dig(char s)

{char p=s;

while(s)

s>='0' && s<='9'?s++:(p++=s++);

p='0';

}void main()

{char str="A1B2C3";

dig(str);

puts(str);

}24 (A) ABC (B) A1B2C3 (C) A1B2C (D) ABC3

10. 在下面的选项中,赋值语句错误的是 ( 25 ) 。

25 (A) i++; (B) a=(b=(c=2,d=3));

(C) a=a

二、读程序回答问题 ( 每个选择3分,共45分 )

1. 读下面程序并回答问题:

# include

void fun1(int x,int y)

{int t;

t=x; x=y; y=t;

}void fun2(int x[])

{int t;

t=x[0]; x[0]=x[1]; x[1]=t;

}void main()

{int a[2]={1,2},b[2]={1,2};

fun1(b[0],b[1]);fun2(a);

printf("%d,%d,%d,%dn",a[0],a[1],b[0],b[1]);

}(1) 下列说法错误的是( 26 )。

26 (A) 数组名作为函数参数进行传递,传递的是数组的首地址

(B) 数组名作为函数参数时,形参数组与实参数组共用内存空间

(C) 普通变量作为函数参数进行传递,实参与形参之间发生的是单向值传递

(D) 数组名作为函数参数时,传递的是数组元素的值

(2) 程序的运行结果是( 27 )。

27 (A)1,2,1,2 (B) 1,2,2,1 (C) 2,1,1,2 (D) 2,1,2,1

2. 读程序并回答问题。

# include

int fun()

{static int c=0;

c++;

return c;

}void main(int argc,char argv[])

{int x,i,j;

for(i=1;i

for(j=0;argv[i][j]!='0';j++)

x=fun();

printf("%dn",xargc);

}(1)若程序经编译连接后生成可执行文件2_3.exe,若键入以下命令行:

2_3 abcd 123

则程序的运行结果为( 28 )。

28 (A) 3 (B) 21 (C) 9 (D) 0

(2)若将函数fun中的static去掉,变为int c=0; 程序经编译后连接生成可执行文件2_3.exe,若键入以下命令行:

2_3 abcd 123

则程序的运行结果为( 29 )。

29 (A) 3 (B) 30 (C) 22 (D) 10

3. 读程序并回答问题

# include

# include

void fun(char s,int p1,int p2)

{char t;

while(p1

{t=(s+p1); (s+p1)=(s+p2); (s+p2)=t;

p1++; p2--;

}}

void main()

{char str[10];

int i;

for(i=0;i<9;i++)

str[i]='A'+i;

str[i]='0';

puts(str);

fun(str,0,strlen(str)-1);

puts(str);

}(1)个puts(str)的输出结果为( 30 )。

30 (A) AHCFEDGBI (B) IBGDEFCHA

(C) ABCDEFGHI (D) IHGFEDCBA

(2)第二个puts(str)的输出结果为( 31 )。

31 (A) AHCFEDGBI (B) IBGDEFCHA

(C) ABCDEFGHI (D) IHGFEDCBA

4. 阅读下面程序,回答问题。

void main()

{int n,m,s=0,t=1;

scanf("%d",&m);

for(n=1;n<=m;n++)

{t=n;

s+=t;

}printf("%dn",s);

}程序的功能是( 32 )

32 (A) 实现1的阶乘至m的阶乘的求和

(B) 求m的阶乘

(C) 1到m的求和

(D) 实现1至m-1的阶乘的求和

5. 读程序,回答问题。

# include

void main()

{char s[80];

int i,j;

gets(s);

for(i=j=0;s[i]!='0';i++)

if(s[i]!='c') s[j++]=s[i];

s[j]='0';

puts(s);

}程序运行时输入cctv10,其输出结果为( 33 )。

33 (A) cc (B) tv10 (C) ctv10 (D) tv10cc

6. 有下列程序:

# include

char func(char s)

{char p=s;

while(p!='0')

p++;

return p-s;

}void main()

{printf("n%dn",func("Hello!"));

getch();

}(1)程序的运行结果是( 34 )。

34 (A) 3 (B) Hello!6 (C) 无输出 (D) 6

(2)指针变量的运算不可以( 35 )。

35 (A) 指针变量加整形变量 (B) 指针变量减整形变量

(C) 指针变量加指针变量 (D) 指针变量减指针变量

7. 以下是一个C++程序,读程序写出程序运行结果。

# include

void main()

{int num=0,i=8;

do

{ i--;

num++;

}while(--i);

cout<

}程序的运行结果是( 36 )。

36 (A) 2 (B) 0 (C) 4 (D) 5

8. 有下列程序:

# include

void main()

{ char c='A';

int k=0;

do

{ switch(c++)

{ case 'A': k++; break;

case 'B': k--;

case 'C': k+=2; break;

case 'D': k%=2; continue;

case 'E': k=10;break;

default: k/=3;

}k++;

}while(c<'G');

printf("k=%dn",k);

getch();

}(1)程序输出结果是( 37 )。

37 (A) k=3 (B) k=4 (C) k=2 (D) k=0

(2)本程序中continue的作用( 38 )。

38 (A) 与break一样 (B) 不起任何作用

(C) 开始下一次循环 (D) 出现语法错误

9. 有下列程序

int w=3;

int fun(int k)

{if(k==0) return w;

return(fun(k-1)k);

}void main()

{int w=10;

printf("%dn",fun(5)w);

}输出结果是( 39 )。

39 (A) 360 (B) 3600 (C) 1080 (D) 1200

10. 有下列程序

void main()

{char ch[2][5]={"6934","8254"},p[2];

int i,j,s=0;

for(i=0;i<2;i++)

p[i]=ch[i];

for(i=0;i<2;i++)

for(j=0;p[i][j]>'0'&&p[i][j]<='9';j+=2)

s=10s+p[i][j]-'0';

printf("%dn",s);

}输出结果是( 40 )。

40 (A)6385 (B) 69825 (C) 63825 (D) 693825

注意:① 请把下面“程序填空”中各小题写在主观题答题纸上

② 每一个空只填一个语句或一个语句所缺的部分内容

三、程序填空 ( 每空2分,共30分 )

1. 函数fun的功能是:找出N行M列二维数组元素中的值,并作为函数值返回,值的行列下标通过形参指针带回main函数中。请填空。

# include

# define N 3

# define M 4

int fun(int a[N][M],int row,int col)

{int i,j,r,c;

r=c=0;

for(i=0;i

for(j=0;j

if(a[i][j]>① ) { r=i; c=j; }

② ;

col=c;

③ ;

}void main()

{int a[N][M]={1,2,3,4,5,6,7,8,9,10,11,12};

int row,col,max;

max=fun(a,&row,&col);

printf("max=%d,row=%d,col=%dn",max,row,col);

}2. 程序的功能是:求出分数序列2/1,3/2,5/3,8/5,13/8……前20项之和,请填空。

# include

void main()

{ double x=2,y=1,t,s=0;

int i;

for(i=1;i<=20;i++)

{s=① ;

t=② ;

x=③ ;

y=t;

}printf("s=%fn",s);

}3. 有5个学生的成绩需要保存在文件score.dat文件中,保存格式如下:

姓名,年龄,成绩 请填空。

# include

void main()

{ FILE fp;

int i;

char name[80];

int age;

float score;

fp=fopen(① ,"w");

for(i=0;i<5;i++)

{ printf("请输入第%d个学生的信息n",i);

printf("姓名:");

scanf("%s",name);

printf("年龄:");

scanf("%d",&age);

printf("成绩:");

② ;

fprintf(fp,"%s,%d,%fn",name,age,score);

}③ ;

}4. 下列程序的功能是:从5个字符串中找出长的那个字符串。请填空。

# include

# include

# define N 5

# define M 81

char fun(char (sq)[M])

{ int i;

① ;

sp=sq[0];

for(i=1;i

if(② ) sp=sq[i];

return sp;

}void main()

{ char str[N][M],longest;

int i;

printf("please enter 5 string:");

for(i=0;i

gets(str[i]);

for(i=0;i

puts(str[i]);

longest=③ ;

printf("nThe longest string:");

puts(longest);

}5. 下面程序的功能是:由25人坐成圆圈,先从任一人出发用1到25顺时针依次编号,然后从1号开始顺时针报数(1,2,3,4,…),数到5的倍数的出圈,剩下的继续报数,求后出圈的编号。

# include

void main()

{int a[26],j,n,count;

for(j=1;j<=25;j++) a[j]=j;

j=1;

count=0;

① ;

do

{ if(a[j]!=0)

{ n++;

if(n%5==0)

{ ② ;

if(count==24) printf("%dn",j);

count++;

}}

j++;

if(j>25) j=1;

}while(③ );

}

计算机等级考试 笔试题型 二级C语言

选择35 填空15 每题2分

2010年3月计算机等级考试二级C++笔试试题

一、选择题(每小题2分,共70分)

下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的。请将正确选项填涂在答题卡相应位置上,答在试卷上不得分。

(1)下列叙述中正确的是

A)对长度为n的有序链表进行查找,坏情况下需要的比较次数为n

B)对长度为n的有序链表进行对分查找,坏情况下需要的比较次数为(n/2)

C)对长度为n的有序链表进行对分查找,坏情况下需要的比较次数为(log2n)

D)对长度为n的有序链表进行对分查找,坏情况下需要的比较次数为(n log2n)

(2)算法的时间复杂度是指

A)算法的执行时间

B)算法所处理的数据量

C)算法程序中的语句或指令条数

D)算法在执行过程中所需要的基本运算次数

(3)软件按功能可以分为:应用软件、系统软件和支撑软件(或工具软件)。下面属于系统软件的是

A)编辑软件

B)作系统

C)教务管理系统

D)浏览器

(4)软件(程序)调试的任务是

A)诊断和改正程序中的错误

B)尽可能多地发现程序中的错误

C)发现并改正程序中的所有错误

D)确定程序中错误的性质

(5)数据流程图(DFD图)是

A)软件概要设计的工具

B)软件详细设计的工具

C)结构化方法的需求分析工具

D)面向对象方法的需求分析工具

(6)软件生命周期可分为定义阶段,开发阶段和维护阶段。详细设计属于

A)定义阶段

B)开发阶段

C)维护阶段

D)上述三个阶段

(7)数据库管理系统中负责数据模式定义的语言是

A)数据定义语言

B)数据管理语言

C)数据纵语言

D)数据控制语言

(8)在学生管理的关系数据库中,存取一个学生信息的数据单位是

A)文件

B)数据库

C)字段

D)记录

(9)数据库设计中,用E-R图来描述信息结构但不涉及信息在计算机中的表示,它属于数据库设计的

A)需求分析阶段

B)逻辑设计阶段

C)概念设计阶段

D)物理设计阶段

(10)有两个关系R和T如下:

则由关系R得到关系T的作是

A)选择

B)投影

C)交

D)并

(11)下列关于函数的描述中,错误的是

A)函数可以没有返回值

B)函数可以没有参数

C)函数可以是一个类的成员

D)函数不能被定义为模板

(12)若MyClass是一个类名,且有如下语句序列

MyClass c1,c2;

MyClass c3=new MyClass;

MyClass &c4=c1;

上面的语句序列所定义的类对象的个数是

A)1

B)2

C)3

D)4

(13)下列关于继承方式的描述中,错误的是

A)如果不显式地指定继承方式,缺省的继承方式是私有(private)

B)采用公有继承方式时,基类中的公有成员在派生类中仍然是公有成员

C)采用保护继承方式时,基类中的保护成员在派生类中仍然是保护成员

D)采用私有继承方式时,基类中的私有成员在派生类中仍然是私有成员

(14)将前缀运算符“--”重载为非成员函数,下列原型中,能正确用于类中说明的是

A)Decr& operator --(int);

B)Decr operator --( Decr&,int);

C)friend Decr& operator --(Decr&);

D)frlend Decr operator --(Decr&,int);

(15)若MyTemp是一个只有一个虚拟类型参数的类模板,且有如下语句序列

MyTempp2;

MyTempp3[2];

编译系统在处理上面的语句序列时,所生成的模板MyTemp的实例的个数是

A)1

B)2

C)3

D)0

(16)在C++中,cin是个

A)类

B)对象

C)模板

D)函数

(17)在下列字符中,不允许作为C++标识符的是

A)b

B)B

C)_

D)2

(18)下列叙述中,错误的是

A)false是一个逻辑型常量

B)"b"是一个字符型常量

C)365是一个int常量

D)3.1415926是一个double常量

(19)若x和y是程序中的两个整型变量,则下列if语句中正确的是

A)if(x==0) y=1; else y=2;

B)if(x==0) then y=1 else y=2;

C)if(x==0) y=1 else y=2;

D)if x==0 y=1; else y=2;

(20)要定义整型数组x,使之包括初值为O的三个元素,下列语句中错误的是

A)int x[3]={0,0,0};

B)int x[]={0};

C)static int x[3]={0};

D)int x[]={0,0,0};

(21)关于函数中的<返回类型>,下列表述中错误的是

A)<返回类型>中有可能包含关键字int

B)<返回类型>中有可能包含自定义标识符

C)<返回类型>中有可能包含字符

D)<返回类型>中可能包含[]

(22)要定义一个引用变量p,使之引用类MyClass的一个对象,正确的定义语句是

A)MyClass p=MyClass;

B)MyClass p=new MyClass;

C)MyClass &p=new MyClass;

D) MyClass a,&p=a;

(23)有如下两个类定义

class XX{

private:

double x1;

protected:

double x2;

public:

double x3;

};

class YY:protected XX{

private:

double y1;

protected:

double y2;

public:

double y3;

};

在类YY中保护成员变量的个数是

A)1

B)2

C)3

D)4

(24)下列关于运算符重载的描述中,错误的是

A)可以通过运算符重载在C++中创建新的运算符

B)赋值运算符只能重载为成员函数

C)运算符函数重载为类的成员函数时,作数是该类对象

D)重载类型转换运算符时不需要声明返回类型

(25)下列关于类模板的描述中,错误的是

A)类模板的成员函数都是模板函数

B)可以为类模板参数设置默认值

C)类模板描述了一组类

D)类模板中只允许有一个类型参数

(26)下列控制格式输入输出的作符中,能够设置浮点数精度的是

A)setprecision

B)setw

C)setfill

D)showpoint(27)下列程序段中包含4个函数,其中具有隐含this指针的是

int fun1();

class Test{

public:

int fun2();

friend int fun3();

static int fun4();

};

A)fun1

B)fun2

C)fun3

D)fun4

(28)有如下程序

#include

using namespace std;

class Test{

public:

Test(){ }

Test(const Test &t) {cout<<1;}

};

Test fun(Test &u) {Test t=u; return t;}

int main(){Test x,y; x=fun(y); return 0;}

运行这个程序的输出结果是

A)无输出

B)1

C)11

D)111

(29)有如下程序

#include

using namespace std;

class A{

public:

A(int i=0):r1(i) { }

void print() {cout<<'E’<

void print() const {cout<<'C'<

void print(int x) {cout <<'P'<

private:

int r1;

};

int main() {

A a1;

const A a2(4);

a1.print(2);

a1.print();

return 0;

}运行时的输出结果是

A)P8-E4

B)P8-C16-

C)P0-E4-

D)P0-C16-

(30)下列代码声明了3个类

class Person{};

class Student:public Person{};

class Undergraduate:Student{};

下列关于这些类之间关系的描述中,错误的是

A)类Person是类Undergraduate的基类

B)类Undergraduate从类Student公有继承

C)类Student是类Person的派生类

D)类Undergraduate是类Person的派生类

(31)有如下程序

#include

using namespace std;

Class Base{

public:

Base(int x=0):valB(x) {cout<

~Base() {cout<

private:

int valB;

};

class Derived:public Base{

public:

Derived(int x=0,int y=0):Base(x),valD(y){cout<

~Derived() {cout<

private:

int valD;

};

int main(){

Derived obj12(2,3);

retuen 0;

}运行时的输出结果是

A)2332

B)2323

C)3232

D)3223

(32)下面是类Shape的定义:

class Shape{

public:

virtual void Draw()=0;

};

下列关于Shape类的描述中,正确的是

A)类Shape是虚基类

B)类Shape是抽象类

C)类Shape中的Draw函数声明有误

D)语句“Shape s;”能够建立Shape的一个对象s

(33)将运算符“+”重载为非成员函数,下列原型声明中,错误的是

A)MyClock operator + (MyClock,long);

B)MyClock operator + (MyClock,MyClock);

C)MyClock operator + (long,long);

D)MyClock operator + (long,MyClock);

(34)打开文件时可单独或组合使用下列文件打开模式

①ios_base::app ②ios_base::binary

③ios_base::in ④ios_base::out

若要以二进制读方式打开一个文件,需使用的文件打开模式为

A)①③

B)①④

C)②③

D)②④

(35)有如下程序:

#include

using namespace std;

Class B{

public:

B(int xx):x(xx) {++cout; x+=10;}

virtual void show() const

{cout<

protected:

static int count;

private:

int x;

};

class D:public B{

public:

D(int xx,int yy):B(xx),y(yy) {++count; y+=100;}

virtual void show() const

{cout<

private:

int y;

};

int B::count=0;

int main(){

B ptr=new D(10,20);

ptr->show();

delete ptr;

return 0;

}运行时的输出结果是

A)1_120

B)2_120

C)1_20

D)2_20

二、填空题(每空2分,共30分)

请将每一个空的正确写在答题卡【l】~【15】序号的横线上,答在试卷上不得分。

(1)一个队列的初始状态为空。现将元素A,B,C,D,E,F,5,4,3,2,1依次入队,然后再依次退队,则元素退队的顺序为 【1】 。

(2)设某循环队列的容量为50,如果头指针front=45(指向队头元素的前一位置),尾指针rear=10(指向队尾元素),则该循环队列有 【2】 个元素。

(3)设二叉树如下:

对该二叉树进行后序遍历的结果为 【3】 。

(4)软件是 【4】 、数据和文档的。

(5)有一个学生选课的关系,其中学生的关系模式为:学生(学号,姓名,班级,年龄),课程的关系模式为:课程(课号,课程名,学时),其中两个关系模式的键分别是学号和课号,则关系模式选课可定义为:选课(学号, 【5】 ,成绩)。

(6)若x和y是两个整形变量,在执行了语句序列

x=5; y=6; y+=x--;

后,x+y的值为 【6】 。

(7)在执行语句序列

int i=0; do i++; while(ii<10);

时,do后面的循环体语句i++被执行的次数为 【7】 。

(8)有如下的函数定义:

int Xfun(int a, int n){

int x=a;

for(int pa=a+1; pa<>

if(pa>x) x=pa;

return x;

}若执行了语句

int x[5]={23,46,78,55,16};

后,通过表达式Xfun(x,5)调用该函数,则得到的返回值为 【8】 。

(9)有如下的函数定义:

int Xfun(int x){

int y=x;

{int x=10; y+=x;}

return x+y;

}通过表达式Xfun(5)调用该函数,则得到的返回值为 【9】 。

(10)定Xcs是一个类,该类中一个成员函数的原型为“Xcs abc();”,则在类外定义时对应的函数头为 【10】 。

(11)请将下面的类Date的定义补充完整,使得由语句

Date FirstDay;

定义的对象FirstDay的值为2010年1月1日。

class Date{

public:

Date( 【11】 ):year(y),month(m),day(d){ }

private:

int year,month,day; //依次表示年、月、日

};

(12)请将下面的程序补充完整,使得程序输出“飘是张娜的书”。

#include

using namespace std;

class Book{

public:

Book(char str) {strcpy(title,str);}

【12】 void PrintInfo() {cout<

protected:

char title[50];

};

class MyBook:public Book{

public:

MyBook(char s1,char s2="张娜"):

【13】 {strcpy(owner,s2);}

virtual void PrintInfo() {cout<

private:

char owner[10];

};

int main(){

Book prt=new MyBook("飘");

prt->PrintInfo();

return 0;

}(13)在有理数类Rational中重载插入运算符<<,以便按a/q形式输出。请将<<运算符函数的定义补充完整。

class Rational{

public:

Rational(int aa, int qq):a(aa),q(qq){ }

friend 【14】 operator<<(ostream &out, Rational &x)

{return (out<

}private:

int a,q;

};

(14)下面的函数定义是某函数模板能够生成的函数实例

int square(int n) {return nn;}

double square(double n) {return nn;}

由此可知,该函数模板的定义是 【15】 。

计算机二级C语言测试题及解析

2017年计算机二级C语言测试题及解析

全国计算机等级考试(National Comr Rank Examination,以下简称 NCRE),是经原教育委员会(现)批准,由考试中心主办,面向,用于考查非计算机专业应试人员计算机应用知识与技能的全国性计算机水平考试体系。下面是2017年计算机二级C语言测试题及解析。欢迎阅读。

2017年计算机二级C语言测试题及解析 1.(A )是构成C语言程序的基本单位。

A、函数

B、过程

C、子程序

D、子例程

2.C语言程序从 C 开始执行。

A、 程序中条可执行语句

B、 程序中个函数

C、 程序中的main函数

D、包含文件中的个函数

3、以下说法中正确的是( C )。

A、C语言程序总是从个定义的函数开始执行

B、在C语言程序中,要调用的函数必须在main( )函数中定义

C、C语言程序总是从main( )函数开始执行

D、C语言程序中的main( )函数必须放在程序的开始部分

4.下列关于C语言的说法错误的是( B ) 。

A、 C程序的工作过程是编辑、编译、连接、运行

B、 C语言不区分大小写。

C、 C程序的三种基本结构是顺序、选择、循环

D、C程序从main函数开始执行

5.下列正确的标识符是(C)。

A、-a1

B、a[i]

C、a2_i

D、int t

5~8题为相同类型题

考点:标识符的命名规则

只能由字母、数字、下划线构成

数字不能作为标识符的开头

关键字不能作为标识符

选项A中的“-” ,选项B中“[”与“]”不满足(1);选项D中的int为关键字,不满足(3)

6.下列C语言用户标识符中合法的是(B )。

A、3ax

B、x

C、case

D、-e2 E)union

选项A中的标识符以数字开头不满足(2);选项C,E均为为关键字,不满足(3);选项D中的“-”不满足(1);

7.下列四组选项中,正确的C语言标识符是( C )。

A、 %x

B、a+b

C、a123

D、123

选项A中的“%” ,选项B中“+”不满足(1);选项D中的标识符以数字开头不满足(2)

8、下列四组字符串中都可以用作C语言程序中的标识符的是( A)。

A、print _3d db8 aBc

B、Iam one_half start$it ai

C、str_1 Cpp pow while

D、Pxq My->book line# His.age

选项B中的“”,”$” ,选项D中“>”,”#”,”.”,”-”不满足(1);选项C中的while为关键字,不满足(3)

9.C语言中的简单数据类型包括(D )。

A、整型、实型、逻辑型

B、整型、实型、逻辑型、字符型

C、整型、字符型、逻辑型

D、整型、实型、字符型

10.在C语言程序中,表达式5%2的结果是 C 。

A、2.5

B、2

C、1

D、3

%为求余运算符,该运算符只能对整型数据进行运算。且符号与被模数相同。5%2=1; 5%(-2)=1;(-5)%2=-1;(-5)%(-2)=-1;

/为求商运算符,该运算符能够对整型、字符、浮点等类型的数据进行运算,5/2=2

11.如果int a=3,b=4;则条件表达式"aA、 3

B、 4

C、 0

D、1

详见教材P97.

表达式1?表达式2:表达式3

先计算表达式1,

若表达式1成立, 则选择计算表达式2,并表达式2的值作为整个大表达式的值;

若表达式1不成立,则选择计算表达式3,并将表达式3的值作为整个大表达式的值

此题中的aa为3,b为4。a12.若int x=2,y=3,z=4 则表达式x

A、4

B、3

C、2

D、0

E)1

13.C语言中,关系表达式和逻辑表达式的值是( B ) 。

A、0

B、 0或1

C、 1

D、‘T’或’F’

14. 下面( D )表达式的值为4.

A、 11/3

B、 11.0/3

C、 (float)11/3

D、 (int)(11.0/3+0.5)

14~16题为同一类型

详见教材P54~56.

(1)相同数据类型的元素进行数算(+、-、、/)得到结果还保持原数据类型。

(2)不同数据类型的元素进行数算,先要统一数据类型,统一的标准是低精度类型转换为高精度的数据类型。

选项A,11与3为两个整数,11/3结果的数据类型也应为整数,因此将3.666666的小数部分全部舍掉,仅保留整数,因此11/3=3.

选项B,11.0为实数,3为整数,因此首先要统一数据类型,将整型数据3转换为3.0,转换后数据类型统一为实型数据,选项B变为11.0/3.0,结果的数据类型也应为实型数据,因此选项B 11.0/3=3.666666

选项C,先将整数11强制类型转换,转换为实型11.0,因此选项C变为11.0/3,其后计算过程、结果与选项B同

选项D,首先计算11.0/3,其计算过程、结果与选项B同,得到3.666666;再计算3.666666+0.5=4.166666,后将4.166666强制类型转换为整型,即将其小数部分全部舍掉,结果为4

15.设整型变量 a=2,则执行下列语句后,浮点型变量b的值不为0.5的是( B)

A、b=1.0/a

B、b=(float)(1/A、

C、b=1/(float)a

D、b=1/(a1.0)

16. 若“int n; float f=13.8;”,则执行“n=(int)f%3”后,n的值是(A)

A、1

B、4

C、4.333333

D、4.6

“(int)f“表示将f中的值强制类型转换为整型,即将13.8的小数部分舍掉,转换为13;然后计算13%3,结果为1,再将结果赋给变量n,因此n的值为1

17. 以下对一维数组a的正确说明是: D

A、char a(10);

B、 int a[];

C、int k=5,a[k];

D、char a[3]={‘a’,’b’,’c’};

详见教材P143~144,一维数组的定义、初始化

类型符 数组名 [常量表达式]

类型符是指数组中数组元素的类型;数组名要符合标识符命名规则;常量表达式是指数组的长度(数组中包含元素的个数),其值只能是整数,不可以是变量,而且从1开始计数。

选项A,常量表达式只能放在中括号 [ ]中

选项B,只有在对数组初始化(即赋值)的时候才可以省略数组的长度,B中并未对a进行初始化。

选项C,常量表达式不能为变量。

18.以下能对一维数组a进行初始化的.语句是:( C )

A、int a[5]=(0,1,2,3,4,)

B、 inta(5)={}

C、 int a[3]={0,1,2}

D、 int a{5}={101}

详见教材P145,一维数组的定义、初始化

选项B,D,常量表达式只能放在中括号 [ ]中

选项A,数组可以看做是若干个相同数据类型元素的有序,因此以的形式对其初始化,使用{ }对其初始化,选项A用了().

19.在C语言中对一维整型数组的正确定义为 D 。

A、int a(10);

B、int n=10,a[n];

C、int n;a[n];

D、#define N 10

int a[N];

20、已知:int a[10]; 则对a数组元素的正确引用是( D )。

A、a[10]

B、a[3.5]

C、a(5)

D、a[0]

详见教材P144,数组元素的引用

数组名[下标]

引用数组元素时,[ ]中的下标为逻辑地址下标,只能为整数,可以为变量,且从0开始计数

int a[10]表示定义了一个包含10个整型数据的数组a,数组元素的逻辑地址下标范围为0~9,即a[0] 表示组中第1个元素; a[1] 表示组中第2个元素; a[2] 表示组中第3个元素; ......;a[9] 表示组中第10个元素.

选项A,超过了数组a的逻辑地址下标范围;

选项B,逻辑地址下标只能为整数

选项C,逻辑地址下标只能放在[ ]中

21.若有以下数组说明,则i=10;a[a[i]]元素数值是(C)。

int a[12]={1,4,7,10,2,5,8,11,3,6,9,12};

A、10

B、9

C、6

D、5

先算a[a[i]]内层的a[i],由于i=10,因此a[i]即a[10].

a[10]对应下面数组中的元素为9. 因此a[a[i]]即为a[9]

a[9]对应下面数组中的元素为6. 因此a[9]即为6

22.若有说明:int a[][3]={{1,2,3},{4,5},{6,7}}; 则数组a的维的大小为: ( B )

A、2

B、3

C、4

D、无确定值

5 7

D、3 6 9

二维数组的一维大小,即指二维数组的行数,在本题中,按行对二维数组赋值,因此内层有几个大括号,数组就有几行

23.对二维数组的正确定义是(C)

详见教材P149~152,二维数组的定义、初始化

类型符 数组名 [常量表达式][常量表达式]

二维数组可以看做是矩阵

类型符是指数组中数组元素的类型;数组名要符合标识符命名规则;个常量表达式是指数组的行数;第二个常量表达式是指数组的列数;常量表达式的值只能是整数,不可以是变量,而且从1开始计数。

一维数组初始化时可以省略数组长度

二维数组初始化时可以省略行数,但不能省略列数

选项A,B,都省略了列数

选项D,不符合二维数组定义的一般形式,行、列常量表达式应该放在不同的[]中

A、int a[ ][ ]={1,2,3,4,5,6};

B、int a[2] []={1,2,3,4,5,6};

C、int a[ ] [3]={1,2,3,4,5,6};

D、int a[2,3]={1,2,3,4,5,6};

24.已知int a[3][4];则对数组元素引用正确的是__C___

A、a[2][4]

B、a[1,3]

C、a[2][0]

D、a(2)(1)

详见教材P150,数组元素的引用

数组名[下标] [下标]

引用数组元素时,[ ]中的下标为逻辑地址下标,只能为整数,可以为变量,且从0开始计数

个[下标]表示行逻辑地址下标,第二个[下标]表示列逻辑地址下标。

本题图示详见P149图6.7

因此a的行逻辑地址范围0~2;a的列逻辑地址范围0~3;

选项A,列逻辑地址下标超过范围

选项B,D,的引用形式不正确。

25.C语言中函数返回值的类型是由 A 决定的.

A、函数定义时指定的类型

B、 return语句中的表达式类型

C、 调用该函数时的实参的数据类型

D、形参的数据类型

26. 在C语言中,函数的数据类型是指(A )

A、 函数返回值的数据类型

B、 函数形参的数据类型

C、 调用该函数时的实参的数据类型

D、任意指定的数据类型

27.在函数调用时,以下说确的是( B)

A、函数调用后必须带回返回值

B、实际参数和形式参数可以同名

C、函数间的数据传递不可以使用全局变量

D、主调函数和被调函数总是在同一个文件里

28. 在C语言中,表示静态存储类别的关键字是: ( C )

A、 auto

B、 register

C、static

D、extern

29.未指定存储类别的变量,其隐含的存储类别为(A )。

A、auto

B、static

C、extern

D、register

30. 若有以下说明语句:

struct student

{ int num;

char name[ ];

float score;

}stu;

则下面的叙述不正确的是: (D )

A、 struct是结构体类型的关键字

B、 struct student 是用户定义的结构体类型

C、 num, score都是结构体成员名

D、 stu是用户定义的结构体类型名

31.若有以下说明语句:

struct date

{ int year;

int month;

int day;

}brithday;

则下面的叙述不正确的是__C___.

A、 struct是声明结构体类型时用的关键字

B、 struct date 是用户定义的结构体类型名

C、 brithday是用户定义的结构体类型名

D、year,day 都是结构体成员名

32. 以下对结构变量stul中成员age的非法引用是 B

struct student

{ int age;

int num;

}stu1,p;

p=&stu1;

A、 stu1.age

B、 student.age

C、 p->age

D、(p).age

33.设有如下定义:

struck sk

{ int a;

float b;

}data;

int p;

若要使P指向data中的a域,正确的赋值语句是 C

A、 p=&a;

B、 p=datA、a;

C、p=&datA、a;

D、p=datA、a;

34.设有以下说明语句:

typedef struct stu

{ int a;

float b;

} stutype;

则下面叙述中错误的是( D )。

A、struct是结构类型的关键字

B、struct stu是用户定义的结构类型

C、a和b都是结构成员名

D、stutype是用户定义的结构体变量名

35.语句int p;说明了 C 。

A、p是指向一维数组的指针

B、p是指向函数的指针,该函数返回一int型数据

C、p是指向int型数据的指针 // 指针的定义教材P223

D、p是函数名,该函数返回一指向int型数据的指针

36.下列不正确的定义是(A )。

A、int p=&i,i;

B、int p,i;

C.int i,p=&i;

D、int i,p;

选项A先定义一个整型指针变量p,然后将变量i的地址赋给p。然而此时还未定义变量i因此编译器无法获得变量i的地址。(A与C对比,选项C先定义变量i,则在内存中为i分配空间,因此i在内存空间的地址就可以确定了;然后再定义p,此时可以为p赋i的地址,C正确)

37. 若有说明:int n=2,p=&n,q=p,则以下非法的赋值语句是: (D )

A、p=q

B、p=q

C、n=q

D、p=n

p,q同为整型指针变量,二者里面仅能存放整型变量的地址。

选项A,q中为地址,因此可将此地址赋给p

选项B,p表示p所指向对象n的内容,即一个整数;q表示q所指向对象的内容,由于在定义q时为其初始化,将p中n的地址给q,因此p中存放n的地址,q表示q所指向对象n的内容.因此p=q 相当于 n=n;

选项C,n=q 等价于n=n;

选项D,p中只能存放地址,不能将n中的整数值赋给p

38.有语句:int a[10],;则 B 是对指针变量p的正确定义和初始化。

A、int p=a;

B、int p=a;

C、int p=&a;

D、int p=&a;

选项A,a是数组名,不是指针变量名,因此不可用标注数组名a

选项C,a是数组名,数组名就是地址,无需再用地址符号。而且在定义指针变量p时,应在变量名前加,标明p是指针变量

选项D,a是数组名,数组名就是地址,无需再用地址符号。

39.若有说明语句“int a[5],p=a;”,则对数组元素的正确引用是( C )。

A、a[p]

B、p[a]

C、(p+2)

D、p+2

首先定义一个整型数组a,a的长度为5,然后定义一个指针变量p,并同时对p进行初始化,将数组a的地址赋给p。因此此时p中存放的数组a的首地址,即数组中个元素a[0]的地址。

对于数组元素下标的引用(详见p144), 一般形式 数组名[下标] 其中下标为逻辑地址下标,从0开始计数,方括号中的下标可以是变量,可以是表达式,但结果一定要是整数。

选项A,p中存放的是地址,不是整数,不能做数组元素的下标

选项B,a是数组名,数组名就是地址,不是整数,不能做数组元素的下标

选项C,(重点!!!详见p231~234) p+2表示指向同一数组中的下两个元素的地址,当前p指向a[0],则p+2表示a[2]的地址,因此(p+2)表示a[2]的内容

40. 有如下程序

int a[10]={1,2,3,4,5,6,7,8,9,10},P=a;

则数值为9的表达式是 B

A、 P+9

B、 (P+8)

C、 P+=9

D、P+8

(重点!!!详见p231~234)

首先定义一个整型数组a,a的长度为5,然后定义一个指针变量P,并同时对P进行初始化,将数组a的地址赋给P。因此此时P中存放的数组a的首地址,即数组中个元素a[0]的地址。

数组中9对应的是a[8], 选项B,P+8表示数组中后8个元素的地址,即a[8]的地址。(P+8)则表示该地址内所存放的内容,即a[8]的值。

选项A,P表示P所指向对象的内容,此时P指向a[0], P即a[0]的值1. P+9=1+9=10

选项C,P表示P所指向对象的内容,此时P指向a[0], P即a[0]的值。因此P+=9 即P =P+9, 等价于a[0]=a[0]+9.

选项D,P+8表示数组中后8个元素的地址,即a[8]的地址,而非a[8]中的值。

41. 在C语言中,以 D 作为字符串结束标志

A、’

B、’ ’

C、 ’0’

D、’0’

42.下列数据中属于“字符串常量”的是(A )。

A、“a”

B、{ABC}

C、‘abc0’

D、‘a’

若干个字符构成字符串

在C语言中,用单引号标识字符;用双引号标识字符串

选项B,C,分别用{}和’’标识字符串

选项D,标识字符。

43.已知char x[]="hello", y[]={'h','e','a','b','e'};, 则关于两个数组长度的正确描述是 B .

A、相同

B、x大于y

C、x小于y

D、以上都不对

C语言中,字符串后面需要一个结束标志位'0',通常系统会自动添加。

对一维数组初始化时可采用字符串的形式(例如本题数组x),也可采用字符的形式(例如本题数组y)。在以字符串形式初始化时,数组x不尽要存储字符串中的字符,还要存储字符串后的结束标志位,因此数组x的长度为6;在以字符形式初始化时,数组y,仅存储中的元素,因此数组y长度为5

;

急!!历年计算机二级c语言笔试真题。

选择:1-5ABDDB 6-10 ACDCB 11-15CDAAA 16-20 BDCAD 21-25BDBCD 26-30CDCCA 31-35CBCDB 36-40CDDCB

填空:1,顺序 2,DEBFCA 3,单元 4,主键 5,D 6,3 7,1217 8,09 9,4 10,20 0 11,i-1 12,double g(double a,double b) 13,13715 14,emoclew 15,123456