新手请教一个问题,谢谢大神!

lminute 2017-03-21 01:41:59
目前在自学C语言,刚开始学。自己照着教程里面写的为什么输出的结果不对啊?
写的是输入随机三个数字,然后从大到小排序。比如输入1 2 3 ,但是输出的结果是2 1 3 a和b的位置调换了,但是b和c的位置没有调换。
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int a, b, c;
int t;

printf("请输入数字,不同数字之间用空格隔开:\n");
scanf_s("%d %d %d", &a, &b, &c);

if (a < b)
{
t = a;
a = b;
b = t;
}

else if (a < c)
{
t = a;
a = c;
c = t;
}

else if (b < c)
{
t = b;
b = c;
c = t;
}

printf("%d %d %d\n", a, b, c);

system("pause");


return 0;

}
...全文
93 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
欧阳春晖 2017-03-21
  • 打赏
  • 举报
回复
引用 楼主 lminute 的回复:
目前在自学C语言,刚开始学。自己照着教程里面写的为什么输出的结果不对啊? 写的是输入随机三个数字,然后从大到小排序。比如输入1 2 3 ,但是输出的结果是2 1 3 a和b的位置调换了,但是b和c的位置没有调换。 #include <stdio.h> #include <stdlib.h> int main(void) { int a, b, c; int t; printf("请输入数字,不同数字之间用空格隔开:\n"); scanf_s("%d %d %d", &a, &b, &c); if (a < b) { t = a; a = b; b = t; } else if (a < c) { t = a; a = c; c = t; } else if (b < c) { t = b; b = c; c = t; } printf("%d %d %d\n", a, b, c); system("pause"); return 0; }
你这排序算法是错误的大哥 看我给你写的

for(int i=0;i<sizeof(data)/sizeof(int);i++) {
    for(int j=i;j<sizeof(data)/sizeof(int);j++) {
        if(if(data[i]>data[j]) {
               tmp = data[i];
               data[i]=data[j];
                data[j]=tmp;
         }
     }
}
这个代码因为是仓促写的,所以如有不完善或者错误地方请谅解,但算法的思路不变。。。。
自信男孩 2017-03-21
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int a, b, c;
    int t;

    printf("请输入数字,不同数字之间用空格隔开:\n");
    scanf_s("%d %d %d", &a, &b, &c);

    if (a < b) {
        t = a;
        a = b;
        b = t;
    }
    if (a < c) {
        t = a;
        a = c;
        c = t;
    }
    if (b < c) {
        t = b;
        b = c;
        c = t;
    }

    printf("%d %d %d\n", a, b, c);
    system("pause");
    return 0;
}
原因是if ... else if ... else if 是只会执行一次,比如若if为真,后面的都不会执行;只要有一个为真,其他都不会执行了。将else去掉,每个都会判断
AlbertS 2017-03-21
  • 打赏
  • 举报
回复
引用 2 楼 qq423399099 的回复:
if(...){ } else if(...){ } else if(...){ } 这3个分支只会执行其中一个 注意和下面的区别: if(...){ } if(...){ } if(...){ } 这样是判断3次
这个说的有道理
小灸舞 版主 2017-03-21
  • 打赏
  • 举报
回复
if(...){

}
else if(...){

}
else if(...){

}
这3个分支只会执行其中一个

注意和下面的区别:
if(...){

}
if(...){

}
if(...){

}
这样是判断3次
  • 打赏
  • 举报
回复
因为只执行一次,仔细阅读代码

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧