我的C++小测试

ljnljn Lv6
  1. (单选题, 2.0 分)
    复制构造函数的形参是( )。
    A某个对象的引用名
    B某个对象的指针名
    C某个对象的成员名
    D某个对象名

  2. (单选题, 2.0 分)
    以下数组定义中,不正确的是( )。
    Aint a[10 ]={1,2,3,4,5,6};
    Bchar a=”hello”;
    Cint a[ ][2]={1,2,3,4,5,6};
    Dstring s=”abvfgg@54”;

  3. (单选题, 2.0 分)
    给出以下定义:
    char x[ ]=”abcdefg”;
    char y[ ]={‘a’,‘b’,’c’, ‘d’ ,’e’ ,’f’ ,’g’};
    则正确的叙述为( )。
    A数组Y需要的存储空间大于数组X的存储空间
    B数组x和数组Y需要同样大的存储空间
    C数组X需要的存储空间大于数组Y的存储空间
    D数组X和数组Y等价

用sizeof()函数

  1. (单选题, 2.0 分)
    下列关于C++函数的叙述中,正确的是( )。
    A每个函数都必须返回一个值
    B函数不能自己调用自己
    C每个函数至少要具有一个参数
    D函数可以嵌套调用,但不能嵌套定义

  2. (单选题, 2.0 分)
    在C++中关于类和对象,下列说法错误的是( )。
    A类是对象的抽象,而对象则是类的特例
    B类是具有相同特性和相同行为的对象的集合
    C一个类只能有一个对象
    D面向对象程序设计中,通过创建类(包含属性与方法)实现封装和数据隐藏

  3. (单选题, 2.0 分)
    下列语句中错误的是( )。
    Aint n; cin>>n; int *p=new int[n];
    Bdelete []p;
    Cint *p=new int (10);
    Dint p=new int[10];

  4. (单选题, 2.0 分)下面的符号中可以用作 C++标识符的是( )。
    Aelse
    Bfcc@other
    C3test
    Dradius

  5. (单选题, 2.0 分)
    如果主调函数传递数组给被调函数,对函数形参的说明有错误的是( )。
    A int a(float x,int n)
    B int a(float x[10],int n)
    C void a(float *x,int n)
    D int a(float x[ ],int n)

  6. (单选题, 2.0 分)
    对于语句x*=y+2;还可以写成( )。

A x=x*y+2;
B x=2+y*x;
C x=x*(y+2); 
D x=y+2*x;

  1. (单选题, 2.0 分)
    下列不是构造函数的特征的是( )。
    A构造函数可以设置默认参数
    B构造函数可以重载
    C构造函数必须指定返回值类型
    D构造函数的函数名与类名相同

二、 程序填空题 (共 2题,12.0 分)
11. (程序填空题, 4.0 分)
函数 fun 的功能是判断一个3位整数的个位数和百位数之和是否等于其十位上的数字,是则返回“1”,否则返回“0”,请完善程序。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
using namespace std;
bool fun(int n)
{int g,s,b;
g=n%10;

(1) //获取十位数的值

b=n/100;

(2)

return 1;

else return 0;

}

int main()

{ int m;

cin>>m;

cout<<fun(m);

return 0;

}

(1)s=(n%100-g)/10;
(2)if(g+b==s)

  1. (程序填空题, 8.0 分)

该程序段实现运算符重载,完善程序。

按成员函数重载运算符“-”以实现两个复数的差运算,再以友元方式重载“*”运算符实现两个复数的积运算。

说明:设z1=a+bi,z2=c+di(a、b、c、d∈R)是任意两个复数,那么它们的积(a+bi)(c+di)=(ac-bd)+(bc+ad)i。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include<iostream> 

using namespace std;

class Complex

{

float real;

float imag;

public:

Complex( float r,float i )

{

real=r; imag=i;}

void display()

{

cout<<real<<"+"<<imag<<"i"<<endl;

}

________(1)____________ //函数声明:运算符“-”重载为成员函数

_______(2)_____________ //函数声明:运算符“*”重载为友元员函数



};

__________(3)__________ // 函数类外实现:定义运算符“-”重载函数

__________(4)__________ // 函数类外实现:定义运算符“*”重载函数

myanswer:

1
2
3
4
5
6
7
8
(1)Complex operator+ (Complex& comp2);
(2)friend Complex operator*(Complex& comp1,Complex& comp2);

(3)Complex Complex::operator+ (Complex& comp2)
{return Complex(real+comp2.real,imag+comp2.imag);}

(4)Complex operator*(Complex& comp1,Complex& comp2)
{return Complex(comp1.real*comp2.real,comp1.imag*comp2.imag);}

编写程序输出200-300之间的所有素数以及素数的个数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include<iostream> 
using namespace std;
int main()
{
bool isprime;
int num=0;
for(int i=200;i<=300;i++)
{
isprime=false;
for(int j=2;j<i;j++)
{
if(i%j==0){isprime=false;break;}
else{isprime=true;}
}
if(isprime){
cout<<i<<endl;
num++;
}
}
cout<<num;
return 0;
}

编写程序计算并输出n(包括n)以内能被5或9整除的所有自然数的倒数之和。 例如, 从键盘输入n为20后, 输出为: s=0.583333。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<iostream> 
using namespace std;
int main()
{
int n;
double s;
cin>>n;
for(int i=1;i<=n;i++)
{
if(i%5==0 || i%9==0)s+=1.0/i;
}
cout<<"s="<<s;
return 0;
}

编写一个函数对某犯罪团伙(13人)一段时间内支付宝收入金额(float 类型)进行排序(降序),编写主函数测试该函数,13人支付宝收入金额在主函数中从键盘输入,并将排序后的结果在主函数中输出。(注:不能直接调用系统函数)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include<iostream> 
using namespace std;
void Sort(float* m)
{
int n=13;
float temp;
for(int j=0;j<n-1;j++)
{
for(int i=0;i<n-j-1;i++)
{
if(m[i]<m[i+1])
{
temp=m[i];
m[i]=m[i+1];
m[i+1]=temp;
}
}
}
}
int main()
{
float money[13];
for(int i=0;i<13;i++)cin>>money[i];
Sort(money);
for(int i=0;i<13;i++)cout<<money[i]<<endl;
return 0;
}

编写程序将4*4的二维数组的值按照列的顺序存储到一维数组中,要求从键盘上输入二维数组,转换存储到一维数组中,输出一维数组。
如输入二维数组:
5 7 9 10
4 3 0 1
20 4 19 40
12 45 23 2
输出的一维数组是:
5 4 20 12 7 3 4 45 9 0 19 23 10 1 40 2.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include<iostream> 
using namespace std;
int main()
{
int a[4][4],b[16],num=0;
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
{
cin>>a[i][j];
}
}
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
{
b[num]=a[j][i];
num++;
}
}
for(int i=0;i<16;i++)cout<<b[i]<<' ';
return 0;
}

编写程序对字符串进行下列操作:

(1)编写一个子函数,统计字符串c中的非数字字符的个数。

函数原型:int MyStrlen(const char c[]);

如输入字符串”GQ8&6Kd4_07”,则函数返回值为6。

(2)编写一个子函数,将字符串a中所有的非“*”号字符拷贝到字符串b中。

函数原型:void MyCopy(const char a[],char b[]);

如a字符串"Fb*fk**cg_12***",则b字符串应为”Fbfkcg_12”。

(3)编写一个子函数,将一个字符串m加密后存放到字符串n中,加密的规则是:当内容是英文字母时则用该英文字母的后5个字母替换,同时字母变换大小写,如字母a时则替换为F,字母Z则替换为e;当内容是数字时,则把数字加5,如0替换为5,9替换为4。

函数原型: void myEncipher(const char *m, char *n);

写出主函数测试以上操作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include<iostream> 
using namespace std;
int MyStrlen(const char c[])
{
int num=0;
for(int i=0;c[i]!=0;i++)
{
if(c[i]<'0' || c[i]>'9')num++;
}
return num;
}
void MyCopy(const char a[],char b[])
{
int num=0;
for(int i=0;a[i]!=0;i++)
{
if(a[i]!='*')
{
b[num]=a[i];
num++;
}
}
b[num+1]='\0';
}
void myEncipher(const char *m, char *n)
{
int num=0;
char ctemp;
for(int i=0;m[i]!=0;i++)
{
if(m[i]>='a' && m[i]<'v'){ctemp=(m[i]+5)-'a'+'A';}
else if(m[i]>='v' && m[i]<='z'){ctemp=m[i]-53;}
else if(m[i]>='A' && m[i]<'V'){ctemp=(m[i]+5)-'A'+'a';}
else if(m[i]>='v' && m[i]<='z'){ctemp=m[i]+11;}
else if(m[i]>='0' && m[i]<='4'){ctemp=m[i]+5;}
else if(m[i]>='5' && m[i]<='9'){ctemp=m[i]-5;}
else{ctemp=m[i];}
n[num]=ctemp;
num++;
}
n[num+1]='\0';
}
int main()
{
char c[]="GQ8&6Kd4_07";
cout<<MyStrlen(c)<<endl;

char a[]="Fb*fk**cg_12***";
char b[20];
MyCopy(a,b);
for(int i=0;b[i]!=0;i++)cout<<b[i];
cout<<endl;

char m[]="Hello World12345";
char n[20];
myEncipher(m,n);
for(int i=0;n[i]!=0;i++)cout<<n[i];
return 0;
}

某市公安局A派出所统计当月辖区内电信网络诈骗案件相关数据信息,编写一个电诈类(telecom fraud,简写Tel_fraud), 其中包含案件类型,报案时间,受害人姓名,损失金额等数据成员(都为私有的)。

(1) 添加对数据成员初始化的无参构造函数、带参数构造函数,复制构造函数、析构函数以及显示电诈信息的成员函数(display),也可根据需要添加其他成员函数。

(2) 设计一个普通函数:void amount(Tel_fraud s[]),用于统计所有电诈案件损失金额的总和,并输出统计金额的信息;

(3) 首先在主函数中调用(1)的所有成员函数进行验证,再定义一个 Tel_fraud 的对象数组,可以存放以下电诈案件信息,将数组内容输出,调用 amount()输出损失金额信息。

刷单返利类 2024年12月8日09时00分 张三 12320

冒充电商客服 2024年12月15日11时00分 李四 7301.1

虚假贷款 2024年12月23日09时00分 王五 32253.5

杀猪盘类 2024年12月25日13时00分 小丽 12520

虚假投资理财 2024年12月29日19时00分 李华 53000

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include<iostream> 
#include<string>
#include<iomanip>
using namespace std;
class Tel_fraud
{
public:
Tel_fraud() {leixing=" ";Time=" ";name=" ";money=0.0;}
Tel_fraud(string lx,string sj,string mz,double je){leixing=lx;Time=sj;name=mz;money=je;}
Tel_fraud(Tel_fraud& tel){leixing=tel.leixing;Time=tel.Time;name=tel.name;money=tel.money;}
~Tel_fraud() {cout<<"调用了析构函数"<<endl;}
void display()
{
cout<<"类型:"<<leixing<<endl<<"时间:"<<Time<<endl<<"姓名:"<<name<<endl<<"损失金额:"<<money<<endl<<endl;
}
friend void amount(Tel_fraud s[]);
private:
string leixing,Time,name;
double money;
};
void amount(Tel_fraud s[])
{
double sum=0.0;
for(int i=0;i<5;i++)
{
sum+=s[i].money*1.0;
}
cout<<"总损失金额:"<<setprecision(7)<<sum<<endl;
}
int main()
{
Tel_fraud tel;
Tel_fraud();
tel=Tel_fraud("test","test","test",1.23);
tel.display();

Tel_fraud tels[5]=
{
Tel_fraud("刷单返利类","2024年12月8日09时00分","张三",12320),
Tel_fraud("冒充电商客服"," 2024年12月15日11时00分","李四",7301.1),
Tel_fraud("虚假贷款","2024年12月23日09时00分","王五",32253.5),
Tel_fraud("杀猪盘类","2024年12月25日13时00分","小丽",12520),
Tel_fraud("虚假投资理财","2024年12月29日19时00分","李华",53000)
};
for(int i=0;i<5;i++)tels[i].display();
amount(tels);
return 0;
}
  • 标题: 我的C++小测试
  • 作者: ljnljn
  • 创建于 : 2025-01-03 09:52:00
  • 更新于 : 2026-05-25 22:04:46
  • 链接: https://ljnljn2005.github.io/2025/01/03/我的C++小测试/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
目录
我的C++小测试