2013春江苏省计算机二级Visual C++上机试卷1 |
2013年(春)江苏省计算机等级考试 二级Visual C++上机试卷1 一、改错题 【题目】 如果将一个二进制数的各位数字的顺序颠倒后所得到的新二进制数与原数相等,则称该二进制数为回文数,以下程序的功能是:在由两个正整数确定的范围内,查找对应的二进制数为回文数的整数,采用的算法是:将待判断的整数转换为二进制数形式,并按正序和反序方式分别存入两个字符串中,比较两个字符串,若两个字符串相等则该数为符合要求的数 正确程序的输入/输出结果如下(下划线部分为键盘输入): 请输入查找范围:100 200 对应的二进制数为回文数的个数为:8 107à1101011 119à1110111 127à1111111 129à10000001 153à10011001 165à10100101 189à10111101 195à11000011 含有错误的源程序如下 #include <iostream.h> #include <string.h> char *fun(int t) { char s1[33]={0},s2[33]={0},c,*p1,*p2; p1=s1;p2=s2+31; while(t){ c=t%2; t/=2; *p1++=c; *p2++=c; } p2++; if(!strcmp(s1,p2)){ char *p=new char[33]; strcpy(p,s1); return *p; } else return 0; } void main() { int a[200]={0},low,up; char *bin[200]={0},*p; cout<<"请输入查找范围:"; cin>>low>>up; for(int i=0,j=low;j<=up;j++) if(p==fun(j)){ a[i]=j; bin[i++]=p; } cout<<"对应的二进制数为回文数的个数为:"<<i<<endl; for(i=0;bin[i];i++){ cout<<a[i]<<"-->"<<bin[i]<<endl; delete[] bin[i]; } } 【要求】 1.打开T盘中myfa.txt文件,将其文本拷贝到文件myfa.cpp中(或将上述程序录入到文 件myfa.cpp中),根据题目要求及程序中语句之间的逻辑关系对程序中的错误进行修改。程 序中的注解可以不输入。 2.改错时,可以修改语句中的一部分内容,增加少量的变量说明、函数原型说明或编译预 处理命令,但不能增加其他语句,也不能删除整条语句。 3.将改正后的源程序文件myfa.cpp必须放在T盘根目录下,供阅卷用。 二、编程题(20分) 【题目】 试定义一个类STR,统计一个字符串中包含的句子数和单词数,规定单词之间以空格、”,”或”.”分隔,句子以”.”结束,具体要求如下 (1)私有数据成员 char *s :指向待统计的字符串 int m,n: 分别记录求得的单词数和句子数 (2)公有成员函数 STR(char *t): 构造函数,用参数t初始化字符串s void fun(): 按题意统计单词数,结果存放在数据成员m中,再统计句子数,结果存放在数据成员n中 void print(): 按输出示例的格式输出统计结果 ~STR(): 析构函数,实现必要的功能 (3)在主函数中对该类进行测试 输出示例: 字符串:I am a student. I am twenty. I com from china 句子数:3 单词数:11 【要求】 源程序文件名必须为myfb.cpp,并放在T盘根目录下,供阅卷用 |