[日常练习] 4. 基于交换两整形变量值的三种方法的C语言实现。


当面试题遇到:交换两整形变量的值。你是感到无比的“庆幸”遇到这么简单的面试题,还是有一点“慌张”,怕是自己想的太简单了吧!今天我们就来处理几道小题,并且深入探讨一下交换两整形的3种C语言实现方法!当你再遇到这种问题的时候,你将一点都不慌!你,稳得一批!


练习题目:

1. 给定两个整形变量的值,将两个值的内容进行交换。
2. 不允许创建临时变量,交换两个数的内容。
3.求10 个整数中最大值。
4.将三个数按从大到小输出。
5.求两个数的最大公约数。

题目分析及代码、结果展示:

1. 没错,它现在就是你想的那种,创建第三变量直接ok的题目...在此不要想太多了!

#include<stdio.h>

int main()
{
	int i = 1;
	int j = 2;
	int tmp = 0;               //创建第三变量

	printf("%d %d\n", i, j);  
	tmp = i;                   //通过第三变量进行交换
	i = j;
	j = tmp;
	printf("%d %d\n", i, j);
	return 0;
}

通过创建第三变量实现两个整数值的交换,使我们最为常见的方法,在这我们也就不多赘述,毕竟后面才是我们的重头戏


2. 当你潇洒写出上面的代码的时候,面试官狡黠一笑向你提出:“不允许创建第三变量,能不能搞定”。首先,你应该回复:“能啊!”(管它能不能,能就对了!)到了思考时间,我们来想一想这个过程,我们的目的就是为了交换两个整数的值,那么可以寻找到怎样的关系式将两者串联起来呢?假设有A、B两数,将两者相加赋给A,此时A=A+B,那么再有B=A-B,此时完成了A的值就传给了B,那么只需要进行最后一步A=A-B,此时的A=A+B,B就是A的值,就把B的值传给了A,也就达到了我们的目的。

#include<stdio.h>

int main()
{
	int i = 18;
	int j = 23;               //未创建第三变量
	printf("%d %d\n", i, j);
	i = i + j;               //执行逻辑算法
	j = i - j;
	i = i - j;
	printf("%d %d\n", i, j);
	return 0;
}

这个的逻辑算是比较简单,需要去培养和树立这样的逻辑来丰富我们的眼界,再遇到这个问题就能做了。在这,我们再介绍一种高大上的方法:采用“异或操作符”,进行两整数的交换!

#include<stdio.h>

int main()
{
	int i = 1;
	int j = 2;                 //未进行第三变量创建
	printf("%d %d\n", i, j);   
	i = i^j;                   //使用异或操作符
	j = i^j;
	i = i^j;
	printf("%d %d\n", i, j);
	return 0;
}

可以看到这个操作符的使用也是很简单的解决了问题!

在这我们不对它进行详细阐述、先思考思考、再自行上网查找资料,相信你会收获更多!


3. 求10个整数的最大值,其实也就是一个数组的遍历比较问题,也可以将之理解为一个排序问题输出那个最大值即可,但是也没必要这么的复杂。

#include<stdio.h>

int main()
{
	int i = 0;
	int max = 0;
	int arr[10] = {0};
	for(i=0; i<10; i++)
	{
		scanf("%d", &arr[i]);
	}
	max = arr[0];
	for(i=0; i<10; i++)
	{
			if(arr[i]>max)
				max = arr[i];
	}
	printf("max = %d\n",max);
	return 0;
}
#include<stdio.h>

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

int main()

{
    int a,b,r;
    printf("请输入两个正整数:\n");
    scanf("%d %d",&a,&b);
    if(a<b)
    {
		r=a;
        a=b;
        b=r;
    }
    //辗转相除法,因为r的初始值不为0,所以while语句至少会执行一次
    //直至余数为零,跳出循环
    while(r!=0)
    {
        r=a%b;
        a=b;
        b=r;
    }

猜你喜欢

转载自blog.csdn.net/yl_puyu/article/details/83095186