上机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; } |