1. <small id="kntrr"><delect id="kntrr"></delect></small>
    2. <sub id="kntrr"></sub>
        1. <form id="kntrr"><listing id="kntrr"></listing></form>
            江蘇省高校計算機等級考試命題研究院 江蘇省高校計算機等級考試輔導
            2008春二級VC上機1

                2008()上機試卷【01)

                (本試卷上機時間為70分鐘)

            一、改錯題(20)

            【題目】

                以下程序的功能是:將一個字符串中介于兩個不同子串之間的字符逆序處理。如果一

            個子串在字符串中出現多次,則以第一次出現的位置為準;如果某一個子串不在字符串中出

            ,則將另一個子串之后的所有字符逆序處理。

                例如,將字符串"mmabcl23456000dd"中介于字符串"000"與字符串"abe"之間的

            字符逆序后變為"mmabe654321000dd"。

                又如,將字符串"mmabcl23456000dd"中介于字符串"012"(在原字符串中不存在)

            字符串"abc"之間的字符逆序后變為"mmabcdd000654321"。

              含錯誤的源程序如下:

                #include <iostream.h>

                #include <string.h>

             

                int at(char *s1,char *s2)    //s2s1中第一次出現的位置(序號從0開始)

                {  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中介于s1s2之間的子串逆序

                {  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,根據題目要求及程序中語句之間的邏輯關系

            對程序中的錯誤進行修改。程序中的注解可以不輸入。

                2.改錯時,可以修改語句中的一部分內容,增加少量的變量說明、函數原型說明或

            編譯預處理命令,但不能增加其他語句,也不能刪去整條語句。

                3.改正后的源程序文件m).cpp必須放在T:盤的根目錄下,供閱卷用。

            二、編程題(20)

            【題目】  

              試定義一個類LARRAY,將一維數組a中的數據線性變換成指定的數值范圍內的數據,

            并存放到一維數組b中。假設一維數組a中元素的最大值為max,最小值為min。當指定b中數

            據的取值范圍為[new_min,new_max],將數組a中的元素a[j]線性變換為數組b中的元

            b[j]的變換公式為:   

                b[j]=new min+(a[j]-min)×

              具體要求如下:

              (1)私有數據成員。

              double a[10],b[10]:a存放原始數據,b存放線性變換后的數據。

              double new_max,new_min:分別為線性變換結果的上、下限。

              (2)公有成員函數。

              LARRAY(double a1[],double x,double y):構造函數,a1初始化數組a;數組b

            的元素都初始化為0;xy分別初始化new_minnew_max。

              double getMax():返回數組a中值最大的元素值。

              double getMin():返回數組a中值最小的元素值。

              void fun():按給定的變換公式求出數組b的每一個元素值,要求利用函數getMax()

            getMin()。  

              void print():輸出數組b的所有元素。

             (3)在主函數中完成對該類的測試。

                輸入/輸出示例(下劃線部分為鍵盤輸入):

                請輸入10個數:0  1  2  3  4  5  6  7  8  9

                請輸入變換后數據的下限和上限:0  1

                變換后的數據為:0 0.111111 0.222222 0.333333 0.444444 0.555556

                0.666667 0.777778 0.888889  1

            【要求】

                源程序文件名必須為myfb.epp,并放在T:盤的根目錄下,供閱卷用。

            国产在线精品一区二区三区不卡_亚洲第一极品精品无码_永久免费无码网站在线观看_亚洲av综合日韩