Publicité
Publicité

Contenu connexe

Publicité

Dernier(20)

Publicité

C語言標準輸出入函式

  1. 標準輸出入函式  C程式框架  #include前置處理指令  main()函式  使用 printf() 函式  使用 scanf() 函式  實作練習 - 星座查詢程式 Revised on July 24, 2021
  2. Make each day count #include <stdio.h> void main(int argc, char** argv[]){ printf("Hello, C language!n"); printf("2021/4/15"); return 0; } C程式框架 2
  3. Make each day count  指示前置處理器 (preprocessor) 載入指定表頭檔⼀起編譯  程式如有使用到C語言標準輸出函式 (如 printf ) 或標準輸入函式 (如 scanf ) 時,其函式原型宣告就在 stdio.h 檔中  電腦系統通常標準輸入為鍵盤,標準輸出為螢幕 #include前置處理指令 1/2 3 函式原型宣告在stdio.h中
  4. Make each day count  #include <stdio.h>  會到INCLUDE目錄下尋找表頭檔  #include "myfunc.h"  會到C程式檔目錄下尋找表頭檔 #include前置處理指令 2/2 4
  5. Make each day count  依據輸入之生日,回覆其星座名稱 星座查詢程式 1/2 5 生日區間 星座 1/21 ~ 2/19 水瓶座 2/20 ~ 3/20 雙魚座 3/21 ~ 4/19 白羊座 4/20 ~ 5/20 金牛座 5/21 ~ 6/21 雙子座 6/22 ~ 7/22 巨蟹座 7/23 ~ 8/22 獅子座 8/23 ~ 9/22 處女座 9/23 ~ 10/23 天秤座 10/24 ~ 11/21 天蝎座 11/22 ~ 12/20 射手座 12/21 ~ 1/20 摩羯座
  6. Make each day count //wu, shyishiou @ 2021/6/14 #include <stdio.h> int main(int argc, char *argv[]) { int month, day, index; char* horoscope[13] = {"摩羯座", "水瓶座", "雙魚座", "白羊座", "金牛座", "雙子座", "巨蟹座", "獅子座", "處女座", "天秤座", "天蝎座", "射手座", "摩羯座"}; int period[12] = {21, 20, 21, 20, 21, 22, 23, 23, 23, 24, 22, 21}; printf("%s您好,n請輸入出生月份:", argv[1]); scanf("%d", &month); printf("請輸入出生日期:"); scanf("%d", &day); index = (month - 1) + day / period[month-1]; printf("%s的星座是%sn", argv[1], horoscope[index]); return 0; } 星座查詢程式 2/2 6
  7. Make each day count  C語言有二種註解 (comments) 方式  單行註解,從「//」符號後的文字內容 // wu,shyishiou @ 2021/6/14  多行註解,從「/*」符號開始到「*/」符號結束之間的文字內容 /* 星座查詢程式 輸入個人生日之月份及日期,即顯示所屬星座名稱 wu,shyishiou @ 2021/6/14 */ 程式註解 7
  8. Make each day count  main() 稱為主程式 (第⼀個被執行),C 專案程式都必須有⼀個 main() 函式 (也只能有⼀個)。main() 前面的 int 代表 main() 函式的執行結果 會以整數值 (Integer) 傳回給呼叫它的程式。資料型別詳見單元 3 main()函式 1/2 8 //wu, shyishiou @ 2021/6/14 #include <stdio.h> int main(int argc, char *argv[]) { int month, day, index; char* horoscope[13]={"摩羯座", "水瓶座", "雙魚座", "白羊座", "金牛座", "雙子座", "巨蟹座", "獅子座", "處女座", "天秤座", "天蝎座", "射手座", "摩羯座"}; int period[12]={21, 20, 21, 20, 21, 22, 23, 23, 23, 24, 22, 21}; printf("%s您好,n請輸入出生月份:", argv[1]); scanf("%d", &month); printf("請輸入出生日期:"); scanf("%d", &day); index = (month-1) + day/period[month-1]; printf("%s的星座是%sn", argv[1], horoscope[index]); return 0; }
  9. Make each day count  int main(int argc, char** argv) {}  argv 陣列記錄了在命令列中所輸入的每⼀個參數,其中第⼀個元素是程式 本身的名稱,之後就是執行時所輸入的各個參數,其排列順序就跟輸入時 的順序相同  argc 是⼀個整數,其值就是 argv 陣列的⻑度  { } 內為⼀個程式區塊 main()函式 2/2 9
  10. Make each day count  選單命令 Execute> Paramaters… 設定執行參數 10
  11. Make each day count  變數用來記錄程式執行過程中的運算資料  變數必須先宣告,才可在程式中使用。變數宣告詳見單元 3,其中 heroscope 及 period 為陣列變數,詳見單元 7 變數宣告 11 //wu, shyishiou @ 2021/6/14 #include <stdio.h> int main(int argc, char *argv[]) { int month, day, index; char* horoscope[13]={"摩羯座", "水瓶座", "雙魚座", "白羊座", "金牛座", "雙子座", "巨蟹座", "獅子座", "處女座", "天秤座", "天蝎座", "射手座", "摩羯座"}; int period[12]={21, 20, 21, 20, 21, 22, 23, 23, 23, 24, 22, 21}; printf("%s您好,n請輸入出生月份:", argv[1]); scanf("%d", &month); printf("請輸入出生日期:"); scanf("%d", &day); index = (month-1) + day/period[month-1]; printf("%s的星座是%sn", argv[1], horoscope[index]); return 0; }
  12. Make each day count  指令敘述是程式核心,必須依據程式的設計目標,組合相關合適的指 令碼來完成程式功能 指令敘述 1/2 12 //wu, shyishiou @ 2021/6/14 #include <stdio.h> int main(int argc, char *argv[]) { int month, day, index; char* horoscope[13] = {"摩羯座", "水瓶座", "雙魚座", "白羊座", "金牛座", "雙子座", "巨蟹座", "獅子座", "處女座", "天秤座", "天蝎座", "射手座", "摩羯座"}; int period[12] = {21, 20, 21, 20, 21, 22, 23, 23, 23, 24, 22, 21}; printf("%s您好,n請輸入出生月份:", argv[1]); scanf("%d", &month); printf("請輸入出生日期:"); scanf("%d", &day); index = (month - 1) + day / period[month-1]; printf("%s的星座是%sn", argv[1], horoscope[index]); return 0; }
  13. Make each day count  C 語言區分大小寫,不論變數或指令,不同大小寫組合被視為不同  printf ≠ Printf  每個指令敘述必須以分號 ; 結尾,使用 Enter 換行  程式區塊內縮排版 (更容易檢視/查核程式碼)  大括弧 { }、中括弧 [ ]、小括弧 ( )、角括弧 <>、雙引號 " "、單引號 ' ' 都必須成對  不可使用中文符號 指令敘述 2/2 13
  14. Make each day count  printf() 函數用來將訊息輸出至主控台 (標準輸出),語法如下: printf ("格式字串", 引數1, 引數2, 引數3, …);  格式字串必須置於雙引號內,由⼀般字串、轉換字串、逸出序列三部份組 合而成  ⼀般字串為任何可顯示的字元組合,如英文字⺟、數字、符號及中文字  轉換字串目的是在⼀般字串的指定位置插入指定的資料,以便資料可以套 用格式輸出  轉換字串由 % 字元與型別字元組合而成,該轉換字串位置用來插入來自引 數串列的對應資料  當格式字串內需要輸出⼀些特殊控制字元,就要使用逸出序列 printf()函數 1/5 14
  15. Make each day count  轉換字串對照表 printf()函數 2/5 15 資料型別 %型別字元 輸出值 字元 %c 以字元方式輸出 字串 %s 字串輸出 整數 %d 含正負號10 進位整數輸出 %o 無正負號 8 進位整數方式輸出 %u 無正負號10 進位整數輸出 %x, %X 以無正負號 16 進位方式輸出 %l 以長整數顯示,可以使用%ld、%lu、%lo、%lx四種方式 浮點數 %f 數值含小數來顯示,預設小數位數有6位 %e 以[-]m.nnnnnne[+]xxx科學記號方式顯示,n位數預設6位 %E 以[-]m.nnnnnnE[+]xxx科學記號方式顯示,n位數預設6位 %g 以輸入值的位數決定使用 %f 或 %e 輸出,若整數位數為7 位以上,使用科學記號 %G 以輸入值的位數決定使用 %f 或 %E 輸出,若整數位數為7 位以上,使用科學記號
  16. Make each day count  在 % 字元之後可加上旗標字元  - 使輸出資料靠左對齊  + 輸出正值時,加上正號作為其前置詞  0 在數值前補0,直到達到最小寬度為止  空格 blank (' ') 輸出值正值時,則在該輸出值前面加上空白字元。如果空 白字元及+旗標同時出現,則會略過空白字元  # 輸出八進制時自動加上0前置詞,輸出十六進制時自動加上 0x 或 0X 前置詞  % 顯示%百分比符號  旗標字元後還可加上寬度規格  m.n m 顯示資料最小寬度,n 小數點位數 (自動 4 捨 5 入) printf()函數 3/5 16
  17. Make each day count printf("顯示字元:%cn", 'A'); printf("顯示字元編碼:%dn", 'A'); printf("顯示字元:%cn", 65); printf("顯示十進位整數:%+dn", 15); printf("顯示十進位整數:%dn", -15); printf("顯示八進位整數 %#on", 15); printf("顯示十六進位整數:%#xn", 15); printf("顯示浮點數:%fn", 123.45678); printf("顯示浮點數:%8.3fn", 123.45678); printf("顯示科學記號 %En", 0.001234); printf("顯示科學記號 %en", 0.001234); printf()函數 4/5 17
  18. Make each day count  逸出序列是由「」及特殊控制字元所組成,用來在輸出的格式字串 內顯示⼀些特殊字元 printf("Say "Hello!""); printf("Say "Hello!""); printf()函數 5/5 18 Escape逸出字元 說明 b backspace倒退鍵,會由目前游標所在位置向左刪除一個字元 f form feed換頁字元 n line feed換行或NL (New Line) 新行字元 r carriage return移到行首,會刪除掉該行游標所在位置前面的所有字元 t 水平跳格,每個間隔為8個字元 ' 「'」單引號 " 「"」雙引號 「」符號 ? 「?」問號 ooo 輸出字元碼為8進制ooo之字元,例如101為'A' xhh 輸出字元碼為16進制hh之字元,例如x41為'A' 會產生語法錯誤:[Error] expected ')' before 'Hello'
  19. Make each day count  scanf() 函式用來從標準輸入讀取資料,並搭配格式描述字元與 & 取址 運算子將所讀取之資料指定給變數,語法如下: scanf ("格式字串", &變數1, &變數2, &變數3, …);  格式字元的個數與資料型別必須與變數位址引數⼀致  要輸入兩個以上資料時,使用空白鍵分隔 scanf()函式 1/2 19 格式字元 輸出值 %c 輸入單一字元,不需使用「'」單引號括起 %d 輸入沒有小數的整數值 %ld 輸入長整數值 %f 輸入擁有小數的浮點數值 %lf 輸入擁有小數的倍精準浮點數值 %s 輸入字串,不需使用「"」雙引號括起,字串是使用空白字元來 分隔
  20. Make each day count int num1, num2; printf("輸入第⼀個整數n"); scanf("%d", &num1); printf("輸入第二個整數n"); scanf("%d", &num2); printf("%d + %d = %dn", num1, num2, num1+num2); printf("輸入二個整數(使用空白鍵分隔)n"); scanf("%d %d", &num1, &num2); printf("%d + %d = %dn", num1, num2, num1+num2); scanf()函式 2/2 20
  21. Make each day count  C 語言是⼀種自由格式 (free-format) 程式語言,撰寫 C 程式碼時可以 自由編排程式碼來加上空白字元,或在必要時縮排或換行  下列二組 C 程式碼是相同的,為了易讀性,建議遵照⼀般習慣用法, 每個指令敘述換行,並將程式區塊向內縮排4個空白字元 #include <stdio.h> int main(int argc, char* argv[]) { printf("Hello world!n"); return 0; } #include <stdio.h> int main(int argc, char* argv[]) {printf("Hello world!n"); return 0;} C程式碼編排 21
  22. Make each day count  使用 Dev C++ 建立 C 程式專案  專案名稱:學號_2  編輯以下程式碼 (星座特質文字可搜尋網頁,自行更換) //wu, shyishiou @ 2021/6/14 #include <stdio.h> int main(int argc, char *argv[]) { int month, day, index; char* horoscope[13]={"摩羯座", "水瓶座", "雙魚座", "白羊座", "金牛座", "雙子座", "巨蟹座", "獅子座", "處女座", "天秤座", "天蝎座", "射手座", "摩羯座"}; int period[12]={21, 20, 21, 20, 21, 22, 23, 23, 23, 24, 22, 21}; char* personality[13]={ "刻苦耐勞,不屈不撓,克勤克儉,工作全力以赴,但理解力、悟性及反應力差", "追求真理,崇尚自由且充滿人道主義,待人親切但不深交,充滿智慧及前瞻性的眼光,但缺乏熱 心,是⼀個博愛主義者,崇尚自由兼具理性與冷淡,不按牌理出牌", "感情異常豐富,浪漫多情且心地仁慈、性格溫柔,富有直覺性和藝術性,肯自我犧牲,但性格多 變,意志也不堅定,常受旁人左右而不易做出正確的判斷", 實作練習 1/4 22
  23. Make each day count "坦白率真,思想開放,行為保守,是理想主義者,但卻有⼀顆不安定的心。熱愛自由,開朗活潑, 精力旺盛,富有挑戰性,由於過於直率,容易得罪人。脾氣急躁,缺乏耐心", "腳踏實地,喜歡追求感官的刺激,偏重於物質取向,外表溫馴,但內心充滿了欲望。個性沉穩, 值得信賴,但缺乏彈性,有執拗脾氣", "足智多謀,活潑開朗,口才好,不但富於幽默感,而且好奇心旺盛,又喜歡社交,所以人緣佳。 通常是多才多藝,但比較敏感、善變,略帶神經質,是典型的雙重性格", "善解人意,個性保守,溫和含蓄,善於照顧他人,給人溫暖安全的感覺,但不善於表達自己內心 的感受,比較敏感,情感脆弱,巨蟹座的軟心腸在12星座中是數⼀數二的", "王者本色,喜愛交際,重朋友,個性豪爽,有強大的領導能力,並且具有能激發人心的氣質,經 常是團體中的焦點人物。但生性奢華,愛揮霍,剛愎自用,自以為是,喜歡掌握權力,不願受人控制", "優雅、敏感、純真、有潔癖,做事計劃周詳,知識豐富,追求完美且事事小心,害羞、內向略帶 神經質,偶而會吹毛求疵", "天生貴族,儀態優雅,冷靜多謀,凡事保持中庸態度,為人處事公正,擁有良好的領悟力、理解 力及邏輯思維。但依賴心強,有逃避現實的傾向", "富有性感魅力,具有敏銳的感覺,個性堅強,做事全力以赴,外表冷漠神秘,內心熾熱;是⼀個 自戀的人,凡事講求神秘,不讓別人看清自己。他們的嫉妒心和獨占欲都很強", "天生酷愛自由,具有貴族氣質,為人慷慨,待人友善,打扮得體,言行高雅,個性樂觀活潑,但 過度崇尚自由,喜歡刺激,用情不專,缺乏耐性", "刻苦耐勞,不屈不撓,克勤克儉,工作全力以赴,但理解力、悟性及反應力差" }; 實作練習 2/4 23
  24. Make each day count printf("%s您好,n請輸入出生月份:", argv[1]); scanf("%d", &month); printf("請輸入出生日期:"); scanf("%d", &day); index = (month-1)+ day/period[month-1]; printf("%s的星座是%sn", argv[1], horoscope[index]); printf("%s", personality[index]); return 0; } 實作練習 3/4 24
  25. Make each day count  功能表命令 Execute/Parameters…,設定程式執行參數  輸入個人姓名  F11 編譯執行程式,輸入個人生日測試程式 實作練習 4/4 25
Publicité