蓝莓题库

蓝莓题库

欢迎来访!

网站首页证券答案 正文

中国大学mooc面向对象C++程序设计作业答案查询

作者2023-05-30 07:30:23证券答案 78 ℃0 评论

第1章 C++程序设计基础

1.1 简单的C++程序举例随堂测验

1、C++语言是从 两种语言发展来的。

1.2 变量与常量随堂测验

1、以下对C++中变量使用的说法,正确的是()。
    A、变量名可以随意命名
    B、变量必须先定义再使用
    C、变量可以不区分数据类型
    D、变量未初始化时,其值为零

2、常变量必须在定义时赋初值,且在程序的运行中值不可变。

1.3 文字常量随堂测验

1、以下常量表示中不正确的是()。
    A、-0
    B、‘\55’
    C、0x2a3
    D、‘103’

2、下列选项中属于字符串常量的是()。
    A、'hello'
    B、“ab0x123\0cd”
    C、Hello
    D、‘a’

1.4 C++运算符随堂测验

1、若x, y, z的初值均为1,则执行表达式w=++x||++y&&++z后,x, y, z的值分别为()。
    A、x=1, y=1, z=2
    B、x=2, y=2, z=2
    C、x=1, y=2, z=1
    D、x=2, y=1, z=1

2、设a是整型变量,初值是6,执行完表达式a+=a-=a*a后,a的值为()。
    A、36
    B、-60
    C、60
    D、0

3、在C++中,要求运算数必须是整型的运算符是()。
    A、%
    B、/
    C、<
    D、!

4、关系式x>=y>=z的C++语言表达式是()。
    A、(x>=y)&&(y>=z)
    B、(x>=y)||(y>=z)
    C、(x>=y>=z)
    D、(x>=y)&(y>=z)

5、设a、b、c都是int型变量,a=3, b=4, c=5,下列表达式中,值为0的表达式是()。
    A、‘a’&&’b’
    B、a<=b
    C、a||b+c&&b-c
    D、!((a<b)&&!c||1)

6、下列语句中符合C++语法的语句是()。
    A、a=7+b+c=a+7;
    B、a=7+b++=a+7;
    C、a=7+b, b++, a+7
    D、a=7+b, c=a+7;

7、设x=3, y=5, 表达式x=y==3运算后的值为 。

8、表示10<x<100或x<0的C++表达式是 。

1.5 位运算随堂测验

1、下面程序的运行结果是()。 #include <iostream> using namespace std; void main() { int x=040; cout<<(x=x<<1)<<endl; }
    A、100
    B、160
    C、120
    D、64

2、下列程序的运行结果是 。 #include <iostream> using namespace std; void main( ) { int n1, n2; n1=123, n2=234; cout<< n1 & n2<<endl; cout << n1 | n2 <<endl; cout<< n1 ^ n2 <<endl; }

3、下列程序的运行结果是 。 #include <iostream> using namespace std; void main() { int num=39, mask; num >>= 3; mask = ~ ( ~0 << 3); cout<<"result="<<hex<<num & mask<<endl; }

4、下列程序的运行结果是 。 #include <iostream> using namespace std; void main() { unsigned a=3,b; b=~a|a<<2+1; cout<<hex<<b<<endl; }

5、设a, b为整型量,且a=7, b=8,则表达式a=a|b<<2&&~b的值为 。

6、设二进制数a是00101101,若想通过异或运算a^b使a的高4位取反,低4位不变,则二进制数b应是 。

1.6 cin和cout基本操作随堂测验

1、下列程序段的输出是()。 short int i=65536; cout<<i<<’\n’;
    A、65536
    B、0
    C、-1
    D、有语法错,无输出结果。

2、下面的说法正确的是()。
    A、cin对象设置的域宽只对与其相邻的下一个输入有效。
    B、cin对象设置的域宽对所有输入有效。
    C、流插入符>>能够读取含空格的字符串。
    D、调用cin的getline函数不能读取含空格的字符串。

3、cin对象指定输入域宽的两种方法分别是 。

1.7 枚举类型的基本应用随堂测验

1、说明enum money {Fen, Jiao, Yuan=100, Tenyuan};中每个枚举变量所对应的实际值为()。
    A、0, 1, 100, 101
    B、1, 2, 100, 101
    C、“Fen”, “Jiao”, “Yuan”或100, “Tenyuan”或101
    D、“Fen”或1, “Jiao”或2, “Yuan”或100, “Tenyuan”或101

第2章 C++流程控制

2.1 算法的基本概念和表示方法随堂测验

1、对于用C++语言实现的算法,以下叙述中正确的是 ( )。
    A、必须要有输入和输出操作
    B、可以没有输出但必须要有输入
    C、可以没有输入但必须要有输出
    D、可以既没有输入也没有输出

2、三种基本结构分别是 、 和 。

2.2 选择结构程序设计(if-else)随堂测验

1、要使以下程序的输出结果为10,则a和b应满足的条件是( )。 #include<iostream> using namespace std; void main() { int s, t, a, b; cin >> a >> b; s = t = 5; if(a > 0) s += 2; if(a > b) t = s + t; else if(a == b) t = 5; else t = 2 * s; cout << t << endl; }
    A、a>0并且a<b
    B、a<0并且a<b
    C、a>0并且a>b
    D、a<0并且a>b

2、执行以下程序段后,a,b,c的值分别是( )。 int a, b = 20, c, x = 9, y = 8; a = (--x == y)? --x : y++; if(x < 9) b = x++; c=y;
    A、7, 8, 8
    B、7, 7, 8
    C、7, 8, 9
    D、8, 9, 9

2.2 选择结构程序设计(if-else)随堂测验

1、当从键盘输入10 20时,以下程序段的输出结果是 。 (区分==和=) #include<iostream> using namespace std; void main() { int num1, num2; cout<<"Please input num1 and num2:\n"; cin>>num1>>num2; if(num1 = num2) cout<<"num1=num2"<<endl; else cout<<"num1!= num2"<<endl; }

2、当输入1 0 0时,以下程序段的输出结果是 。 (易错的关系表达式) #include<iostream> using namespace std; void main() { int a, b, c; cout<<"Please input a, b and c:\n"; cin>>a>>b>>c; if(a<=b<=c) { cout<<"min=a="<<a<<endl; cout<<"max=c="<<c<<endl; } }

3、以下程序运行后的输出结果是 。 (条件表达式的多样性) #include<iostream> using namespace std; void main() { int a = 3, b = 4, c = 5, t = 99; if(b) if(a) cout<<a<<b<<t<<endl; else cout<<a<<b<<c<<endl; }

4、以下程序运行后的输出结果是 。 #include<iostream> using namespace std; void main() { int a=5, b=8 , c=4 , d=3 , m=1, n=0, p; if( (m = a > b) && (n = c > d)) p = m + n; else p = m – n; cout<<"m="<<m<<", n="<<n<<", p="<<p<<endl; }

2.3 选择结构程序设计(switch)随堂测验

1、若a和b均是整型变量,以下正确的switch语句是( )。
    A、switch(a/b) {case 0:case1.5:y=a+b;break; case 2:case 3:y=a-b;}
    B、switch(a*a+b*b); { case0:y=a+b;break; case1:y=b-a;break; }
    C、switch a {case 0:x=a+b; case 1:y=a-b;break;}
    D、switch(a+b) {case 0:x=a+b;break; case 1:y=a-b;break;}

2.3 选择结构程序设计(switch)随堂测验

1、当从键盘输入'c'时,以下程序段的输出结果是 。 cin>>n; switch(n) { default: cout<<"error\n";break; case 'a': case 'A':case 'b':case 'B':cout<<"good\n";break; case 'c': case 'C':cout<<"pass\n"; case 'd': case 'D':cout<<"warn\n"; }

2、以下程序的输出结果是 。 #include<iostream> using namespace std; void main( ) { int i=4; switch(i%4) { case 0: case 1: cout<<'D'+i<<endl; case 2: cout<<'E'+i<<endl; break; default: cout<<"\n"; } }

3、以下程序的运行结果是 。 #include<iostream> using namespace std; void main() { int x=1,y=0,a=0,b=0; switch(x) { case 1: switch(y) { case 0: a++; case 1: b++; } case 2: a++;b++; break; case 3: a++;b++; } cout<<"a="<<a<<", b="<<b<<"\n”; }

2.4 循环结构程序设计(while语句)随堂测验

1、有以下程序段: int k = 0; while(k = 1) k++; 则while循环执行的次数是()。
    A、无限次
    B、有语法错,不能执行
    C、一次也不执行
    D、执行1次

2.4 循环结构程序设计(while语句)随堂测验

1、以下程序的输出结果是 。 #include<iostream> using namespace std; void main() { int num = 2; while(num-- ) ; cout<<num<<endl; }

2、以下程序的功能是:从键盘上输入若干个学生的成绩,统计并输出最高成绩和最低成绩,当输入负数时结束输入,请填空。(答案中请不要带空格,答案之间用3个空格键间隔) #include<iostream> using namespace std; void main() { float x,max,min; cin>>x; max=x; min=x; while( ) { if ( ) max=x; if( ) min=x; cin>>x; } cout<<"\nmax="<< max <<"\nmin="<< min<<"\n"; }

3、以下程序的输出结果是 。 #include<iostream> using namespace std; void main() { int x=5,y=9,a=0; while (x++!=y--) a+=1; cout<<"x="<<x<<",y="<<y<<",a="<<a<<"\n"; }

2.5 循环结构程序设计(do-while语句)随堂测验

1、有以下程序段: #include<iostream> using namespace std; void main() { int k = 0; do { k--; cout<<k<<endl; }while(k >= 0); } 则do-while循环执行的次数是()。
    A、无限次
    B、有语法错,不能执行
    C、一次也不执行
    D、执行1次

2.5 循环结构程序设计(do-while语句)随堂测验

1、以下程序的输出结果是 。 #include<iostream> using namespace std; void main() { int x = 4; do { x -= 3; cout<<x<<endl; }while(!( --x )); }

2.6 循环结构程序设计(for语句)随堂测验

1、以下程序的执行结果是( )。 #include<iostream> using namespace std; void main() { int i, sum=0; for(i=1;i<=5;sum++) sum+=i; cout<<sum<<endl; }
    A、6
    B、5
    C、无限循环
    D、0

2.6 循环结构程序设计(for语句)随堂测验

1、以下程序的输出结果是 。 #include<iostream> #include<iomanip> using namespace std; void main() { int i; for (i=1;i>=0;) cout<<i--; }

2、下述程序计算Fibonacci数列的前20个数,且每行输出5个数,请填空。(答案中请不要带空格,答案之间用3个空格键间隔) #include<iostream> #include<iomanip> using namespace std; void main() { int f,f1=1,f2=1; int i; cout<<setw(6)<<f1; cout<<setw(6)<<f2; for (i=3;i<=20;i++) { f = ; cout<<setw(6)<<f; if( ) cout<<endl; f1=f2; ; } }

3、下述程序计算从键盘输入的两个数的最大公约数,请填空。(答案中请不要带空格,答案之间用3个空格键间隔) #include<iostream> #include<iomanip> using namespace std; void main() { int x, y, r, gcd; cout<<"Enter two number: \n "; cin>> x>>y; r= ; while ( ) { x=y; y=r; r= ; } cout<<"The result is "<<y<<endl; }

2.7 break与continue语句随堂测验

1、在循环结构的循环体中执行break语句,其作用是( )。
    A、结束本次循环,进行下次循环
    B、继续执行break语句之后的循环体中各语句
    C、跳出该循环体,提前结束循环
    D、终止程序运行

2、以下程序的运行结果是( )。 #include<iostream> using namespace std; void main() { int i=1; while(i) { cout<<"*"; i++; if(i<3) break; } cout<<"\n"; }
    A、*
    B、***
    C、**
    D、****

3、以下程序的运行结果是( )。 #include<iostream> using namespace std; void main() { int i, sum=0; for(i=1;i<10;i++) { if(i%5==0) continue; sum+=i; break; } cout<<sum<<"\n"; }
    A、1
    B、40
    C、无限循环
    D、无输出结果

2.7 break与continue语句随堂测验

1、以下程序的运行结果是 。 #include<iostream> using namespace std; void main() { int a = 0, b = 1; for ( ; a<5 ; a++, b++) { if (( a+b ) % 5 == 0) continue; b += a; } cout<<"a="<<a<<", b="<<b<<"\n"; }

2、当从键盘输入2453时,以下程序的运行结果是 。 #include<iostream> using namespace std; void main() { char c; cin.get(c); while(c !='\n') { switch(c - '2') { case 0: case 1: cout<<(char)(c+1); break; case 2: cout<<(char)(c+2); break; case 3: cout<<(char)(c+3); default: cout<<(char)(c+4); break; } cin.get(c); }; }

C++流程控制单元测试

1、以下关于switch 语句和break 语句中,_______是正确的。
    A、在switch语句中,可以根据需要使用或不使用break语句
    B、switch语句中必须用break 语句
    C、break语句只能用于switch 语句
    D、break语句是switch 语句必须的一部分

2、三元条件运算符ex1?ex2:ex3,相当于下面_______语句。
    A、if(ex2) ex1;else ex3;
    B、if(ex1) ex2;else ex3;
    C、if(ex1) ex3;else ex2;
    D、if(ex3) ex2;else ex1;

3、以下程序运行后的输出结果为_______。 #include<iostream.h> void main() { int i=-1, j=1; if((++i<0)&&!(j--<=0)) cout<<i<<" "<<j<<endl; else cout<<j<<" "<<i<<endl; }
    A、-1 1
    B、1 0
    C、0 1
    D、0 0

4、若有程序段如下: a=b=c=0;x=35; if(!a) x; else if(b); if (c) x = 3; else x = 4; 执行后,变量x 的值是_______________。
    A、35
    B、4
    C、34
    D、3

5、运行下列程序段后a的值是_______________。 int a = 10; switch(a) { case 9: a++; case 10: a++; case 11: a++; default: a++; }
    A、10
    B、11
    C、12
    D、13

C++流程控制单元作业

1、回文整数是指正读和反读相同的整数,编写一个程序,输入一个整数,判断它是否是回文整数。例如12321就是回文。

2、编写一个程序,写出100-1000所有的水仙花数。水仙花数是一个三位数,其各位数字的立方和等于该数本身。例如153= 1*1*1+5*5*5+3*3*3。

第3章 函数

3.1 函数的定义和调用随堂测验

1、在C++语言的函数体中,下面说法正确的是()。
    A、可以定义和调用其他函数
    B、可以调用但不能定义其他函数
    C、不可调用但可以定义其他函数
    D、不可调用及定义其他函数

2、以下说法中,正确的是()
    A、C++语言程序总是从第一个定义的函数开始执行
    B、在C++语言程序中,要调用的函数必须在main()函数中定义
    C、C++语言程序总是从main()函数开始执行
    D、C++语言程序中的main()函数必须放在程序的开始部分

3.2 函数的参数传递和返回值随堂测验

1、以下关于函数参数的说法,不正确的是()。
    A、函数调用时,先将实参的值按照位置传递给对应的形参。
    B、实参与形参的个数及顺序不必一一对应。
    C、实参与形参的名字可以相同。
    D、C++支持两种参数传递:传值和传引用。

2、以下关于引用的说法,正确的是()。
    A、引用其实是定义了一个新的变量。
    B、通过引用做参数,可以修改调用函数中变量的值。
    C、如果函数具有多个引用参数,则只需在第一个引用变量前加符号&。
    D、如果函数f的形参是引用,主调函数在调用f时,实参可以是一个值。

3、以下关于函数的返回值,不正确的说法是()。
    A、一个函数可以有多个参数,多个返回值。
    B、一个函数通过return语句最多只能返回一个值。
    C、如果一个函数的返回值类型不是void,那么该函数必须包含return语句。
    D、如果一个函数有返回值,则必须在函数头中指定返回值类型。

4、以下程序的运行结果是()。 #include<iostream> using namespace std; int swap(int x, int y, int z) { int t; t=x; x=y; y=t; z=x*y; x=x*x; y=y*y; return z; } void main( ) { int x=50, y=20, z=0; x=swap(x, y, z); cout<<"x="<<x<<", y="<<y; cout<<", z="<<z<<'\n'; }
    A、x=2500, y=400, z=1000
    B、x=50, y=20, z=0
    C、x=1000, y=400, z=1000
    D、x=1000, y=20, z=0

3.3 局部变量和全局变量随堂测验

1、以下程序的输出结果是( )。 #include<iostream> using namespace std; int x=10; void main( ) { int x=20; x+=::x; { int x=50; ::x+=x; } cout<<x<<'\t'<<::x<<'\n'; }
    A、6 4
    B、30 60
    C、3 4
    D、::x是非法引用

2、以下程序的输出结果是( )。 #include<iostream> using namespace std; int d=1; void fun(int p) { int d=5; d+=p++; cout<<d; } void main() { int a=3; fun(a); d+=a++; cout<<d<<endl; }
    A、84
    B、96
    C、94
    D、85

3.4 变量的存储类别随堂测验

1、以下程序的输出结果是( )。 #include<iostream> using namespace std; int t( ) { static int i=100; i+=5; return i; } void main( ) { cout<<"i="<<t( )<<'\t'; cout<<"i="<<t( )<<'\n'; }
    A、105 110
    B、105 105
    C、100 100
    D、110 105

2、以下程序的运行结果是()。 #include<iostream> using namespace std; int func(int a, int b) { static int m, i=2; i+=m+1; m=i+a+b; return m; } void main() { int k=4, m=1, p; p=func(k, m); cout<<p<< “, ”; p=func(k, m); cout<<p<< endl; }
    A、8, 17
    B、8, 16
    C、8, 20
    D、8, 8

3、以下程序的运行结果是()。 #include<iostream> using namespace std; int fun (int x) { static int a=3; a+=x; return a; } void main() { int k=2, m=1, n; n=fun(k); n=fun(m); cout<<n<< endl; }
    A、3
    B、4
    C、6
    D、9

4、以下四个程序片段中各定义了一个变量a,其中在a变量作用域开始时才为其分配内存存储区,并在其作用域结束时就收回其存储区的是()。
    A、int fun( ) { static int a; int b; ...... }
    B、float fun( ) { int a; int b; ...... }
    C、int a; int fun( ) { int b; ...... }
    D、static int a; int fun( ) { int b; ...... }

3.5 默认参数及内联函数随堂测验

1、C++中关于带默认参数函数的叙述,正确的是( )。
    A、不允许设置函数的默认值。
    B、函数的默认值只能有一个。
    C、函数的默认值应该先设置右边然后再设置左边。
    D、函数的默认值应该先设置左边然后再设置右边。

3.6 函数重载随堂测验

1、以下有关函数重载的正确说法是()
    A、重载函数的函数名可以不同,但其实现的功能必须相同。
    B、完成不同功能的函数可以具有相同的函数名,而且其参数的个数和类型也必须相同。
    C、完成不同功能的函数可以具有相同的函数名,但必须具有不同的返回值类型。
    D、完成不同功能的函数可以具有相同的函数名,但必须具有不同的参数个数或不同的参数类型。

3.8 函数的递归调用随堂测验

1、以下函数的输出结果是 。 #include<iostream> using namespace std; int f(int i) { if(i==1) return 1; return i*f(i-1); } void main( ) { int sum=0, t; for( int j=1; j<=4; j++) { t=f(j); sum+=t; cout<<t<<'\t'<<sum<<'\n'; } }

2、以下程序的输出是 。 #include<iostream> using namespace std; void pr(int n) { if(n) { cout<<n%8; pr(n/8/8); } } void main( ) { pr(166); }

3.9 编译预处理随堂测验

1、编译预处理包括()。
    A、构造工程文件
    B、语句注释
    C、宏定义、文件包含和条件编译
    D、编译源程序

2、预处理命令不具有如下特点:
    A、均以“#”开头
    B、必在程序开头
    C、后面不加分号
    D、在真正编译前处理

3、设有以下宏定义 #define MOD(x, y) x%y 则执行语句:int z, a=5, b=10; z=MOD(b+3, a); cout<<z++;后,输出为()。
    A、5
    B、3
    C、13
    D、14

4、设有以下宏定义和语句: #define P(x, y) x/y #define PP(a, b) a*b int c=P(2+3, 2+3)+PP(2+3, 2+3); 则变量c的值是()。
    A、26
    B、17
    C、17.5
    D、31

5、下面程序的运行结果是()。 #include <iostream> using namespace std; #define SUB(X, Y) (X)*Y void main() { int a=3, b=4; cout<<SUB(a++, b++)<<endl; }
    A、12
    B、15
    C、16
    D、20

6、假设有宏定义: #define NUM 15 #define DNUM NUM+NUM 则表达式DNUM/2+NUM*2的值为()。
    A、45
    B、67
    C、52
    D、90

函数单元作业

1、编写被调函数,求出1000以内的素数。在主函数中调用函数输出1000以内的素数,要求每行输出5个素数。

2、一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如,6的因子为1、2、3,而6=1+2+3,因此6是“完数”,编写程序找出1000以内的所有完数,并按下面格式输出其因子:6 its factors are: 1 2 3

第4章 数组

4.1 一维数组随堂测验

1、以下对一维数组a的正确定义是()。
    A、int i=5, a[i];
    B、int a(5)
    C、#define N 5 int a[N];
    D、int n; cin>>n; int a[n];

2、下列数组定义中错误的是()。
    A、char s1[‘a’];
    B、char s2[6] = “string”;
    C、static int a[4] = {1};
    D、char p[] = {‘a’, ‘b’, ‘c’}

3、若有定义:int a[4]={1};则下面正确的叙述是()。
    A、只有元素a[0]可得到初值1,其余元素的值不确定。
    B、该语句有错误。
    C、元素a[0]可得到初值1,其余元素的值均为0。
    D、数组a中各元素都可得到初值1。

4、下列程序的运行结果是()。 #include<iostream> using namespace std; void main() { int n[3]=, i, j, k=2; for( i=0; i<k; i++) for( j=0; j<k; j++) n[j]=n[i]+1; cout<<n[1]<<endl; }
    A、2
    B、1
    C、0
    D、3

4.2 多维数组随堂测验

1、以下程序的输出是()。 #include<iostream> using namespace std; void main( ) { int a[3][4]={1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23}; int i, j, k=0; for(i=0; i<3; i++) for(j=0; j<2; j++) k=k+a[i][j]; cout<<k<<'\n'; }
    A、60
    B、66
    C、83
    D、144

2、定义变量和数组:int i, j; int a[3][3]={1, 2, 3, 4, 5, 6, 7, 8, 9}; 则下面语句的输出结果是()。 for( i=0; i<3; i++) for( j=i; j<=i; j++) cout<<a[i][j]<<' ';
    A、3 5 7
    B、3 6 9
    C、1 5 9
    D、1 4 7

3、设有定义:int x[4][3]={3, 4, 5, 6, 7, 8, 9, 10, 11,12};则x[3][0]的值为 。

4、以下程序的功能是求二维数组周边元素之和,算法是:用“全体元素之和”减去“内部元素之和”,请完善程序。 #include<iostream> using namespace std; void main( ) { int a[4][5]={1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5}; int i, j, sum1, sum2; ; for(i=0; i<4; i++) for(j=0; j<5; j++) sum1+=a[i][j]; for( ; ; i++) for( ; ; j++) sum2+=a[i][j]; cout<<"周边元素之和为:"<<(sum1 - sum2)<<endl; }

4.3 数组做函数参数随堂测验

1、设有语句:int a[10]; 则a的值是 。

2、下列程序的运行结果是 。 #include<iostream> using namespace std; float f (float sum, float x[ ], int n) { for( int i=0; i<n ; i++) sum+=x[i]; return sum/n; } void main() { float x[] = { 2, 4, 6, 8 }, sum=0, y; y=f(sum, x, 4); cout<< “sum=”<<sum<<endl; cout<< “y=”<<y<<endl; }

4.8 字符数组与字符串随堂测验

1、关于字符’\0’,不正确的说法是()。
    A、常用来作为字符串的结束标志
    B、在计算机中存储时占一个字节的内存
    C、是空格字符的转义表示形式
    D、作为逻辑值使用时等价于逻辑“假”

2、下述对C++语言字符数组的描述中错误的是()。
    A、字符数组可以存放字符串
    B、字符数组中的字符串可以整体输入和输出
    C、可以在赋值语句中通过赋值运算符“=”对字符数组整体赋值
    D、不可以用关系运算符对字符数组中的字符串进行比较

4.9 处理字符与字符串(处理字符的宏)随堂测验

1、下列程序的运行结果是 。 #include<iostream> using namespace std; #include<ctype> void fun(char str[ ]) { int i, j; for( i=0, j=0; str[i] ; i++) if(isalpha(str[i])) str[j++]=str[i]; str[j] = ‘\0’; } void main() { char ss[80] = “It is!”; fun(ss); cout<<ss<<endl; }

4.10 处理字符与字符串(处理C风格的字符串的函数)随堂测验

1、下面程序的运行结果是()。 #include<iostream> using namespace std; #include<cstring> void main() { char p1[10] = “abc”, p2[]= “ABC”, str[50]= “xyz”; strcpy(str+2, strcat(p1, p2)); cout<<str<<endl; }
    A、xyzabcABC
    B、zabcABC
    C、yzabcABC
    D、xyabcABC

2、设有定义:char s[] = “Rep\0Ch”; int m=sizeof(s), n=strlen(s);则m和n的值为 。

3、设char s1[10], *s2= “ab\0cded”, 执行strcpy(s1, s2)后,cout<<s1;的运行结果是 。

数组单元测验

1、编写一个程序,判定一个字符串是否是另一个字符串的子串,若是,则返回子串在主串中的位置,要求不能使用系统函数。

2、编写一个函数,求二维数组的两条对角线元素之和。

第5章 指针

5.1 指针的概念及指针变量的定义随堂测验

1、运算符“&”有三种含义,分别是 、 和 。

5.2 指针与一维数组随堂测验

1、有定义:char s1[20] = "hello", s2[20] = "China"; const char *ptr = s1; 则以下四种操作中,错误的是()。
    A、strcpy(s2, ptr);
    B、ptr = s2;
    C、ptr = ptr+10;
    D、*ptr = *s2;

2、如果以下程序第一行输出结果为0x65FDB0,则第二行输出是()。 #include<iostream> using namespace std; void main( ) { int a[10]={ 1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, *p=a; cout<<p<<endl; cout<<p+9<<endl; }
    A、0x65FDC8
    B、0x65FDD4
    C、0x65FDB9
    D、0x65FDE6

3、下列程序的运行结果是()。 #include<iostream> using namespace std; void main( ) { int a[]={2, 4, 6, 8, 10}, y=1, x, *p=&a[1]; for( x=0; x<3; x++) y+=*(p+x); cout<<y<<endl; }
    A、17
    B、18
    C、19
    D、20

4、若有int a[10], *p, i=5; p=a+i; 则p的内容为 , *p的内容为 。

5、如果从键盘输入字符串 “HOW DO YOU DO”,则下面程序的运行结果是 。 #include<iostream> using namespace std; void main( ) { char str1[]= “how do you do”, str2[10], *p1=str1, *p2=str2; cin>>p2; cout<<p2<< ‘ ‘<<p1<<endl; }

5.3 指针与二维数组随堂测验

1、若有int (*p)[3];以下叙述中正确的是()。
    A、p是一个指针数组
    B、(*p)[3]与*p [3]等价
    C、p是一个指针,它可以指向一个一维数组中任一个元素
    D、p是一个指针,它只能指向一个包含3个int类型元素的一维数组

2、对以下程序,说法正确的是()。 #include<iostream> using namespace std; void main( ) { int a[4][4]={ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}, sum=0; int (*p)[4]=a; //A p=p+2; for( int i=0; i<2; i++) for(int j=0; j<2; j++) sum+=p[i][j]; //B cout<<sum<<endl; }
    A、程序输出 14
    B、程序中A行有错
    C、程序输出 46
    D、程序中B行有错

3、以下程序的输出结果是()。 #include<iostream> using namespace std; int a[3][3]={ {2}, {4}, {6}}; void main( ) { int i, *p=&a[0][0]; for(i=0; i<2; i++) { if(i==0) a[i][i+1]=*p+1; else ++p; cout<<*p; } }
    A、23
    B、26
    C、33
    D、36

4、以下程序的输出结果是()。 #include<iostream> using namespace std; void main( ) { int a[3][4]={ 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23}, (*p)[4]=a; int i, j, k=0; for(i=0; i<3; i++) for(j=0; j<2; j++) k=k+*(*(p+i)+j); cout<<k<<endl; }
    A、60
    B、68
    C、99
    D、108

5.4 指针与函数(指针类型做函数参数)随堂测验

1、下列函数的功能是()。 int fun1(char *x) { char *y=x; while(*y++); return (y-x-1); }
    A、求字符串的长度
    B、比较两个字符串的大小
    C、将字符串复制到字符串y
    D、将字符串x直接接到字符串y的后面

2、设有语句:void f(int a[10], int &x); int y[10], *py=y, n; 则对函数f的正确调用语句是()。
    A、f(py[10], n);
    B、f(py, n);
    C、f(*py, &n);
    D、f(py, &n);

3、以下程序输出是()。 #include<iostream> using namespace std; void prtv(int *x) { cout<<(++*x)<<endl; } void main( ) { int a=25; prtv( &a); }
    A、23
    B、24
    C、25
    D、26

4、以下程序输出是() #include<iostream> using namespace std; #include<cstring > void fun(char *w, int m) { char s, *p1, *p2; p1=w; p2=w+m-1; while( p1<p2 ) { s=*p1++; *p1=--(*p2); p2--; *p2=s; } } void main( ) { char a[ ]="CDEFGHI"; fun( a, strlen(a)); cout<<a<<endl; }
    A、IHGFEDC
    B、CHBBHCI
    C、CHBBGBH
    D、CHHFCHI

5、以下程序的输出是 。 #include<iostream> using namespace std; void swap(int *p1; int *p2) { int *t; t=p1; p1=p2; p2=t; } void main( ) { int a=3, b=5, *p1=&a, *p2=&b; swap(p1, p2); cout<<*p1<<*p2<<endl; }

5.5 指针与函数(返回指针的函数及指向函数的指针)随堂测验

1、设有以下语句: int add(int a, int b); int fun(int (*p)(int, int), int &a, int &b); int x, y, (*f)(int, int)=add; 则对函数fun的正确调用形式是()。
    A、fun(f, x, y)
    B、fun(f, &x, &y)
    C、fun((*f)(x, y), x, y)
    D、fun(add, &x, &y)

2、以下程序输出结果是 。 #include<iostream> using namespace std; char * fun(char *str, char c) { while(*str!='\0') if(*str==c) return str; else str++; return NULL; } void main( ) { char s[ ]="warrior"; char *p; p=fun(s, 'r'); if(p) cout<<p<<endl; p=fun(s, 'i'); if(p) cout<<p<<endl; p=fun(s, 'b'); if(p) cout<<p<<endl; }

5.6 指针数组与指向指针的指针随堂测验

1、以下程序的输出结果是()。 #include<iostream> using namespace std; void main( ) { int a[5]={2, 4, 6, 8, 10}, *p, **k; p=a; k=&p; cout<<(*(p++))<<'\t'; cout<<(**k)<<endl; }
    A、2 2
    B、2 4
    C、4 4
    D、4 6

2、下面程序的运行结果是 。 #include<iostream> using namespace std; void main( ) { char *p[]={ “BOOL”, “OPK”, “H”, “SP”}; int i; for (i=3; i>=0; i--, i--) cout<<*p[i]; cout<<endl; }

3、假设有:char *argv[]={ “hello”, “nanjing”, “jiangsu”}; char **pargv=argv; 则请给出下列语句的输出结果: cout<<*(pargv+1); 结果为 。 cout<<char(**pargv+1); 结果为 。 cout<<*(*(pargv+1)); 结果为 。 cout<<*(*(pargv+2)+4); 结果为 。

5.7 内存的动态分配和释放随堂测验

1、以下程序的输出结果是()。 #include<iostream> using namespace std; void fun(float *p1, float *p2, float *s) { s = new float; *s=*p1+*(p2++); } void main( ) { float a[2]={1.1, 2.2}, b[2]={10.0, 20.0}, *s=a; fun(a, b, s); cout<<(*s)<<endl; }
    A、11.1
    B、12.1
    C、21.1
    D、1.1

指针单元作业

1、利用指针完成字符串复制函数char *strcpy(char *s1,char *s2) 。

2、在主函数中定义一个含有12个指针的指针数组,令它的数组元素分别指向12个由月份组成的字符串常量,如第0个元素指向”January”。在主函数中,若输入月份整数值,则从上述指针数组中找到并输出相应月份的字符串值。

第6章 结构体与链表

6.1 结构体的定义随堂测验

1、为了建立如图所示存储结果,data为数据区,next为指向结点的指针域,请填空: data next struct link { char data; ; }node;

6.2 结构体的应用随堂测验

1、以下程序的运行结果是()。 #include<iostream> using namespace std; void main( ) { struct cmplx { int x; int y; } cnum[2]={1, 3, 2, 7}; cout<<(cnum[0].y/ cnum[0].x* cnum[1].x)<<endl; }
    A、0
    B、1
    C、3
    D、6

6.3 用typedef定义类型随堂测验

1、下列说法中,不正确的是()。
    A、typedef 只能用于为已知数据类型名定义新的类型名。
    B、typedef 应用于软件移植。
    C、typedef并没有增加新的数据类型。
    D、typedef和define等价。

6.4 链表的建立随堂测验

1、以下函数creat用来建立一个带头结点的单向链表,新产生的结点总是插在链表的末尾。单向链表的头指针作为函数值返回。请填空。 #include<iostream> using namespace std; struct list { char data; list *next; }; list *creat( ) { list *h,*p,*q; char ch; h= (1) ; p=q=h; cin>>ch; while (ch!=’?’) { p= (2) ; p->data=ch; q->next=p; q=p; cin>>ch; } p->next=NULL; (3) ; }

6.6 链表的插入及有序链表的建立随堂测验

1、若已建立以下链表结构,指针p,s分别指向图中所示的结点,则不能将s所指的结点插入到链表末尾的语句组是:
    A、s->next=NULL; p=p->next; p->next=s;
    B、p=p->next; s->next=p->next; p->next=s;
    C、p=p->next; s->next=p; p->next=s;
    D、p=(*p).next; (*s).net=(*p).next; (*p).next=s;

2、有定义: struct node { int num; node *next; } *head, *p; 假定head是一链表首指针,则欲将p指向的结点插入到该链表首部,应做的操作是 。

结构体与链表单元作业

1、编写程序,输入若干学生的学号、姓名和考试成绩。该程序能输出每个学生的学号、姓名和相应的考试成绩,同时能查找并输出最高分的学生的学号、姓名和考试成绩。要求使用结构体数组。

第7章 文件操作

7.1 文件的打开与关闭随堂测验

1、在C++的文件流中,打开文件的方法有两种,一种是使用成员函数open(),另一种是使用 。

7.7 随机访问文件随堂测验

1、假设文本文件中已经存有“ILOVECHINA”九个字符,则下列程序的运行结果是 。 void main(void) { fstream file("letters.txt",ios::in); char ch; if (!file) exit(0); file.seekg (1L, ios::beg); file.get(ch); cout << ch << endl; file.seekg (-4L, ios::end); file.get(ch); cout << ch << endl; file.seekg (2L, ios::cur); file.get(ch); cout << ch << endl; file.close( ); }

2、假设文本文件letters.txt中已经存有“1234567890”十个字符,则下列程序的运行结果是 。 #include<fstream.h> #include<stdlib.h> void main(void) { fstream file("nums.txt",ios::in); char ch; if (!file) exit(0); file.seekg (1L, ios::beg); file.get(ch); cout << ch << endl; file.seekg (-5L, ios::end); file.get(ch); cout << ch << endl; file.seekg (-2L, ios::cur); file.get(ch); cout << ch << endl; file.close( ); }

3、文本文件letters.txt中已经存有“abcdefg”七个字符,则下列程序的运行结果是 。 #include<fstream.h> #include<stdlib.h> void main(void) { fstream file("letters.txt",ios::in); char ch; if (!file) exit(0); file.seekg (2L, ios::beg); file.get(ch); cout << ch ; file.seekg (-3L, ios::end); file.get(ch); cout << ch ; file.seekg (1L, ios::cur); file.get(ch); cout << ch << endl; file.close( ); }

文件操作单元作业

1、人工预先创建一个文本文件data.txt,其内容为若干实数,数据之间以空白字符分隔。编程从该文件中读入这些实数,统计实数个数并求出这些实数的平均值,在程序中创建并产生一个文本文件result.txt,内容为 data.txt 中的全体实数,每行5个数,最后一行输出实数个数以及平均值。 运行后将程序和运行结果截图后上传

第8章 类的基础部分

8.3 构造函数与析构函数随堂测验

1、以下有关对象的叙述中,不正确的是()。
    A、产生对象时必定要调用构造函数
    B、撤销对象是必定要调用析构函数
    C、对象被保护,其私有成员不能任意访问
    D、对象可以没有构造函数或析构函数

2、下列程序的运行结果是 。 class Stack{ char * sp ; public : Stack( ){ sp = new char[100] ; strcpy(sp , "I love China") ; cout << "在构造函数中! \n" ; } ~Stack( ){ cout << sp << endl ; delete [ ]sp ; cout << "在析构函数中! \n" ; } } ; void main( ) { Stack s ; }

3、下列程序运行结果是 。 #include <iostream> using namespace std; class Sac{ int n; public: Sac(): n(4) { cout<<n;} Sac(int k):n(k) { cout<<n;} ~Sac() { cout<<n+n;} }; int main(){ Sac s1,*s2; s2=new Sac(3); delete s2; return 0; }

4、下列程序运行结果是 。 class people{ int x , y ; public : people( ){ cout << "default constructor \n"; x=y=0 ; cout << " One \n" ; } people( int i ){ x=i ; y=0 ; cout << "constructor \n"; cout << " Two \n" ; } ~people( ) { cout << "destructor \n" ; } void print( ) { cout << x << setw(5) << y << endl ; } } ; void main( ) { people *ptr ; ptr=new people[2] ; ptr[0]=people( ) ; ptr[1]=people(3) ; for( int i=0 ; i<2 ; i++) ptr[i].print( ) ; delete [ ]ptr ; }

5、下列程序运行结果是 。 #include <iostream.h> #include <string.h> class InvItem { char *desc; int units; public: InvItem(int size = 51) { desc = new char[size]; strcpy(desc, "C"); units = 0; } InvItem(char *d, int u=0) { desc = new char [strlen(d)+1]; strcpy(desc, d); units = u; } ~InvItem( ) { delete [ ]desc; } char *getDesc( ) { return desc; } int getUnits( ) { return units; } }; void main(void) { InvItem Inventory[3] = { InvItem("A", 10),InvItem("B") }; for(int Index = 0; Index < 3; Index++) { cout << Inventory[Index].getDesc( ); cout << Inventory[Index].getUnits( ) <<endl; } }

8.4 重载构造函数随堂测验

1、以下关于构造函数和析构函数的叙述中正确的是()。
    A、析构函数和构造函数都可以重载
    B、构造函数可以重载,析构函数不能重载
    C、析构函数可以重载,构造函数不能重载
    D、构造函数和析构函数都不能重载

2、对下面的程序段下面的说法正确的是()。 class A { int x, y; public: A(int a, int b) { x=a; y=b;} void show() { cout<<x<< “,”<<y<<endl; } void set(int a, int b) { x=a; y=b; } } void main() { A obj; obj.set(3, 5); obj.show(); }
    A、编译时报错,程序无法运行
    B、编译无错,运行正常,输出3,5
    C、编译无错,运行时报错
    D、编译时报警告错,但运行正常,输出3,5

3、下列关于类的构造函数和析构函数的说法中,不正确的是()。
    A、类的析构函数可以重载
    B、类的构造函数可以重载
    C、定义一个类可以不显式定义构造函数
    D、定义一个类可以不显式定义析构函数

4、下列程序的运行结果是 。 class test{ int num; public: test(int n=6){ num=n; } int getNumber( ) { return num; } ~test( ){ cout<<"In Destructor!"<<num<<endl; } }; void main( ) { test Obj[2]={8}; for(int i=0;i<2;i++) cout<<Obj[i].getNumber( )<<endl; cout<<"Exiting main"<<endl; }

5、下列程序的运行结果是 。 #include<string.h> class Item{ char name[20]; int count; public: Item(char *n="space",int c=0){ strcpy(name,n); count=c; cout<<"In constructor! "<<name<<" "<<count<<endl; } ~Item( ){ cout<<"In Destructor! "<<name <<endl; } }; void main( ) { Item Obj[3]={Item("book",8),Item("magzine")}; cout<<"Exiting main"<<endl; }

类的基础部分单元作业

1、定义一个复数类Complex ,数据成员包括实部和虚部。成员函数包括:(1)设置实数值;(2)设置虚部值。(3)取实部值;(4)取虚部值。(5)输出复数。在主函数中定义一个复数类对象,然后对所有成员函数进行测试。

第9章 类的高级部分

9.1 静态成员随堂测验

1、下列关于静态数据成员的描述中,错误的是()。
    A、说明静态数据成员时,前面要加修饰符static
    B、静态数据成员要在类外进行初始化
    C、引用静态数据成员时,要在静态数据成员名前加<类名>和作用域运算符
    D、静态数据成员不是所属类的所有对象共有的

2、下列程序运行结果是 。 #include <iostream.h> class GRADE { public: static int NUM; GRADE () { NUM++;} }; int GRADE::NUM=7; void main() { cout<<" GRADE::num="<< GRADE::NUM <<endl; GRADE D1; cout<<D1.NUM<<endl; GRADE D2; cout<<D2.NUM<< endl; GRADE D3,D4; cout<<D1.NUM<<endl; cout<<D2.NUM<<endl; }

3、下列程序运行结果是 。 #include <iostream.h> class E{ int x; static int y; public: E(int a) {x=a; y+=x;} void show() { cout<<x<<’\t’<<y<<endl; } }; int E::y=100; void main() { E e1(10); e1.show(); E e2(50); e2.show(); e1.show(); }

9.2 静态函数成员随堂测验

1、关于成员函数的描述中,错误的是()。
    A、成员函数一定是内联函数
    B、成员函数可以重载
    C、成员函数可以设置参数的缺省值
    D、成员函数可以是静态的

2、下列程序运行结果是 。 #include <iostream.h> class Test { public: Test() { cnt++; } static int Count() { return cnt;} private: static int cnt; }; int Test::cnt = 0; void main() { cout << Test::Count() <<' '; Test t1, t2; cout << t1.Count() <<' '; }

3、下列程序运行结果是 。 class Test { public: Test( ) { n+=2; } ~Test( ) { n-=3; } static int getNum( ) { return n; } private: static int n; }; int Test::n = 1; void main( ) { Test* p = new Test; delete p; cout << "n=" << Test::getNum( ) << endl; }

4、下列程序运行结果是 。 class CTest { private: static int count; public: CTest(){++count;} ~CTest(){cout<<--count<<"object existn";} static int getCount(){return count;} }; int CTest::count=0; void main() { cout<<CTest::getCount()<<"object exist\n"; CTest test1; CTest *ptest2; ptest2=new CTest; cout<<ptest2->getCount()<<"object exist\n"; delete ptest2; cout<<test1.getCount()<<"object exist\n"; }

9.3 友元函数随堂测验

1、下面关于友元函数的说法中,正确的是()。
    A、允许在类外访问类中除私有成员以外的任何成员
    B、允许在类外访问类中的任何成员
    C、友元函数也是该类的成员函数
    D、友元函数的定义必须被放在该类的公有部分

2、下面关于友元函数的描述中,错误的是()。
    A、友元函数不是成员函数
    B、友元函数加强了类的封装性
    C、在友元函数中可以访问所属类的私有成员
    D、友元函数的作用是提高程序的运行效率

9.4 对象赋值随堂测验

1、采用赋值运算符“=”可以将一个对象赋值给另外一个对象,或者采用一个对象初始化另外一个对象。在缺省情况下,这两个操作执行的是 。

9.5 什么是拷贝构造函数随堂测验

1、下列程序运行结果是 。 class point{ double X,Y; public: point(double xx=0, double yy=0) { X=xx; Y=yy; cout<<"构造函数("<<X<<","<<Y<<")"<<endl; } point(point &p) { X=p.X; Y=p.Y; cout<<"拷贝构造函数\n"; } }; point f( ) { point d(3,4); return d; } void main( ) { point d1(1,2), b(d1); b = f( ); }

9.6 调用拷贝构造函数的三种情况随堂测验

1、复数类定义如下: class Complex { private: float real;//实部 float img; //虚部 public: Complex (float x=0, float y=0){real=x, img=y;} Complex (Complex &c){real=c.real; img=c.img;} }; 若 Complex c1(3, 5); //A Complex c2; //B Complex c3(c1); //C c2=c1; //D 则下列说法正确的是()。
    A、A行调用了拷贝构造函数
    B、B行调用了拷贝构造函数
    C、C行调用了拷贝构造函数
    D、D行调用了拷贝构造函数

2、下列程序运行结果是 。 class Student { int score ; static int count ; public : Student ( int n=0) { score =n ; count++ ; } Student (Student &p) { score =p. score ; count++ ;} ~Student ( ) { cout<<"The number of the students: "<<--count<< endl; } void ShowScore( ) {cout<<score<<endl;} static int GetCount( ){ return count ; } } ; Student fun(Student p0) { Student p1=p0; cout<<"The number of the students: "<<Student::GetCount( )<< endl ; return p1; } int Student :: count=0 ; void main( ) { Student John(80) ; cout << "the score of John: "; John.ShowScore( ); cout<<"The number of the students: "<<John.GetCount( )<< endl ; Student Tom; Tom=fun(John); cout << "the score of Tom: "; Tom.ShowScore( ); cout<<"The number of the students: "<<Tom.GetCount( )<< endl ; }

9.7 赋值运算符重载和this指针随堂测验

1、下面有关运算符重载的说法中,正确的是()。
    A、非静态成员函数重载运算符时带有this指针
    B、友元函数重载运算符时带有this指针
    C、成员函数与友元函数重载运算符时都不带有this指针
    D、用成员函数或友元函数重载同一运算符时,两者的参数类型与参数个数相同

9.8 +运算符重载随堂测验

1、成员函数中重载运算符“+”,实现a+b运算,则()。
    A、A必须为对象,b可为整数或实数
    B、a和b必须为对象
    C、b必须为对象,a可为整数或实数
    D、a和b均为整数或实数

9.9 ++运算符重载随堂测验

1、下列程序运行结果是 。 class test{ long x; static int num; public: test (long m=0) {x=m;} test operator++(); test operator++(int); void Show() { cout<<"The num is: "<<num<<",x="<<x<<endl; } }; test test::operator++() { ++x; cout<<"The num is: "<<num++<<",x="<<x<<endl; return *this; } test test::operator++(int) { cout<<"The num is: "<<num++<<",x="<<x<<endl; test temp(*this); x++; return temp; } int test::num=1; void main() { test a(1),b; b=a++; ++a; a.Show(); b.Show(); }

2、下列程序运行结果是 。 #include <iostream.h> class A { long x; public: A(long m) {x=m;} void Show() { cout<<"count="<<count<<",x="<<x<<endl; } A& operator++(); A& operator++(int); static int count; }; A& A::operator++() { ++x; cout<<"count="<<count<<",x="<<x<<endl; return *this; } A&A::operator++(int) { cout<<"count="<<count++<<",x="<<x<<endl; A temp(*this); x++; return temp; } int A::count=1; void main() { A a(1); a.operator++(1); a.operator++(); a.Show(); }

3、下列程序运行结果是 。 class sample{ int x , y ; public : sample( ) { x=y=0 ; } sample( int i , int j) {x=i ; y=j ;} void copy( sample &obj) { *this=obj ; } sample operator--( ) { x-- ; y-- ; return *this; } void print( ){ cout << x << " " << y<< " " ; } } ; void main( ) { sample c1(1 , 2) , c2 ; --c1; c1.print( ) ; c2.copy(c1) ; --c2; c2.print( ) ; }

9.11 流操作符重载随堂测验

1、cin是istream_withassign类的对象,>>是用友元函数实现的重载运算符,若有int x; cin>>x; 则编译器将 cin>>x解释成对运算符重载函数的调用,形式是()。
    A、cin.operator>>(cin, x)
    B、operator>>(cin, x)
    C、cin.operator>>(x)
    D、operator>>(x)

9.12 类型转换运算符重载随堂测验

1、下列关于类型转换运算符重载的说法中,不正确的是()。
    A、类型转换运算符重载函数无返回值类型
    B、类型转换运算符重载函数有返回值类型
    C、类型转换运算符重载函数不能有参数
    D、类型转换运算符重载函数只能用成员函数实现,不能用友元函数实现

2、下列程序运行结果是 。 #include<iostream.h> class complex { double real, img; public: complex(double r=0, double i=0) { real=r; img=i; } operator double() { return real; } }; void main() { complex c(3, 2); double x; x=c; cout<<”x=”<<x<<endl; }

9.13 重载[ ]运算符随堂测验

1、下列关于运算符重载的说法中,正确的是()。
    A、运算符重载可以改变操作数的个数
    B、运算符重载可以改变优先级
    C、运算符重载可以改变结合性
    D、运算符重载不可以改变语法结构

2、C++中下列哪个运算符不允许被重载()。
    A、%=
    B、&&
    C、new
    D、*

类的高级部分单元作业

1、定义一个复数类complex, 重载运算符 “+”,使之能用于复数得加法运算。将运算符函数重载为非成员、非友元得普通函数。编写程序,求两个复数之和。

2、有两个矩阵a和b,均为n行m列(m,n的值自己给出),求两个矩阵之和,差,积,商,重载运算符 +,-,、,*,/,使之能用于矩阵加减乘除。例如c=a+b。

第10章 继承、多态和虚函数

10.1 继承随堂测验

1、设类B是基类A的派生类,并有语句A a1, *pa=&a1; B b1, *pb=&b1; 则正确的语句是()。
    A、pb=pa;
    B、b1=a1;
    C、a1=b1;
    D、*pb=*pa;

10.2 保护成员和类的访问随堂测验

1、派生类对象可直接访问基类中的();在派生类的成员函数中,不可以直接访问的是()。
    A、公有继承的公有成员
    B、公有继承的私有成员
    C、公有继承的保护成员
    D、私有继承的公有成员

2、在C++中,三种派生方式的说明符号为 ,若不加说明,则默认的派生方式为 。

10.3 继承下的构造函数与析构函数随堂测验

1、下列程序运行结果是 。 class A{ public: A(){cout<<"1";} ~A(){cout<<"2";} }; class B:public A { public: B(){cout<<"3";} ~B(){cout<<"4";} }; void main() { B b; }

2、下列程序运行结果是 。 class A { public: A(){cout<<"A";} ~A(){cout<<"~A";} }; class B:public A { A *p; public: B(){ cout<<"B"; p=new A(); } ~B(){ cout<<"~B"; delete p; } }; void main() { B obj; }

3、下列程序运行结果是 。 #include <iostream.h> class BASE{ char c; public: BASE(char n) { c=n; cout<<c;} }; class DERIVED:public BASE{ char c; public: DERIVED(char n):BASE(n+1) {c=n; cout<<c;} }; void main() { DERIVED deri('A'); }

10.4 初始化列表的作用随堂测验

1、下列程序运行结果是 。 class a { public: a(char *nm){cout <<nm <<endl;} }; class b: public a { a aa1 ; public: b(char* n1,char*n2):aa1(n1),a(n2){}}; void main() { a ademo("how"); b bdemo("hello","world"); }

10.5 覆盖随堂测验

1、以下有关函数重载的说法正确的是()。
    A、重载函数的函数名可以不同,但其实现的功能必须相同。
    B、完成不同功能的函数可以具有相同的函数名,而且其参数的个数和类型也必须相同。
    C、完成不同功能的函数可以具有相同的函数名,但必须具有不同的返回值类型。
    D、完成不同功能的函数可以具有相同的函数名,但必须具有不同的参数个数或不同的参数类型。

2、下列程序运行结果是 。 #include <iostream.h> class A { public: void fun(){cout<< “A::fun”<<endl;} }; class B : public A { public: void fun(){cout<< “B::fun”<<endl;} }; void main() { B b; A *pa=&b; pa->fun(); b.fun(); }

10.6 虚函数和纯虚函数随堂测验

1、下列程序运行结果是 。 #include <iostream.h> class A { public: virtual void fun(){cout<< “A::fun”<<endl;} }; class B : public A { public: void fun(){cout<< “B::fun”<<endl;} }; void main() { B b; A *pa=&b; pa->fun(); b.fun(); }

2、下列程序运行结果是 。 class A{ public: virtual void funcl(){cout<< "A1";} void func2(){cout<< "A2";} }; class B: public A{ public: void func1(){cout<< "B1";} void func2(){cout<< "B2";} }; int main(){ A *p=new B; p->funcl(); p->func2(); return 0; }

3、下列程序运行结果是 。 #include <iostream.h> class base { public: int n; base(int x) { n = x;} virtual void set(int m) { n = m; cout << n <<' ';} }; class deriveA:public base { public: deriveA(int x):base(x) { } void set(int m) { n += m; cout << n <<' ';} }; class deriveB:public base { public: deriveB(int x):base(x) { } void set(int m) { n +=m; cout <<n << ' ';} }; void main() { deriveA dl(1); deriveB d2(3); base *pbase; pbase = &dl; pbase->set(1); pbase = &d2; pbase->set(2); }

4、下列程序运行结果是 。 class A{ int a; public: A():a(12){} virtual void print(){cout<<a;}; }; class B:public A{ char b; public: B(){b= 'T';} void print(){cout<<b;} }; void show(A &X){X.print();} void main(){ A d1,*p; B d2; p=&d2; d1.print(); d2.print(); p->print(); show(d1); show(d2); }

5、下列程序运行结果是 。 class Base { public: void fun1(){cout<<"Basen";} virtual void fun2(){cout<<"Basen";} }; class Derived:public Base { public: void fun1(){cout<<"Derivedn";} void fun2(){cout<<"Derivedn";} }; void f(Base &b){ b.fun1(); b.fun2(); } void main(){ Derived obj; f(obj); }

6、下列程序运行结果是 。 class A { public: A() { cout<<"the constructor of class A"<<endl; f(); } virtual void f() {cout<<"A::f()"<<endl;} void h() { f(); } }; class B:public A { public: void f() {cout<<"B::f()"<<endl;} }; void main() { A a; B b; b.h(); }

7、下列程序运行结果是 。 class CShape { private: int x,y; public: CShape(int xx,int yy){x=xx;y=yy;} virtual double Area(){return 0;} }; class CCircle:public CShape { private: int r; public: CCircle(int xx,int yy,int rr):CShape(xx,yy){r=rr;} virtual double Area(){return 3.14*r*r;} }; void f1(CShape &sp) { cout<<sp.Area()<<endl; } void f2(CShape sp) { cout<<sp.Area()<<endl; } void main() { CCircle c(10,10,1); f1(c); f2(c); }

8、下列程序运行结果是 。 class AA { int a; public: AA(int i) { a=i; cout<<"AA="<<a<<endl;} virtual ~AA() { cout<<"~AA="<<a<<endl;} }; class BB:public AA { int b; public: BB(int i,int j):AA(i) { b=j; cout<<"BB="<<b<<endl;} ~BB() { cout<<"~BB="<<b<<endl;} }; void main() { AA *pa=new AA(8); delete pa; AA *pb=new BB(6,9); delete pb; }

9、下列程序运行结果是 。(考点:纯虚函数和抽象类) class Pet{ char name[10]; public: Pet(char*name){strcpy(this->name, name);} const char*getName()const {return name;} virtual void call()const=0; }; class Dog: public Pet{ public: Dog(char*name):Pet(name){} void call()const{cout<<"汪汪叫";} }; class Cat:public Pet{ public: Cat(char*name):Pet(name){} void call()const{cout<<"喵喵叫";} }; int main(){ Pet*pet1=new Dog("哈克"), *pet2=new Cat("吉米"); cout<<pet1->getName();pet1->call(); cout<<end1; cout<<pet2->getName();pet2->call(); cout<<end1; return 0; }

10、若定义了一个类,该类只能用作基类,而不能定义该类的对象,这种类被称为 。

10.7 多重继承和多继承随堂测验

1、下列程序运行结果是 。 class a{ public: virtual void print(){cout<<"a prog..."<<endl;} }; class b: public a { int x; public: b(){x=0;} void print(int y){x = y;cout<<"b prog..."<<endl;} }; class c : public b { public: void print(){cout<<"c prog..."<<endl;} }; void show(a *p) { (*p).print(); } void main() { a x; b y; c *z = new c; show(&x); show(&y); show(z); }

2、下列程序运行结果是 。 class B1 {public: B1(int i) {cout<<"constructing B1 "<<i<<endl;} ~B1(){cout<<"destructing B1"<<endl;} }; class B2 {public: B2(int j) {cout<<"constructing B2 "<<j<<endl;} ~B2(){cout<<"destructing B2"<<endl;} }; class B3 {public: B3(){cout<<"constructing B3 *"<<endl;} ~B3(){cout<<"destructing B3"<<endl;} }; class C: public B2, public B1, public B3 { public: C(int a, int b, int c, int d): B1(a),memberB2(d),memberB1(c),B2(b) {} private: B1 memberB1; B2 memberB2; B3 memberB3;}; void main() { C obj(1,2,3,4); }

3、下列程序运行结果是 。 #include <string.h> class Base{ char msg[30]; protected : int n; public : Base(char s[],int m=0) : n(m) { strcpy(msg,s); } void output(void) { cout<<n<<endl<<msg<<endl; } }; class Derived1 : public Base{ int n; public : Derived1(int m=1) : Base("Base",m-2) { n=m; } void output(void) { cout<<n<<endl; Base::output( ); } }; class Derived2 : public Derived1{ int n; public : Derived2(int m=20) : Derived1(m-1) { n=m; } void output( ) { cout<<n<<endl; Derived1::output( ); } }; void main( ) { Derived2 D; D.output( ); }

4、下列程序运行结果是 。 #include <iostream.h> class A { public: A( ) { cout << "A"; } }; class B { public: B( ) { cout << "B"; } }; class C : public A { public: C( ) { cout << "C"; } private: B b; }; void main( ) { C obj; }

5、下列程序运行结果是 。 class A1 {public: A1(int i) {cout<<" A1的构造函数 "<<i<<endl;} ~A1(){cout<<"A1的析构函数"<<endl;} }; class A2 {public: A2(int j) {cout<<" A2的构造函数"<<j<<endl;} ~A2(){cout<<" A2的析构函数"<<endl;} }; class A3 {public: A3(){cout<<" A3的构造函数"<<endl;} ~A3(){cout<<" A3的析构函数"<<endl;} }; class C: public A2, public A1, public A3 { public: C(int a, int b, int c, int d): A1(a),memberA1(d),memberA2(c),A2(b) {} private: A2 memberA2; A1 memberA1; A3 memberA3;}; void main() { C obj(5,6,7,8); }

10.8 类模版随堂测验

1、下列程序运行结果是 。 template <class TT> class FF { TT a1,a2,a3; public : FF(TT b1,TT b2,TT b3) { a1=b1; a2=b2; a3=b3; } TT Sum() { return a1+a2+a3; } }; void main() { FF <int> x(2,4,6),y(5,7,9); cout <<x.Sum()<<' '<<y.Sum()<<endl; }

2、下列程序运行结果是 。 # include <iostream.h> template <class TT> class FF { TT x,y; public : FF(TT a,TT b) { x=a; y=b;; } TT Sub() { return x-y; } }; void main() { FF <int> f(6,4); cout <<f.Sub()<<endl; }

继承、多态和虚函数单元作业

1、定义猫科动物Animal类,由其派生出猫类(Cat)和豹类(Leopard),二者都包含虚函数 sound( ),要求根据派生类对象的不同调用各自重载后的成员函数。

网站分类
最新发表
标签列表