![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
2008春二級(jí)VC上機(jī)1 |
2008年(春)上機(jī)試卷【01) (本試卷上機(jī)時(shí)間為70分鐘) 一、改錯(cuò)題(20分) 【題目】 以下程序的功能是:將一個(gè)字符串中介于兩個(gè)不同子串之間的字符逆序處理。如果一 個(gè)子串在字符串中出現(xiàn)多次,則以第一次出現(xiàn)的位置為準(zhǔn);如果某一個(gè)子串不在字符串中出 現(xiàn),則將另一個(gè)子串之后的所有字符逆序處理。 例如,將字符串"mmabcl23456000dd"中介于字符串"000"與字符串"abe"之間的 字符逆序后變?yōu)?/SPAN>"mmabe654321000dd"。 又如,將字符串"mmabcl23456000dd"中介于字符串"012"(在原字符串中不存在)與 字符串"abc"之間的字符逆序后變?yōu)?/SPAN>"mmabcdd000654321"。 含錯(cuò)誤的源程序如下: #include <iostream.h> #include <string.h> int at(char *s1,char *s2) //求s2在s1中第一次出現(xiàn)的位置(序號(hào)從0開(kāi)始) { for(int i=0;s1[i];i++){ for(int j=0;s2[j];j++){ if(s1[i+j])break; if(s1[i+j]!=s2[j])break; } if(!s2[j]) return j; } return strlen(s1); } void invert(char str[],int n1,int n2) { char *p1=str+n1, *p2=str+n2-1; while( *p1<*p2){ char t=*p1; *p1=*p2; *p2=t; p1++; p2--; } } char *process(char:l:S,char *s1,char:lc s2) //將s中介于s1和s2之間的子串逆序 { int n1=at(s,s1),n2=at(s,s2); int max,min; if(nl>n2) max=n1,min=n2+strlen(s2) else max=n2,min=n1+strlen(s1); invert(s,min,max); return *s; } void main() { char p[]="mmabc123456000dd",*p1="000",*p2="abe"; cout<<p<<endl; cout<<p1<<endl; cout<<p2<<endl; cout<<process(p,p1,p2)<<endl; } } 【要求】 1.把上述程序錄入到文件myfa.cpp中,根據(jù)題目要求及程序中語(yǔ)句之間的邏輯關(guān)系 對(duì)程序中的錯(cuò)誤進(jìn)行修改。程序中的注解可以不輸入。 2.改錯(cuò)時(shí),可以修改語(yǔ)句中的一部分內(nèi)容,增加少量的變量說(shuō)明、函數(shù)原型說(shuō)明或 編譯預(yù)處理命令,但不能增加其他語(yǔ)句,也不能刪去整條語(yǔ)句。 3.改正后的源程序文件m)如.cpp必須放在T:盤(pán)的根目錄下,供閱卷用。 二、編程題(20分) 【題目】 試定義一個(gè)類(lèi)LARRAY,將一維數(shù)組a中的數(shù)據(jù)線性變換成指定的數(shù)值范圍內(nèi)的數(shù)據(jù), 并存放到一維數(shù)組b中。假設(shè)一維數(shù)組a中元素的最大值為max,最小值為min。當(dāng)指定b中數(shù) 據(jù)的取值范圍為[new_min,new_max]時(shí),將數(shù)組a中的元素a[j]線性變換為數(shù)組b中的元 素b[j]的變換公式為: b[j]=new min+(a[j]-min)× 具體要求如下: (1)私有數(shù)據(jù)成員。 •double a[10],b[10]:a存放原始數(shù)據(jù),b存放線性變換后的數(shù)據(jù)。 •double new_max,new_min:分別為線性變換結(jié)果的上、下限。 (2)公有成員函數(shù)。 •LARRAY(double a1[],double x,double y):構(gòu)造函數(shù),用a1初始化數(shù)組a;數(shù)組b中 的元素都初始化為0;用x和y分別初始化new_min和new_max。 •double getMax():返回?cái)?shù)組a中值最大的元素值。 •double getMin():返回?cái)?shù)組a中值最小的元素值。 •void fun():按給定的變換公式求出數(shù)組b的每一個(gè)元素值,要求利用函數(shù)getMax() 和getMin()。 •void print():輸出數(shù)組b的所有元素。 (3)在主函數(shù)中完成對(duì)該類(lèi)的測(cè)試。 輸入/輸出示例(下劃線部分為鍵盤(pán)輸入): 請(qǐng)輸入10個(gè)數(shù):0 1 2 3 4 5 6 7 8 9 請(qǐng)輸入變換后數(shù)據(jù)的下限和上限:0 1 變換后的數(shù)據(jù)為:0 0.111111 0.222222 0.333333 0.444444 0.555556 0.666667 0.777778 0.888889 1 【要求】 源程序文件名必須為myfb.epp,并放在T:盤(pán)的根目錄下,供閱卷用。 |