C语言基础题

1,三个整数排列,从小到大排序后输出。

样例输入:20,7,33

样例输出:7,20,33



1.第一次输出

#include<stdio.h>
#include<stdlib.h>
int main(){
  int a,b,c;
  int s;
  scanf("%d%d%d",&a,&b,&c);
  if(a>b){
          s=a;
          a=b;
          b=s;
          }
  if(c<a){
          printf("%d %d %d\n",c,a,b);
          }
          if(c>b){
                  printf("%d %d %d\n",a,b,c);
                  }
          else{
               printf("%d %d %d\n",a,c,b);
               }
  system("pause");
  return 0;

不足是:完全没有考虑到输入的三个数一样大小时候的情况。

2.参照书中的例子

#include<stdio.h>
#include<stdlib.h>
int main(){
   int a,b,c;
   scanf("%d %d %d",&a,&b,&c);
   if(c<=b&&b<=a)printf("%d %d %d\n",c,b,a);
   else if(a<=b&&b<=c)printf("%d %d %d\n",a,b,c);
   else if(a<=c&&c<=b)printf("%d %d %d\n",a,c,b);
   else if(b<=c&&c<=a)printf("%d %d %d\n",b,c,a);
   else if(b<=a&&a<=c)printf("%d %d %d\n",b,a,c);
   else if(c<=a&&a<=b)printf("%d %d %d\n",c,a,b);
 
   system("pause");
   return 0;
}


一开始程序的方向逻辑没有清楚,实际,应该将a,b,c三个数的集中排列情况列出,而后依次排出。中间有出过错,原因是因为if(b<c&&a<c)printf("%d %d %d\n",b,c,a);程序运行到这里好像就停止了,于是没有输出。

第一次改进:就是上面那个错误的纠正;

第二次改进:因为单纯的大于小于无法判定输入为“1 1 1”时候的情况,于是在判定条件处加了“=”等于号。---------仍然不能正确输出1 1 1 ,结果是输出了6个111

第三次改进:在if的前面加入了else,输出结果正确。


结论:要全面考虑


3.比较简单的程序

#include<stdio.h>
#include<stdlib.h>
int main(){
  int a,b,c,t;
  scanf("%d%d%d",&a,&b,&c);
  if(a>c){
          t=a;
          a=c;
          c=a;
          }
  if(b<a){
          t=a;
          a=b;
          b=t;
          }
  if(c<b){
          t=b;
          b=c;
          c=t;
          }
  printf("%d %d %d\n",a,b,c);
  system("pause");
  return 0;
}




猜你喜欢

转载自blog.csdn.net/u013177799/article/details/53506131