首页 > 试题广场 >

请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正

[单选题]
下列给定程序中,函数fun的功能是:求ss所指字符串数组中长度最短的字符串所在的行下标,作为函数值返回,并把其串长放在形参n所指的变量中。ss所指字符串数数组中共有M个字符串,且串长小于N。
请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。
试题程序。
#define M 5
#define N 20
int fun(char (*ss)[N], int *n) {
    int i, k = 0, len = N;
    for (i = 0; i < ______; i++) {
        len = strlen(ss[i]);
        if (i == 0)
            *n = len;
        if (len ____ * n) {
            *n = len;
            k = i;
        }
    }
    return (_____);
}
main() {
    char ss[M][N] = {"shanghai", "guangzhou", "beijing", "tianjing",
                     "chongqing"};
    int n, k, i;
    printf("\nThe originalb stringsare:\n");
    for (i = 0; i < M; i++)
        puts(ss[i]);
    k = fun(ss, &n);
    printf("\nThe length of shortest string is: % d\n", n);
    printf("\nThe shortest string is: % s\n", ss[k]);
}
  • N,< ,k
  • N, >,k
  • M,<,k
  • M,>,k
推荐
C

int fun(char(* ss)[N], int *n)
 {
     int i, k = 0, len = N;
     for (i = 0; i < ___M___; i++) // 这里是要遍历数组,数组的长度为M,
     {
         len = strlen(ss[i]);
         if (i == 0)
             *n = len;
         if (len _<___ * n); // 这里是取最小的长度,
         {
             *n = len;
             k = i;
         }
     }
     return ( _____ ); // 函数返回最小长度字符串的下标,这里为k
 }
编辑于 2015-02-02 18:17:49 回复(9)

#define M5
 #define N20
 intfun(char(* ss)[N],int*n)
 {
    inti, k =0, len = N;
    for(i =0; i < ______; i++)
    {
        len = strlen(ss[i]);
        if(i ==0)
            *n = len;
        if(len ____ * n)
        {
            *n = len;
            k = i;
        }
    }
    return( _____ );
 }
 main( )
 {
    charss[M][N] = {"shanghai","guangzhou","beijing","tianjing","chongqing"};
    intn, k, i;
    printf("\nThe originalb stringsare:\n");
    for(i =0; i < M; i++)
        puts(ss[i]);
    k = fun(ss, &n);
    printf("\nThe length of shortest string is: % d\n", n);
    printf("\nThe shortest string is: % s\n", ss[k]);
 }

如题,这里其实ss初始化后是一个二维数组即ss[5][20]。
ss[0][*]维度存储的是字符串"shanghai"
ss[1][*]维度存储的是字符串“guangzhou”
ss[2][*]维度存储的是字符串"beijing"
ss[3][*]维度存储的是字符串“tianjing”
ss[4][*]维度存储的是字符串“chongqing”

那么当调用fun(ss,&n)方法后,将ss作为参数传入
由fun()中for循环里的len = strlen(ss[i]);可知,len是每次获得一个维度的长度,所以循环约束条件则为数组维度的大小M=5。

又知n为串长,作为形参返回,当循环第一次进行时将ss[0][*]字符串的长度赋给了n。根据
        if(len ____ * n)
        {
            *n = len;
            k = i;
        }
中*n的值为len可知每次*n得到的应该是较小值,那么将len和*n比较的话只有当len<n时赋值才有意义,否则应当进入下一次循环。

最后根据 k = i可知,k是在满足每次取最小字符串长度n时,for循环的i值,即为数组的维度,也就是最小串的下标。

所以应当将k值做为返回值满足题意。

到此int fun(ss,&n)带回的就是ss[M][N]中长度最小的字符串下标,并且串长为n。
发表于 2018-01-11 13:46:13 回复(0)
我的题有问题么,C选项只看到一个M
发表于 2022-03-22 23:21:51 回复(3)
m,<,k,咋没这个选项
发表于 2022-03-16 20:55:36 回复(1)
只有我看这个c选项是M,吗
发表于 2022-09-25 20:14:46 回复(1)
C
不小心可能会选A
发表于 2015-12-13 11:40:41 回复(0)
ss[M][N]为一个二维数组
在fun()中
M为行数,然后查看每一行的字符长度len。用n记录第一个,作为最小值。
每次比较len与n,若len小于n则更新n,同时记录位置k 
循环结束时返回k
 

发表于 2015-05-12 21:59:55 回复(0)
为啥我的c选项只有个M😂
发表于 2022-05-13 20:16:22 回复(0)
答案:N   <    k
解析:
1,for循环遍历ss中的N个字符串,所以i从0到N-1,这里填写N
2,如果当前字符串长度小于保存的最小长度,做记录。这样用<
3,变量k中记录着最短字符串的下标,所以 返回k
发表于 2015-01-29 13:09:40 回复(1)
应该是M,<,k,答案C只有一个M
发表于 2022-11-18 21:19:24 回复(1)
注意 char (*ss) [N] 的意义,ss是一个指针,它指向char[N]数组,也就是第二维才是N。
发表于 2020-08-18 10:38:45 回复(0)
数组ss[5][20],表示有5行20列,所以每一行存储一个字符串,这里有5行,所以刚好可以存储完这5个字符串,当数组是ss[0]是指第一个字符串,当ss[1]时指第二个字符串,一次类推,所以那个空格的地方应该填行数。
发表于 2017-11-27 20:53:21 回复(0)
遍历数组,为M
取最小的长度,则为<
函数返回最小长度字符串的下标,则为k。
发表于 2021-12-06 21:18:14 回复(0)
第一空,遍历数组
第二空,取最小长度
第三空,最短的下标
发表于 2019-03-22 10:12:36 回复(0)
这里定义的二维数组。 char ss[M][N],行M,列N
发表于 2023-02-20 09:28:13 回复(0)
我的选项只有M,选项有问题吧
发表于 2022-10-21 23:44:58 回复(0)
M,<,k
发表于 2022-09-03 23:30:30 回复(0)
自己太粗心了,需要改进
发表于 2016-07-29 15:38:10 回复(0)
原来*n才是记录的最短长度,一直以为是len没仔细看还寻思为啥
发表于 2024-10-23 22:01:33 回复(0)
n 存最小串的串长
发表于 2023-11-15 23:26:08 回复(0)
mark粗心,看到主函数输入是5也想选5,结果整了个20
发表于 2023-08-17 08:51:25 回复(0)