使用VC++2010打开考生文件夹下modil中的解决方案。此解决方案的项目中包含一个源程序文件modil.c。在此程序中,函数fun()的功能是读入一个字符串(长度<20),将该字符串中的所有字符按ASCⅡ值升序排列后输出。 例如,若输入"edcba

admin2023-02-27  7

问题 使用VC++2010打开考生文件夹下modil中的解决方案。此解决方案的项目中包含一个源程序文件modil.c。在此程序中,函数fun()的功能是读入一个字符串(长度<20),将该字符串中的所有字符按ASCⅡ值升序排列后输出。
  例如,若输入"edcba",则应输出"abcde"。
  请改正程序中的错误,使它能得出正确的结果。
  注意:部分源程序在文件modil.c中,不要改动main()函数,不得增行或删行,也不得更改程序的结构!
    试题程序:
1 #include<string.h>
2 #include<stdio.h>
3 void fun(char t[])
4 {
5   char c;
6  int i,j;
7  /*********found*********/
8   for(i=strlen(t);i;i--)
9    for(j=0;j<i;j++)
10    /*********found*********/
11    if(t[j]<t[j+1])
12    {
13    c=t[j];
14    t[j]=t[j+1];
15    t[j+1]=c;
16    }
17 }
18 main()
19 {
20  char s[81];
21  printf ("\nPlease enter a character string:");
22   gets(s);
23  printf("\n\nBefore sorting:\n%s",s);
24  fun(s);
25  printf("\nAfter sorting decendingly:\n%s",s);
26 }

选项

答案(1)for(i=strlen(t)-1;i;i --)或 for(i=strlen(t)-1;i>0;i --) (2)if(t[j]>t[j+1])

解析 (1)本题利用选择排序对数组元素进行升序排列。选择排序是一种简单、直观的排序算法。它的工作原理是第1次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后从剩余的未排序元素中选出最小(大)元素,放到已排列的序列的末尾。以此类推,直到全部待排序的数据元素的个数为0。strlen()函数所求得的字符串长度要减1,因为数组最大下标表示为字符串长度减1。
    (2)这里是一个逻辑分析错误,题中要求按升序排列,所以应改为if(t[j]>t[j+1])。  
转载请注明原文地址:https://kaotiyun.com/show/6P0D777K
0

最新回复(0)