當我們學習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;
}
總結:比較大小問題雖然簡單,但是依舊值得我們認真去學習,在許多綜合性問題中,比較大小可能只是整段代碼中非常小的一個點,但經過掩飾,許多人依然不會第一時間反應出來,而卻想用更加復雜的方法,以至于事半功倍,同樣,比大小問題也可以延伸出許多有趣的問題,比如排序等等,那便更是一個讓人頭禿的事了,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/342077.html
標籤:其他
上一篇:【C語言深度刨析】詳解strlen與sizeof的區別及用法
下一篇:成功解決Error while trying to retrieve text for error ORA-12154
