输入a和b两个整数,用指针实现从小到大的顺序输出a和b

c语言例题 :输入a和b两个整数,用指针实现从小到大的顺序输出a和b

  • 你看下这篇博客吧, 应该有用👉 :输入a和b两个整数,按先后大小的顺序输出a和b
  • 除此之外, 这篇博客: C语言笔记中的 1.输入a和b两个整数,按先大后小的顺序输出a和b 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 方法一: 利用改变指针变量的值来实现(即改变指针的指向)

    #include <stdio.h>
    #include <stdlib.h>
    
    /*
    输入a和b两个整数,按先大后小的顺序输出a和b; 
    方法一:利用改变指针变量的值来实现(即改变指针的指向) 
    */ 
    
    int main() {
    	int *p1,*p2,a,b;
    	int *temp;
    	printf("Please enter two numbers:");
    	scanf("%d %d",&a,&b);//注意在运行时,输入数据的格式要和scanf中的格式相同; 
    	p1=&a;
    	p2=&b;
    	if(a<b)
    	{
    		temp=p1;
    		p1=p2;
    		p2=temp;
    	}
    	printf("Max=%d,Min=%d",*p1,*p2);
    	return 0;
    }
    

    方法二: 利用交换指针变量指向的变量值(即交换a和b的值)

    #include <stdio.h>
    #include <stdlib.h>
    
    /*
    方法二:利用交换指针变量指向的变量值(即交换a和b的值) 
    */
    int main(){
    	int *p1,*p2,a,b;
    	int temp;
    	printf("Please enter two numbers:");
    	scanf("%d,%d",&a,&b);
    	p1=&a;
    	p2=&b;
    	if(a>b)
    	{
    		// *p1和*p2实际就是表示指针变量p1和 p2指向的变量(即a 和 b) 
    		temp=*p1;
    		*p1=*p2;
    		*p2=temp;	
    	} 
    	printf("%d %d",a,b);
    	return 0;
    }
    

    方法三: 使用函数处理,将指向两个整型变量的指针变量作为实参传递给swap函数的形参指针变量,在函数中通过指针变量实现交换两个变量的值。

    注:

    (1)在函数调用时,将实参变量的值传递给形参变量,采取的依然是单向传送的“值传递”方式。(实参—>形参)

    (2)不能企图通过改变指针形参的值而改变指针实参的值。因为 C语言中实参变量和形参变量之间的数据传递是单向的"值传递"方式。用指针变量作为函数参数依然要遵循这一规则。

    (3)不可能通过执行调用函数来改变实参指针变量的值,但是可以改变实参指针变量所指向变量的值

    (1)下面这段代码就是试图通过实参变量的值传入形参变量,然后再改变形参变量的值,然后又传回到实参变量。这显然是无法实现的

    int main(){
    	void swap(int *p1,int *p2);
    	int *pointer_1,*pointer_2,a,b;
    	printf("Please enter two numbers:");
    	scanf("%d,%d",&a,&b);
    	pointer_1=&a;
    	pointer_2=&b;
    	if(a>b)
    	{
    		swap(pointer_1,pointer_2);
    	}
    	printf("%d %d",*pointer_1,*pointer_2);
    	return 0;
    } 
    void swap(int *p1,int *p2)
    {
    	//交换形参指针变量的值
    	int *temp;
    	temp=p1;
    	p1=p2;
    	p2=temp;
    }
    

    结果并不能实现a和b的值交换,因为改变形参指针变量p1和p2的值并不能改变实参指针变量pointer_1和pointer_2的值。
    (2)通过执行调用函数来改变实参指针变量所指向变量的值。(可以实现两个输入的整数按从小到大的顺序输出)

    /*
    方法三:通过执行调用函数来改变实参指针变量所指向变量的值,从而实现a和b的值交换*/ 
    int main(){
    	void swap(int *p1,int *p2);
    	int *pointer_1,*pointer_2,a,b;
    	printf("Please enter two numbers:");
    	scanf("%d,%d",&a,&b);
    	pointer_1=&a;
    	pointer_2=&b;
    	if(a>b)
    	{
    		swap(pointer_1,pointer_2);
    	}
    	printf("%d %d",*pointer_1,*pointer_2);//通过执行调用函数可以实现改变实参指针变量所指向变量的值。 
    //	printf("%d %d",a,b);  //两种输出效果一样,因为*pointer_1和a是一个意思 
    	return 0;
    } 
    void swap(int *p1,int *p2)
    {
    	int temp;
    	temp=*p1;
    	*p1=*p2;
    	*p2=temp;
    }
    
    

    注:
    函数的调用可以(且只可以)得到一个返回值(即函数值),而使用指针变量作参数,可以得到多个变化了的值。

    拓展:
    输入3个整数a,b,c, 要求按照从小到大的顺序将它们输出,用函数实现。

    #include <stdio.h>
    #include <stdlib.h>
    
    /* 
    输入3个整数a,b,c,要求按照从小到大的顺序输出,利用函数的形式 
     */
    
    int main() {
    	void exchange(int *p1,int *p2,int *p3);
    	int *pointer_1,*pointer_2,*pointer_3,a,b,c;
    	printf("Please enter three numbers:");
    	scanf("%d %d %d",&a,&b,&c);
    	pointer_1=&a;
    	pointer_2=&b;
    	pointer_3=&c;
    	printf("%d\n",pointer_1); 
    	exchange(pointer_1,pointer_2,pointer_3);  //注意:exchange函数中的参数都是指针变量 
    	printf("%d %d %d\n",*pointer_1,*pointer_2,*pointer_3); 
    	printf("%d\n",pointer_1); //可以发现实参指针变量在执行完调用函数后依然没有改变 
    	return 0;
    }
    
    void exchange(int *p1,int *p2,int *p3)
    {
    	void swap(int *p_1,int *p_2);
    	if(*p1>*p2)
    		swap(p1,p2);  //swap函数中的参数是指针变量,但其中交换的是指针变量指向的变量的值 
    	if(*p2>*p3)
    		swap(p2,p3);
    	if(*p1>*p3)
    		swap(p1,p3);
    }
    
    void swap(int *p_1,int *p_2)
    {
    	int temp;
    	temp=*p_1;
    	*p_1=*p_2;
    	*p_2=temp;
    }
    

    注意:
    main函数中的3个实参指针变量的值在执行完调用函数并未改变,这就正好说明前面所说的**“执行完调用函数,并不能改变实参指针变量的值,但是可以改变实参指针变量指向的变量的值”**



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