一、选择题(每小题1分,共40分)
1有如下程序:
#include
using namespace std;
class Base{
protected:
Base(){cout<<’A’;}
Base(char C){cout<
};
class Derived:public Base{
public:
Derived(char C){tout<
};
int main(){
Derived dl(’B’);
retum 0;
}
执行这个程序的输出结果是( )。
A.BB.BAC.ABD.BB
参考答案:C
参考解析:本题考查派生类的构造函数和析构函数.在定义一个派生类的对象时,先调用基类的构造函数,然后再执行派生类的构造函数;对象释放时,先执行派生类的析构函数,再执行基类的析构函数。本题中定义了一个派生类对象d1,首先执行基类的构造函数,输出A;然后执行派生类的构造函数,输出B。所以答案为c。
2下列符号中能够作为C++标识符的是( )。
A.CoflstB.2aC._shapeD..Count
参考答案:C
参考解析:本题考查c++标识符的命名规则,其规则有如下几点:①所有标识符必须由字母、数字或下画线组成,且必须由字母或下画线开头;②所有标识符不能使用c++已有的关键字;③大、小写字母表示不同意义,即代表不同的标识符。选项A是关键字,选项B不能以数字开头,选项D包含了字符”一”,且不能以此字符开头。故答案为C。
3有如下程序:
#include
using namespace std;
class Base
{
private:
void funl()const{tout<<”funl”;}
protected:
void fun2()const{tout<<”fun2”;}
public:
void fun3()const{cout<<”fhll3”;}
};
class Derived:protected Base
{
public:
void fhn4()const{cout<<”filn4”;}
};
int main()
{
Derived obj;
obj.funl();//①
obj.fun2();//②
obj.furd();//③
obj.fun4();//④
return U:
}
其中有语法错误的语句是( )。
A.①②③④B.①②③C.②③④D.①④
参考答案:B
考解析:本题考查保护继承中派生类对基类的访问属性,受保护继承中,基类的公用成员和保护成员在派生类中成了保护成员,其私有成员仍为基类私有,保护基类的所有成员在派生类中都被保护起来,在类外不能访问,所以①②③错误。
4有如下程序:
#include
using namespace std;
class Instrument{
public:
virtual void Display()=0;
};
class Pian0:public Instrument}
public:
void Display(){/*函数体略*" >
};
intmain(){
Instrument S;
Instrument*P=0:
//…;
return 0;
}
下列叙述中正确的是( )。
A.语句“Insturment*P=0;”编译时出错
B.语句“Instnunent s;”编译时出错
C.类Pian0中的Display函数不是虚函数
D.类Instrument是一个虚基类
参考答案:B我
参考解析:本题考查纯虚函数和抽象类,纯虚函数是在声明虚函数时被“初始化”为0的函数,包含纯虚函数的类为抽象类,抽象类不能被实例化,所以语句“Instrmnent s;”在编译时出错。
5如下函数模板:
templateT square(T x){return x*x;} 其中T是( )。
A.函数形参B.函数实参C.模板形参D.模板实参
参考答案:C
参考解析:本题考查模板函数的基本概念,根据模板函数的定义,T是模板形参,所以答案为C。
6为了提高函数调用的实际运行速度,可以将较简单的函数定义为( )。
A.内联函数B.重载函数C.递归函数D.函数模板
参考答案:A
参考解析:一般函数进行调用时,要将程序执行权转到被调用函数中.然后再返回到调用它的函数中;而内联函数在调用时,是将调用表达式用内联函数体来替换,一般只将{将规模很小而使用频繁的函数声明为内联函数,可以避免函数调用时间开销,从而提高运行速度。
7有如下程序:
#inClude using namespaCe std; Class Point{
publiC:
statiC int number;
publiC:
Point( )t.number++;} ~Point( ){number--;}
}; , int P0int::number=0;
int main( ){
Point *ptr:
Point A,B; Point*ptr_point=new Point[3]; ptr=ptr_point;’
}
Point C;
Cout<
return 0; }
执行这个程序的输出结果是( )。
A.3B.4C.6D.7
参考答案:C
参考解析:本题考查默认构造函数.题目中定义.个对象A、B以及对象数组Point[3],又定义了对象C,共执行6次构造函数,number变为了6,所以本题答案为C。
8有三个关系R、S和T如下.
2016年9月计算机二级C++上机考试冲刺试题(2)
由关系R和s通过运算得到关系T,则所使用的运算为( )。
A.并B.自然连接C.笛卡尔积D.交
参考答案:D
参考解析:自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉,所以8错误。笛卡尔积是用R集合中元素为第一元素,s集合中元素为第二元素构成的有序对,所以C错误。根据关系T可以很明显地看出是从关系R 与关系s中取得相同的关系组所以取得是交运算,选择D。
9下列符号中,正确的c++标识符是( )。
A.enumB.2bC.f00一9D._32
参考答案:D
参考解析:本题考查c++标识符的命名规则,规定如下:①所有标识符可以由字母、数字和下画线组成,且必须以字母或F画线开头;②c++的关键字不能作为标识符;③大、小写字母表示不同意义,即代表不同的标识符,如mun和Mu0。A选项是C++的关键字,B选项不能以数字开头,C选项“一”不能用于组成标识符。
10下列关于C++预定义流对象的叙述中,正确的是( )。
A.Cin是C++预定义的标准输入流对象
B.Cin是C++预定义的标准输入流类
C.Cout是C++预定义的标准输入流对象
D.Cout是C++预定义的标准输入流类
参考答案:A
参考解析:cin是C++预定义的标准输入流对象,tOUt是C++预定义的标准输出流对象。
11下列情况中,不会调用拷贝构造函数的是( )。
A.用一个对象去初始化同一类的另一个新对象时
B.将类的一个对象赋值给该类的另一个对象时
C.函数的形参是类的对象,调用函数进行形参和实参结合时
D.函数的返回值是类的对象,函数执行返回调用时
参考答案:B
参考解析:本题考查复制构造函数,在以下3种情况下使用:①程序中需要新建立一个对象,并用另一个对象对它初始化;②函数的参数为类的对象;③函数的返回值是类的对象。其中B选项是由赋值运算符重载实现的。
12下列叙述中正确的是( )。
A.线性表的链式存储结构与顺序存储结构所需要的存储空间是相同的
B.线性表的链式存储结构所需要的存储空间一般要多于顺序存储结构
C.线性表的链式存储结构所需要的存储空间一般要少于顺序存储结构
D.线性表的链式存储结构与顺序存储结构在存储空间的需求上没有可比性
参考答案:B
参考解析:线性链式存储结构中每个结点都由数据域与指针域两部分组成,增加了存储空间,所以一般要多于顺序存储结构。
13类的析构函数的作用是( )。
A.一般成员函数的初始化B.类的初始化C.对象的初始化D.删除类创建的对象
参考答案:D
参考解析:析构函数就是用来释放对象的.它的调用完成之后,对象也就消失了,相应的内存空间也被释放了。
14下列运算符不能重载为友元函数的是( )。
A.=()( )->B. + - ++ --C.> < >= <=D.+= -= *=/=
参考答案:A
参考解析:关于运算符重载为友元函数有如下规定:①一般情况下,单目运算符重载为类的成员函数,双目运算符则重载为类的友元函数;②双目运算符“=、()、[]、->”不能重载为类的友元函数。所以本题答案为A。
15下面关于运算符重载的描述错误的是( )。
A.运算符重载不能改变操作数的个数、运算符的优先级、运算符的结合性和运算符的语法结构
B.不是所有的运算符都可以进行重载
C.运算符函数的调用必须使用关键字operat。
D.在C+十语言中不可通过运算符重载创造出新的运算符
参考答案:C
参考解析:例如“::”运算符就不能被重载;通过重载可以创造新的运算方式,但是不能臆造新的运算符;定义的时候必须使用关键字0perator,而调用时可直接使用运算符。
16当使用fstream流类定义一个流对象并打开一个磁盘文件时,文件的隐含打开方式为( )。
A.ios::inB.ios::0utC.ios::in I ios::0utD.以上都不对
参考答案:D
参考解析:
使用fstream类建立文件流必须定义打开方式,否则编译器无法判断该文件流是读还是写。
17由于常对象不能被更新,因此( )。
A.通过常对象只能调用它的常成员函数
B.通过常对象只能调用静态成员函数
C.常对象的成员都是常成员
D.通过常对象可以调用任何不改变对象值的成员函数
参考答案:A
参考解析:本题考查常对象的基本知识,常对象只能调用它的常成员函数,而不能调用非const函数,常对象的成员函数不一定都是常成员函数,只需保证其数据成员是常数据成员即可。所以本题选A。
18支持子程序调用的数据结构是( )。
A.栈B.树C.队列D.二叉树
参考答案:A
参考解析:栈支持子程序调用栈是一种只能在一端进行插入或删除的线性表,在主程序凋用子函数时要首先保存主程序当前的状态,然后转去执行子程序.最终把子程序的执行结果返回到主程序中调用子程序的位置,继续向下执行,这种调用符合栈的特点,因此本题的答案为A。
19有如下类定义:
class B
{
public:void funl(){}
private:void fun2(){}
protected:void fun3(){}
};
class D:public B
j
protected:void fun4(){}
};
若obj是类D的对象,则下列语句中不违反访问控制权限的是( )。
A.obj.fun1();B.obj.fun2();C.obj.tim3();D.ohj.fun4();
参考答案:A
参考解析:本题考查公用继承对基类成员的访问属性。在公用继承中,基类的公用成员和保护成员在派生类中保持原有的访问属性,其私有成员仍为基类私有。所以在本题中,在类外引用成员函数时,派生对象只能引用基类的公用成员函数fun1,故本题答案为A。
20有如下语句序列:
Char str[10];Cin>>str;
当从键盘输入“I love this game”时,str中的字符串是( )。
A.”I love this game”B.”I love thi”C.”I love”D.”I”
参考答案:D
参考解析:cin是c++预定义的标准输入流对象,cin用来接收字符串时,遇“空格”、“TAB”、“回车”时都会结束。所以本题答案为D。第20题 笔记记录我的笔记(0) | 精选笔记(4)选择笔记标签:试题内容(3)答案解析(1)
21继承机制的作用是( )。
A.信息隐藏B.数据封装C.定义新类D.数据抽象
参考答案:C
参考解析:数据封装就是数据抽象,即信息隐藏;而继承是实现程序复用的基础。
)22模板对类型的参数化提供了很好的支持,因此( )。
A.类模板的主要作用是生成抽象类
B.类模板实例化时,编译器将根据给出的模板实参生成一个类
C.在类模板中的数据成员都具有同样类型
D.类模板中的成员函数都没有返回值
参考答案:B
参考解析:本题考查类模板的基本概念。类模板的定义和声明都以关键字template开头。关键字后面是一个用逗号分隔的模板参数表,用尖括号“<>”括起来,这个表被称为类模板的模板参数表。类模板是类的抽象,类是类模板的实例。类模板使类中的一些数据成员和成员函数的参数或返回值可以取任意的数据类型。所以B选项正确。
23if语句的语法格式可描述为:
格式l:if(<条件>)<语句>
或
格式2:if(<条件>)<语句l>
else<语句2>
关于上面的语法格式,下列表述中错误的是( )。
A.<条件>部分可以是一个if语句,例如if(if(a==0)…)…
B.<语句>部分可以是一个if语句,例如if(…)if(…)…
C.如果在<条件>前加上逻辑非运算符!并交换<语句l>和<语句2>的位置,语句功能不变
D.<语句>部分可以是一个循环语句,例如if(…)while(…)…
参考答案:A
参考解析:本题考查if语句,if语句的条件部分不能嵌套if语句,所以A选项错误;B选项就是if语句嵌套;C选项其实就是将判断条件颠倒,然后执行语句也颠倒,所以效果一样;D选项也正确。
24下面的程序中,错误的语句是( )。
①#inClude
②void main()
③{
④ int *p=new int[1];
⑧P=9;
⑥cout<<.*P<
⑦delete[]p;
⑧}
A.④B.⑤C.⑥D.⑦
参考答案:B
参考解析:本题考查的是指针的使用,P是指向int 型的指针,若想给它指向的元素赋值,应使用*符号,赢接赋值相当于改变了原来P存储的地址。
25下面有关for循环的正确描述是( )。
A.for循环只能用于循环次数已经确定的情况B.for循环是先执行循环体语句,后判断表达式C.在for循环中,不能用break语句跳出循环体D.在for循环的循环体语句中,可以包含多条语句,但必须用花括号括起来
参考答案:D
参考解析:选项A中for循环可以用于循环次数不确定的情况;选项8中for循环是先判断表达式,后执行循环体语句;选项c中for循环可以用break语句跳出循环体,从而接着执行循环体后面的语句。
26下列叙述中正确的是( )。
A.算法就是程序
B.设计算法时只需要考虑数据结构的设计
C.设计算法时只需要考虑结果的可靠性
D.以上三种说法都不对
参考答案:D
参考解析:算法是指解题方案的准确而完整的描述,算法不等于程序,也不等于计算方法,所以A错误。设计算法时不仅要考虑对数据对象的运算和操作,还要考虑算法的控制结构。
27由于常对象不能被更新,因此( )。
A.通过常对象只能调用它的常成员函数
B.通过常对象只能调用静态成员函数
C.常对象的成员都是常成员
D.通过常对象可以调用任何不改变对象值的成员函数
参考答案:A
参考解析:本题考查常对象的基本知识,常对象只能调用它的常成员函数,而不能调用非const函数,常对象的成员函数不一定都是常成员函数,只需保证其数据成员是常数据成员即可。所以本题选A。
28有如下程序:
#include
using namespace std;
class MyClass{
public:
MyClass(){cout<<’A’;}
MyClass(char C.{cout<
~MyClass(){cout<<’B’;}
};
int main(){
MyClass pl,+p2;
p2=new MyClass(’X’);
delete p2;
return 0;
}
执行这个程序的输出结果是( )。
A.ABXB.ABXBC.AXBD.AXBB
参考答案:D
参考解析:构造函数和析构函数的调用顺序为先构造的后析构,后构造的先析构。所以本题答案为D。
29有如下程序:
#include
using namespace std;
class Pair{
int m,n;
public:
Pair(int j,int k):m(j),n(k){}
int get(){return m;}
int get()const{return m+n;}
};
int main(){
Pair a(3,5);
const Pair b(3,5);
tout<
return U:
}
执行这个程序的输出结果是( )。
A.33B.38C.83D.88
参考答案:B
参考解析:本题考查常对象、常成员函数及构造函数。常对象只能调用常成员函数,所以本题中,对象a为普通对象,执行a.get()后,会执行默认构造函数,输出3;对象b为常对象,执行b.get()后,会执行常构造函数,输出8。
30执行下列语句段后,输出字符“*”的个数是( )。
for(int i=50;i>1;--i) Cout<<'*':
A.48B.49C.50D.51
参考答案:B
参考解析:本题考查for循环语句,--i表示用之前先减1,那么这个for循环语句只有50到2时才会输出“*”,所以总共输出49次。
31有三个关系R、S和T如下:
2016年9月计算机二级C++上机考试冲刺试题(2)
则由关系R和S得到关系T的操作是( )。
A.自然连接B.交C.投影D.并
参考答案:A
参考解析:自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉,所以根据T中元组可以判断R和S做的是自然连接操作。
32软件测试的目的是( )。
A.评估软件可靠性
B.发现并改正程序中的错误
C.改正程序中的错误
D.发现程序中的错误
参考答案:D
参考解析:软件测试是为了发现错误而执行程序的过程,测试要以查找错误为中心,而不是为了演示软件的正确功能。不是为了评估软件或改正错误。
33软件设计中划分模块的一个准则是( )。
A.低内聚低耦合B.高内聚低耦合C.低内聚高耦合D.高内聚高耦合
参考答案:B
参考解析:一般较优秀的软件设计,应尽量做到高内聚,低耦合,即减弱模块之间的耦合性和提高模块内的内聚性,有利于提高模块的独立性。
34下列数据结构中,能够按照“先进后出”原则存取数据的是( )。
A.循环队列B.栈C.队列D.二叉树
参考答案:B
参考解析:栈是按先进后出的原则组织数据的。队列足先进先出的原则组织数据。
35有如下程序:
#inClude using namespaCe std; Class Base{
publiC:
Base(int x=0){Cout<
Class Derived:publiC Base{ publiC:
Derived(int X=0){Cout<
Base val; };
int main() {
Derived d(1); return 0;
}
执行这个程序的输出结果是( )。
A.0B.1C.01D.001
参考答案:D
参考解析:本题考查派生类的构造函数和析构函数,在定义一个派生类的对象时,先调用基类的构造函数,然后再执行派生类的构造函数,对象释放时,先执行派生类的析构函数,再执行基类的析构函数。所以本题中定义了一个对象d,先执行基类的构造函数输出0,因为派生类中的私有数据成员为Base,所以还会执行一次基类的构造函数输出0,最后执行派生类的构造函数输出1,所以本题答案为D。
36已知Value是一个类,value是Value的一个对象。下列以非成员函数形式重载的运算符函数原型中,正确的是( )。
A.Value operator+(Value v,int i);
B.Value operator+(Value v=value,int i);
C.Value operator+(Value v,inl:i=0):
D.Value operator+(Value v=vallle,int i=0);
参考答案:A
参考解析:本题考查运算符重载,其中重载运算符的函数不能有默认的参数,所以本题答案为A。
点击查看试题笔记(3)37有如下程序段:
int i=0,J=1;
nt&r=i;//④ ’ r=j;//②
int * P=&i;//③ * P=&r;//④
其中会产生编译错误的语句是( )。
A.④B.③C.②D.①
参考答案:A
参考解析:本题考查指针和引用。①为引用,使用正确;④中&r表示一个地址,而*P已经是-一个值了,不能将一个指针赋值给一个值,所以编译错误。
38有如下程序:
﹟nclude
using namespace std;
int main()
{
int*P;
*P=9:
cout<<”The value at p:”<< *p;
return 0;
}
编译运行程序将出现的情况是( )。
A.编译时出现语法错误,不能生成可执行文件
B.运行时一定输出:l'lle value at P:9
C.运行时一定输出:llle value at P:*9
D.运行时有可能出错
参考答案:D
参考解析:先定义指针变量,然后给指针变量赋初值有三种情况:①用取地址运算符“&”将变量地址赋给指针变量,如P=&a;②将一个指针变量中的地址赋给另一个指针变量,如P=p1;③给指针变量赋空值0,如q=0,表示该指针变量不指向任何变量。而不能用一个常量给指针变量赋初值,所以本题选D。
39在软件设计中不使用的工具是( )。
A.系统结构图B.PAD图C.数据流图(DFD图)D.程序流程图
参考答案:C
参考解析:系统结构图是对软件系统结构的总体设计的图形显示。在需求分析阶段,已经从系统开发的角度出发,把系统按功能逐次分割成层次结构,是在概要设计阶段用到的。PAD图是在详细设计阶段用到的。程序流程图是对程序流程的图形表示,在详细设计过程中用到。数据流图是结构化分析方法中使用的工具,它以图形的方式描绘数据在系统中流动和处理的过程,由于它只反映系统必须完成的逻辑功能,所以它是一种功能模型,是在可行性研究阶段用到的而非软件设计时用到,所以选择C。
40C++中的模板包括( )。
A.对象模板和函数模板B.对象模板和类模板C.函数模板和类模板D.变量模板和对象模板
参考答案:C
参考解析:本题考查函数模板和类模板.所以答案为C。
二、基本操作题(18分)
41请使用VC6或使用【答题】菜单打开考生文件夹projl下的工程projl,此工程中包含一个源程序文件main.cpp,其中有类Book(“书”)和主函数main的定义。程序中位于每个“//ERROR****found****”下的语句行有错误,请加以改正。改正后程序的输出结果应该是:
书名:C++语句程序设计总页数:299
已把“c++语言程序设计”翻到第50页
已把“c++语言程序设计”翻到第51页
已把“c++语言程序设计”翻到第52页
已把“c++语言程序设计”翻到第51页
已把书合上。
当前页:0
注意:只修改每个“//ERROR ***found***”下的那一行,不要改动程序中的其他内容。
#include
using namespace std;
class Book{
char*title;
int num—pages;//页数
int cur_page;//当前打开页面的页码,0表示书未打开
public:
//ERROR***********found***********
Book(const char*theTitle,int pages)num_pages(pages)
{
title=new char[strlen(theTitle)+1];
strepy(title,theTitle);
cout<
<<”总页数:”<
}
~Book(){delete[]title;}
bool isClosed()const{return cur_page==0;} //书合上时返回true,否则返回false
bool isOpen()const{return!isClosed();}//书打开时返回true,否则返回false
int numOfPages()const{return num_pages;}//返回书的页数
int currentPage()const{return cur_page;}//返回打开页面的页码
//ERROR***********found***********
void openAtPage(int page_no)const{ //把书翻到指定页
cout<
i“page_nohum_pages){
tOUt<<”无法翻到第”<
ClOSe();
}
else{
cur_page=page_n0;
tout<<”已把“"<
}
}
void openAtPrevPage(){openAtPage(cur page—1);{//把书翻到上一页
void openAtNextPage(){openAtPage(cur_page+1);}//把书翻到下一页
void close(){//把书合上
tout<
if(isClosed())
tout<<"书是合上的。";
else{
//ERROR**********found**********
num_pages=0;
cout<<”已把书合上。”;
}
cOut<
}
};
int main(){
Book book(”C++语言程序设计”,299);
book.openAtPage(50);
book.openAtNextPage();
book.openAtNextPage();
book.openA.tPrevPage();
book.close();
tout<<”当前页:”<
return 0:
}
参考解析:
(1)Book(const char*theTifle,int pages):num_pages(pages)
(2)void openAtPage(int page—no) //把书翻到指定页
(3)cur_page=0;
三、简单应用题(24分)
42请使用VC6或使用【答题】菜单打开考生文件夹proj2下的工程proj2,该工程中包含一个程序文件main.cpp,其中有日期类Date、人员类Person及排序函数sortByName和主函数main的定义。请在程序中的横线处填写适当的代码并删除横线,以实现上述类定义和函数定义。此程序的正确输出结果应为:
按姓名排序
排序前:
张三 男 出生日期:1978年4月20日
王五 女 出生日期:1965年8月3日
杨六 女 出生日期:1965年9月5日
李四 男 出生日期:1973年5月30日
排序后:
李四 男 出生日期:1973年5月30日
王五 女 出生日期:1965年8月3日
杨六 女 出生日期:1965年9月5日
张三 男 出生日期:1978年4月20日
注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“//****found****”。
#include
using namespace std;
class Date{//日期类
int year,month,day;//年、月、日
public:
Date(int year,int month,int day):year(year),month(month),day(day){}
int getYear()const{return year;}
int getMonth()const{return month;}
int getDay()const{return day;}
};
class Person{ //人员类
char name[14];//姓名
bool is—male;//性别,为true时表示男性
Date birth—date;//出生日期
public:
Person(char*name,bool is—male,Date birth_date)
//***************found***************
:——————
{
{
strcpy(this一>name,name);
}
const char * getName()const{return name;}
bool isMale()const{return is—male;}
Date getBirthdate()const{return birth—date;}
//利用strcmp()函数比较姓名,返回一个正数、0或负数,分别表示大于、等于、小于
int compareName(const Person&p)const{
//***************found*****************
————}
void show(){
cout<
cout<
//**************found**************
__________________________//显示出生月
<< “birth—date.getDay()<<”日”;//显示出生日
}
};
void sortByName(Person ps[],int size){
//将人员数组按姓名排列为升序
for(int i=0;i
//采用选择排序算法
int m=i;
for(int j=i+1;j
if(ps[j].eompareName(ps[m])<0)
m=j;
if(m>i){
Person P=ps[m];
ps[m]=ps[i];
ps[i]=p;
}
}
}
int main(){
Person staff[]={
Person(”张三”,true,Date(1978,4,20)),
Person(”王五”,false,Date(1965,8,3)),
Person(”杨六”,false,Date(1965,9,5)),
Person(”李四”,tme,Date(1973,5,30))
};
const int size=sizeof(staff)/sizeof(staff[0]);
int i;
eout<
cout<
for(i=0;i
sortByName(staff,size);
cout<
for(i_0;i
cout<
return 0;
{
参考解析:
(1)is—male(is—male),birth—date(birth—date)
(2)retum stremp(nalne,P.getName());
(3)“birth—date.getMonth()“”月”
四、综合应用题(18分)
43请使用VC6或使用【答题】菜单打开考生文件夹prosS下的工程pr093,其中包含了类TaxCaleulator(“个税计算器”)和主函数main的定义。创建“个税计算器”需要接收税率表信息和起征额信息。在main函数中,通过两个数组创建了如下的税率表:
利用这个税率表创建“个税计算器”时,假定起征额为2 000元(即不超过2 000元的所得不征收个人所得税)。请补充完成计算应纳个人所得税额的成员函数getTaxPayable,其中的参数income为月收入。此程序的正确输出结果应为:
月收入为800元时应缴纳个人所得税0元
月收入为l 800元时应缴纳个人所得税0元月收入为2 800元时应缴纳个人所得税 55元 月收入为3 800元时应缴纳个人所得税l55元
月收入为4 800元时应缴纳个人所得税295元月收入为5 800元时应缴纳个人所得税455元
注意:只能在函数9etTaxPayable中的“//**********333**********”和“//**********666**********”之间
填人若干语句,不要改动程序中的其他内容。 //Tax Calculator.h #include #include
using flamespace std; class TaxCalculator{ public:
TaxCalculator(double the—limits[],double the_rates[],int the—length,double the_threshold) :lower_limits(new double[the_length]),rates(new double[the—length]),
list_len(the_length),threshold(the—threshold){ for(int i=0;i
lower_limits[i]=the_limits[i]; rates[i]=the_rates[i];
} f
—TaxCalculator(){delete[]lower_limits;delete[]rates;}
double getTaxPayable(double income)eonst;//返回指定月收入的应纳个人所得税额 void showTaxPayable(double income)const;//显示指定月收入的应纳个人所得税额 private:
double$lower—limits;//适用收入段下限 double *rates; //适用税率
int list—len;//税率表项数
double threshold; //起征额 };
void writeToFile(consl char * path); //TaxCalcnlator.cpp
‘#include”TaxCalculator.h”
double TaxCalculator::getTaxPayable(double income)const{ double taxable=income—threshold;
//应纳税工资额
double tax_payable=0.0; //应纳个人所得税额
int i=list_len-1;
//从税率表的适用段开始计算 while(i>=0){
//**********333**********
//**********666**********
--i; }
return tax_payable;
} void TaxCalculator::showTaxPayable(double income)const{
cout<<”月收入为”<
}
//main.cpp
#include”TaxCalculator.h” int main(){
double limits[]={0.0,500.0,2000.0,5000.0,20000.0,40000.0,60000.0,80000。0,100000.0}; double rates[]={0.05,0.1,0.15,0.2,0.25,0.3,O.35,0.4,0.45};
TaxCaleulator calc(1imits,rates,9,2000.0); calc.showTaxPayable(800.0);
calc.showTaLPayable(1800.0); cale.showTaxPayable(2800.0); calc.showTaxPayable(3800.0); calc.showTaxPayable(4800.0); eaie.showTaxPayable(5800.0); writeToFile(””);
return 0;
}
参考解析:
if f income<=2000)//如果收入小于2000
return tax—payable;
//直接tex—payable(初始代为零)
i“taxable>lower_limits[i]){
//如果taxable(收入超出起征额的部分)大于lower—limits
[i]阶段最低限额
tax_payable+=(taxable-lower-limits[i])*
rates[i]:
//把起过阶段最低限额的部分乘以该阶段的税率后,加到tax_payable(个人所得税)
taxable=lower_limits[i];
//把fower_limits[i]赋值于taxable
}
2016年计算机二级C++上机考试冲刺试题及答案(2).doc正在阅读:
2016年计算机二级C++上机考试冲刺试题及答案(2)03-15
2018年浙江岩土工程师成绩公布时间08-23
2023年河北法律职业资格客观题考试成绩查询入口[查分时间9月22日8时起]09-22
你不是一个人作文600字07-11
2023上半年河北英语六级成绩查询时间、方式及入口[8月24日起查分]08-23
酒店文员实习目的09-11
青海果洛2018年中级会计职称考试科目03-27
小学二年级四字成语积累09-19