三個數比較大小——C語言經典題目
這道題是每一位初學C的小夥伴們的必經之路,其經典性簡直如同Hello World!
下面寫一下幾種不同的解法。
- 使用if語句
#include<stdio.h>
int main()
{
int a, b, c, max;//逗號,(大/中/普通)括號,右端需有空白字元
scanf("%d%d%d", &a, &b, &c);
if( a>b) max = a;//為了程式碼可視性高,操作符需被空白字元包圍
else max = b;
if( c>max) max = c;
printf("max=%d" , max);
return 0;
}
- 使用三目運算子
?:條件運算子,使用方法是<表示式1> ?<表示式2> :<表示式3>,意思是滿足表示式1就執行表示式2,否則執行表示式3。
#include<stdio.h>
int main()
{
int a, b, c, max;
scanf("%d%d%d", &a, &b, &c);
max = a>b ? a:b;
max = c>max ? c:max;
printf("max=%d", max);
return 0 ;
}
-
a>b ? (max = a) : (max = b); c>max ? (max = c) : max ;
-
max = ( (a>b ? a:b) > c) ? (a>b ? a:b) : c;
以上三種方法均可以比較出三個數的最大值,區別在於例子中的方法是使用的賦值語句,而替代方法1是運用的標準條件運算,後面的替代方法2則是以賦值語句為主的兩重(條件運算的)巢狀。
補充:替代方法2不能寫成max = ( (a>b?a:b) > c ) ? ():c;
。
因為在三目運算子?的前置條件中(a>b?a:b)
的運算結果是沒有分配儲存地址的,只是開闢了臨時地址(理解成快取也行,程式結束便清空),這就導致後面的()
- 使用max函式——if語句
#include<stdio.h>
int main()
{
int a, b, c, max;
int Max( int x, int y, int z);//宣告自定義函式Max
scanf("%d%d%d", &a, &b, &c);
max = Max( a,b,c);
printf("max=%d", max);
return 0;
}
int Max(int x, int y, int z)
{
int max;//不同的函式中可以使用同名(區域性)變數
if( x>y) max = x;
else max = y;
if( z>max) max = z;
return max;
}
- 使用max函式——三目運算子
#include<stdio.h>
int main()
{
int a, b, c;
int Max( int x, int y);
scanf("%d%d%d", &a, &b, &c);
printf("max=%d", Max(Max(a,b),c) );//呼叫兩重Max函式巢狀
return 0;
}
int Max(int x, int y)
{
return x>y?x:y;
}
其中printf
語句裡的兩重函式巢狀不能寫成Max( (a,b) ,c)
,因為這個(a,b)
並不符合自定義Max函式的傳參要求。
自定義Max函式int Max(int x, int y)
的形參為整型變數int x, int y
,所以在呼叫Max函式時,需要傳入符合定義要求的int型引數,那麼顯然這個(a,b)
並不是int型引數,它是一個不屬於任何型別的不完整表示式,其沒有實際意義。
不過,兩重Max函式巢狀寫成Max( Max(a,b) ,c)
是符合要求的,因為Max(a,b)
的函式返回值符合int x
的傳參要求,究其原因是其內部return
語句中返回的x>y?x:y
是一個int型值。
- 使用指標
#include<stdio.h>
int main()
{
int a, b, c;
int Max( int x, int y);
int (*p)(int, int) = &Max;//對指標p賦初值為Max的地址,&可省略
scanf("%d%d%d", &a, &b, &c);
printf("max=%d", p(p(a,b) ,c) );
return 0;
}
int Max(int x, int y)
{
return x>y?x:y;
}
這個有關於數字比較之類的問題,在C語言中是非常經典的一塊,於是寫了幾種方法來開拓一下自己思路。也希望可以通過對這個題目的不同解法,來為之後像回溯和指標之類的知識稍微做一下鋪墊,嘿,大家一起來感受一下。
總之,我覺得吧,像這種O(1)的小小程式碼片兒,要是閒的沒事兒或閒情所致,那還是可以追求一下更多的不同解答方法啦。^ _ ^
相關推薦
三個數比較大小——C語言經典題目
這道題是每一位初學C的小夥伴們的必經之路,其經典性簡直如同Hello World! 下面寫一下幾種不同的解法。 使用if語句 #include<stdio.h> int main() { int a, b, c, max;//逗號,(大/中
輸入三個數比較大小
nbsp lap style pri 比較大小 one closed put code 1 num1 = input("Num1:") 2 num2 = input("Num2:") 3 num3 = input("Num3:") 4 5 if num1&g
三個數比較大小(非陣列)
public static void sort(int a,int b,int c) { if (a > b) { if (c >
Java鍵盤錄入三個數比較大小
/* 錄入三個資料,獲取三個數中的最大值 */ import java.util.Scanner; class ScannerTest1{ public static void ma
C語言經典題目:百錢買百雞
百錢買百雞問題 公元錢五世紀,我國古代數學家張丘建在《算經》一書中提出了“百雞問題”:雞翁一值錢五,雞母一值錢三,雞雛三值錢一。百錢買百雞,問雞翁、雞母、雞雛各幾何? 分析:假設公雞有x只,母雞y只,
C語言作業1-順序選擇結構設計-3三個數比較出最大值
C語言作業1-順序選擇結構設計-3三個數比較出最大值 問題描述: 輸入並執行下面程式: 三個整數a,b,c,由鍵盤輸入這三個數,求三個數中最大的值。 程式碼實現: #include<stdio.h> #include<stdlib.h> int mai
C++:比較三個數的大小,找出最大數
#include<stdio.h> void main() { int a,b,c,t; printf("請輸入三個整數並以回車結束:\n"); scanf("%d%d%d",&a,&b,
c++中比較三個數的大小
/*列出兩個數。比較兩個數的大小 */ #include<iostream> #include<stdlib.h> using namespace std; int main() { int x,y; cout<<"Enter x
C語言經典演算法題目——列印水仙花數
“水仙花”數指的是一個3位數,它的每個位數字的三次冪之和等於它本身 舉一個例子: 153=1x1x1+5x5x5+3x3x3 我們先來看看執行的結果 下面是程式實現的程式碼 #include<stdio.h> int main() {
經典C語言筆試題目
來源:https://blog.csdn.net/qq_36032963/article/details/64479469題目來源:1、中興、華為、慧通、英華達、微軟亞洲技術中心等中外企業面試題目;2、C 語言面試寶典(林銳《高質量程式設計第三版》)。說明:1、部分C 語言面
C語言——經典的兩個數互換的程式——更好的理解指標!!!
# include<stdio.h> int main(void) { void huhuan(int ,int); void huhuan_1(int *,int *);
C語言經典演算法100例-030-判斷一個數是否為迴文數
所謂迴文數,即是正序與逆序相等的一個數,如121,12321,10501等。寫程式判斷輸入的數是否為迴文數。 1.分析:表面上看,我們似乎要這麼做,把各個位分離,然後把第一個數跟最後一個數比較,第二個跟倒數第二個....等等。注意,這樣做太複雜了,迴文數的條件是正序等於逆序
100 條經典C語言筆試題目(轉)
本文轉自:https://blog.csdn.net/yanghonker/article/details/40118615100 條經典C語言筆試題目題目來源:1、中興、華為、慧通、英華達、微軟亞洲技術中心等中外企業面試題目;2、C 語言面試寶典(林銳《高質量程式設計第三版
C語言經典例子,求兩個數的最大公約數和最小公倍數
求兩個數的最大公約數,我們首先可以想到輾轉相除法,即用最大的數除以小的數,得到以後的餘數,再用上次較小的數繼續除以餘數,直到餘數為0.最後剩下的最小數即為最大公約數。 例如,16,10,求最大公約數。 16%10=4(餘數) 10
4比較三個數的大小輸出最大的值並從小到大排序輸出
public static void main(String[] args) { System.out.println("請輸入三個數"); Scanner scanner=new Scanner(System.in); int a=scan
C語言經典例題100道 第三題
題目 題目:一個整數,它加上100後是一個完全平方數,再加上268又是一個完全平方數,請問該數是多少? #include<stdio.h> #include<math.h>
c語言經典題演算法1--用輾轉相除法求兩個數的最大公約數
題目: 用輾轉相除法求兩個數的最大公約數 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.
VB作業之比較三個數的大小
下面是我編寫的程式程式碼: Private Sub Command1_Click() Dim A As Integer Dim B As Integer Dim C As Integer Dim max As Integer A = Val(T
js的條件運算子--三元運算(比較三個數的大小)
<!DOCTYPE html> <html> &
C語言經典實例 php版(僅練習用)
技術分享 滿足 重復數 -s http for 語言 ++ tro 題目:有1、2、3、4個數字,能組成多少個互不相同且無重復數字的三位數?都是多少? 程序分析:可填在百位、十位、個位的數字都是1、2、3、4。組成所有的排列後再去 掉不滿足條件的排列。 代碼: 1 for