当我们学习c语言一段时间后,我们第一个的问题可能就是比较大小问题,许多人都觉的它十分的简单。但是它也综合的考察了我们对于各种基本语句的综合运用,还会延伸出许多其他有趣的问题 那么我们今天就来整理一下在学习中我所遇到的比较大小问题。

一、首先,当然是最简单的2个数比较大小问题,输入两个数,并输出较大的那一个;很自然我们就想到了if语句(为了方便,我们先不考虑两数相等的情况)

#include<stdio.h>
int main()
{
	int a,b;
	printf("请输入两个数:");
	scanf("%d %d",&a,&b);
	if(a>b) 
     printf("%d",a);
    else   
    printf("%d",b);
	return 0;
}

或者

#include<stdio.h>
int main()
{
	int a,b;
	printf("请输入两个数:");
	scanf("%d %d",&a,&b);
		int max;
		max=(a>b)?a:b;
		printf("%d",max);
	return 0;
}

        条件表达式暂时在平时应用不是很广,可在某些地方还是可以发挥比较重要的作用,还可以将代码变得更加简短。

二、两个数的问题结束了,那么下一个自然就是三个数的问题,输入三个数并输出最大的那一个,第一个方法我们还是用if语句来解决问题,可是如果直接将a b c三个数进行比较的话,我们需要书写大量的if语句,那样代码将会变得非常的难看!
        这时我们就要运用一个新的思路,先定义一个数max,再将任意一个数赋值给max,再将max与其他数进行比较,如果max小于该数就将该数的值赋给max,这样就省下了大量的if语句。

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

        利用这个思路继续思考,如果是n个数呢?这下我们面临的有两个问题,如何存放这些数,以及如何处理简化大量的判断语句。那么我们就会用到数组和循环了。

#include<stdio.h>
int main()
{
	int a[100];
	int i,n=0;
    printf("请输入要比较大小的数,结束请按回车:");
	for(i=0;;i++)
	{
		scanf("%d",&a[i]);
		n++;
		if(getchar()=='\n') break;
	}
	//获取输入的数并存入一个数组当遇到回车时结束循环 
    int max=a[0];
	
	for(i=1;i<=n-1;i++)
	{
		if(max<a[i]) max=a[i];
	}
	//进行循环,将max与数组中所有数进行比较,获取最大的数 
	printf("max=%d",max);
	return 0;
}

好了,到这里了,来看看你掌握了多少知识吧------>戳我,戳我!!!

上面是不是感觉开始复杂了呢?

三、经过以上的训练,现在我们来看一个比较综合的问题
        给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的 三个整数,使得它们的和与 target 最不接近。返回这三个数的和。假定每组输 入只存在唯一答案。 例如,给定数组 nums = [-1,2,1,-4], 和 target = 1. 与 target 最不接近的三个数的和为 -4 (-1+1-4=-3)
思路:
第一步:首先我们要获取一个数组和目标值,并将其储存起来。
第二步:三个数的和与目标值的差是否接近我们可以用绝对值来衡量第三步,利用之前的思路,定义max,并不断将更大的值赋值给max
下面是答案

#include<stdio.h>
#include<math.h>
int main()
{
	int nums[100];
	int n=0,i;
	printf("请输入一个数组:");
	for(i=0;;i++)
	{
		scanf("%d",&nums[i]);
		n++;
		if(getchar()=='\n') break;
	}
    //获取输入的一个数组	
	int target;
	printf("请输入target的值:");
	scanf("%d",&target);
    //获取 target 的值	
	int j,k;
	int max=nums[1]+nums[2]+nums[3]-target,x;
    //定义数组前三个数的和与目标值的差max,以及数组中任意三个数的和与目标值的差为x 
	for(i=0;i<n-2;i++)
	{
		for(j=i+1;j<n-1;j++)
		{
			for(k=j+1;k<n;k++)
			{
			x=nums[i]+nums[j]+nums[k]-target;
            //三个循环嵌套,使得x为数组中任意三个数的和与目标值的差 
			if(abs(max)<abs(x))
			max=x;
            //将max与x的绝对值进行比较,也就是比较和target的距离,并将较大的值赋给max 
			}
		}
	}	
	printf("%d",max+target);//输出该三个数的和 
	return 0;
}

总结:比较大小问题虽然简单,但是依旧值得我们认真去学习,在许多综合性问题中,比较大小可能只是整段代码中非常小的一个点,但经过掩饰,许多人依然不会第一时间反应出来,而却想用更加复杂的方法,以至于事半功倍。同样,比大小问题也可以延伸出许多有趣的问题,比如排序等等,那便更是一个让人头秃的事了。