问答题 1.  编写一个函数,输入n个字符串,串与串之间以Enter键分隔,找出最短字符串中的第一个字符串,传回该串的地址(用一个新串,“*”作为结束输入的标志)。
    注意:部分源程序如下。
    请勿改动main()函数和其他函数中的任何内容,仅在函数fun()的花括号中填入所编写的若干语句。
    试题程序:
    #include<stdio.h>
    #include<string.h>
    #include<conio.h>
    char*fun(char(*s)[100],int num)
    {
    }
    void main()
    {
    char str[10][100],*min;
    int n,i=0;
    FILE *out;printf ("input strings with'*' as end:");
    gets(str[i]);
    puts(str[i]);
    while(!strcmp(str[i],"*")==0)
    {
    i++;
    gets(str[i]);
    puts(str[i]);
    }
    n=1;
    min=fun(str,n);
    printf("\nmin=%s\n",min);
    out=fopen("outfile.dat","w");
    strcpy(str[0],"just,");
    strcpy(str[1],"a");
    strcpy(str[2],"test");
    strcpy(str[3],"some");
    strcpy(str[4],"tool?!?");
    fprintf(out,"%s",fun(str,5));
    fclose(out);
    }
【正确答案】int i;
   char *min;
   min=s[0];    //min初始化
   for(i=0;i<num;i++)
   if(strlen(min)>strlen(s[i]))    //min指向的字符串与其他的字符串进行长度比较
   min=s[i];
   return min;//返回最小值的字符串
【答案解析】 首先,指定第一个字符串为长度最小的字符串,然后,在循环过程中将其与其他的所有串的长度进行比较,求出最小的串。设置一个指针变量min,使它的初值为第一个字符串,再使其他的所有串的长度与min的长度进行比较,若其他字符串的长度小于min,则将其他字符串的首地址赋值给min。最后,使用返回语句,返回最短长度min的字符串的地址。