上機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]={" 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; } |