1、2012 春江苏计算机二级 VC+上机及答案解析(总分:40.00,做题时间:70 分钟)1.改错题(20 分) 【题目】 以下程序中,函数 fun(int m, int fac, int 4 void main(void) 5 6 int n,f100,p; 7 coutn; 9 cout2)的所有因子,将这些因子按从小到大的顺序依次存放在数组 fac 中,将因子个数存放在参数 p 中,并返回所有因子之和。 正确程序的输入/输出结果如下(下划线部分为键盘输入): 输入一个整数:24 24 的所有因子之和为:60 24 的各因子为:1 2 3 4 6 8 12 24 含有错误的源程序如下: 1
2、 #include 2 #include 3 int fun(int,int,int); 4 void main(void) 5 6 int n,f100,p; 7 coutn; 9 coutn“的所有因子之和为:“fun(n,f,p)n“的各因子为:“; 11 for(int i=0;ifi ; 13 cout=sqrt(m);i+) 20 if(m%i=0) 21 facp+=i; 22 s+=i; 23 24 25 facp=m; 26 s+=m; 27 return fac; 28 【要求】 1.打开 T 盘中 myfa.txt 文件,将其文本拷贝到文件 myfa.cpp中(或将上述程
3、序录入到文件 myfa.cpp 中),根据题目要求及程序中语句之间的逻辑关系对程序中的错误进行修改。程序中的注解可以不输入。 2.改错时,可以修改语句中的一部分内容,增加少量的变量说明、函数原型说明或编译预处理命令,但不能增加其他语句,也不能删除整条语句。 3.将改正后的源程序文件myfa.cpp 必须放在 T 盘根目录下,供阅卷用。(分数:20.00)_正确答案:( 第 3 行 int fun(int,int,int); 改为 int i=sqrt(m);i+) 改为 i=m/2 或 i解析:2.编程题(20 分) 【题目】 试定义一个类 STR,实现两个字符串的交集。具体要求如下: (1)
4、私有数据成员。char s150,s250,s050:字符串 s0 用于存放字符串 s1 和字符串 s2 的交集。 (2)公有成员函数。 ?STR(char *p1,char *p2):构造函数,分别用参数 p1 和 p2 初始化成员数组 s1 和 s2 ?int isin(char *p,char c):判断字符 c 是否出现在字符串 p 中,如果是,则返回值为 1,否则返回值为 0 ?void fun():求成员数组 s1 和 s2 的交集,并将结果存放在成员数组 s0 中。提示:利用函数 isin(char *,char)依次判断一个字符串中的每个字符是否包含于另一个字符串中,如果包含,
5、且该字符不包含于成员数组 s0 中,则将该字符加入到成员数组 s0 中。 ?void print():按输出示例的格式输出所有数据成员。 (3)在主函数中对该类进行测试。 输出示例: 字符串 1:abcdef123abc12 字符串 2:acef123ace124 两个字符串的交集:acef123 【要求】 源程序文件名必须为 myfb.cpp,并放在 T 盘根目录下,供阅卷用。(分数:20.00)_正确答案:( #include #include class STR char s150,s250,s050; public: STR(char *p1.char *p2) strcpy(s1,p1); strcpy(s2,p2); s00=/0; int isin(char *p,char c) char *p0=p; while(*p0) if(*p0+=c) return 1; return 0; void fun() for(char *p1=s1,*p0=s0;*p1;p1+) if(isin(s2,*p1) *p0=/0; void print() cout“字符串 1:“sl“字符串 2:“s2“两个字符串的交集:“s0解析: