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盤根目錄下,供閱卷用 |