2013春江苏省计算机二级C++上机真题第2套 |
2013春江苏省二级C++上机(2) 一、改错题 【题目】 以下程序中,函数fun(int b[], int n)的功能是:重新排列数组b的前n个元素,排列的规则是:将数组b中的最小元素放到b[0]中,最大元素放到b[1],将次小元素放到b[2]中,次大元素放到b[2]中……依次类推 正确程序的输出结果如下: 原数组: 5 1 3 2 9 7 6 8 4 处理后的数组 : 1 9 2 8 3 7 4 6 5 #include <iostream.h> #define N 9; void fun(int b[], int n) { int max,min,*pmax,*pmin; for(int *p1=b;p1<b+n-1;p1++){ max=min=*p1; pmax=pmin=p1; for(int *p2=p1+1;p2<b+n;p2++){ if(max<*p2){ max=*p2;pmax=p2; } if(min>*p2){ min=*p2; pmin=p2; } } if(pmin!=p1){ int t=*p1; *p1=min;*pmin=t; if(pmax==p1) pmax=&t; } if(pmax!=(p1+1)){ int t=*(p1+1); *(p1+1)=max; *pmax=t; } } } void main() { int a[N]={5,1,3,2,9,7,6,8,4}; cout<<"原数组:"<<endl; for(int i=0;i<N;i++) cout<<a[i]<<'\t'; cout<<endl; fun(a,N); cout<<"处理后的数组:"<<endl; for(int *p1=a;p1<a+N;p1++) cout<<p1<<'\t'; cout<<endl; } 【要求】 1.打开T盘中myfa.txt文件,将其文本拷贝到文件myfa.cpp中(或将上述程序录入到文 件myfa.cpp中),根据题目要求及程序中语句之间的逻辑关系对程序中的错误进行修改。程 序中的注解可以不输入。 2.改错时,可以修改语句中的一部分内容,增加少量的变量说明、函数原型说明或编译预 处理命令,但不能增加其他语句,也不能删除整条语句。 3.将改正后的源程序文件myfa.cpp必须放在T盘根目录下,供阅卷用。 二、编程题(20分) 【题目】 试定义一个类Num,将字符串形式表示的十六进制整数转换为对应的十进制整数,所采用的算法如下:设四位十六进制数为,其所对应的十进制数n= (1)私有数据成员: char s[10]: 存放十六进制整数,为简单期间,这里省略十六进制数的前缀”0X”或”0x” int n: 存放由数据成员s所表示的十六进制数转换所得的十进制数 (2)公有成员函数 Num(char *p) :构造函数,用参数p初始化数据成员 void fun():按题意要求将数据成员s所表示的十六进制整数转换为相应的十进制整数,并将结果存放到数据成员n中 void print() : 输出数据成员s和n (3)在主函数中对该类进行测试 输入/输出示例 输入一个十六进制数: bc12d 十六进制:bc12d 对应的十进制数为:770349 【要求】 源程序文件名必须为myfb.cpp,并放在T盘根目录下,供阅卷用 |