d058: BASIC 的 SGN 函數(13)
更新時間:2016/12/20
內容:在 BASIC 語言中有一個 SGN 函數,(VB .Net 改成 Math.Sign),它會根據參數的正負號傳回 1, 0, 或 -1。請你寫一個程式來模仿這個函數,給你一個整數 n,若 n > 0 請輸出 1,若 n = 0 請輸出 0,若 n < 0 請輸出 -1。
輸入說明:
輸入只有一行,其中含有一個整數。
輸出說明:
依題目說明,請輸出 1、0、或 -1。
範例輸入:
-9
範例輸出:
-1
提示:
背景知識:
關係運算子
你能只用關係運算子及算術運算子來求出解答,而不需要用到 if 指令嗎?
想一想,再看解答~
我的解題想法:
三一律:一個數字有三種情況,不是大於0,就是小於0,要不然就是等於0。直接使用邏輯判斷if下去分類
♠使用判斷式if-else的解法
程式碼:
#include <stdio.h> int main(void){ long long int n; scanf("%lld",&n); if(n>0){ printf("%d",1); }else if(n<0){ printf("%d",-1); }else{ printf("%d",0); } return 0; }程式碼解析:
#1: | 引入標準輸入/輸出串流。 |
#2: | 主程式開始,回傳引數int,沒有參數。 |
#3: | 宣告1個長長整數(long long int)變數「n」,範圍–9,223,372,036,854,775,808 到 9,223,372,036,854,775,807。 |
#4: | 從標準輸入讀取格式化數據。讀取1個整數(%d),指定值給「n」。 |
#5: | 邏輯判斷 if 開始。判斷 數字是否大於0 (n>0) 。 |
#6: | 將格式化數據顯示到標準輸出。輸出1個整數(%d)「1」。 |
#7: | 第二個邏輯判斷 else if 。判斷 數字是否小於0 (n<0) |
#8: | 將格式化數據顯示到標準輸出。輸出1個整數(%d)「-1」。 |
#9: | 邏輯判斷 else。 |
#10: | 將格式化數據顯示到標準輸出。輸出1個整數(%d)「0」。 |
#11: | 邏輯判斷 if 結束。 |
#12: | 主程式回傳整數「0」。 |
#13: | 主程式結束。 |
輸出(n>0)的結果如果為「真」,則會輸出1;如果為「假」,則會輸出0。
輸出(n<0)的結果如果為「真」,則會輸出-1;如果為「假」,則會輸出0。
♠只用關係運算子及算術運算子的解法
程式碼:
#include <stdio.h> int main(void){ long long int n; scanf("%lld",&n); printf("%d",(n>0)-(n<0)); return 0; }程式碼解析:
#1: | 引入標準輸入/輸出串流。 |
#2: | 主程式開始,回傳引數int,沒有參數。 |
#3: | 宣告1個長長整數(long long int)變數「n」,範圍–9,223,372,036,854,775,808 到 9,223,372,036,854,775,807。 |
#4: | 從標準輸入讀取格式化數據。讀取1個長長整數(%lld),指定值給「n」。 |
#5: | 將格式化數據顯示到標準輸出。輸出1個整數(%d)「(n>0)-(n<0)」。 |
#6: | 主程式回傳整數「0」。 |
#7: | 主程式結束。 |