vc++期末考试题2012年及答案
关于元旦的图片-公司节能减排方案
南阳理工大学课程考试试卷
(学生考试用)
课程名称:
VC++程序设计
学分: 4
大纲编号 06000702
试卷编号: A
考试方式: 闭卷 满分分值: 80 考试时间: 120 分钟
组卷日期:
2012年6月15日 组卷教师
(签字)
:
审定人
(签字)
:
学生班级: 计算机系11级
学生学号: 学生姓名:
说明:1.所有试题做在答卷纸上
2.考试完毕后连考卷一起交上
一、单项选择题(每题2分,共40分)
1. 以下说明语句中,不存在语法错误的是
。
A) int 10long; B) int _2int;
C) float X3-Dmax; D) char [20];
2.
设有说明语句:int d,e; 以下选项中,存在语法错误的是 。
A)
d=9+e==d+2; B) d=e+=2;
C) f=g+f=j*k++;
D)(++d)++;
3. 设有说明语句: float y=5.16347 int x;
则以下表达式中,可以实现将y中的数值
保留小数点后2位,第三位四舍五入的表达式是_______
_。
A) y=(y*100+0.5)100.0 B)
x=y*100+0.5,y=x100.0
C) y=y*100+0.5100.0
D) y=(y100+0.5)*100.0
4. 设有语句:char
x=-6,y=10,z;
z=x^y<<2;(其中<<的优先级高于^),则z的二进制
值是________。
A) 00101110 B) 11111000
C)
11111010 D) 11010010
5.
下面程序段所表示的数学函数关系是________。
x=-1;
if(a!=0)
{if(a>0) x=1;}
else x=0;
-1 (a<0) 1 (a<0)
A)x= 0 (a=0)
B)x= -1 (a=0)
1 (a>0) 0
(a>0)
0 (a<0) -1 (a<0)
C)x= -1 (a=0) D)x= 1 (a=0)
1
(a>0) 0 (a>0)
第 1 页
6. 设有定义:int a=1,b=10;
则执行以下循环语句后,a和b的值分别为 。
do{ b-=a;
a++;
}while(b--<0);
A) 8 2 B) -2 -1
C) -1 8 D)2 8
7. 设有宏定义如下:
#define
MIN(x,y) (x)>(y)?(x):(y)
#define T(x,y,r)
x*r*y4
则执行以下语句后,s1和s2的值分别为 。
int
a=1,b=3,c=5,s1,s2;
s1=MIN(a=b,b-a);
s2=T(a++,a*++b,a+b+c)
A) 3 27 B) 27 3
C) 24 1 D) 3 24
8.
以下关于文件包含的描述中正确的是_____
A)
每个C++程序必须包含预处理命令:#include
B)
#include 后面的文件名用双引号()括起和尖括号(<>)括起完全等效
C)
#include 命令行可以出现在源程序中需要的任意行
D) 用#include
所包含的文件称为头文件,必须以.h作为扩展名
9.
设有函数调用语句:fun((x1,x2),x3,(x4,x5,x6));
该函数调用中实参的个数
是 。
A) 2 B)
3 C) 5 D) 6
10.
下列函数原型说明中,错误的是________。
A) int &f1();
B) int f2(double=5);
C) void f3(void
(*p)()); D) int f4(int a=0,int b);
11.
以下关于C++函数的描述中,正确的是________。
A)
内联函数就是定义在另一个函数体内部的函数
B)
函数体的最后一条语句必须是return语句
C)
c++要求在调用一个函数之前,该函数已定义或已有该函数的原型说明
D)
编译器会根据函数的返回值类型区分函数的不同重载形式
12.
以下叙述中不正确的是_________。
A)
在函数内的复合语句中定义的变量在本函数范围内有效
B) 形式参数是局部变量
C)
在函数内定义的变量只在本函数范围内有效
D) 在不同函数中可以使用相同名字的变量
13. 设有说明语句:char s[80]=”Hello”; int
a[20]={1,2}; 下列选项中,存在语法
错误的是________。
A)
cin>>s; B) cout<>a; D)
cout<
共 4 页
14. 若有说明语句:int y[ ][4]={0,0}; 则下面叙述不正确的是
。
A) 数组y的每个元素都可得初值0
B) 二维数组y的行数为1
C) 该说明等价于int y[ ][4]={0};
D)
只有元素y[0][0]和y[0][1]可得到初值0,其余元素均得不到初值0
15.
以下说明语句中,没有语法错误的是________。
A) int
a,*pa=&a,*pb=*pa; B) int aa,&b=aa,*pc=&b;
C) int c[10],&pc=c; D) int
dd,&u=&dd,*v=u;
16. 执行以下程序段后,m的值是 。
int a[2][3]={{1, 3, 5}, {7, 9, 11}};
int
m, *ptr;
ptr = &a[0][0];
m =
(*ptr)*(*ptr+2)*(*(ptr+4));
A) 编译出错 B)
27 C) 45 D)无定值
17.
设用以下程序段建立了sp与str的关系,则以下对字符串的引用不正确的是 。
char str[4][8]={
for (int n=0; n<4; n++)
sp[n]=str[n];
A) sp B) *sp
C) sp[0] D) *(sp+1)
18.
若有以下定义和赋值语句,且0≤i≤1,0≤j≤2,则以下对s数组元素地址的正确引用
形式是
。
int s[2][3]={0}, (*p)[3], i, j;
p=s;
A) (*(p+i))[j] B) *(p[i]+j)
C)
*(p+i)+j D) (p+i)+j
19. 若有函数max (a ,b)
,并且已使函数指针变量p 指向函数 max ,则利用函数指针调
用 max 函数的正确形式是
。
A) (*p)max(a,b) B) *p max(a,b) C)
p->max(a,b) D) (*p)(a,b)
20.
设有以下定义和语句,则以下表达式值为6的是________。
struct ss
{ int a; ss *b;};
ss
x[3]={5,&x[1],7,&x[2],9,'0'},*ptr;
ptr=&x[0];
A) ptr->a++ B) ptr++->a C) ptr->a
D) ++ptr->a
第 2 页
二、读程序,写出输出结果(每题3分,共12分)
1. #include
int f(int n)
a=3
{
a=3
int a=3;
b=70
if(n==3)
a=2;
else{
cout<<
a=n*f(n-2);
}
return a;
}
void main(void)
{
int b=7;
b=f(b);
cout<<
}
2. #include
int f(int &n,int &m)
{
static int k=10;
n+=m; k+=n; m+=k;
k=17
cout<<
k=45
return(n+m);
k=122 a=28 b=66
}
void main(void){
int a=3,b=4,k;
k=f(a,b)+f(a,b);
cout<<
}
3.
#include
char *str(char *p1, char
*p2)
{
char *p=p1;
while(*p)
p++;
*p++=' ';
while(*p++=*p2++);
*p++=' ';
return p1;
}
共 4 页
void main(void)
{
love Nanjing
char s1[50]=
I love Nanjing
char
s2[50]=
I love Nanjing love Nanjing Nanjing
char s3[]=
cout<
4.
#include
struct abc{
static int a;
int b;
}x,y;
int
abc::a=2;
void main(void)
{
x.b=6; y.b=8;
cout<
cout<
三、填程序,在空格位置填入合适的代码(每空2分,共8分)
以下函数Split()的功
能是把形参链表list分割成两条链表,data值为奇数的结
点保留在原链表上,值为偶数的结点移
到另一个链表中,并返回该链表。
【程序】
struct Node{
int data;
Node *next;
};
struct
LinkedList{
Node * head;
int size;
};
第 3 页
LinkedList
Split(LinkedList &list)
{
LinkedList
list2 = create();
Node * p1, * p2,
*p3;
p3=;
p1=p2=;
while(p2){
if(p2->data%2==0){
if(p2==)
=p2->next;
else
p1->next=p2->next;
--;
if(==0)
=p2;
else
p3->next=p2;
p3=p2;
p2=p2->next;
p3->next=0;
++;
}
else{
p1=p2;
p2=p2->next;
}
}
return(list2);
}
共 4
页
四、
写程序,根据要求编写程序(每题10分,共20分)
1、编写一个函数,对一个整数数组求对应元素的集合set(即不重复元素)
int
getIntSet(const int a[], int n, int set[])
形参a中的n个整数可能存在重复,要求把其中不重复的整数放入set中,并返回不重复
整数的个数。
例如,如果a={2,1,1,2,1,3},set应为{2,1,3},次序无所谓,返回3
,表示有3个
不重复元素。
2、输入n(n>=2)名学生的成绩(0-100),统计如下数据:
60分以下人数及百分比;
60-69分人数及百分比;
70-79分人数及百分比;
80-89分人数及百分比;
90-100分人数及百分比;
平均分;
要求,先输入n,再输入n个float值,然后输出统计结果。
提示,自行设计结构和函数来简化复杂性。注意使用动态内存。
参考答案
1、
int
getIntSet(const int a[], int n, int set[]){
int count = 0;
for(int i = 0; i < n; i++){
for(int j = i+1; j < n; j++)
if
(a[i]==a[j])
break;
if (j == n)
set[count++] = a[i];
}
return count;
}
2、
struct GradeLevel{ 成绩统计结构类型
float average; 平均分
int ac; 90-100分人数
int bc; 80-89分人数
int cc; 70-79分人数
int dc; 60-69分人数
int ec; 0-59 分人数
};
void printGradeLevel(const GradeLevel
&gl){
int number = + + + +
cout<<统计数据:
cout<<考生数量:平均成绩:
cout<<<<<<
cout<<<<<<
cout<<<<<<
cout<<<<<<
cout<<<<<<
}
void input(float a[],
int n){
for (int i = 0; i < n; i++)
cin>>a[i];
}
GradeLevel stat(const float
a[], int n){
GradeLevel level = {0};
float sum = 0;
for(int i = 0; i < n; i++){
占
占
占
占
占
sum += a[i];
if (a[i] >= 90)
++;
else if
(a[i] >= 80)
++;
else if (a[i] >= 70)
++;
else if (a[i] >= 60)
++;
else
++;
}
e = sum n;
return level;
}
void main(){
int
n = 0;
cout<<输入n=
cin>>n;
if (n < 2)
return;
float *a = new float[n];
input(a, n);
printGradeLevel(stat(a, n));
delete []a;
}
第 4 页
共 4 页
南阳理工大学课程考试试卷
(学生考试用)
课程名称:
VC++程序设计
学分: 4
大纲编号 06000702
试卷编号: A
考试方式: 闭卷 满分分值: 80 考试时间: 120 分钟
组卷日期:
2012年6月15日 组卷教师
(签字)
:
审定人
(签字)
:
学生班级: 计算机系11级
学生学号: 学生姓名:
说明:1.所有试题做在答卷纸上
2.考试完毕后连考卷一起交上
一、单项选择题(每题2分,共40分)
1. 以下说明语句中,不存在语法错误的是
。
A) int 10long; B) int _2int;
C) float X3-Dmax; D) char [20];
2.
设有说明语句:int d,e; 以下选项中,存在语法错误的是 。
A)
d=9+e==d+2; B) d=e+=2;
C) f=g+f=j*k++;
D)(++d)++;
3. 设有说明语句: float y=5.16347 int x;
则以下表达式中,可以实现将y中的数值
保留小数点后2位,第三位四舍五入的表达式是_______
_。
A) y=(y*100+0.5)100.0 B)
x=y*100+0.5,y=x100.0
C) y=y*100+0.5100.0
D) y=(y100+0.5)*100.0
4. 设有语句:char
x=-6,y=10,z;
z=x^y<<2;(其中<<的优先级高于^),则z的二进制
值是________。
A) 00101110 B) 11111000
C)
11111010 D) 11010010
5.
下面程序段所表示的数学函数关系是________。
x=-1;
if(a!=0)
{if(a>0) x=1;}
else x=0;
-1 (a<0) 1 (a<0)
A)x= 0 (a=0)
B)x= -1 (a=0)
1 (a>0) 0
(a>0)
0 (a<0) -1 (a<0)
C)x= -1 (a=0) D)x= 1 (a=0)
1
(a>0) 0 (a>0)
第 1 页
6. 设有定义:int a=1,b=10;
则执行以下循环语句后,a和b的值分别为 。
do{ b-=a;
a++;
}while(b--<0);
A) 8 2 B) -2 -1
C) -1 8 D)2 8
7. 设有宏定义如下:
#define
MIN(x,y) (x)>(y)?(x):(y)
#define T(x,y,r)
x*r*y4
则执行以下语句后,s1和s2的值分别为 。
int
a=1,b=3,c=5,s1,s2;
s1=MIN(a=b,b-a);
s2=T(a++,a*++b,a+b+c)
A) 3 27 B) 27 3
C) 24 1 D) 3 24
8.
以下关于文件包含的描述中正确的是_____
A)
每个C++程序必须包含预处理命令:#include
B)
#include 后面的文件名用双引号()括起和尖括号(<>)括起完全等效
C)
#include 命令行可以出现在源程序中需要的任意行
D) 用#include
所包含的文件称为头文件,必须以.h作为扩展名
9.
设有函数调用语句:fun((x1,x2),x3,(x4,x5,x6));
该函数调用中实参的个数
是 。
A) 2 B)
3 C) 5 D) 6
10.
下列函数原型说明中,错误的是________。
A) int &f1();
B) int f2(double=5);
C) void f3(void
(*p)()); D) int f4(int a=0,int b);
11.
以下关于C++函数的描述中,正确的是________。
A)
内联函数就是定义在另一个函数体内部的函数
B)
函数体的最后一条语句必须是return语句
C)
c++要求在调用一个函数之前,该函数已定义或已有该函数的原型说明
D)
编译器会根据函数的返回值类型区分函数的不同重载形式
12.
以下叙述中不正确的是_________。
A)
在函数内的复合语句中定义的变量在本函数范围内有效
B) 形式参数是局部变量
C)
在函数内定义的变量只在本函数范围内有效
D) 在不同函数中可以使用相同名字的变量
13. 设有说明语句:char s[80]=”Hello”; int
a[20]={1,2}; 下列选项中,存在语法
错误的是________。
A)
cin>>s; B) cout<>a; D)
cout<
共 4 页
14. 若有说明语句:int y[ ][4]={0,0}; 则下面叙述不正确的是
。
A) 数组y的每个元素都可得初值0
B) 二维数组y的行数为1
C) 该说明等价于int y[ ][4]={0};
D)
只有元素y[0][0]和y[0][1]可得到初值0,其余元素均得不到初值0
15.
以下说明语句中,没有语法错误的是________。
A) int
a,*pa=&a,*pb=*pa; B) int aa,&b=aa,*pc=&b;
C) int c[10],&pc=c; D) int
dd,&u=&dd,*v=u;
16. 执行以下程序段后,m的值是 。
int a[2][3]={{1, 3, 5}, {7, 9, 11}};
int
m, *ptr;
ptr = &a[0][0];
m =
(*ptr)*(*ptr+2)*(*(ptr+4));
A) 编译出错 B)
27 C) 45 D)无定值
17.
设用以下程序段建立了sp与str的关系,则以下对字符串的引用不正确的是 。
char str[4][8]={
for (int n=0; n<4; n++)
sp[n]=str[n];
A) sp B) *sp
C) sp[0] D) *(sp+1)
18.
若有以下定义和赋值语句,且0≤i≤1,0≤j≤2,则以下对s数组元素地址的正确引用
形式是
。
int s[2][3]={0}, (*p)[3], i, j;
p=s;
A) (*(p+i))[j] B) *(p[i]+j)
C)
*(p+i)+j D) (p+i)+j
19. 若有函数max (a ,b)
,并且已使函数指针变量p 指向函数 max ,则利用函数指针调
用 max 函数的正确形式是
。
A) (*p)max(a,b) B) *p max(a,b) C)
p->max(a,b) D) (*p)(a,b)
20.
设有以下定义和语句,则以下表达式值为6的是________。
struct ss
{ int a; ss *b;};
ss
x[3]={5,&x[1],7,&x[2],9,'0'},*ptr;
ptr=&x[0];
A) ptr->a++ B) ptr++->a C) ptr->a
D) ++ptr->a
第 2 页
二、读程序,写出输出结果(每题3分,共12分)
1. #include
int f(int n)
a=3
{
a=3
int a=3;
b=70
if(n==3)
a=2;
else{
cout<<
a=n*f(n-2);
}
return a;
}
void main(void)
{
int b=7;
b=f(b);
cout<<
}
2. #include
int f(int &n,int &m)
{
static int k=10;
n+=m; k+=n; m+=k;
k=17
cout<<
k=45
return(n+m);
k=122 a=28 b=66
}
void main(void){
int a=3,b=4,k;
k=f(a,b)+f(a,b);
cout<<
}
3.
#include
char *str(char *p1, char
*p2)
{
char *p=p1;
while(*p)
p++;
*p++=' ';
while(*p++=*p2++);
*p++=' ';
return p1;
}
共 4 页
void main(void)
{
love Nanjing
char s1[50]=
I love Nanjing
char
s2[50]=
I love Nanjing love Nanjing Nanjing
char s3[]=
cout<
4.
#include
struct abc{
static int a;
int b;
}x,y;
int
abc::a=2;
void main(void)
{
x.b=6; y.b=8;
cout<
cout<
三、填程序,在空格位置填入合适的代码(每空2分,共8分)
以下函数Split()的功
能是把形参链表list分割成两条链表,data值为奇数的结
点保留在原链表上,值为偶数的结点移
到另一个链表中,并返回该链表。
【程序】
struct Node{
int data;
Node *next;
};
struct
LinkedList{
Node * head;
int size;
};
第 3 页
LinkedList
Split(LinkedList &list)
{
LinkedList
list2 = create();
Node * p1, * p2,
*p3;
p3=;
p1=p2=;
while(p2){
if(p2->data%2==0){
if(p2==)
=p2->next;
else
p1->next=p2->next;
--;
if(==0)
=p2;
else
p3->next=p2;
p3=p2;
p2=p2->next;
p3->next=0;
++;
}
else{
p1=p2;
p2=p2->next;
}
}
return(list2);
}
共 4
页
四、
写程序,根据要求编写程序(每题10分,共20分)
1、编写一个函数,对一个整数数组求对应元素的集合set(即不重复元素)
int
getIntSet(const int a[], int n, int set[])
形参a中的n个整数可能存在重复,要求把其中不重复的整数放入set中,并返回不重复
整数的个数。
例如,如果a={2,1,1,2,1,3},set应为{2,1,3},次序无所谓,返回3
,表示有3个
不重复元素。
2、输入n(n>=2)名学生的成绩(0-100),统计如下数据:
60分以下人数及百分比;
60-69分人数及百分比;
70-79分人数及百分比;
80-89分人数及百分比;
90-100分人数及百分比;
平均分;
要求,先输入n,再输入n个float值,然后输出统计结果。
提示,自行设计结构和函数来简化复杂性。注意使用动态内存。
参考答案
1、
int
getIntSet(const int a[], int n, int set[]){
int count = 0;
for(int i = 0; i < n; i++){
for(int j = i+1; j < n; j++)
if
(a[i]==a[j])
break;
if (j == n)
set[count++] = a[i];
}
return count;
}
2、
struct GradeLevel{ 成绩统计结构类型
float average; 平均分
int ac; 90-100分人数
int bc; 80-89分人数
int cc; 70-79分人数
int dc; 60-69分人数
int ec; 0-59 分人数
};
void printGradeLevel(const GradeLevel
&gl){
int number = + + + +
cout<<统计数据:
cout<<考生数量:平均成绩:
cout<<<<<<
cout<<<<<<
cout<<<<<<
cout<<<<<<
cout<<<<<<
}
void input(float a[],
int n){
for (int i = 0; i < n; i++)
cin>>a[i];
}
GradeLevel stat(const float
a[], int n){
GradeLevel level = {0};
float sum = 0;
for(int i = 0; i < n; i++){
占
占
占
占
占
sum += a[i];
if (a[i] >= 90)
++;
else if
(a[i] >= 80)
++;
else if (a[i] >= 70)
++;
else if (a[i] >= 60)
++;
else
++;
}
e = sum n;
return level;
}
void main(){
int
n = 0;
cout<<输入n=
cin>>n;
if (n < 2)
return;
float *a = new float[n];
input(a, n);
printGradeLevel(stat(a, n));
delete []a;
}
第 4 页
共 4 页