江蘇省高校計算機等級考試命題研究院 江蘇省高校計算機等級考試輔導
上機VC++2009春試題3

2009春上機3

:改錯題

 以下程序中函數fun(char  (*ss)[N],int *n)的功能是:查找ss所指向的字符串數組中長度最短的字符串,將最短字符串的行號存放在指針n所指向的數組中(可能有多個長度相同的字符串均為最短字符串),函數的返回值為長度最短的字符串的個數

#include <iostream.h>

#include <string.h>

#define M 5

#define N 20

 

int fun(char (*ss)[N], int *n)

{int j=0,k=0,len,minlen;

for(int i=0;i<M;i++){                       //for循環的作用是查找字符長度最短字符長度

  len=strlen(ss[i]);                             //len保存字符串長度

  if(i==0)               //判斷第一個字符

  {minlen=len;n[j++]=0;k=1;

   break;             //此處不能用break,因為會直接跳出for循環,而改為continue,表示執行下一次循環

  }

  if(len>minlen){                                   //因為求最小數,所以要用<

     minlen=len;j=0;

          n[j++]=i;k=1;

  }

  else if(len==minlen){                          //字符的長度等于最小長度就將下標放入n數組中

    n[j++]=i;k++;

  }

}

          return k;

}

 

void main()

{char ss[M][N]={"Beijing","Nanjing","Shanghai","Tianjin","Chongqin"};

  int n[M],k;

  cout<<"給定的字符串為:";

  for(int i=0;i<M;i++)                     //for循環輸出ss數組中的值

           cout<<ss[i]<<'\t';

  cout<<endl;

  k=fun(&ss,n);                        //語法錯誤,數組創地址直接寫數組名字

  cout<<"其中最短字符串有"<<k<<",它們是:";

  for(i=0;i<k;i++)

           cout<<ss[i]<<'\t';     //數組n中存放的是最短字符的下標,所以應該輸出為ss[n[i]]

  cout<<endl;

 

}

 

彩票30选5开奖结果