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