1、二级 C+分类模拟 153 及答案解析(总分:100.00,做题时间:90 分钟)一、程序改错题(总题数:1,分数:30.00)1.使用 VC6 打开 下的源程序文件 modi1.cpp,但该程序运行时有错,请改正程序中的错误,使程序输出的结果为: 1 5 1 注意:错误的语句在/*error*的下面,修改该语句即可。 #includeiostream.h /*error* enum Sun Mon Tue Wed Thu Fri Sat /*error* MyEnum; struct Struct /*error* int Fri, int Sun; ; void main() int i
2、=Mon; MyEnum t = Fri; Struct str1; str1.Fri =Mon; cout i endl; cout t endl; cout str1.Fri endl; (分数:30.00)_二、程序填空题(总题数:1,分数:40.00)2.使用 VC6 打开 下的源程序文件 modi2.cpp。阅读下列函数说明和代码,完成空出部分程序。函数factor(int *des,int int n=20; factor(a,length, n); for (int i=0;ilength;i+) cout a i “; cout endl; return; (分数:40.00)
3、_三、程序设计题(总题数:1,分数:30.00)3.使用 VC6 打开 下的源程序文件 modi3.cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。完成以下功能: (1)定义类的私有变量 a、b,请在注释/*1*后添加适当的语句。 (2)完成类的构造函数,对变量 a、b 赋值,缺省两个变量值为 1,在注释/*2*之后添加语句。 (3)完成打印函数 display(),打印出“a*b=c”格式的一个乘法算式,在注释/*3*之后添加语句。 (4)补充主函数,使得打印 99 的乘法口诀。在注释/*4*后添加语句。 注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。 #
4、includeiostream.h class CMyFormula private: /*1* public: /*2* this-a=a; this-b=b; void set(int x, int y) a=x; b=y; void display() /*3* ; int main() CMyFormula formular(1,1); for(int i=1;i=9;i+) /*4* for (int j=1; j+) formular, set (j, i); formular.display(); cout “ “; cout endl; return 0; (分数:30.00)
5、_二级 C+分类模拟 153 答案解析(总分:100.00,做题时间:90 分钟)一、程序改错题(总题数:1,分数:30.00)1.使用 VC6 打开 下的源程序文件 modi1.cpp,但该程序运行时有错,请改正程序中的错误,使程序输出的结果为: 1 5 1 注意:错误的语句在/*error*的下面,修改该语句即可。 #includeiostream.h /*error* enum Sun Mon Tue Wed Thu Fri Sat /*error* MyEnum; struct Struct /*error* int Fri, int Sun; ; void main() int i
6、=Mon; MyEnum t = Fri; Struct str1; str1.Fri =Mon; cout i endl; cout t endl; cout str1.Fri endl; (分数:30.00)_正确答案:()解析:(1)enum MyEnum (2); (3)int Fri; 答案考生文件夹 解析 程序当中定义了一个结构体和枚举类型,结构体含有两个整型变量,枚举类型含有 7 个枚举元素,7 个枚举元素的值从 0 变化至 6,即Sun=0,Mon=1,Tue=2,Wed=3,Thu=4,Fri=5,Sat=6。 (1)第一标识下声明枚举类型,声明枚举类型的一般形式为:“enu
7、m枚举类型名枚举常量列表;”,程序当中把枚举类型名 MyEnum 放到枚举声明后面,显然不符合枚举类型声明格式,因此第 1 个标识下应改成“enum MyEnum”。 (2)由(1)的分析可知,第 2 个标识下也不符合枚举类型声明格式,应以“;”结束,即第 2 个标识下应改为“;”。 (3)第 3 标识处声明结构体,结构体定义的一般形式为: struct结构体名 成员列表 变量名列表; 结构体中成员列表中各个元素是不同的变量,变量之间应以分号隔开,而不是以逗号隔开,因此第 3 个标识下应改为为“int Fri;”。二、程序填空题(总题数:1,分数:40.00)2.使用 VC6 打开 下的源程序
8、文件 modi2.cpp。阅读下列函数说明和代码,完成空出部分程序。函数factor(int *des,int int n=20; factor(a,length, n); for (int i=0;ilength;i+) cout a i “; cout endl; return; (分数:40.00)_正确答案:()解析:length=0; for(int i=1;i=n;i+) if (n%i=0)/判断是否 n 的因数 deslength=i; length+; 答案考生文件夹 解析 函数 factor(int *des,int this-b=b; void set(int x, in
9、t y) a=x; b=y; void display() /*3* ; int main() CMyFormula formular(1,1); for(int i=1;i=9;i+) /*4* for (int j=1; j+) formular, set (j, i); formular.display(); cout “ “; cout endl; return 0; (分数:30.00)_正确答案:()解析:(1)添加语句:int a,b; (2)添加语句:CMyFormula(int a=1,int b=1) (3)添加语句:cout a “*“ b “=_“ a*b; (4)将“
10、for(int j=1; j+)”补充完整为:for(int j=1;j=i j+) 答案考生文件夹 解析 程序当中定义了类 CMyFormula,含有 a 和 b 两个成员变量,一个构造函数,改变成员变量 a 和 b 的值得 set(int x,int y)函数,打印 a 和 b 的乘积的 display()函数。在主函数中定义了一个 CMyFormula 对象,然后不断改变该对象的 a 和 b 的值,然后调用 display()显示,如此完成打印99 的乘法口诀。 (1)第 1 个标识下完成 CMyFormula 类的私有变量 a、b 的定义,从函数 set(int x,int y)的参数
11、类型可以看出 a 和 b 均为 int 型变量,故第 1 个标识下应添加“int a,b;”。 (2)第 2 个标识下添加构造函数声明,完成对变量 a、b 赋值,该构造有两个参数 a 和 b,且 a 和 b 缺省值为 1,因此第 2 个标识下应添加“CMyFormula(int a=1,int b=1)”。 (3)打印函数 display()在屏幕上打印出“a*b=c”格式的一个乘法算式,因此第 3 个标识下应添加“cout a “*“ b “=“ a*b;“0 (4)观察可知第 4 个标识下的 for 循环是死循环,j 没有判断退出条件,会一直循环下去得不到想到的99 的口诀表,外层循环变量 i 从 1 开始变化至 9,循环 9 次,内部循环变量 j 应该从 1 变化到 i,输出一行,j=i,这样保证输出的是倒 99 口诀,因此第 4 个标识下应改为“for(int j=1;j=i;j+)”。