问答题 给定程序中,函数fun的功能是:利用指针数组对形参ss所指字符串数组中的字符串按由长到短的顺序排序,并输出排序结果。ss所指字符串数组中共有N个字符串,且串长小于M。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构!1 #include<stdio.h>2 #include<string.h>3 #define N 54 #define M 85 void fun(char(*ss)[M])6 { char *ps[N],*tp;int i,j,k;7 for(i=0;i<N;i++)ps[i]=ss[i];8 for(i=0;i<N-1;i++) {9 /**********found**********/10 k= __1__;11 for(j=i+1;j<N;j++)12 /**********found**********/13 if(strlen(ps[k] ) <strlen(__2__))k=j;14 /**********found**********/15 tp=ps[i];ps[i]=ps[k];ps[k]=__3__;16 }17 printf(''\nThe string after sorting by length:\n\n'');18 for(i=0;i<N;i++)puts(ps[i]);19 }20 main()21 {char ch[N][M]={''red'',''green'',''blue'',''yellow'',''black''};22 int i;23 printf(''\nThe original string\n\n'');24 for(i=0;i<N;i++)puts(ch[i]); printf(''\n'');25 fun(ch);}
【正确答案】正确答案:(1)i (2)ps[j] (3)tp
【答案解析】解析:第一空:分析可知,fun函数采用的选择排序,在第一空处是初始化k。“for(j=i+1;j<N;j++)”循环是寻找长度最长的字符串,找到之后和k字符串交换,因此k从0开始,随着i变化,故第一空处应为''i''。 第二空:“if(strlen(ps[k])<strlen(__2__) k=j;”新的字符串ps[j]如果比ps[k]的长度长,那么k记录下新的最长的字符串的下标位置j,故第二空处应为“ps[j]”。 第三空:“tp=ps[i];ps[i]=ps[k];ps[k]=__3__;”是字符串地址交换,显然第三空处应是临时变量tp。