![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
江苏二级VC2008春上机2 |
2008年(春)上机试卷(02) (本试卷上机时间为70分钟) 一、改错题(20分) 【题目】 以下程序的功能是:统计和输出企业产品销售记录。设每个产品销售记录由产品代码 dm(4个字符)、产品名称mc(2个字符)、单价dj、数量sl、金额je四部分组成。其中,金额= 单价*数量。以下程序中函数sort()的功能是按产品代码从大到小对产品销售记录进行排序;若产品代码相同,则按金额从大到小进行排序,最后调用函数print()输出结果。 含错误的源程序如下: #include <iostream.h> #include <string.h> struct PROD{ char dm [5],name[3]; int sl,dj,je; }; void computerje(PROD p1[],int n) //计算产品金额 { for(int i=0;i<n;i++) (p1+i).je=(p1+i).dj *(p1+i).sl; } void sort(PROD p1[],int n) { for(int i=0;i<n;i++){ for(int j=i+1;j<n;j++){ if(strcmp(p1[i].dm,p1[j].dm)<0){ t=p1[i]; p1[i]=p1[j]; p1[j]=t; } else if(strcmp(p1[i].dm,p1[j].dm)=0) if(p1[i].je<p1[j].je){ PROD t=p1[i]; p1[i]=p1[j]; p1[j]=t; }}} } void print(PROD *p1,int n) { for(int i=0;i<n;i+}){ cout<<p1[i].dm<<','<<p1[i].name<<','; cout<<p1[i].s1<<','<<pl[i].dj<<','<<p1[i].je<<endl; } } void main() {PROD pr[4]={{"1001","AA",4,15},{"4000","BB",3,45},{"4000", "CC",6,53},{"8546","DD",1,43}}; computerje(pr,4); sort(pr,4); print(pr,4); } 【要求】 1.把上述程序录人到文件myfa.epp中,根据题目要求及程序中语句之间的逻辑关系 对程序中的错误进行修改。程序中的注解可以不输入。 2.改错时,可以修改语句中的一部分内容,增加少量的变量说明、函数原型说明或 编译预处理命令,但不能增加其他语句,也不能删去整条语句。 3.改正后的源程序文件myfa.epp必须放在T:盘的根目录下,供阅卷用。 二、编程题(20分) 【题目】 试定义一个类NUM,实现将一维数组中各整数元素去掉其中相同数字后再对数组从小 到大排序。将一个整数去掉相同数字是指:如果一个整数中有相同的数字,则保留从左数起 ,第一次看到的那个数字,而将其他相同的数字去掉。例如:数字12324151中有三个1、两个2,则去掉相同的数字后变为12345。具体要求如下: (1)私有数据成员。 •int a [5]:存放需处理的数组。 (2)公有成员函数。 •NUM(int t[],int n):构造函数,用t初始化a,n为t的元素个数。 •void sort(int t[],int n):将数组t的元素从小到大排序。 •int convert(int n):去除n中相同的数字并返回新得到的数。 •void fun():将数组a的各元素去除相同的数字后从小到大排列。要求调用函数 convert()和sort()。 •void print():输出数组a的所有元素。 (3)在主函数中对该类进行测试。 输入/输出示例(下划线部分为键盘输入): 输入5个整数:1213 65666 22313 12314 34435 处理前的数组为:1213 65666 22313 12314 34435 处理后的数组为:65 123 231 345 1234 【要求】 ’ 源程序文件名必须为myth.cpp,并放在T:盘的根目录下,供阅卷用。 |