一道C语言的基础题 求大神帮助~

根据要求编写程序P815.C的指定部分:  程序P815.C(单击此处下载),请根据程序中的要求完善程序——注意,除指定位置外,不能对程序中已有部分作任何修改或重新编写一个程序,否则作0分处理。  程序的功能是:从键盘上输入5个字符串(约定:每个字符串中字符数≤80字节),对其进行升序排序并输出。  程序的运行效果应类似地如图1所示,图1中的    hello    My    Friend    are you ready?    help me!  是从键盘输入的内容。

已编写部分代码如下:
#include<stdio.h>#include<string.h>
#define MAX_LINE 5#define MAX_LINE_LEN 81
/* 本部分代码功能建议:函数原型声明 *//* User Code Begin(Limit: lines<=1, lineLen<=50, 考生可在本行后添加代码、最多行、每行长<=50字符) */

/* User Code End(考生添加代码结束。注意:空行和单独为一行的{与}均不计行数、行长不计行首tab缩进) */
int main(void) { int i; char *pstr[MAX_LINE], str[MAX_LINE][MAX_LINE_LEN];
for (i=0; i<MAX_LINE; i++) { pstr[i] = str[i]; }
printf("Input 5 strings:\n"); for (i=0; i<MAX_LINE; i++) { gets(pstr[i]); }
sortP_Str(pstr); printf("---------------------------\n"); for (i=0; i<MAX_LINE; i++) { printf("%s\n", pstr[i]); }
return 0;}
/* User Code Begin(考生在此后完成自定义函数的设计,行数不限) */

#include<stdio.h>
#include<string.h>
#define MAX_LINE 5
#define MAX_LINE_LEN 81
/* 本部分代码功能建议:函数原型声明 */
/* User Code Begin(Limit: lines<=1, lineLen<=50, 考生可在本行后添加代码、最多行、每行长<=50字符) */
 void sortP_Str(char *pstr[]);
/* User Code End(考生添加代码结束。注意:空行和单独为一行的{与}均不计行数、行长不计行首tab缩进) */
int main(void)
{
     int i;
     char *pstr[MAX_LINE], str[MAX_LINE][MAX_LINE_LEN];
     for (i=0; i<MAX_LINE; i++)
     {
           pstr[i] = str[i];
      }
      printf("Input 5 strings:\n");
      for (i=0; i<MAX_LINE; i++)
      {
            gets(pstr[i]);
      }
      sortP_Str(pstr);
      printf("---------------------------\n");
      for (i=0; i<MAX_LINE; i++)
      {
           printf("%s\n", pstr[i]);
      }
     return 0;
}
/* User Code Begin(考生在此后完成自定义函数的设计,行数不限) */
void sortP_Str(char *pstr[])
{
    int i,j;
    char tmp[MAX_LINE_LEN];
    int minid;
    for(i=0;i<MAX_LINE-1;i++)//选择法排序
    {
        minid=i;
        for(j=i+1;j<MAX_LINE;j++)
        {
            if(strcmp(pstr[j],pstr[minid])<0)
            {
                minid=j;
            }
        }
        if(minid!=i)
        {
            strcpy(tmp,pstr[i]);
            strcpy(pstr[i],pstr[minid]);
            strcpy(pstr[minid],tmp);
        }
    }
}
这样子吗?

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-05-29

/*

Input 5 strings:

hello

My

Friend

are you ready?

help me!

---------------------------

Friend

My

are you ready?

hello

help me!

Press any key to continue

*/

void sortP_Str(char *pstr[MAX_LINE_LEN]) {
int i,j,k;
char tmp[MAX_LINE_LEN];
for(i = 0; i < MAX_LINE - 1; ++i) {
k = i;
for(j = i + 1; j < MAX_LINE; ++j)
if(strcmp(pstr[k],pstr[j]) > 0)
k = j;
if(k != i) {
strcpy(tmp,pstr[k]);
strcpy(pstr[k],pstr[i]);
strcpy(pstr[i],tmp);
}
}
}

第2个回答  2013-05-29
void sortP_Str(char *pstr[])
{
int i=0,j=0;
char strTemp[MAX_LINE_LEN];
for(i=0;i<MAX_LINE-1;i++)
for(j=i;j<MAX_LINE-1;j++)
{
if(strcmp(pstr[j],pstr[j+1])>0)
{
strcpy(strTemp,pstr[j]);
strcpy(pstr[j],pstr[j+1]);
strcpy(pstr[j+1],strTemp);
}
}
}
第3个回答  2013-05-29
看看是不是这个啊,那是系统写的,我看不懂 http://tieba.baidu.com/p/2357164568

C语言问题,求大神解决,谢谢拉。。我是小白,解释下原因
答案就是 A) 1

C语言试题啊,求大神帮忙答案啊!
c、调用该函数是系统临时指定 d、在定义该函数时所指定的函数类型 这个可以参考第二题,函数的定义规则,当然是由定义的时候确定的了。本题答案为d。题号:6 凡是函数中未指定存储类别的局部变量,其隐含的存储类别为( )选项:a、auto b、static c、extern d、register 这个题目容易,没有指定当然是自...

一道c语言题目 求大神指点下算法?
根据题意,随机生成红绿蓝球任意个数,并任意顺序排列。这里采用随机数实现。统计按红绿蓝顺序排列最少交换次数,我的思路是:第一步:循环将最后一个红色球与最靠前的其它两色球(并且满足位置在红球之前)交换。第二步:循环将最后一个绿球与最靠前的蓝球(必须在绿球之前)交换。include <stdio.h> ...

C语言的一道题不会做了,求大神帮一下
第一题: a=4,b=8, 所以 (b==a) 为假,假就是 0,c= (b==a); c 得 0。语句中 a,b 数值 未发生过变化,保持初始值 a=4,b=8。所以输出 a,b,c 印出: 4,8,0 第二题:输入58,a=58;a>50 的条件成立,输出a值,印58 a>40 的条件成立,输出a值,印58 a>...

C语言 计算机题 求大神解答~
1、能正确表示逻辑关系:“a≥10或a≤0”的C语言表达式是“a>=10||a<=0”。(D选项)解析:“≥”用“>=”表示,“或”用“||”表示。2、判断char型变量c是否为大写字母的表达式是“(c>='A')&&(c<='Z')”。(C选项)解析:大写字母是A~Z,加上单引号,可以直接用来判断是否符合要求...

C语言题目,求大神
先运算括号里的。逗号表达式的优先级是从左到右并且逗号表达式的值等于最右边的式子的值,因此先执行a=3。’++‘的优先级比‘=’高。++a即a先自加1,a=4,然后执行b=a,那么b就是4。然后x就等于括号里逗号表达式的值,就是4。所以答案是4,4,4。很基础的问题,楼主看书就知道了 ...

C语言问题,求大神解决,谢谢啦,我是小白,最好能够解释下。
^是按位异或运算符,需要把a和b的值化为二进制数后进行按位异或就能得到答案。题中,a=3 ,二进制为:0011;b=6,二进制值为:0110。所以(a^b)按位异或后的值为0101也就是5,左移两位后值(二进制)为:010100 也就是 :20

C语言问题,求大神解决,谢谢啦,我是小白,最好能够解释下原因..
第三项 第一项的结果不正确。第二项和第四项结果等同都是指向指针的指针操作。可以将二维数组看成一个双重指针,第一个中括号是一个一重指针。比如说a[n][m]中a[0]是一个指向a[0][m]数组首位a[0][0]的指针,而a则是指向指针数组*a[n]的首位a[0]的指针。这样我们来看B选项,*(a+2)...

C语言题目,求大神解答
p=aa;\/\/p指向数组aa首地址,即a的位置 当i=0时,会执行 if ( i==0 ) aa[i][i+1]=**(p++); \/\/这时p=p+1,p指向了aa数组的第二行首地址,即d所在位置,所以,printf("%c\\n", **p ); 输出d 答案为C

C语言题目,求大神解答
typedef struct { long id; \/\/学号 char name[10]; \/\/姓名 char sex[2]; \/\/性别 }PS;\/\/删除函数 int delete(PS *p1, int m, PS *p2, int n){ int i, j;\/\/遍历p1数组 for (i = 0; i < m; i++){ \/\/遍历p2数组 for (j = 0; j < n; j++){ \/\/如果p1...

相似回答