C 练习实例5
题目:输入三个整数 x、y、z,请把这三个数由小到大输出。
程序分析:我们想办法把最小的数放到 x 上,先将 x 与 y 进行比较,如果 x>y 则将 x 与 y 的值进行交换,然后再用 x 与 z 进行比较,如果 x>z 则将 x 与 z 的值进行交换,这样能使 x 最小。
实例 1
// Created by www.runoob.com on 15/11/9.
// Copyright © 2015年 菜鸟教程. All rights reserved.
//
#include <stdio.h>
int main()
{
int x,y,z,t;
printf("\n请输入三个数字:\n");
scanf("%d%d%d",&x,&y,&z);
if ( x>y ) {
/*交换x,y的值*/
t=x; x=y; y=t;
}
if ( x>z ) {
/*交换x,z的值*/
t=z; z=x; x=t;
}
if ( y>z ) {
/*交换z,y的值*/
t=y; y=z; z=t;
}
printf("从小到大排序: %d %d %d\n",x,y,z);
}
以上实例输出结果为:
请输入三个数字: 1 3 2 从小到大排序: 1 2 3
实例 2
// Created by www.runoob.com on 15/11/9.
// Copyright © 2015年 菜鸟教程. All rights reserved.
//
#include <stdio.h>
// 交换两个变量的值
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
int main() {
int a, b, c;
printf("\n请输入三个数字:\n");
scanf("%d %d %d", &a, &b, &c);
if (a > b) {
swap(&a, &b);
}
if (a > c) {
swap(&a, &c);
}
if (b > c) {
swap(&b, &c);
}
printf("从小到大排序: %d %d %d\n", a, b, c);
return 0;
}
// Copyright © 2015年 菜鸟教程. All rights reserved.
//
#include <stdio.h>
// 交换两个变量的值
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
int main() {
int a, b, c;
printf("\n请输入三个数字:\n");
scanf("%d %d %d", &a, &b, &c);
if (a > b) {
swap(&a, &b);
}
if (a > c) {
swap(&a, &c);
}
if (b > c) {
swap(&b, &c);
}
printf("从小到大排序: %d %d %d\n", a, b, c);
return 0;
}
C 语言经典100例
omgzui
862***679@qq.com
参考方法:
#include <stdio.h> //输入三个整数x,y,z,请把这三个数由小到大输出。 //利用冒泡排序 int main(int argc, char *argv[]) { int x,y,z; int arr[3]; int i,j; int t=0; printf("\n请输入三个数字:\n"); scanf("%d%d%d",&x,&y,&z); arr[0] = x; arr[1] = y; arr[2] = z; //获取数组长度 这里完全没必要这样做,只是好奇怎么获取c的数组长度 int len = sizeof(arr)/sizeof(arr[0]); for(i=0;i<len;i++){ for(j=i+1;j<len;j++){ if(arr[i] > arr[j]){ t = arr[i]; arr[i] = arr[j]; arr[j] = t; } } } printf("从小到大排序: \n"); for(i=0;i<len;i++){ printf("%d\n",arr[i]); } }omgzui
862***679@qq.com
yuanjuntao
562***029@qq.com
参考实例:
#include <stdio.h> int main(void) { int x,y,z; printf("输入三个数字(例如:1,2,3)\n"); scanf("%d,%d,%d",&x,&y,&z); if(x>y&&y>z) printf("%d,%d,%d",z,y,x); if(x>z&&z>y) printf("%d,%d,%d",y,z,x); if(y>x&&x>z) printf("%d,%d,%d",z,x,y); if(y>z&&z>x) printf("%d,%d,%d",x,z,y); if(z>x&&x>y) printf("%d,%d,%d",y,x,z); if(z>y&&y>x) printf("%d,%d,%d",x,y,z); return 0; }yuanjuntao
562***029@qq.com
dafeng
117***1747@qq.com
参考方法:
#include<stdio.h> #define N 3 // N的值可更改,实现N个数的排序 int main() { int i,j,k,temp; int shuzu[N]; for(i=0;i<N;i++) //选择法排序 { printf("input the %d number:",i+1); scanf("%d",&shuzu[i]); } for (i=0;i<N-1;i++) { k=i; for(j=i+1;j<N;j++) { if(shuzu[j]<shuzu[k]) //实现数组从小到大排序 k=j; } if(k!=i) { temp=shuzu[k]; shuzu[k]=shuzu[i]; shuzu[i]=temp; } } for(i=0;i<N;i++) printf("%d ",shuzu[i]); }dafeng
117***1747@qq.com
半弧寻
ban***un@163.com
利用define宏定义交换数据
#include <stdio.h> #define swap(a,b) {a=a+b;b=a-b;a=a-b;} int main() { int x,y,z; printf("请输入三个数字:"); scanf("%d %d %d",&x,&y,&z); if(x>y) { swap(x,y); } if(x>z) { swap(x,z); } if(y>z) { swap(y,z); } printf("从小到大排序:%d %d %d\n",x,y,z); return 0; }半弧寻
ban***un@163.com
WongDark
a12***4@yeah.net
参考方法:
#include <stdio.h> int main(int argc, char *argv[]) { int a,b,c,p,q,r,s,t; printf("请输入三个数字:"); scanf("%d%d%d",&a,&b,&c); p=(a<b)?a:b; q=(a>b)?a:b; r=(q<c)?q:c; s=(q>c)?q:c;//max t=(p<c)?p:c;//min printf("%d %d %d",t,r,s); return 0; }WongDark
a12***4@yeah.net
曲小培
qxp***163.com
参考方法:
#include<stdio.h> int main(){ int a[4]; void InsSort(int a[],int n); printf("Please enter the num:"); scanf("%d%d%d",a+1,a+2,a+3); InsSort(a,4); printf("%d,%d,%d",*(a+1),*(a+2),*(a+3)); } //直接插入排序,类似打扑克发牌整理扑克,每加入一个数据,就整理有序一次, //依次比较后移 //数据放置在a[1]之后,a[0]放置标志位,在每趟循环中,也起到防止下标越界作用 void InsSort(int a[],int n){ int i,j; //第一趟从第二个数字开始,认为第一个数字有序 for(i=2;i<=n;i++){ //将待插入数据放入a[0] a[0]=a[i]; j=i; //a[0]和前一项比较,前一项较大则前一项后移,覆盖后一项…… while(a[j-1]>a[0]){ a[j]=a[j-1]; //前一项已经后移的前提下,a[0]和前一项的前一项比较 j--; } a[j]=a[0]; } }曲小培
qxp***163.com
leevmh
992***818@qq.com
参考:
#include<stdio.h> int main() { int i,j,k; printf("请输入三个数字:"); scanf("%d%d%d",&i,&j,&k); if(i>j) { i^=j; j^=i; i^=j; } if(i>k) { i^=k; k^=i; i^=k; } if(j>k) { j^=k; k^=j; j^=k; } printf("%d %d %d\n",i,j,k); }leevmh
992***818@qq.com
小小鸟
965***429@qq.com
参考方法:
#include<stdio.h> int max(int,int); int min(int,int); int main() { int x,y,z,max0,max1,max2,min0,min1,min2; printf("Please enter three number(1,2,3): "); scanf("%d,%d,%d",&x,&y,&z); max0=max(x,y);min0=min(x,y); max1=max(max0,z);min1=min(max0,z); max2=max(min0,min1);min2=min(min0,min1); printf("The last is: %d,%d,%d",min2,max2,max1); } int max(int a,int b){ int temp,num; if(a>b) { num=a; }else{ num=b; } return num; } int min(int a,int b){ int temp,num; if(a<b) { num=a; }else{ num=b; } return num; }小小鸟
965***429@qq.com
阿雪
wxd***108@126.com
三目运算法
#include "stdafx.h" //题目:输入三个整数x,y,z,请把这三个数由小到大输出。 int _tmain(int argc, _TCHAR* argv[]) { int num1,num2,num3; int max, min,mid; printf("请输入三个数字:\n"); scanf_s("%d%d%d", &num1, &num2, &num3); max = num1>num2 ? num1:num2; max = max>num3 ? max:num3; min = num1<num2 ? num1:num2; min = min<num3 ? min:num3; mid = (num1!=max && num1!= min) ? num1:num2; mid = (mid!=max && mid!= min) ? mid:num3; printf_s("从小到大排序:%d %d %d",min,mid,max); return 0; }return 0; }阿雪
wxd***108@126.com
消逝的航迹云
365***692@qq.com
简化代码如下:
#include <stdio.h> int main() { int a,b,c; printf ("输入三个整数:"); scanf ("%d%d%d",&a,&b,&c); if (a>b&&a>c)/* 当第一个数(a)为最大时,直接输出 a */ ; else a=(b>c) ? b : c; /* 当 a 不为最大数时,将剩下两数中最大的数赋值给 a*/ /* 输出 a 值(中间的 _?_:_ 为三目运算,指判断第一个表达式的真假,若第一个表达式为真,则第二个表达式的值代表整个表达式的值,若第一个表达式为假。则第三个表达式的值代表整个表达式的值) */ printf ("%d",a); return 0; }消逝的航迹云
365***692@qq.com
HIT_CCC
117***2963@qq.com
参考方法:
#include<stdio.h> int main(void) { int x,y,z,temp,min,max; printf("请输入三个数字:\n"); scanf("%d%d%d",&x,&y,&z); temp = x < y? x : y; min = temp < z? temp : z; temp = x < y? y : x; max = temp < z? z : temp; printf("从小到大排序:"); printf("%d%3d%3d",min,x + y + z - min - max,max); return 0; }HIT_CCC
117***2963@qq.com
ronnyz
221***8677@qq.com
参考方法:
#include <stdio.h> void swap(int *a,int *b){ //*a代表指针变量a,a存储的是地址,*a是地址的值 int temp; temp=*a; *a=*b; *b=temp; } int main(){ int x,y,z; printf("请输入三个数字:\n"); scanf("%d%d%d",&x,&y,&z); if(x>y) swap(&x,&y); if(x>z) swap(&x,&z); if(y>z) swap(&y,&z); printf("从小到大排序:%d %d %d\n",x,y,z); return 0; }ronnyz
221***8677@qq.com
big_tree
286***4460@qq.com
看了大家,大家都很厉害,三目运算符没有想到。
我,个人认为,既然是调整 3 个数之间的顺序,方法肯定很多,但要减少内存,加快执行速度,为什么不尝试直接 printf,上面也有些这个思路的,但是我感觉使用 else 跟帅一点(手动滑稽)。
#include <stdio.h> int main() { int a[3]; scanf("%d %d %d",&a[0],&a[1],&a[2]); if (a[0]<a[1]) if (a[0]<a[2]) if (a[1]<a[2]) printf("%d %d %d",a[0],a[1],a[2]); else printf("%d %d %d",a[0],a[2],a[1]); else printf("%d %d %d",a[2],a[0],a[1]); else //a[1]<a[0] if (a[1]<a[2]) if (a[0]<a[2]) printf("%d %d %d",a[1],a[0],a[2]); else printf("%d %d %d",a[1],a[2],a[0]); else printf("%d %d %d",a[2],a[1],a[0]); return 0; }big_tree
286***4460@qq.com
nemo
gdx***07a@163.com
非原创,B站学的。
#include <stdio.h> int main() { int a =5, b = 2, c = 1; int sum = a+b+c; printf("%d %d %d\n", (a<b ? a:b) < c ? (a<b ? a:b) : c, sum - ((a<b ? a:b) < c ? (a<b ? a:b) : c) - ((a>b ? a:b) > c ? (a>b ? a:b) : c), (a>b ? a:b) > c ? (a>b ? a:b) : c); return 0; }nemo
gdx***07a@163.com