江苏省高校计算机等级考试命题研究院 江苏省高校计算机等级考试辅导
上机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;

 

}