C语言将3个整数从大到小输出(包含通过指针进行函数调用)

本文介绍如何使用C语言将三个整数按从大到小排序并输出,包括直接在main函数中比较和通过函数调用并利用指针传递地址的方法。重点讲解了通过指针进行函数调用时,如何正确地改变实参的值。

题目内容:写代码将三个整数数按从大到小输出。

例如:

输入:2 3 1

输出:3 2 1

本文将通过两种方法实现将三个整数从大到小输出,重点体现在第二个方法函数调用中(将会应用到指针)。

1. 方法一:直接在main函数中实现三个整数大小的比较。

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main(){
	int a = 0;
	int b = 0;
	int c = 0; 
	int tmp = 0;
	printf("请输入三个整数:");
	scanf("%d%d%d", &a, &b, &c);
	if (a < b){
		tmp = a;
		a = b;
		b = tmp;
	}
	if (a < c){
		tmp = a;
		a = c;
		c = tmp;
	}
    if (b < c){
		tmp = b;
		b = c;
		c = tmp;
			}
	printf("三个整数由大到小依次是:%d %d %d\n", a, b, c);
	return 0;
}

尽管代码简单易懂,逻辑也比较清晰,但是赋值语句需要反复输入比较繁琐,所以利用函数直接调用会更加便利一些。

2. 方法二:通过函数调用实现三个整数大小的比较。

先上一个比较常见的错误示范!!!

//以下为错误的函数形式
int maxNum( int i , int j ){
	int tmp = 0;
	if (i <j){     //形参与实参之间的传递问题
		tmp =i ;
		i = j;
		j = tmp;
	}
	return 0}
//无法达到交换值的效果

由于形参与实参之间只能单向传递,即在函数调用时,实参的值会传给形参,但形参的改变并不能传递给实参,所以形参相互赋值并不会改变实参。通常函数与main函数之间是通 过return来传递改变过的值(但赋值操作无法实现传递),所以我们要通过指针进行传递地址改变实参。

接下来开始写正确的函数:

 (1)在写函数之前,让我们来先理解一下什么是指针。首先指
 针与内存密切相关,把内存想象成一个大走廊,走廊上  有很多
 房间,每个房间都有门牌号,把门牌号看作地址。这时候创建
 一个变量(重新申请一个内存空间/即申请一个房间)这个内存
 空间来存储地址。这个存储了地址的变量就是“指针变量”, 也
 就是我们常说的指针。

 (2)明确指针是什么后,我们可以通过传递实参的地址给到
 形参,形参把地址所对应的变量进行改变,实参也开始发生改变。
  这个过程相当于有一张房卡,打开房间里面有一个房间号,通
过房间号找到对应的房间,可以在房间里放东西,也可以取出东西。

以下为正确函数形式以及完整代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int maxNum( int* i,int* j ){  //此处的int*为指针类型
	int tmp = 0;
	if (*i <*j){    //此处的*为解引用操作符,返回指针变量i、j所指的对象
		tmp =*i ;
		*i = *j;
		*j = tmp;
	}
	return 0;
}
int main(){
	int a = 0;
	int b = 0;
	int c = 0;
	//1.为指针变量申请内存空间
	int *p1 = 0;
	int *p2 = 0;
	int *p3 = 0;
	//2.将a、b、c的地址赋予指针变量p1、p2、p3
	p1 = &a;
	p2 = &b;
	p3 = &c;
	printf("请输入三个整数:");
	scanf("%d%d%d", &a, &b, &c);
	if (a < b){
	maxNum(p1, p2);
	}
	if (a < c){

	maxNum(p1, p3);
	}
    if (b < c){
	maxNum(p2, p3);
			}
	printf("三个整数由大到小依次是:%d %d %d\n", a, b, c);
	return 0;
}

为了更加详细的了解函数内部到底是如何运作的,可以参考下图:
在这里插入图片描述
通过图片,我们可以更加清晰的了解到内存中指针变量和实参变量之间的变化。

以上,欢迎更多的小伙伴来沟通交流想法~

### 示例代码:C语言使用指针实现三个整数从小到排序 以下是一个完整的示例代码,展示了如何通过指针实现三个整数的排序功能: ```c #include <stdio.h> // 定义交换两个变量值的函数 void swap(int *p1, int *p2) { int temp; temp = *p1; *p1 = *p2; *p2 = temp; } // 定义按从小到进行交换三个变量值的函数 void exchange(int *q1, int *q2, int *q3) { if (*q1 > *q2) { swap(q1, q2); } if (*q1 > *q3) { swap(q1, q3); } if (*q2 > *q3) { swap(q2, q3); } } int main() { int a, b, c; int *pointer_1, *pointer_2, *pointer_3; // 输入三个整数 printf("请输入三个整数:"); scanf("%d,%d,%d", &a, &b, &c); // 定义指针并指向输入的变量 pointer_1 = &a; pointer_2 = &b; pointer_3 = &c; // 调用排序函数 exchange(pointer_1, pointer_2, pointer_3); // 输出排序结果 printf("从小到排序结果为: %d,%d,%d\n", a, b, c); return 0; } ``` ### 代码说明 上述代码中,`swap` 函数用于交换两个变量的值[^5]。`exchange` 函数通过调用 `swap` 来实现三个变量的排序逻辑。在主函数中,用户输入三个整数后,定义了三个指针分别指向这些变量,并通过调用 `exchange` 函数完成排序操作[^5]。 此外,还可以参考另一种实现方式,其中 `sort` 函数被多次调用来实现两两比较和交换[^1]。以下是另一种实现方法: ```c #include <stdio.h> // 定义排序函数,用于对两个变量进行比较和交换 void sort(int *p_a, int *p_b) { int temp; if (*p_a > *p_b) { temp = *p_a; *p_a = *p_b; *p_b = temp; } } int main() { int a, b, c; int *p_a = &a, *p_b = &b, *p_c = &c; // 输入三个整数 printf("请随意输入三个整数:"); scanf("%d%d%d", p_a, p_b, p_c); // 调用排序函数,实现三变量排序 sort(p_a, p_b); sort(p_a, p_c); sort(p_b, p_c); // 输出排序结果 printf("按照由小到的顺序输出如下:\n%3d%3d%3d", *p_a, *p_b, *p_c); return 0; } ``` ### 代码解释 此代码中,`sort` 函数负责对两个变量进行比较和交换。通过三次调用 `sort` 函数,实现了三变量的排序逻辑。每次调用都确保当前两个变量按照从小到的顺序排列[^1]。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值