填空题 给定程序中函数fun的功能是:从N个字符串中找出最长的那个串,并将其地址作为函数值返回。
各字符串在主函数中输入,并放入一个字符串数组中。所找到的最长字符串在主函数中输出。
请改正程序中的错误,使它能得出正确结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
给定源程序:
#include<stdio.h>
#include<string.h>
#define N 5
#define M 81
/**********found**********/
fun(char(*sq)[M])
{int i;char*sp;
sp=sq[0];
for(i=0;i<N;i++)
if(strlen(sp)<strlen(sq[i]))
sp=sq[i];
/**********found**********/
return sq;
}
main()
{char str[N][M],*longest;int i;
printf("Enter%d lines:/n",N);
for(i=0;i<N;i++)gets(str[i]);
printf("/nThe N string:/n",N);
for(i=0;i<N;i++)puts(str[i]);
longest=fun(str);
printf("/nThe longest string:/n");puts(longest);
}
【正确答案】
【答案解析】(1)char*fun(char(*sq)[M])
(2)return sp; [解析] 函数fun的形参为字符串指针数组,每个元素指向一个长度为M的字符串,要找出其中最长的字符串,可先假设指针数组的第1个元素所指的字符串最长,之后对字符串指针数组进行遍历,若遇字符串长度大于待定最长字符串的长度,则令该字符串为待定最长字符串,如此循环直至指针数组末尾,即可得到最长字符串的地址。
(1)此处是函数定义错误,根据返回值类型可知该函数应定义为字符型指针函数。
(2)由for循环体可知,指针sp指向长度最长的字符串,因此应返回sp。