C Primer Plus 第02章 C語言概述 學習筆記及復習題、編程題解答

      網友投稿 969 2022-05-29

      第二章 C語言概述

      1. 解析第一個C程序

      一個基本的程序結構包含如下部分:

      #include // 包含另一個文件,C編譯器軟件包的標準部分,提供鍵盤輸入和屏幕輸出的支持。 /**#include 指令和頭文件 * 是一條C預處理器指令(preprocessor directive),C編譯器在編譯前會對源代碼做一些準備,即預處理(preprocessing)。 * * stdio.h 文件的含義是標準輸入/輸出頭文件。通常,在C程序頂部的信息集合被稱為頭文件(header)。 */ int main(void) /*一個簡單的C程序*/ /** main()函數 * C程序一定要從main()函數開始執行,除了main()函數,可以任意命名其他函數。圓括號是用于識別main()是一個函數。 */ { /** 花括號、函數體和塊 * { * ... * } * * 所有的C函數都使用花括號標記函數體的開始和結束。 * 不能省略 */ int num; /**聲明一個名為num的變量,int是C語言的一個關鍵字(keyword),表示一種基本的C語言數據類型, * num是一個標識符(identifier),也就是一個變量、函數或其他實體的名稱。 * */ num = 7; /*為num賦一個值*/ printf("I'm a simple "); /*使用printf()函數*/ printf("Computer .\n"); printf("My favorite number is %d . \n",num); /*換行符是一個轉義序列,轉義序列用于代碼難以表示或無法輸入的字符,如 \t 代表 Tab鍵*/ return 0; } //結束

      程序由一個或多個函數組成,必須有main() 函數。

      函數由 函數頭 和 函數體 組成。

      函數頭包含函數名、傳入函數的信息類型和函數的返回類型。

      函數體被花括號括起來,由一系列語句、聲明組成。

      2. 提高程序可讀性的技巧

      使用有意義的變量名和函數名

      C Primer Plus 第02章 C語言概述 學習筆記及復習題、編程題解答

      使用注釋(模塊太大時備注說明)

      在函數中用空行分隔概念上的多個部分。

      每條語句各占一行

      分行易讀,配合分號,可以更好確定語句開始和結束。

      3. 調試程序

      Bug:程序的錯誤

      調試(Debug):找出并修正程序錯誤的過程。

      不遵循C語言的規則,把有效的C符號放在正確的位置。

      一般使用 編譯器(gcc) 時會報錯,一般情況下,報錯的位置比實際錯誤位置要滯后一行。

      編譯器檢測不到語義錯誤,因為這類錯誤未違反C語言的規則。

      遵循C規則,但結果不正確的錯誤屬于語義錯誤。

      程序狀態:在程序的執行過程中,某給定點上所有變量值的集合。

      跟蹤程序狀態的3個方法

      自己模擬計算機逐步執行程序。

      小部分程序實用,大型程序不適合。

      在程序中的關鍵點插入額外的printf() 語句,以監視制定變量值的變化。

      使用調試器

      Linux環境中,C和C++一般使用GDB調試器。

      4. 關鍵字和保留標識符

      關鍵字由于特殊的含義,故不能用作標識符。

      如果使用關鍵字不當(如,關鍵字用作變量名),編譯器會將其視為語法錯誤。

      保留標識符包括以下劃線字符開頭的標識符和標準庫函數名,如printf() 。

      5. 復習題

      1.C語言的基本模塊是什么?

      基本模塊和用戶自定義模塊的都稱為函數。

      2.什么是語法錯誤和語義錯誤?

      語法錯誤:違反組成語句或程序的語法規則。例:printf "hello world";

      語義錯誤:含義錯誤。例:n3 = n2*n

      Indiana Sloth編寫了下面的程序,并征求你的意見,請幫助他評定。

      #include stdio.h int main(void) ( int s s:=56; printf(There are s weeks in a year.); return 0;

      程序錯誤是無法正常運行的。正確的修改如下:

      #include int main(void) { int s; s = 56; // 變量賦值方式不正確 printf("There are %d weeks int a year.",s); return 0; }

      假設下面的4個例子都是完整程序中的一部分,他們都輸出什么結果?

      a. printf("Baa Baa Black Sheep."); /*輸出結果為:Baa Baa Black Sheep.Have you any wool?*/ printf("Have you any wool?\n"); b. printf("Begone!\nO creature of lard!\n"); /*輸出結果為:Begone!此處換行 O creature of lard!*/ c. printf("What?\nNo/nfish?\n"); /*輸出結果為:What? 此處換行 No/nfish?*/ d. int num; num = 2; printf("%d + %d = %d",num,num,num+num); /*輸出結果為:2 + 2 = 4*/

      在main、int、function、char、=中,哪些是C語言的關鍵字?

      關鍵字為:main、int char。

      如何以下面的格式輸出變量words和lines的值(例,3020和350代表兩個變量的值)?

      There were 3020 words and 350 lines

      #include int main(void) { int words,lines; words = 3020; lines = 350; printf("There were %d words and %d lines\n",words,lines); return 0; }

      考慮下面的程序

      #include int main(void) { int a,b; a = 5; b = 2; /*第 7 行*/ b = a; /*第 8 行*/ a = b; /*第 9 行*/ printf("%d %d \n",b,a); return 0; }

      請問,在執行完第7、第8、第9行后,程序的狀態分別是什么?

      執行完第7行,a = 5,b = 2;

      執行完第8行,a = 5,b = 5

      執行完第9行,a = 5,b = 5

      考慮下面的程序

      #include int main(void) { int x,y; x = 10; y = 5; /*第 7 行*/ y = x + y; /*第 8 行*/ x = x * y; /*第 9 行*/ printf("%d %d \n",x,y); return 0; }

      請問,在執行完第7、第8、第9行后,程序的狀態分別是什么?

      執行第7行后,x = 10,y = 5

      執行第8行后,x = 10,y = 15

      執行第9行后,x = 150,y = 15

      6. 編程練習題

      編寫一個程序,調用一次printf()函數,把你的姓名打印在一行,再調用一次printf()函數,把你的姓名打印在兩行。然后,再調用兩次printf()函數,把你的姓名打印在一行。打印形式如下:

      Soler HO 第一次的內容

      Soler 第二次打印

      HO 第三次打印

      Soler HO 第三次 和第四次 打印

      #include int main(void) { printf("my name is : Soler HO\n");/*第一次打印內容*/ printf("my first name is : Soler \n");/*第二次打印 ---- 名字*/ printf("my last name is : HO \n"); /*第三次打印 ---- 姓*/ printf("total name is : Soler HO \n"); /*第三次和第四次打印*/ return 0; }

      編寫一個程序,打印你的姓名和地址

      #include int main(void) { char name[] = "Soler HO"; char address[] = "Shanghai"; printf("my name is %s , Address is %s .\n",name,address); return 0; }

      編寫一個程序,把你的年齡轉換成天數,并顯示這兩個值,不用考慮閏年的問題

      /*編寫一個程序,把你的年齡轉換成天數,并顯示這兩個值,不用考慮閏年的問題*/ #include int main(void) { int age,days; int oneYear = 365; /*此處默認一年為365天*/ printf("please input your age : \n"); scanf("%d",&age); days = age * oneYear; printf("you live %d days\n",days); return 0; }

      編寫一個程序,生成以下輸出:

      For he's a jolly good fellow! For he's a jolly good fellow! For he's a jolly good fellow! Which nobody can deny!

      除了main()函數以外,該程序還要調用兩個自定義函數:一個名為jolly(),用于打印前3條消息,調用一次打印一條:另一個函數名為deny(),打印最后一條消息。

      #include void jolly(void); void deny(void); int main(void) { for(int i=1;i<=3;i++) jolly(); deny(); } void jolly(void) { printf("For He's a jolly good fellow!\n"); } void deny(void) { printf("which nobody can deny!\n"); }

      編寫一個程序,生成以下輸出:

      Brazil, Russia, India, China India, China, Brazil, Russia

      除了main()以外,該程序還要調用兩個自定義函數:一個名為br(),調用一次打印一次"Brazil,Russia";另一個名為ic(),調用一次打印一次"India,China"。其他內容在main()函數中完成。

      /*編程練習題05*/ #include void br(void); void ic(void); int main(void) { br(); printf(","); ic(); printf("\n"); ic(); printf(",\n"); br(); printf("\n"); return 0; } void br(void) { printf("Brazil,Russia"); } void ic(void) { printf("India,China"); }

      編寫一個程序,創建一個整型變量toes,并將toes設置為10.程序中還要計算toes的兩倍和toes的平方。該程序應打印3個值,并分別描述以示區分。

      #include int main(void) { int toes = 10; int twotimes = 2 * toes; int square = toes * toes; printf("origin toes is %d \n",toes); printf("double toes is %d \n",twotimes); printf("square toes is %d \n",square); return 0; }

      編寫一個程序,生成以下格式的輸出:

      Smile!Smile!Smile! Smile!Smile! Smile!

      該程序要定義一個函數,該函數要被調用一次打印一次“Smile!”,根據程序的需要使用該函數。

      #include void smile(void); int main(void) { /*具體優化后續重新優化*/ for(int i = 3;i>=1;i--) smile(); printf("\n"); for(int i = 1;i<3;i++) smile(); printf("\n"); smile(); printf("\n"); return 0; } void smile(void) { printf("Smile!"); }

      在C語言中,函數可以調用另一個函數。編寫一個程序,調用一個名為one_three()的函數。

      該函數在一行打印單詞"one",再調用第2個函數two(),然后在另一行打印單詞“three”。

      two()函數在一行顯示單詞“two”。main()函數在調用one_three()函數前要打印短語“starting now:”,

      并在調用完畢后顯示短語“done!”。因此,該程序的輸出應如下所示:

      starting now: one two three done!

      #include void one_three(void); void two(void); int main(void) { printf("starting Now : \n"); one_three(); /*函數嵌套*/ printf("Done!\n"); return 0; } void one_three(void) { printf("one \n"); two(); } void two(void) { printf("two\n"); printf("three\n"); }

      C 語言 數據結構

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:MongoDB快速入門之常用命令
      下一篇:canvas炒雞簡單的貪吃蛇效果?υ? html+css+js
      相關文章
      亚洲成a人片在线观看日本麻豆 | 中文字幕不卡亚洲| 久久综合亚洲色HEZYO社区| 亚洲国产av玩弄放荡人妇| 亚洲国产综合专区电影在线| 亚洲成AⅤ人影院在线观看| 精品亚洲成a人在线观看| 亚洲另类春色国产精品| 亚洲中文字幕第一页在线| 国产精品亚洲lv粉色| 亚洲偷自拍另类图片二区| 久久精品国产亚洲av日韩| 亚洲一区中文字幕久久| 奇米影视亚洲春色| 中文字幕不卡亚洲| 久久被窝电影亚洲爽爽爽| 亚洲成a人片在线观看久| 亚洲国产精品一区二区九九| 亚洲熟妇久久精品| 亚洲av纯肉无码精品动漫| 亚洲天堂2016| 亚洲综合小说久久另类区| 亚洲Av永久无码精品三区在线| 亚洲综合另类小说色区色噜噜| 亚洲av日韩综合一区久热| 午夜在线亚洲男人午在线| 亚洲男人的天堂网站| 亚洲三级中文字幕| 久久精品国产亚洲AV无码麻豆| 亚洲美女精品视频| 亚洲性线免费观看视频成熟| 亚洲精品电影在线| 国产精品亚洲自在线播放页码| 亚洲免费网站观看视频| 国产亚洲精品2021自在线| 伊人久久亚洲综合| 亚洲天天在线日亚洲洲精| 亚洲免费电影网站| 亚洲av无码一区二区三区四区| 亚洲综合精品网站在线观看| 亚洲欧洲日产国产综合网|