给定程序中,函数fum的功能是:利用指针数组对形参ss所指字符串数组中的字符串
按由长到短的顺序排序,
并输出排序结果。
ss所指字符串数组中共有N个字符串,
且串长小于M
请在程序的下划线处填入正确的内容并把下划线
删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C
# include <stdio.h>
# include <string.h>
# define N 5
# define M 8
void fun ( char ( * ss) [ M] )
{
char * ps[ N] , * tp; int i, j, k;
for ( i= 0 ; i< N; i++ ) ps[ i] = ss[ i] ;
for ( i= 0 ; i< N- 1 ; i++ ) {
k= i;
for ( j= i+ 1 ; j< N; j++ )
if ( strlen ( ps[ k] ) < strlen ( ps[ j] ) ) k= j;
tp= ps[ i] ; ps[ i] = ps[ k] ; ps[ k] = tp ;
}
printf ( "\nThe string after sorting by length:\n\n" ) ;
for ( i= 0 ; i< N; i++ ) puts ( ps[ i] ) ;
}
main ( )
{ char ch[ N] [ M] = { "red" , "green" , "blue" , "yellow" , "black" } ;
int i;
printf ( "\nThe original string\n\n" ) ;
for ( i= 0 ; i< N; i++ ) puts ( ch[ i] ) ; printf ( "\n" ) ;
fun ( ch) ;
}
解析:
[ 审题分析]
本题中对函数m的功能是利用指针数组对形参ss所
指字符串数组中的字符串按由长到短的顺序排序,并
输出排序结果。在fun函数中采用了选择排序法,在选
择排序法中的降序排序。首先从数组中挑选一个最大
的元素,把它和第一元素交换,接着从剩下的n- 1 个
元素中再挑出一个最大的元素,把它和第三个元素交
换,不断重复以上过程,直到比较完最后两个元素。
第一空: 分析可知,fum函数采用的选择排序,在
第一空处是初始化k。“for ( = 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。