XXXX大学课程考试试卷(学生考试用) | |
课程名称: VC++程序设计 学分: 4 教学大纲编号: 06000702 试卷编号: 0600070210 A 考试方式: 闭卷 满分分值: 100 考试时间: 120 分钟 组卷日期: 2010年 1月 15日 组卷教师(签字): XXXXXX 审定人(签字): | C. 枚举常量MINUS的值为6 D.枚举常量PRINT的值为10 9. int a[5],*p; 错误的语句是: 【9】 。 A.p=p+1; B.a=a+1; C.p=a; D.p=a+2; 10.有如下的定义语句:typedef char * PCHAR;下列语句正确的是 【10】 。 A.PCHAR *p="abcd"; B.PCHAR *p='a'; C.PCHAR p='a'; D.PCHAR p="Hello"; 11. char c='b';则表达式'A'<=c<='Z'&&++c的值及变量c的值分别为 【11】 。 A.1 'b' B.0 'b' C.1 'c' D.0 'c' 12.下列程序的输出结果为 【12】 。 char a[20]="welcome",b[5]="well"; strcpy(a,b); cout<<a<<endl; A.Wellome B.well C.wel D.welcomewell 13. 下列程序的输出结果为 【13】 。 #include<iostream.h> int f(int a, double b) { return a+b;} double f(double b,int a) { return a*b;} void main() { int x=2; double y=3.0; cout<<f(x,y)<<endl; } A.5 B.6 C.程序不能运行 D.以上答案都不对 14.已知函数f的原型是void f(int *a , int &i),变量v1,v2的定义为int v1,v2[10]; 则下面调用正确的语句是 【14】 。 A.f(v2[10],&v1); B.f(v2,&v1); C.f(v2[10],v1); D.f(v2,v1); 15.若有如下的说明和语句:int a[7][8],*p=a[0]; 现要使指针p指向a[4][6],以下正确的答案是 【15】 。 A.p+=3*8+6 B.p+=4*8+6 C.p+=(3*8+6)*sizeof(int) D.p+=(4*8+6)*sizeof(int) 16.设有结构类型定义及变量声明如下: struct product{ int code; float price; }y[3]={{200,100},{201, 200},{202, 300}},*p=y; 以下结果不是输出201的是 【16】 。 A.cout<<++p->code; B.cout<<(*++p).code; C.cout<<(++p)->code; D.cout<<p->code++; 17.假定MyClass为一个类,则执行MyClass a,b(2),c[2],*p; 语句时自动调用该类构造函数 【17】 次。 A.2 B.3 C.4 D.5 18.在一个派生类的成员函数中,试图调用基类的成员函数void f(); 但无法通过编译,这说明 【18】 。 A.f()是基类的私有成员 B.f()是基类的保护成员 C.派生类的继承方式为私有 D.派生类的继承方式为保护 |
一、 选择题(每题1分,共20分) 1.下面可以用作C++标识符的是 【1】 。 A.2010var B.private C.test-2010 D._123 2.有如下程序段: int i=1; while(1){ i++; if(i==10) break; if(i%2==0) cout<<'*'; } 执行这个程序段输出字符*的个数是 【2】 。 A.10 B.3 C.4 D.5 3.下列关于C++函数的叙述中,正确的是 【3】 。 A.每个函数至少要具有一个参数 B.每个函数都必须返回一个值 C.函数在被调用之前必须先声明 D.函数不能自己调用自己 4.有函数定义如下: int fib(int n) { if(n==0) return 1; else if(n==1) return 2; else return fib(n-1)+fib(n-2); } 若有语句:int n=fib(2); 则函数fib被调用的次数一共是 【4】 。 A.1 B.2 C.3 D.4 5.以下对二维数组的说明中,存在语法错误的是 【5】 。 A.int a[][3]={3,2,1,1,2,3}; B.int a[][3]={{3,2,1},{1,2,3}}; C.int a[2][3]={1}; D.int a[2][ ]={{3,2,l},{1,2,3}}; 6.若有以下宏定义: #define N 2 #define Y(n) ((N+1)*n) 则执行语句z=2*(N十Y(5)); 后的结果是 【6】 。 A.语句有错误 B.z=34 C.z=70 D.z无定值 7.若有变量定义:int a=3,b=5,c; 则执行语句:c=a>b?++a: ++b; 变量c的值为 【7】 。 A.3 B.4 C.5 D.6 8.已知枚举类型定义语句为: enum Token { NAME, NUMBER, PLUS = 5, MINUS, PRINT = 10 }; 则下列叙述中错误的是 【8】 。 A. 枚举常量NAME的值为1 B. 枚举常量NUMBER的值为1 | |
第 1 页 共 4 页
课程名称: VC++程序设计 学分: 4 试卷编号: 0600070210 A | 2.下面程序的输出结果是 【2】 。 #include<iostream.h> int fun(int x) { int s=0; for(int i=2;i<=x;i++) if(x%i==0) { x/=i; s+=i; } return s; } void main(void) { for(int i=10;i<20;i++) if(i==fun(i)) cout<<i<<'\t'; } 3. 下面程序的输出结果是 【3】 。 #include<iostream.h> int f(int i) { static int k=1; for(;i>0;i--) k+=i; return k; } void main() { int i; for(i=0;i<3;i++) cout<<f(i); } 4. 以下程序的执行结果是 【4】 。 #include<iostream.h> void fun( int &x, int y ) { x=x+y; y=x-y ; } void main( ) { int a=10,b=20 ; fun(a,b); cout<<a<<'\t'<<b<<'\n' ; } 5. 下面程序的输出结果为 【5】 。 结构体数组不能作为参数传递给函数#include<iostream.h> #include<string.h> void main() { char *a[5]={"student","worker","cadre","soldier","peasant"}; char *p1,*p2; p1=p2=a[0]; for(int i=0; i<5; i++) { if(strcmp(a[i],p1)>0) p1=a[i]; if(strcmp(a[i], p2)<0) p2=a[i]; } cout<<p1<<' '<<p2<<endl; } |
19.设有类T的定义为 class T{ int x; public: T(int a){x=a;} }; 若程序中有以下四条说明语句,则说明正确的是 【19】 。 T a; //(1) T b(4); //(2) T c=b; //(3) T d(b); //(4) A.(1),(2),(3),(4) B.(1), (2) ,(3) C.(2),(3) D.(2),(3),(4) 20.要利用C++流进行文件操作,必须在程序中包含的头文件是 【20】 。 A.iostream.h B.fstream.h C.strstream.h D.iomanip.h 二、基本概念填空题(每题2分,共20分) 1. C++程序的源程序文件的扩展名为 【1】 。 2. C++函数的参数传递方式有三种:值传递、 【2】 和引用传递。 3. C++中编译预处理包括:宏、 【3】 和条件编译。 4. 若有定义char *p="0123456789"; 则strlen(p)的结果为 【4】 。 5. 若有定义char p[100]; 则sizeof(p)的结果是 【5】 。 6. 若有说明语句:float a[]={10,20,30,40,50}; int b=&a[4]-&a[0]; 则执行语句后,b的值为 【6】 。 7. 假定指针p所指向的变量x的值为25,p+1所指向的变量y的值为46,则执行(*p)++; 语句后,p所指向的变量的值为 【7】 。 8. C++中表达式"I am a student"的值为该字符串的 【8】 。 9.面向对象思想主要特征是封装性、 【9】 和多态性。 10.类继承中,缺省的继承方式是 【10】 。 三、阅读程序填空题(每小题3分,共30分) 1. 写出下面程序的输出结果是 【1】 。 #include<iostream.h> int a=2; void main() { int b=2,c=3; ++a; c+=++b; if(++a||++b||++c) cout<<"first:"<<a<<' '<<b<<' '<<c<<endl; { int a=3,c; c=b*3; a+=c; cout<<"second:" <<a<<' '<<b<<' '<<c<<endl; } a+=c; cout<<"third:" <<a<<' '<<b<<' '<<c<<endl; } | |
第 2 页 共 4 页
课程名称: VC++程序设计 学分: 4 试卷编号: 0600070210 A | 9. 下列程序的输出结果是 【9】 。 #include<iostream.h> class A{ public: virtual void func1(){cout<<"A1";} void func2(){cout<<"A2";} }; class B: public A{ public: void func1(){cout<<"B1";} void func2(){cout<<"B2";} }; void main() { A *p=new B; p->func1(); p->func2(); } 10. 下列程序的输出结果是 【10】 。 #include<iostream.h> #include<string.h> class X{ char *a; public: X(char *aa="abc") { a=new char[strlen(aa)+1]; strcpy(a,aa); } ~X() { cout<<a<<"被释放"<<endl; delete[]a; } char *Geta() { return a ; } }; void main(void) { char *p1="1234"; X s1,s2(p1); cout<<s1.Geta()<<s2.Geta()<<endl; } 四、程序完善题(每空2分,共20分) 1.以下程序实现用牛顿迭代法求的一个实根。其中,,迭代公式为:,的初值为0,当时迭代结束。 #include<iostream.h> #include<math.h> double f(double x) { return x*x+4*x-5; } double df(double x) // f(x)的导数 { return 2*x+4; } double Newton( 【1】 ) { double x1=x0; do{ 【2】 ; x1= 【3】 ; }while(fabs(f(x1))>1e-5); return x1; } |
6. 程序的输出结果为 【6】 。 #include<iostream.h> void SB(char ch) { switch(ch) { case 'A' : case 'a': cout<<"well!"; break; case 'B': case 'b': cout<<"good!"; break; case 'C': case 'c': cout<<"pass!"; break; default: cout<<"bad!"; break; } cout<<endl; } void main() { char a1='b', a2='c', a3='f'; SB(a1); SB(a2); SB(a3); SB('A'); cout<<endl; } 7. 下列程序的输出结果为 【7】 。 #include<iostream.h> int f(int x[],int n) { if(n==1) x[n]=3; else x[n]=n+f(x,n-1); return x[n]; } void main(void) { int b[5]={3,4,5,6,0}; f(b,3); for(int i=0;i<5;i++) cout<<b[i]<<'\t'; cout<<endl; } 8. 下列程序的输出结果为 【8】 。 #include<iostream.h> class A { int a; public: A(int a1=0){a=a1;} ~A(){cout<<"Run destructor A"<<a<<endl;} }; class B:public A { int b; public: B(int a1=0,int b1=0):A(a1){b=b1;} ~B(){cout<<"Run destructor B"<<b<<endl;} }; void main() { B m(3), n(4,5); } | |
第 3 页 共 4 页
课程名称: VC++程序设计 学分: 4 试卷编号: 0600070210 A | node *change(node *pa,int x) { node *pl,*p2,*p; pl=p2=pa; p=new node; //生成新结点 p->data=x; while(p2->data<x&&p2->next!=0) //寻x应插入的位置 { pl=p2; 【8】 ; } if(p2->next!=0) { if(p2==pa)//如果插入的位置是头结点之前 pa=p; else pl->next =p; p->next=p2; while(p2!=0) //通过循环,将插入结点之后所有数据域小于x的结点作为新的头结点 { if(p2->data<x) { 【9】 ; p2->next=pa; pa=p2; p2=pl->next; } else { pl= p2; p2=p2->next; } } } else//如果链表中所有结点数据域均小于x,则在链尾插入以x为数据域的新结点 { p2->next=p; 【10】 ; } return pa; } 五、编程题(10分) 试定义一个类ARRAY,实现对一维整型数组的排序。排序的规则如下:将一维数组中各元素按其各位的数字之和从小到大排序。具体要求如下: (1)私有数据成员: ● int a[100]; 待排序的数组; ● int n; 数组中元素的个数; (2)公有成员函数 ● ARRAY(int t[], int m); 构造函数,利用参数t初始化成员a,参数m为数组t中元素的个数,用参数m初始化成员n; ● int sum(int x); 求整数x的各位数字之和,并返回该值,此函数供成员函数fun()调用; ● void fun(); 按要求对数组a的元素排序; ● void print(); 输出数组a的所有元素。 (3)在主函数中对该类进行测试。 要求输出的结果如下: 排序前的数组为:297, 735, 624, 158, 312, 900 排序后的数组为:312, 900, 624, 158, 735, 297 |
void main() { cout<<Newton(0.0)<<endl; } 2.以下程序功能是将两个无序的字符串合并成一个按照ASCII码从小到大顺序排列的字符串。 例:有两个字符串:"hgfdr"和"nmbfqa",则合并后的字符串为"abdffghmnqr"。 #include <iostream.h> #include <string.h> void chsort(char s[],int n) { int i,j; for(i=0;i<n-1;i++) for(j=0;j<n-1-i;j++) if( 【4】 ) { char t; t=s[j]; s[j]=s[j+1]; s[j+1]=t; } } void merge(char *pa,char *pb,char *pc) { while(*pa&&*pb) *pc++=(*pa<*pb)?*pa++: 【5】 ; if(*pa) while( 【6】 ); else while( 【7】 ); } void main(void) { char a[50]="hgfdr",b[50]="nmbfqa",c[100]; chsort(a,strlen(a)); chsort(b,strlen(b)); merge(a,b,c); cout<<a<<endl<<b<<endl<<c<<endl; } 3.下列程序中的函数change(node *pa,int x)的功能是:调整pa指向的链表中结点的位置。根据参数x的值,使链表中各结点数据域小于x的结点放在链表的前半部,大于等于x的结点放在链表的后半部,并将x插入这两部分结点之间。 算法提示:首先将数据域为x的结点插入到链表中的适当位置,然后将该插入点后的链表结点中所有数据域小于x的各个结点从原链表中断开,并插入到链表的头部,作为链表的新的头结点。 例如,原链表上各结点的数据依次为: 4, 2, 8, 9, 6, 10 若:x=7,经插入新结点后,新链表的各结点数据依次为: 6,4,2,7,8,9,10 #include<iostream.h> struct node { int data; node *next; }; | |
第 4 页 共 4 页
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论