- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
【课後评量】
第八章【課後評量】 一、問答題 1.何謂全域變數與區域變數?試簡述之。 解答:全域變數是宣告在程式區塊與函數之外,且在宣告指令以下的所有函數及程式區塊都可以使用到該變數。宣告在主函數或副函數中的變數稱之為「區域變數」(local variable),區域變數只限於函數之中存取,離開該函數之後就失去作用。 2.為何在主程式呼叫函數之前,必須先宣告函數原型? 解答:C的程式流程是由上而下的結構設計,而編譯器在主程式的部分並不認識函數,這時候就必須在程式尚未呼叫函數時,先宣告函數的原型,告訴編譯器有此函數的存在。 3.何謂形式參數(Formal Parameter)與實際參數(Actural Parameter)? 解答:形式參數(Formal Parameter)就是在函數定義標頭中所宣告的參數,或簡稱為參數。實際參數(Actural Parameter)則是實際呼叫函數時所提供的參數,或簡稱為引數。 4.請分別說明以下是函數指標的意義。 void (*ptr)(void); int (*ptr)(int); char* (*ptr)(char*); 解答: 第1行:ptr為函數指標,而此函數本身無傳回值與引數。 第2行:ptr為函數指標,本身傳回整數值,並接受整數引數 第3行:ptr為函數指標,本身傳回字元指標,並接受字元指標作為引數。 5.請問以下程式名稱lab1後方有幾個字串?試說明之。 lab1 this is a argument1 this,is.a.argument2 this is a argument3 解答:以上程式碼表示接在程式名稱lab1後方共有六個字串,所以argc的個數一共有7個。 6.以下是定義一個用來計算梯形面積的巨集函數,並且可傳遞上底、下底與高三個引數: #define RESULT(r1,r2,h) (r1+r2)*h/2.0 請問此函數是否為一正確的定義?試申述之。 解答:不是,當第傳遞 r1、r2和h變數都加上2時,由於運算子的優先順序問題(乘法高於加法),代入數值後,會造成與數學梯形面積計算的結果不符合。解決之道就是在巨集函數定義時,將函數運算式的變數都加上括號即可,如下所示: #define RESULT(r1,r2,h) ((((r1)+(r2))*(h))/2.0 7.我們知道在#include之後使用角括號,前置處理器將至預設的系統目錄中尋找指定的檔案。請問如果您將stdio.h寫成以下的形式,會有哪些不同? #include stdio.h 解答:使用雙引號來指定檔案,則前置處理器會先尋找目前程式檔案的工作目錄中是否有指定的檔案,如果找不到,再到系統目錄(Include目錄)中尋找,因此程式仍然可以執行,不過效率上會較差。 8.C中的函數可區分為哪兩種?試說明之。 解答:C的函數可區分為系統本身提供的標準函數及使用者自行定義的自訂函數。使用標準函數只要將所使用的相關函數表頭檔(header file)含括(include)進來即可。 9.下面這兩行程式碼有何不同? const float pi = 3.14159; #define PI 3.14159 解答:不同之處在於「取代」的差別,在這兩行程式碼中,前置處理器並不會理會第一行程式碼,pi只是一個變數名稱,然而前置處理器會將PI取代為3.14159。 10.請問以下程式碼的輸出結果為何?試說明原因。 #define MUL(a) a*a int i=5; printf(“%d”, MUL(++i)); 解答:輸出結果將會是42,而不是預期的25(5*5)。造成這樣的原因,在於C編譯器將MUL(++i)展開後,變成如下的格式: printf(%d, ++i*++i); 由於(++)運算子的優先權較高,輸出的結果將是6*7。類似這種巨集方式產生的問題,在除錯上是不容易發現的。 11.某位學生進行命令列引數的練習應用,但是程式編譯時出了問題,請幫忙找出問題的所在: 01 #include stdio.h 02 int main(int argc, char* argv[]) 03 { 04 int sum; 05 if (argc == 3) 06 sum = argv[1] + argv[2]; 07 printf(%d + %d = %d\n, argv[1], argv[2], sum); 08 return 0; 09 } 解答:由命令列引數所讀入的值為字串值,不能直接用來進行加法運算,您必須使用atoi()函數將之轉換為整數值。 12.試述下列二種將檔案引入的方式
您可能关注的文档
最近下载
- 小学生心理健康教育主题班会教案.docx VIP
- 糖尿病入院记录模板.docx VIP
- soap病历中医的书写课件.ppt VIP
- V90伺服驱动器与S7-1200通过FB284进行PROFINET通信的具体方法和步骤(非常详细).docx VIP
- 体育教学论:体育教学过程PPT教学课件.pptx VIP
- DB61_T 1741-2023 矿山生态监测规范.doc VIP
- 2025年广东省湛江市中考物理试题(含答案解析).pdf VIP
- 数字技术赋能基层社会治理研究.docx VIP
- 高考语文一轮复习-- 辨析修改语序不当、搭配不当病句——抓住病症,找出病因.doc VIP
- 北京市中国人民大学附属中学2025届高三年级10月质量检测练习化学试卷+答案.pdf VIP
文档评论(0)