如何用函数实现三个数的排序(用的是C语言)

作者&投稿:绽岚 (若有异议请与网页底部的电邮联系)
c语言中怎么用函数实现a,b,c,三个数的大小比较,并按从大到小排列?~

#include
main()
{
int a,b,c;
int A,B,C;
printf("输入三个数,以空格分开。
");
scanf("%d %d %d",&a,&b,&c);
getchar();
A=(a>b&&a>c)?a:((b>a&&b>c)?b:c);
B=((b>c&&ba))?b:(((a>b&&ac))?a:c);
C=(a<b&&a<c)?a:((b<a&&b<c)?b:c);
printf("%d %d %d",A,B,C);
getchar();
}

采用的是数值参数传递方式,也就是调用自定义函数swap()时,虽然在swap()函数中a和b的值互换了,但是在主函数main()中,a和b的值并没有改变。可以改成指针作函数参数,这样传递的就是变量的地址,所以swap()函数等价于修改了a和b两个变量的值。我把改过的程序复制在下面了,这样能更好理解吧
#include#includevoid swap(int *a, int *b){int t;t = *a;*a = *b;*b = t;}int main(void){int a,b,c;printf("input 3 numbers:
");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("a = %d, b = %d, c = %d
", a, b, c);return 0;}运行结果如下,从大到小排序

一:全局变量

#include <stdio.h>

int a,b,c;  //定义三个全局变量

void sort()  //不需要参数
{
    int t;
    if(a>b)
    {
        t=a;a=b;b=t;
    }
    if(b>c)
    {
        t=b;b=c;c=t;
    }
    if(a>b)
    {
        t=a;a=b;b=t;
    }
}

int main()
{
    printf("输入:");
    scanf("%d%d%d",&a,&b,&c);
    sort();
    printf("排序:%d < %d < %d
",a,b,c);
    return 0;
}

二:指针

#include <stdio.h>

void sort(int *a, int *b, int *c) //参数传递方式:地址传递

  int t;
  if(*a>*b) 
  {
      t=*a;*a=*b;*b=t;
  }
  if(*b>*c)
  {
      t=*b;*b=*c;*c=t;
  }
  if(*a>*b) 
  {
      t=*a;*a=*b;*b=t;
  }

}

int main()
{
    int a,b,c;
    printf("输入:");
    scanf("%d%d%d",&a,&b,&c);
    sort(&a,&b,&c);               //把地址作为参数
    printf("排序:%d < %d < %d
",a,b,c);
    return 0;
}



void change(int* a,int *b)
{
int temp = a>b?a:b;
return;

}
调用函数确实不能修改原参数的值,其实质是拷贝了一份实参给形参,在这种情况下,C语言是用指向实参的指针来修改实参的,C++可以还用引用,就是第一个回答你问题的那个方法。你说书上说可以用全局变量,这个当然可以,但是,绝不推荐用全局变量或者静态变量,这是一个很不好的编程习惯!望采纳

#include "stdio.h"
void Mysort(int *pa,int *pb,int *pc){
int i,j,k,a[]={*pa,*pb,*pc};
for(i=0;i<3;i++){
for(k=i,j=k+1;j<3;j++)
if(a[k]>a[j]) k=j;
if(k!=i){
j=a[i];
a[i]=a[k];
a[k]=j;
}
}
*pa=a[0];
*pb=a[1];
*pc=a[2];
}
}
void main(void){
int a,b,c;
printf("Type 3 integers...a,b,c=\n");
scanf("%d%d%d",&a,&b,&c);
Mysort(&a,&b,&c);
printf("The result: %d < %d < %d\n",a,b,c);
}

这个太简单了 。。1楼用的是引用 你也可以用指针。。。
void swap(int *a,int *b)
{
int t;
t=*a;*a=*b;*b=t;
}
void mysort(int *a,int *b,int *c)
{
if(*a>*b) swap(a,b);

if(*a>*c) swap(a,c);

if(*b>*c) swap(b,c);
}

#include<stdio.h>

void twosort(int *a,int *b)
{//执行此函数后,保证*a<*b
int t;
if(*a>*b)
{
t=*a;*a=*b;*b=t;
}

}

调用子函数交换主函数里变量的值,需要传递指针
#include <stdio.h>
void sort(float *a,float *b,float *c)
{
float m;
if(*a>*b)
{
m=*a;
*a=*b;
*b=m;
}
if(*a>*c)
{
m=*a;
*a=*c;
*c=m;
}
if(*b>*c)
{
m=*b;
*b=*c;
*c=m;
}
}
void main()
{
float i,j,k;
printf("Input three numbers:\n");
scanf("%f%f%f",&i,&j,&k);
sort (&i,&j,&k);
printf("The sorted number is:\n%f\n%f\n%f\n",i,j,k);
}


excel中如何使用函数实现筛选统计?
当您只分类汇总列表中的非隐藏数字时,使用这些常数。SUBTOTAL 函数忽略任何不包括在筛选结果中的行,不论使用什么 function_num 值。SUBTOTAL 函数适用于数据列或垂直区域。不适用于数据行或水平区域。例如,当 function_num 大于或等于 101 时需要分类汇总某个水平区域时,例如 SUBTOTAL(109,B2:G2)...

SUBTOTAL函数的用法
SUBTOTAL函数是功能强大的分类汇总统计函数,有两个参数,第一个为1到11或101到111的数字,第二个为数据区域。SUBTOTAL函数因为其第一个参数的从1、2、3.。。。11变化而功能依次为:算术平均值函数、数值计数函数、非空单元格计数函数、最大值函数、最小值函数等等,其效果与 算术平均值、数值计数、...

怎么用C语言的scanf实现一次输入若干个数据
根据需要一般选择如下3种方法:1,已知数量,且个数较少:scanf("%d%d%d",&a&b&c);2,已知数量,但数量较多:for(int i=0;i<n;i++)scanf("%d",&a[i]);3,不知道数量 int i=0;while(scanf("%d",&a[i])){ i++;}

何用子函数实现输入10个数字,要求输出其中较大者,用函数找到最大的
c++语言实现 int maxfun() { cout << "请输入10个数字" << endl;int cnt = 0;int max = -0xffffffff;\/\/整数最小值 int iTmp = 0;while (cnt++ < 10) { cin >> iTmp;if (iTmp > max )max = iTmp;} return max;} ...

Excel 中统计非空不重复单元格个数的公式怎么写?
在excel2003中 counta 统计非空单元格个数,为何不能正常统计,统计时把空单元格也一起统计了,不知何解? 一、首先我们先学习一下COUNTA函数的定义: 返回参数列表中非空值的单元格个数。利用函数 COUNTA 可以计算单元格区域或数组中包含数据的单元格个数。 语法 COUNTA(value1,value2,...)...

什么是函数?
函数的近代定义是给定一个数集A,假设其中的元素为x,对A中的元素x施加对应法则f,记作f(x),得到另一数集B,假设B中的元素为y,则y与x之间的等量关系可以用y=f(x)表示,函数概念含有三个要素:定义域A、值域C和对应法则f。其中核心是对应法则f,它是函数关系的本质特征。 [1]函数,最早由中国清朝数学家李善兰...

...EXCEL函数中,如要满足A=1或2,或B=3或4时条件成立,应该用何函数...
=IF(OR(A=1,A=2,B=3,b=4),ture,false)

vlookup函数有何作用和使用方法?
3. 如何使用vlookup函数进行两个条件的筛选?当我们需要使用vlookup函数根据多个条件进行筛选时,可以使用数组公式来实现。具体步骤如下:1.首先,将需要筛选的条件以及要返回的值放在单独的表格中。2.利用vlookup函数对其中一个条件进行筛选,返回一个包含符合条件的行的数组。3.使用if函数和and函数将另一...

在二次函数中,知道3个点的坐标,怎样求函数关系式?
令y=ax^2+bx+c 代入坐标 0=4a-2b+c (1)0=a+b+c (2)8=4a+2b+c (3)三个未知数,三个方程,这样可以求出a,b,c (3)-(1)4b=8 b=2 往(1)(2)中代入b=2 4a-4+c=0 (4)a+2+c=0 (5)(4)-(5)3a-6=0 a=2 代入(5)c=-4 y=2x...

Excel函数用法
2.在窗口中,执行“插入→模块”菜单命令,插入一个新的模块——模块1。3.在右边的“代码窗口”中输入以下代码:Function V(a,b,h)V = h*(a+b)\/2End Function 4.关闭窗口,自定义函数完成。以后可以像使用内置函数一样使用自定义函数。提示:用上面方法自定义的函数通常只能在相应的工作簿中...

阿勒泰市15844667396: 如何用函数实现三个数的排序(用的是C语言)? -
燕烁潇然: void change(int* a,int *b) {int temp = a>b?a:b;return;} 调用函数确实不能修改原参数的值,其实质是拷贝了一份实参给形参,在这种情况下,C语言是用指向实参的指针来修改实参的,C++可以还用引用,就是第一个回答你问题的那个方法.你说书上说可以用全局变量,这个当然可以,但是,绝不推荐用全局变量或者静态变量,这是一个很不好的编程习惯!望采纳

阿勒泰市15844667396: 在excel中,如何利用公式将同一个单元格中的三个数字从小到大排序? -
燕烁潇然: 见样表截图,B1输入 =REPT(0,LEN(A1)-LEN(SUBSTITUTE(A1,0,)))&SUM(SMALL(1*MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1),ROW(INDIRECT("1:"&LEN(A1))))*10^(LEN(A1)-ROW(INDIRECT("1:"&LEN(A1))))) 下拉即可

阿勒泰市15844667396: C语言 输入三个数 按由小到大排序 函数调用的方法 -
燕烁潇然: #include mian() { int f(int *pointer1,int *pointer2,int *pointer3); \\对要进行调用的函数进行声明 int change(int *po1,int *po2); int a,b,c,*p1,*p2,*p3; \\定义三个变量和三个指针变量.scanf("%d %d %d",a,b,c); p1=a; p2=b; p3=c; f(*p1,*p2,*p3); ...

阿勒泰市15844667396: 我想输入a,b,c三个数,然后利用函数调用给三个数排序,c语言怎么写 -
燕烁潇然: 调用std::sort()来给3个数排序:#include <iostream> #include <algorithm> using namespace std; int main() {int a[3];cin >> a[0] >> a[1] >> a[2];sort( a, a+3 );cout << a[0] << " " << a[1] << " " << a[2]; }

阿勒泰市15844667396: sort3(int *n1, int *n2,int * n3)用这个函数将三个数进行由小到大排序 -
燕烁潇然: #include void sort3(int *n1, int *n2,int * n3) {int t; if(*n1>*n2){t=*n1;*n1=*n2;*n2=t;} if(*n1>*n3){t=*n1;*n1=*n3;*n3=t;} if(*n2>*n3){t=*n2;*n2=*n3;*n3=t;} } int main() {int a,b,c; scanf("%d%d%d",&a,&b,&c); sort3(&a,&b,&c); printf("%d %d %d\n",a,b,c); return 0; ]

阿勒泰市15844667396: 用C语言将3个数排序! -
燕烁潇然: 首先printf("请输入三个整数:/n");中/n应改为\n 其次,printf("你输入的三个数从大到小排序为:%d,%d,%d",&x,&y,&z); 中&x,&y,&z应改为x,y,z 还有就是你输入三个整数时两两间要用,隔开.

阿勒泰市15844667396: c语言:编写一个函数名字为sort,完成对三个整数从小到大排序,要求用指针实现. -
燕烁潇然: 修改通过了:#include<stdio.h>void sort(int *a,int *b,int *c) { int d; if(*a>*b) // a,b,c是指针,对其解引用如*a才是他们指向的值 {d=*a;*a=*b;*b=d;} if(*a>*c) {d=*a;*a=*c;*c=d;} if(*b>*c) {d=*b;*b=*c;*c=d;} printf("这个三个数从小到大排列是:%d,%...

阿勒泰市15844667396: C语言主函数随机输入三个数,在自定义函数中实现由高到低排序 -
燕烁潇然: 1 2 3 4 5 6 7 8 9 10 11 12main() {inta,b,c,t; scanf("%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); getch(); }

阿勒泰市15844667396: 编写函数void sort(int &x,int &y,int &z)对三个整数进行升序排序,在主函数中调用它. -
燕烁潇然: void sort(int *x,int *y,int *z) {int t;if *x>*y{t=*x;*x=*y;*y=t;}if *x>*z{t=*x;*x=*z;*z=t;}if *y>*z{t=*y;*y=*z;*z=t;} }

阿勒泰市15844667396: C++ 模板函数 实现3个数值 按最小值 到 最大值的排列程序 -
燕烁潇然: //模板函数paixu.h#include <iostream.h> template <class Type> void paixu(Type a,Type b,Type c) { Type array[3]={a,b,c}; int min; for(int i=0;i<2;i++) { min=i; for(int j=i+1;j<3;j++) { if(array[min]>array[j]) min=j; } Type temp=array[i]; array[i]=array[min]; ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网