4399king 发表于 2020-9-25 18:02:30

题目在附件

4399king 发表于 2020-9-25 18:03:31

#include<stdio.h>
int main(){
char a,b,c,t;
while(scanf("%c%c%c\n",&a,&b,&c)!=EOF)
{
scanf("%c%c%c\n",&a,&b,&c);

if(a>b){
t=a;a=b;b=t;
}
if(b>c){
t=b;b=c;c=t;
}
if(a>c){
t=a;a=c;c=t;
}
printf("%c %c %c\n",&a,&b,&c);
}
return 0;
}

baige 发表于 2020-9-25 18:44:26

本帖最后由 baige 于 2020-9-25 19:14 编辑

C语言好像没引用就换成指针了
#include <stdio.h>

void swap(char *a, char *b){
    char t = *a;
    *a = *b;
    *b = t;
}

int main(void){
    char a,b,c;
    while(scanf("%c%c%c",&a,&b,&c)!=EOF)
    {
      getchar();//吃掉回车
      if(a>b)swap(&a,&b);
      if(a>c)swap(&a,&c);
      if(b>c)swap(&b,&c);
      printf("%c %c %c\n",a,b,c);
    }
    return 0;
}

baige 发表于 2020-9-25 19:18:46

思路的话,就是把最小的放在a,然后比较b,c,如果b>c就交换b,c即可

405794672 发表于 2020-9-25 19:43:50

本帖最后由 405794672 于 2020-9-25 19:45 编辑

题目要求连续输入三组,那么,就得有九个空间接收。用数组吧。三个数组或者一个二维数组。
另外,while循环时已经输入了一次,你在里面没有必要再scanf。这会继续输入,而且会覆盖之前的输入。
还有EOF是文件里的。不知道输入有没有。一般不能这么写。应该写!='\n'。
这个还是用for比较好。不过硬要用while也可以。想点办法。
int main()
{
   char a,t;
   int i;
   while(i<2)
   {
          scanf("%c%c%c",&a,&a,&a);
          if(a>b)
          {
                t=a;a=b;b=t;
         }
          if(b>c)
         {
            t=b;b=c;c=t;
          }
          if(a>c)
         {
            t=a;a=c;c=t;
          }
          i++;               
   }
   i=0;
   while(i<2)
      {
         printf("%c %c %c\n",a,a,a);
         i++;
      }
      return 0;
}

4399king 发表于 2020-9-26 08:33:11

baige 发表于 2020-9-25 18:44
C语言好像没引用就换成指针了

我还是不太明白为什么我的行不通,而您的改成函数就行

baige 发表于 2020-9-26 08:39:04

本帖最后由 baige 于 2020-9-26 08:41 编辑

4399king 发表于 2020-9-26 08:33
我还是不太明白为什么我的行不通,而您的改成函数就行

#include<stdio.h>

int main(void){
        int a,b,c,t;
        while(scanf("%c%c%c",&a,&b,&c)!=EOF)// scanf里面不要放\n
        {
                getchar();//最后吃掉回车
                // 这一句删掉
                //scanf("%c%c%c\n",&a,&b,&c);

                if(a>b){
                        t=a;a=b;b=t;
                }
                // 两个if换个位置,要不然会有逻辑的错误,对于逆序,和中大小有错
                if(a>c){
                        t=a;a=c;c=t;
                }
                if(b>c){
                        t=b;b=c;c=t;
                }
                // 输出不需要 取地址符&
                printf("%c %c %c\n",a,b,c);
        }
        return 0;
}

baige 发表于 2020-9-26 08:40:11

之所以写函数只是因为多次用到这个功能

Cool_Breeze 发表于 2020-9-26 09:16:10

本帖最后由 Cool_Breeze 于 2020-9-26 09:23 编辑

我也来练练!
#include<stdio.h>
#define LIMIT 3
void select_sort(char* array, short size);

int main(void)
{
        char array = {0};
        int count = 0, single = 0;
        while (count < LIMIT)
        {
                scanf("%s", array);
                *(array+LIMIT) = '\0'; // 字符串截断
                count ++;
        }
       
        for (count=0; count<LIMIT; count++)
        {
                select_sort(array, LIMIT);
                for (single=0; single<LIMIT; single++)
                        printf("%c ", *(array+single));
                putchar('\n');
        }
       
        return 0;
}

void select_sort(char* array, short size)
{
        register short i,j,index;
        char temp;
        for (i=0; i<size; i++)
        {
                index = i;
                for (j=i+1; j<size; j++)
                {
                        if (*(array+index) > *(array+j))
                        {
                                index = j;
                        }
                }
                if (index != i)
                {
                        temp = *(array+i);
                        *(array+i) = *(array+index);
                        *(array+index) = temp;
                }
        }
}

result:
cba123
kjher
yzx2
a b c
h j k
x y z

--------------------------------
Process exited after 41.24 seconds with return value 0
请按任意键继续. . .
页: [1]
查看完整版本: 题目在附件