在给定程序中,函数fun的功能是:求出形参SS所指字符串数组中最长字符串的长度,其余字符串左边用字符*补齐,使其与最长的字符串等长。字符串数组中共有M个字符串,且串长<N。
请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构。
文件BLANK1.C内容如下:
#include<stdio.h>
#include<string.h>
#define M 5
#define N 20
void fun(char( *ss)[N])
int i,j,k=0,n,m,len;
for(i=0;i<M;i++)
len=strlen(ss[i]);
if(i==0)n=len:
if(len>n)
/**********found**********/
n=len;
(1) =i;
for(i=0;i<M;i++)
if(i!=k)
m=n:
len=strlen(ss[i]);
/***********found***********/
for(j= (2) ;j>=0;j--)ss[i][m--]=ss[i][j];
for(j=0;j<n-len;j++)
/**********found**********/
(3) =’*’:
void main( )
char ss[M][N]="shanghai","guangzhou","beijing","tianjing","cchongqing";
int i;
printf("\nThe original strings are: \n");
for(i=0;i<M;i++)printf("%s\n",ss[i]);
printf("\n");
fun(ss);
printf("\nThe resuh:\n");
for(i=0;i<M;i++)printf("%s\n",ss[i]);
参考答案:ss[i][j]
解析: main函数中定义了一个二维的字符数组,其中存放了5个字符串,调用fun函数实现题目要求的功能。fun函数使用的算法是:首先通过第一个for循环找到最长字符串的行下标并存储在变量k中。循环中通过len=strlen(ss[i])求出每个字符串的长度,并与变量n进行比较,若len比n大,则对n重新赋值,同时将该字符串的行下标i记录在变量k中。循环结束后,变量n中存放了最长字符串的长度,变量k中存放了该字符串的行下标。因此,第1空处应填入变量k。然后,在第二个循环中,要将其余字符串左边补上*号,使得与最长字符串的长度相等,必须先将每个字符串中的字符右移,循环“for(j=len;j>=0;j--)ss[i][m--]=ss[i][j];”实现字符右移的功能。所以,第2空处应填入len,从字符串的结束标记’\0’开始,依次将字符往右移动。右移结束后,循环“for(j=0;j<n-len;j++) ss[i][j]=’*’;”实现每个字符串左补*号,使之与最长的字符串等长。所以第3空处应填入ss[i][j],即从第一个元素开始,到n-len结束,对每一个ss[i][j]赋值为*号。