当我们学习c语言一段时间后,我们第一个的问题可能就是比较大小问题,许多人都觉的它十分的简单。但是它也综合的考察了我们对于各种基本语句的综合运用,还会延伸出许多其他有趣的问题 那么我们今天就来整理一下在学习中我所遇到的比较大小问题。
一、
首先,当然是最简单的2个数比较大小问题,输入两个数,并输出较大的那一个;很自然我们就想到了if语句(为了方便,我们先不考虑两数相等的情况)
#includeint main() { int a,b; printf("请输入两个数:"); scanf("%d %d",&a,&b); if(a>b) printf("%d",a); else printf("%d",b); return 0; }
还有其他的方法吗?
#includeint 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语句。
代码如下
#includeint main() { int a,b,c; int max; scanf("%d%d%d",&a,&b,&c); max=a; if(max 利用这个思路继续思考,如果是n个数呢?这下我们面临的有两个问题,如何存放这些数,以及如何处理简化大量的判断语句。那么我们就会用到数组和循环了。
代码如下
#includeint 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 是不是感觉开始复杂了呢?
三、
经过以上的训练,现在我们来看一个比较综合的问题
给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的 三个整数,使得它们的和与 target 最不接近。返回这三个数的和。假定每组输 入只存在唯一答案。 例如,给定数组 nums = [-1,2,1,-4], 和 target = 1. 与 target 最不接近的三个数的和为 -4 (-1+1-4=-3)
思路:
第一步 首先我们要获取一个数组和目标值,并将其储存起来。
第二步 三个数的和与目标值的差是否接近我们可以用绝对值来衡量
第三步 利用之前的思路,定义max,并不断将更大的值赋值给max
下面是答案
#include#include 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 总结:比较大小问题虽然简单,但是依旧值得我们认真去学习,在许多综合性问题中,比较大小可能只是整段代码中非常小的一个点,但经过掩饰,许多人依然不会第一时间反应出来,而却想用更加复杂的方法,以至于事半功倍。同样,比大小问题也可以延伸出许多有趣的问题,比如排序等等,那便更是一个让人头秃的事了。



