填空题 给定程序中,函数fun()的功能是求出ss所指字符数组中长度最长的字符串所在的行下标,作为函数值返回,并把其串长放在形参n所指变量中。ss所指字符数组中共有M个字符串,且串长<N。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构。
#include<stdio.h>
#include<string.h>
#define M 5
#define N 20
/**********found**********/
intfun(char(*ss) __ 1__ ,int *n)
{ int i,k=0,len=0;
for(i=0;i<M;i++)
{len=strlen(ss[i]);
/**********found**********/
if(i==0) *n= __ 2__ ;
if(len>*n){
/**********found**********/
__ 3__ ;
k=i;
}
}
return(k);
}
main()
{ char ss[M][N]={"shanghai",
"guangzhou","beijing","tianjing","cchongqing");
int n,k,i;
printf("/nThe original strings are:/n");
for(i=0;i<M;i++)puts(ss[i]);
k=fun(ss,&n);
printf("/nThe length of longest string is:%d/n",n);
printf("baThe longest string is:%/n",ss[k]);
}
【正确答案】
【答案解析】(1)[N] (2)len (3)*n=len [解析] 函数fun()的功能是求ss所指字符数组中长度最长的字符串所在的行下标。求最长字符串所在的下标,一般假设第一个字符串的长度最长,为max。如果用k记录最长字符串的下标,开始时max=strlen(ss[0]),k=0;然后逐个比较其他字符串长度,如果字符串ss[i]长度比max大,则max为这个字符串长度,k=i。如此便可求得最长字符串和最长字符串所在的下标位置。
第一空:由主函数内的fun()函数调用“k=fun(ss,&n);”可知,fun()函数的第一个参数为数组首地址,是指针变量,故第一空处的fun()函数定义应为“[N]”。
第二空:由审题分析可知,i=0时,记录长度的变量*n应该赋初值len,故第二空处应为“len”。
第三空:由审题分析可知,如果len比*n大,那么*n记录这个大的值,故第三空处应为“*n=len”。
[考点] 排序,字符串处理。