1. 程式人生 > >三個數比較大小——C語言經典題目

三個數比較大小——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

C語言經典實例 php版(僅練習用)

技術分享 滿足 重復數 -s http for 語言 ++ tro 題目:有1、2、3、4個數字,能組成多少個互不相同且無重復數字的三位數?都是多少? 程序分析:可填在百位、十位、個位的數字都是1、2、3、4。組成所有的排列後再去 掉不滿足條件的排列。 代碼: 1 for