版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、C語(yǔ)言課程簡(jiǎn)介課程簡(jiǎn)介C語(yǔ)言是一門面向本科一年級(jí)學(xué)生的專業(yè)通識(shí)課,以信息與智能科學(xué)導(dǎo)論A和計(jì)算思維與智能科學(xué)導(dǎo)論為先修課程,是培養(yǎng)面向21世紀(jì)創(chuàng)新人才的的課程體系的主干通識(shí)課程。課程思政目標(biāo):激發(fā)學(xué)生的擔(dān)當(dāng)意識(shí)和愛國(guó)情懷,引領(lǐng)學(xué)生樹立正確的人生觀和價(jià)值觀,具備良好的職業(yè)道德。具備正確的工程實(shí)驗(yàn)和研究方法,發(fā)現(xiàn)問題、解決問題的創(chuàng)新意識(shí)和能力,勤于思考、開拓思想、敢于創(chuàng)新、嚴(yán)謹(jǐn)?shù)墓ぷ鲬B(tài)度和意識(shí)。具有自主學(xué)習(xí)和終身學(xué)習(xí)的意識(shí),有不斷學(xué)習(xí)和適應(yīng)發(fā)展的能力。知識(shí)能力目標(biāo)要求掌握程序設(shè)計(jì)的基本要素,掌握程序設(shè)計(jì)的三種基本結(jié)構(gòu),能夠分析問題、設(shè)計(jì)算法、繪制NS流程圖,能夠正確地編寫程序,掌握程序調(diào)試的方法和
2、技巧、具備較強(qiáng)的程序調(diào)試能力。知識(shí)能力目標(biāo)具備良好的計(jì)算思維能力,具備分析問題、解決問題的意識(shí)和能力,能使用C語(yǔ)言解決較為復(fù)雜的數(shù)學(xué)問題,具備使用計(jì)算機(jī)技術(shù)解決實(shí)際問題和本專業(yè)領(lǐng)域問題的意識(shí)和能力。共48學(xué)時(shí)講課26學(xué)時(shí)上機(jī)22學(xué)時(shí)7開心學(xué)C視頻通過眾多微視頻,講解程序設(shè)計(jì)基礎(chǔ)算法設(shè)計(jì)程序設(shè)計(jì)程序調(diào)試使得讀者能夠通過視頻,輕松愉快地學(xué)習(xí)程序設(shè)計(jì)。8教材C語(yǔ)言程序設(shè)計(jì)(第3版)ISBN-978-115-55486-4熊聰聰,寧愛軍出版社:人民郵電出版社 出版日期:2021-01ISBN:版次:3學(xué)習(xí)建議堅(jiān)持上課,盡量不缺勤重視分析問題、算法設(shè)計(jì)、NS圖繪制堅(jiān)持上機(jī)編寫程序、正確的程序調(diào)試方法反復(fù)
3、觀看視頻及時(shí)完成提交作業(yè)、實(shí)驗(yàn),堅(jiān)持參加階段測(cè)驗(yàn)10注意:本教案中,帶(*)的部分為:可以暫時(shí)先不必深究、可以在具備一定編程能力后再學(xué)習(xí),或不作為課程重點(diǎn)的內(nèi)容。第1章 程序設(shè)計(jì)基礎(chǔ)第2章 C語(yǔ)言編程與調(diào)試天津科技大學(xué)公共基礎(chǔ)與新技術(shù)部13主要內(nèi)容Visual C+ 2010程序編寫與調(diào)試方法Dev C+程序編寫與調(diào)試方法Visual C+ 2010Visual C+ 2010是一款功能強(qiáng)大的可視化應(yīng)用程序開發(fā)工具Visual C+ 2010的安裝和啟動(dòng),參考教材2.1.1Visual C+ 2010的開發(fā)環(huán)境,參考教材2.1.2Visual C+中的程序編寫與調(diào)試【例2.1】建立一個(gè)空項(xiàng)目,
4、在程序中編寫一個(gè)C語(yǔ)言程序代碼。Visual C+中的程序編寫與調(diào)試(4)斷點(diǎn)。(5)生成解決方案,編譯和生成可執(zhí)行文件。調(diào)試程序在程序的最后一行設(shè)置斷點(diǎn)。選擇“調(diào)試啟動(dòng)調(diào)試”命令(“啟動(dòng)調(diào)試”按鈕或按F5鍵)結(jié)束程序。選擇“調(diào)試停止調(diào)試”命令(或按Shift+F5組合鍵單步調(diào)試程序(1)逐語(yǔ)句執(zhí)行程序,通過觀察程序中變量值的變化,分析程序的運(yùn)行情況選擇“調(diào)試逐語(yǔ)句”命令(或按F11鍵)再次按F11鍵,執(zhí)行當(dāng)前行語(yǔ)句(2)逐過程調(diào)試程序。(選擇“調(diào)試逐過程”命令(或按F10鍵)(3)結(jié)束程序。(“調(diào)試?yán)^續(xù)”命令(或按F5鍵)單步調(diào)試程序“兩彈一星”事業(yè)的攻堅(jiān)過程“熱愛祖國(guó)、無私奉獻(xiàn),自力更生、
5、艱苦奮斗,大力協(xié)同、勇于登攀”的兩彈一星精神。序設(shè)計(jì)過程,就是要堅(jiān)持發(fā)現(xiàn)問題、分析問題、設(shè)計(jì)算法、編寫程序和調(diào)試程序的過程,需要學(xué)生有一點(diǎn)堅(jiān)持,能克服學(xué)習(xí)中遇到的困難,堅(jiān)持不懈,努力學(xué)習(xí)?!按髧?guó)工匠精神的代表人物大國(guó)工匠紀(jì)錄片,如選擇其中一集,如2018-8-29日,李峰,減少1微米變形,縮小火箭幾公里誤差。并推薦學(xué)生觀看類似紀(jì)錄片?!?7年,我只干了銑工這一個(gè)行”在學(xué)習(xí)程序設(shè)計(jì)的過程,也需要多進(jìn)行發(fā)現(xiàn)問題、分析問題、設(shè)計(jì)算法、編寫程序和調(diào)試程序,做的多了,才能更深刻的理解,掌握正確方法和技巧。 Dev C+Dev C+是Windows環(huán)境下的一個(gè)輕量級(jí)C/C+集成開發(fā)環(huán)境(IDE),也是一款
6、非常實(shí)用的編程工具 Dev C+的安裝和啟動(dòng),參考2.2.1Dev C+的開發(fā)環(huán)境,參考2.2.2Dev C+Dev C+中的程序設(shè)計(jì)【例2.2】在Dev C+中編寫一個(gè)C語(yǔ)言程序。Dev C+中的程序設(shè)計(jì)int main()return 0;Dev C+中的單步調(diào)試【例2.3】在Dev C+中設(shè)置斷點(diǎn)并調(diào)試C程序,觀察程序中變量的取值。(1)注意:選擇“新建源代碼”命令,保存代碼到Dev C+軟件的安裝目錄中,如“C:Program Files (x86)Dev-Cpp”,或者保存在“我的文檔”中。否則,無法進(jìn)行單步調(diào)試。Dev C+中的單步調(diào)試(2)調(diào)試前的配置。工具欄中選擇一個(gè)版本,如6
7、4-bits Debug選擇“工具編譯選項(xiàng)”命令,將“代碼生成/優(yōu)化連接器”選項(xiàng)卡中的“產(chǎn)生調(diào)試信息”項(xiàng)目設(shè)置為YesDev C+中的單步調(diào)試(4)在代碼行左側(cè)的數(shù)字上單擊鼠標(biāo)(或者將光標(biāo)置入語(yǔ)句行中,選擇“運(yùn)行切換斷點(diǎn)”命令或按F4鍵),設(shè)置斷點(diǎn)。Dev C+中的單步調(diào)試(5)單擊“調(diào)試”按鈕,打開“調(diào)試”面板作業(yè)一、選擇題二、編程題第3章 順序結(jié)構(gòu)程序設(shè)計(jì)天津科技大學(xué)公共基礎(chǔ)與新技術(shù)部32主要內(nèi)容1順序結(jié)構(gòu)算法設(shè)計(jì)2C語(yǔ)言編程基礎(chǔ)(CH03B)3順序結(jié)構(gòu)程序設(shè)計(jì)4常見的編程錯(cuò)誤及其調(diào)試順序結(jié)構(gòu)的算法設(shè)計(jì)順序結(jié)構(gòu)是結(jié)構(gòu)化程序設(shè)計(jì)中最簡(jiǎn)單的控制結(jié)構(gòu),它一般包括輸入數(shù)據(jù)、處理和輸出數(shù)據(jù)3個(gè)步驟順
8、序結(jié)構(gòu)的算法設(shè)計(jì)程序設(shè)計(jì)的過程一般包括以下步驟。 分析問題:分析問題的原理,找出其中的規(guī)律。 設(shè)計(jì)算法:根據(jù)分析設(shè)計(jì)解決問題的算法。 編寫程序:編寫程序,調(diào)試、運(yùn)行程序。順序結(jié)構(gòu)的算法設(shè)計(jì)【例3.1】編寫程序,輸入三角形的3條邊長(zhǎng)a、b和c,求三角形的面積。(1)分析問題順序結(jié)構(gòu)的算法設(shè)計(jì)(2)設(shè)計(jì)算法學(xué)習(xí)提示:算法要求輸入的3條邊長(zhǎng)能夠構(gòu)成一個(gè)三角形,如果運(yùn)行時(shí)輸入的3條邊長(zhǎng)不能構(gòu)成三角形,則此程序會(huì)出錯(cuò)。順序結(jié)構(gòu)的算法設(shè)計(jì)(3)思考抗美援朝-防空抗美援朝戰(zhàn)爭(zhēng)中,我志愿軍解決美帝的飛機(jī)轟炸問題。我方創(chuàng)新研究出用戰(zhàn)士分布在各個(gè)山頭瞭望,發(fā)現(xiàn)飛機(jī)則鳴槍示警或電話報(bào)告的方式,提前做出防轟炸準(zhǔn)備,從
9、而減少人員傷亡和物資損失新冠病人診療方案救治新型冠病人時(shí),專家組通過不斷分析總結(jié)出救治新冠病人的流程我醫(yī)療人員勇于探索和創(chuàng)新,不斷總結(jié)經(jīng)驗(yàn)教訓(xùn),不斷改進(jìn)診療方案,國(guó)家的專家團(tuán)隊(duì)總共發(fā)布8版診療方案。降低了轉(zhuǎn)為輕癥轉(zhuǎn)為重癥的比例,極大地降低了病亡率,有力的支持我國(guó)取得了抗疫的巨大勝利。新冠肺炎 CT 影像綜合分析 AI 輔助系統(tǒng)新冠肺炎 CT 影像綜合分析 AI 輔助系統(tǒng)依托天河人工智能創(chuàng)新一體化平臺(tái),由天津醫(yī)科大學(xué)腫瘤醫(yī)院、國(guó)家超級(jí)計(jì)算天津中心、中國(guó)抗癌協(xié)會(huì)腫瘤人工智能專委會(huì)、中國(guó)人工智能學(xué)會(huì)智慧醫(yī)療專委會(huì)共同構(gòu)建,西安交通大學(xué)第一附屬醫(yī)院、南昌大學(xué)第一附屬醫(yī)院、陜西省傳染病醫(yī)院等多家醫(yī)療機(jī)構(gòu)
10、攜手參與。3.3 順序結(jié)構(gòu)的程序設(shè)計(jì)【例3.28】按照?qǐng)D所示的算法,編寫程序,輸入三角形的3條邊長(zhǎng)a、b和c,求三角形的面積。順序結(jié)構(gòu)的程序設(shè)計(jì)#include #include void main() float a,b,c; /a,b,c為三角形的3條邊長(zhǎng) float s,area; /s為三角形周長(zhǎng)的一半,area為三角形的面積 printf(nPlease Input a,b,c:); /提示輸入三角形的3條邊長(zhǎng) scanf(%f%f%f,&a,&b,&c); /輸入3條邊長(zhǎng) s=(a+b+c)/2;/計(jì)算周長(zhǎng)的一半s area=sqrt(s*(s-a)*(s-b) *(s-c);/計(jì)
11、算三角形面積area printf(area=%f n,area); /輸出三角形面積area getchar();getchar(); /等待輸入字符繼續(xù) Please Input a, b, c:3 4 5area=6.000000順序結(jié)構(gòu)的程序設(shè)計(jì)【例3.29】求解雞兔同籠問題。已知籠子中雞和兔的頭數(shù)總共為h,腳數(shù)總共為f,問雞和兔各有多少只?(1)分析。設(shè)雞和兔分別有x和y只順序結(jié)構(gòu)的程序設(shè)計(jì)【例3.29】求解雞兔同籠問題。已知籠子中雞和兔的頭數(shù)總共為h,腳數(shù)總共為f,問雞和兔各有多少只?(1)分析。設(shè)雞和兔分別有x和y只順序結(jié)構(gòu)的程序設(shè)計(jì)【例3.29】求解雞兔同籠問題。已知籠子中雞和
12、兔的頭數(shù)總共為h,腳數(shù)總共為f,問雞和兔各有多少只?(1)分析。設(shè)雞和兔分別有x和y只順序結(jié)構(gòu)的程序設(shè)計(jì)#include void main() int h,f; /h為頭的總數(shù),f為腳的總數(shù) float x,y; /x為雞的只數(shù),y為兔子的只數(shù) printf(Please Input h,f:); scanf(%d%d,&h,&f); /分別輸入頭和腳的數(shù)目 x=(4*h-f)/2; /計(jì)算雞的只數(shù) y=h-x; /計(jì)算兔子的只數(shù) printf(x= %f,y=%f n,x,y); Please Input h,f:10 30 x= 5.000000, y=5.000000順序結(jié)構(gòu)的程序設(shè)計(jì)
13、【例3.30】編寫程序,輸入一個(gè)三位整數(shù),將其個(gè)位、十位和百位數(shù)反序后,得到一個(gè)新的整數(shù)并輸出。例如,輸入整數(shù)234,輸出整數(shù)432。(1)分析。首先必須求得其個(gè)位、十位和百位數(shù)再計(jì)算得到反序后的數(shù)。234%10 4234/10%10 3順序結(jié)構(gòu)的程序設(shè)計(jì)【例3.30】編寫程序,輸入一個(gè)三位整數(shù),將其個(gè)位、十位和百位數(shù)反序后,得到一個(gè)新的整數(shù)并輸出。例如,輸入整數(shù)234,輸出整數(shù)432。(1)分析。首先必須求得其個(gè)位、十位和百位數(shù)再計(jì)算得到反序后的數(shù)。順序結(jié)構(gòu)的程序設(shè)計(jì)#include void main() int m,n,a,b,c;printf(Please input三位整數(shù):);sc
14、anf(%d,&m);a=m%10;/求個(gè)位數(shù)b=m/10%10;/求十位數(shù)c=m/100%10;/求百位數(shù)n=a*100+b*10+c;/求反序后的數(shù)printf(%d 對(duì)調(diào)后是 %dn,m,n); Please input三位整數(shù):234234 對(duì)調(diào)后是 432常見的編程錯(cuò)誤及其調(diào)試在實(shí)際編程過程中,錯(cuò)誤時(shí)常發(fā)生,很少有程序在第一次編譯運(yùn)行時(shí)就完全正確的。計(jì)算機(jī)先驅(qū)格蕾絲赫柏(Grace Hopper)發(fā)現(xiàn)的第一個(gè)硬件錯(cuò)誤是在一個(gè)計(jì)算機(jī)組件中有一只大昆蟲,因此計(jì)算機(jī)的錯(cuò)誤就被稱為Bug(蟲子),而發(fā)現(xiàn)并糾正錯(cuò)誤的過程就稱為調(diào)試,即Debug。程序中經(jīng)常出現(xiàn)的錯(cuò)誤包括:語(yǔ)法錯(cuò)誤運(yùn)行時(shí)錯(cuò)誤未檢
15、測(cè)到的錯(cuò)誤邏輯錯(cuò)誤等語(yǔ)法錯(cuò)誤代碼違反一條或多條C語(yǔ)言語(yǔ)法規(guī)則,那么其在編譯時(shí)將會(huì)被檢測(cè)出語(yǔ)法錯(cuò)誤。(1)變量未被定義。(2)語(yǔ)句后缺少分號(hào)“;”。(3)忘記包含所需要的庫(kù)函數(shù)頭文件。(4)忘記乘法運(yùn)算符“*”。例如,語(yǔ)句“a=3b;”。(5)字符串兩邊的雙引號(hào)未成對(duì)出現(xiàn)。 例如,語(yǔ)句“printf(c = %d,c);”。(6)花括號(hào)“”不配對(duì)。(7)小括號(hào)“()”不配對(duì)。 例如,語(yǔ)句“s = (a + b + c/2;”。語(yǔ)法錯(cuò)誤【例3.31】輸入英里數(shù),將其轉(zhuǎn)換為千米數(shù)并輸出。1 void main() 2 double kms 3 printf(Please input miles:);
16、 4 scanf(%lf,&miles); 5 kms=0.621miles; 6 printf(%lf miles= %lf kms,miles,kms); 7 語(yǔ)法錯(cuò)誤根據(jù)錯(cuò)誤提示信息修改后的程序。1 #include /增加了此行 2 void main() 3 double kms,miles;/增加了miles的定義和語(yǔ)句結(jié)束符“;” 4 printf(Please input miles:); 5 scanf(%lf,&miles); 6 kms=0.621*miles; /增加了“*” 7 printf(%lf miles= %lf kms,miles,kms); /格式字符串增
17、加了右側(cè)雙引號(hào) 8 運(yùn)行時(shí)錯(cuò)誤運(yùn)行時(shí)錯(cuò)誤是指在程序編譯時(shí)未能找出,而在程序執(zhí)行時(shí)被計(jì)算機(jī)檢測(cè)到的錯(cuò)誤。當(dāng)程序試圖執(zhí)行一個(gè)非法操作時(shí)會(huì)導(dǎo)致運(yùn)行時(shí)錯(cuò)誤。運(yùn)行時(shí)錯(cuò)誤【例3.32】被0除錯(cuò)誤程序示例#include void main() int a,b,c; a=10; b=5/9; /b為0 c=a/b; /除法的分母為0,導(dǎo)致運(yùn)行時(shí)錯(cuò)誤 printf(c=%d,c); 未檢測(cè)到的錯(cuò)誤未檢測(cè)到的錯(cuò)誤是指有一些在編譯和運(yùn)行時(shí)都不會(huì)被計(jì)算機(jī)檢測(cè)出來,但是會(huì)導(dǎo)致程序運(yùn)行結(jié)果不正確的錯(cuò)誤。編程者必須預(yù)測(cè)并驗(yàn)證程序的結(jié)果,以確定程序是否正確未檢測(cè)到的錯(cuò)誤(1)printf()或scanf()語(yǔ)句中變量類型與
18、使用格式說明符不一致。【例3.33】輸出格式符號(hào)錯(cuò)誤示例。#include void main() int a; a=12345; printf(%fn,a); 0.000000未檢測(cè)到的錯(cuò)誤(2)賦給int類型變量的數(shù)超出變量的取值范圍。【例3.34】數(shù)值越界示例。#include void main() int a; a= 2147483648; /超過了int類型的取值范圍-21474836482147483647 printf(%dn,a); -2147483648未檢測(cè)到的錯(cuò)誤(3)scanf()語(yǔ)句中忘記使用變量的取地址符號(hào)“&”。【例3.35】輸入時(shí)缺少“&”符號(hào)示例。#incl
19、ude void main() int a,b; scanf(%d%d,a,b); printf(%d,%dn,a,b); 未檢測(cè)到的錯(cuò)誤(4)運(yùn)行程序時(shí)輸入數(shù)據(jù)的方式與scanf()語(yǔ)句的格式要求不一致,導(dǎo)致數(shù)據(jù)不能正確賦給變量。【例3.36】輸入格式錯(cuò)誤舉例。#include void main() int a,b; scanf(%d,%d,&a,&b); printf(%d,%dn,a,b); 3 43, -858993460正確的輸入方式為“3,4”輸入了“3 4”,則格式不正確,數(shù)據(jù)不能賦給變量b未檢測(cè)到的錯(cuò)誤(5)整數(shù)除法可能導(dǎo)致的結(jié)果錯(cuò)誤?!纠?.37】整數(shù)除法錯(cuò)誤舉例。#inc
20、lude void main() int a,b; scanf(%d,&a); b=5/9*a; printf(%d,%dn,a,b); 9090, 0邏輯錯(cuò)誤邏輯錯(cuò)誤是指由于不正確的算法導(dǎo)致的錯(cuò)誤。邏輯錯(cuò)誤主要源于錯(cuò)誤的算法,因此在進(jìn)行程序設(shè)計(jì)之前,應(yīng)該仔細(xì)檢查算法的正確性。邏輯錯(cuò)誤只是得不到期望的結(jié)果,它通常不會(huì)導(dǎo)致運(yùn)行時(shí)錯(cuò)誤,編譯時(shí)也不會(huì)出現(xiàn)錯(cuò)誤信息,因此錯(cuò)誤定位和糾正較為困難。邏輯錯(cuò)誤測(cè)試對(duì)于一個(gè)程序,我們可以先制訂一份完善的測(cè)試方案,設(shè)計(jì)包括所有可能情況的測(cè)試用例,然后將運(yùn)行的結(jié)果與預(yù)測(cè)的結(jié)果進(jìn)行比對(duì),從而發(fā)現(xiàn)邏輯錯(cuò)誤。當(dāng)發(fā)現(xiàn)邏輯錯(cuò)誤時(shí),需要使用程序調(diào)試的方法進(jìn)行糾錯(cuò)。程序調(diào)試方法(
21、1)選擇“調(diào)試逐過程”命令追蹤執(zhí)行程序。每按一次F10鍵,則程序會(huì)繼續(xù)運(yùn)行下一行。(2)“局部變量”窗口觀察變量的取值(3)選擇“調(diào)試逐語(yǔ)句”命令(4)設(shè)置斷點(diǎn)。選擇“調(diào)試啟動(dòng)調(diào)試”命令,則程序會(huì)直接運(yùn)行到斷點(diǎn)處停下。作業(yè)一、選擇題二、編程題設(shè)置算法編寫程序調(diào)試程序第4章 函數(shù)天津科技大學(xué)公共基礎(chǔ)與新技術(shù)部67主要內(nèi)容1函數(shù)的定義和調(diào)用2變量的作用域3變量的存儲(chǔ)類別和生存期4程序的模塊化設(shè)計(jì)概述模塊化程序設(shè)計(jì),將大問題逐步細(xì)化,分解成很多具有獨(dú)立功能的小模塊,這些小模塊之間可以相互調(diào)用,簡(jiǎn)化了程序設(shè)計(jì)的過程。武漢火神山、雷神山醫(yī)院裝配式的模塊化建筑1月25日下午,武漢決定在黃家湖區(qū)域再建一所雷
22、神山醫(yī)院。雷神山醫(yī)院總建筑面積7.5萬平方米 ,可容納1600張床位。1月26日即進(jìn)場(chǎng)施工,1月29日一、二期總平面圖全部設(shè)計(jì)完成,2月8日接納患者模塊化建筑是裝配率極高的一種裝配式建筑形式,是以標(biāo)準(zhǔn)化的思維劃分具有建筑功能的三維空間集成模塊,涵蓋了結(jié)構(gòu)、圍護(hù)、內(nèi)裝和設(shè)備管線等系統(tǒng)的部品部件,在工廠預(yù)制完成,集成模塊運(yùn)輸?shù)焦さ剡M(jìn)行裝配連接最終形成完整的建筑。模塊化建筑具有標(biāo)準(zhǔn)化程度高、集成性高等優(yōu)點(diǎn),可以極大地壓縮整個(gè)建造周期。函數(shù)的定義和調(diào)用在編程時(shí),通過函數(shù)實(shí)現(xiàn)模塊化,每個(gè)函數(shù)實(shí)現(xiàn)一個(gè)小功能??梢远x自己的函數(shù)。函數(shù)類型 ( ) 聲明部分 執(zhí)行語(yǔ)句部分 函數(shù)定義【例4.1】定義函數(shù)fun(
23、),參數(shù)為價(jià)格和重量,求櫻桃的總金額。通過鍵盤輸入價(jià)格與重量后,調(diào)用函數(shù)計(jì)算櫻桃的總金額。int fun(int p, int n)/函數(shù)頭部定義 int t; t=p*n; return (t); /函數(shù)的返回值 void printstar() /打印*行 printf(*n); 函數(shù)的定義函數(shù)定義(1)函數(shù)的命名與變量命名相似,它也遵守標(biāo)識(shí)符的命名規(guī)則。(2)是函數(shù)的參數(shù)變量列表,多個(gè)形參(形式參數(shù))之間用“,”隔開,形參也稱為虛參。 函數(shù)定義(4)語(yǔ)句“return (返回值)”給出了函數(shù)的返回值。不論return語(yǔ)句的返回值為何種數(shù)據(jù)類型,都將自動(dòng)轉(zhuǎn)換為函數(shù)類型。(5)空函數(shù)指的是函
24、數(shù)內(nèi)部沒有任何語(yǔ)句,函數(shù)什么工作都不做void null()/空函數(shù),此函數(shù)什么工作都不做 函數(shù)定義(3)函數(shù)中不能再嵌套定義其他函數(shù)。(6)在C語(yǔ)言中,一個(gè)項(xiàng)目只能有一個(gè)main()函數(shù),不論main()函數(shù)的位置在哪里,程序都是從main()函數(shù)開始執(zhí)行的,再到main()函數(shù)結(jié)束的。函數(shù)調(diào)用void main() int price,number,total; printstar(); /函數(shù)調(diào)用,打印* printf(輸入單價(jià)和重量:); scanf(%d%d,&price,&number); total=fun(price,number); printf(總金額=%dn,total)
25、; printstar(); /函數(shù)調(diào)用,打印*輸入單價(jià)和重量:17 100總金額=1700*函數(shù)調(diào)用函數(shù)在定義完后就可以被調(diào)用了。如果函數(shù)定義中有形參,那么在調(diào)用時(shí),應(yīng)會(huì)傳遞實(shí)際參數(shù)(實(shí)參)。()函數(shù)調(diào)用(1)實(shí)參表中的實(shí)參可以是常量、變量或表達(dá)式,各參數(shù)之間用“,”隔開,實(shí)參也可以是數(shù)組。(2)實(shí)參與形參的類型、個(gè)數(shù)和位置應(yīng)該一一對(duì)應(yīng),否則會(huì)出錯(cuò)。(3)實(shí)參表中變量名與形參表中的變量名可以相同,也可以不相同。()函數(shù)調(diào)用2函數(shù)調(diào)用的方式(1)將函數(shù)單獨(dú)作為一個(gè)語(yǔ)句(2)將函數(shù)直接寫在表達(dá)式中printstar(); /函數(shù)調(diào)用,打印*total=fun(price,number);函數(shù)舉例
26、【例4.2】編寫函數(shù)triangle(a, b, c),其功能是計(jì)算三角形的面積。調(diào)用。函數(shù)舉例【例4.2】編寫函數(shù)triangle(a, b, c),其功能是計(jì)算三角形的面積。#include #include float triangle(float a,float b,float c)/定義函數(shù)頭部 float s,area; s=(a+b+c)/2;/計(jì)算周長(zhǎng)的一半s area=sqrt(s*(s-a)*(s-b)*(s-c);/計(jì)算三角形的面積area return (area);/返回值area 函數(shù)舉例void main() float a,b,c,area; printf(nP
27、lease Input a,b,c:); scanf(%f%f%f,&a,&b,&c); area=triangle(a,b,c);/調(diào)用triangle()函數(shù)計(jì)算面積 printf(area=%f n,area);/輸出面積Please Input a, b, c:30 40 50area=600.000000函數(shù)返回值函數(shù)通過return語(yǔ)句可帶回返回值。如果函數(shù)需要帶回返回值,則函數(shù)中必須包含return語(yǔ)句(1)函數(shù)類型作為函數(shù)返回值的數(shù)據(jù)類型,不論return語(yǔ)句的返回值為何種數(shù)據(jù)類型,都將自動(dòng)轉(zhuǎn)換為函數(shù)類型。(2)函數(shù)類型可以省略,此時(shí)函數(shù)的默認(rèn)數(shù)據(jù)類型為int類型。(3)ret
28、urn語(yǔ)句還可以退出或結(jié)束函數(shù),不再執(zhí)行函數(shù)的后續(xù)語(yǔ)句。函數(shù)返回值(4)一個(gè)函數(shù)中可以包含多個(gè)return語(yǔ)句,執(zhí)行哪一個(gè)return語(yǔ)句就由哪一個(gè)return語(yǔ)句帶回返回值。(5)如果函數(shù)類型為void,則表示函數(shù)沒有返回值。此時(shí)函數(shù)的return語(yǔ)句不帶任何返回值,函數(shù)中也可以沒有return語(yǔ)句。函數(shù)返回值【例4.3】函數(shù)類型和返回值。#include int area(int r)/定義函數(shù)頭部 float s; s=3.14159*r*r; return (s); /函數(shù)的返回值帶有小數(shù),則會(huì)自動(dòng)將之轉(zhuǎn)換為int void print() printf(*n); return; /退
29、出函數(shù),且不執(zhí)行后續(xù)語(yǔ)句 printf(#n); /此語(yǔ)句不執(zhí)行 函數(shù)返回值void main() int r,s; printf(請(qǐng)輸入r:); scanf(%d,&r); s=area(r); / area()函數(shù)調(diào)用 print(); / print()函數(shù)調(diào)用 printf( area= %dn,s); print(); / print()函數(shù)調(diào)用 請(qǐng)輸入r:10*area= 314*參數(shù)的傳遞C語(yǔ)言中函數(shù)參數(shù)的傳遞方式是單向值傳遞。函數(shù)參數(shù)的值傳遞方式是將實(shí)參的值傳遞給形參,形參變量另外申請(qǐng)一段內(nèi)存空間。實(shí)參和形參分別占用不同的內(nèi)存空間,因此改變形參變量的值不會(huì)影響實(shí)參變量。參數(shù)的傳
30、遞【例4.4】參數(shù)的值傳遞舉例。#include void swap(int x,int y)/定義函數(shù)頭部 int t; t=x; /交換x和y x=y; y=t; printf(x=%d,y=%dn,x,y); void main() int a,b; printf( 請(qǐng)輸入a,b:); scanf(%d%d,&a,&b); swap(a,b); printf(a=%d,b=%dn,a,b); 請(qǐng)輸入a, b:3 4x=4, y=3a=3, b=4參數(shù)的傳遞(1)在swap()函數(shù)中,雖然形參x和y交換了,但是返回main()后,實(shí)參a和b的值沒有改變(2)實(shí)參可以是變量、常量或表達(dá)式。
31、swap(3,4); /實(shí)參是常量 swap(a+1,b+1); /實(shí)參是表達(dá)式 實(shí)參和形參的類型當(dāng)實(shí)參與形參的數(shù)據(jù)類型不一致時(shí),可以將實(shí)參轉(zhuǎn)換為形參的類型傳遞給形參?!纠?.5】實(shí)參與形參數(shù)值傳遞舉例。#include void f(int x) /定義函數(shù)頭部 int y; y=2*x; printf(x=%d,y=%dn,x,y); void main() float a=4.89; f(a); f(7.5);x=4, y=8x=7, y=14對(duì)被調(diào)用函數(shù)的聲明一個(gè)函數(shù)在被調(diào)用之前必須已被定義,此外還應(yīng)該在調(diào)用之前對(duì)函數(shù)進(jìn)行聲明。聲明就是向編譯系統(tǒng)聲明將調(diào)用的函數(shù)的相關(guān)信息如果在調(diào)用函數(shù)
32、之前未進(jìn)行聲明,則編譯系統(tǒng)認(rèn)為此函數(shù)不存在,從而導(dǎo)致編譯出錯(cuò)。對(duì)被調(diào)用函數(shù)的聲明【例4.6】函數(shù)聲明舉例,計(jì)算形參變量的和。#include void main() float sum(float a,float b); /函數(shù)的聲明語(yǔ)句 float x,y,z; printf( 請(qǐng)輸入x,y:); scanf(%f%f,&x,&y); z=sum(x,y); printf( 和為%fn,z); float sum(float a,float b)/求和的函數(shù) return (a+b); 請(qǐng)輸入x, y:3 4和為7.000000對(duì)被調(diào)用函數(shù)的聲明說明:(1)如果省略了聲明語(yǔ)句,那么在編譯程序
33、時(shí)將報(bào)以下錯(cuò)誤(2)如果函數(shù)定義在主調(diào)用函數(shù)之前,此時(shí)可以不進(jìn)行函數(shù)聲明。s1.cpp(6): error C3861: “sum”: 找不到標(biāo)識(shí)符對(duì)被調(diào)用函數(shù)的聲明(3)函數(shù)聲明語(yǔ)句的一般形式為:其中,參數(shù)名可以省略函數(shù)類型 函數(shù)名(參數(shù)類型1 參數(shù)名1, 參數(shù)類型2 參數(shù)名2, )float sum(float a,float b); /包括完整的函數(shù)類型、函數(shù)名、參數(shù)類型、參數(shù)名float sum(float,float); /省略了函數(shù)的參數(shù)名對(duì)被調(diào)用函數(shù)的聲明(4)在主調(diào)用函數(shù)中的函數(shù)聲明語(yǔ)句必須寫在調(diào)用函數(shù)語(yǔ)句之前(5)函數(shù)聲明語(yǔ)句也可以寫在主調(diào)用函數(shù)的外邊#include flo
34、at sum(float a,float b);/函數(shù)聲明語(yǔ)句 void main() 對(duì)被調(diào)用函數(shù)的聲明(6)在文件stdio.h、math.h等“頭文件”中,包含了對(duì)庫(kù)函數(shù)的聲明和一些宏定義的信息stdio.h文件中包含:printf()、scanf()等函數(shù)的聲明math.h文件中包含:sqrt()、fabs()等函數(shù)的聲明變量的作用域變量能夠被訪問的位置稱為變量的作用域。分為:局部變量全局變量局部變量在一個(gè)函數(shù)內(nèi)部定義的變量稱為內(nèi)部變量,它只能在本函數(shù)內(nèi)部使用,而不能在函數(shù)以外的地方使用。即它的作用范圍只在函數(shù)內(nèi)部。局部變量主要包括:自定義的局部變量形參復(fù)合語(yǔ)句中定義的變量局部變量【例
35、4.7】局部變量舉例。#include void f1(int a) int b=3,c=4; /a,b,c為局部變量,只能在f1()中引用 printf(a=%d,b=%d,c=%dn,a,b,c); void f2(int x) int y=3,z=4;/x,y,z為局部變量,只能在f2()中引用 printf(x=%d,y=%d,z=%dn,x,y,z); void f3(int a) /函數(shù)的形參int a可以與f1()的形參相同 int b=8,c=9; /b,c與f1()中的變量名相同,但并不相互干擾 printf(a=%d,b=%d,c=%dn,a,b,c); 局部變量void
36、main() int m=2,n=3;/m,n為局部變量,只在main()內(nèi)部有效 f1(3); f2(4); f3(5); printf(m=%d,n=%dn,m,n); int a=4,b=5; /a,b為局部變量,僅能用于本復(fù)合語(yǔ)句 printf(a=%d,b=%dn,a,b); /printf(a=%d,b=%dn,a,b); /報(bào)錯(cuò),不能引用a,b a=3, b=3, c=4x=4, y=3, z=4a=5, b=8, c=9m=2, n=3a=4, b=5全局變量在一個(gè)源程序文件中,在函數(shù)外部定義的變量為外部變量,也稱為全局變量全局變量可以被本文件中的函數(shù)使用,它的作用范圍是從定義
37、的位置開始直到本源文件結(jié)束。全局變量【例4.8】全局變量舉例。#include int m=1,n=2; /m、n為全局變量,作用域直到最后 void f1() printf(m=%d,n=%dn,m,n); /全局變量m=1,n=2 printf(p=%d,q=%dn,p,q); /出錯(cuò),不能引用后邊定義的p,q int p=9,q=10; /p、q為全局變量,作用域直到最后 void f2() int m=3,n=4; printf(m=%d,n=%dn,m,n);/引用局部變量m=3,n=4 printf(p=%d,q=%dn,p,q);/全局變量p=9,q=10 全局變量void ma
38、in() int m=5,n=6; printf(m=%d,n=%dn,m,n);/引用局部變量m=5,n=6 int m=7,n=8; printf(m=%d,n=%dn,m,n);/引用局部變量m=7,n=8 printf(m=%d,n=%dn,m,n); /引用局部變量m=5,n=6 printf(p=%d,q=%dn,p,q); /全局變量p=9,q=10 m=5, n=6m=7, n=8m=5, n=6全局變量【例4.9】編寫函數(shù),計(jì)算和、差、乘積#include int s,t,m;/定義全局變量 void fun(int a, int b) s=a+b; t=a-b; m=a*b
39、; void main() int a,b; printf( 請(qǐng)輸入2個(gè)數(shù):); scanf(%d%d,&a,&b); fun(a,b); printf(和=%d,差=%d,乘積=%dn,s,t,m); /調(diào)用全局變量 請(qǐng)輸入10個(gè)數(shù):45 34 33 20 56 67 22 89 12 66 數(shù)組為:45 34 33 20 56 67 22 89 12 66 數(shù)組的和為:444,最大值為89,最小值為12全局變量說明:(1)全局變量在程序執(zhí)行的整個(gè)過程中都占用內(nèi)存,而不是僅在需要時(shí)才開辟內(nèi)存單元。(2)在編寫程序時(shí),應(yīng)該盡量避免使用全局變量。 因?yàn)槿绻瘮?shù)過于依賴全局變量,函數(shù)的通用性就會(huì)降
40、低。所有函數(shù)都可以改變?nèi)肿兞康闹?,因此難以判斷每個(gè)瞬間變量的值。另外,全局變量過多,也會(huì)降低程序的可讀性。變量的存儲(chǔ)類別和生存期變量在程序執(zhí)行過程中占用存儲(chǔ)單元的時(shí)間稱為變量的生存期。分為:動(dòng)態(tài)變量靜態(tài)變量?jī)?nèi)存中可供用戶使用的存儲(chǔ)空間分為三部分動(dòng)態(tài)存儲(chǔ)區(qū)動(dòng)態(tài)變量存儲(chǔ)在動(dòng)態(tài)存儲(chǔ)區(qū)。當(dāng)函數(shù)被調(diào)用時(shí),系統(tǒng)會(huì)為函數(shù)中定義的變量分配一個(gè)動(dòng)態(tài)存儲(chǔ)單元,函數(shù)調(diào)用結(jié)束,這些存儲(chǔ)單元就會(huì)被釋放。動(dòng)態(tài)變量包括函數(shù)形參和函數(shù)內(nèi)部定義的變量。靜態(tài)存儲(chǔ)區(qū)靜態(tài)變量存儲(chǔ)在靜態(tài)存儲(chǔ)區(qū)。其在程序運(yùn)行之初就被分配了存儲(chǔ)空間,程序執(zhí)行完畢才會(huì)釋放存儲(chǔ)空間。靜態(tài)變量包括:全局變量和使用關(guān)鍵字static定義的局部變量。靜態(tài)存儲(chǔ)變量
41、默認(rèn)的初值為0。定義變量關(guān)鍵字在定義變量時(shí),可以使用以下關(guān)鍵字定義其存儲(chǔ)方式:autostaticregisterexternauto類型變量關(guān)鍵字auto指定局部變量為動(dòng)態(tài)存儲(chǔ)方式當(dāng)省略關(guān)鍵字auto時(shí),局部變量默認(rèn)是動(dòng)態(tài)存儲(chǔ)方式?!纠?.10】用關(guān)鍵字auto定義動(dòng)態(tài)變量。#include void f(int a) auto b=2; /動(dòng)態(tài)存儲(chǔ)方式,與int b=2;效果相同 b=b+a; printf(a=%d,b=%dn,a,b); void main() int a=1; /動(dòng)態(tài)存儲(chǔ)方式 f(a); f(a); f(a); a=1, b=3a=1, b=3a=1, b=3函數(shù)調(diào)用
42、時(shí),動(dòng)態(tài)變量b分配一個(gè)內(nèi)存空間,函數(shù)結(jié)束時(shí)變量b會(huì)釋放之前分配的內(nèi)存空間。再次調(diào)用f()時(shí),則又被重新分配了內(nèi)存空間,并賦初值2。static聲明靜態(tài)局部變量如果在定義局部變量時(shí)使用關(guān)鍵字static,則該變量為靜態(tài)變量。靜態(tài)變量在程序執(zhí)行期間會(huì)一直占用存儲(chǔ)單元,它只能被初始化一次。在每次調(diào)用其所在函數(shù)時(shí),變量并不重新初始化,而是繼續(xù)使用上次調(diào)用結(jié)束時(shí)保存的值。static聲明靜態(tài)局部變量【例4.11】靜態(tài)變量的使用。#include void f(int a) static int b=2; /靜態(tài)存儲(chǔ)方式,變量不釋放 b=b+a; printf(a=%d,b=%dn,a,b); void
43、main() int a=1,i; /動(dòng)態(tài)存儲(chǔ)方式 f(a); f(a); f(a); a=1, b=3a=1, b=4a=1, b=5register變量將頻繁使用的變量定義為register變量,該變量存放在CPU的寄存器中,因?yàn)榧拇嫫鞯拇嫒∷俣冗h(yuǎn)高于內(nèi)存,從而可以顯著提高程序的運(yùn)行效率?!纠?.12】register變量的使用。#include long f(int a) register long s=0; /register類型變量 s=s+a;s=s+a;s=s+a; return s; void main() int s; /動(dòng)態(tài)存儲(chǔ)方式 s=f(100); printf(sum
44、=%ldn,s); sum=300extern變量在一個(gè)工程項(xiàng)目中可以包含多個(gè)源程序文件。extern多用于聲明變量是定義在其他文件中的外部變量。關(guān)于關(guān)鍵字extern的使用,詳見4.4節(jié)程序的模塊化設(shè)計(jì)編寫大項(xiàng)目時(shí)程序較長(zhǎng),且可能有很多人參與,這時(shí)再將程序代碼都編寫在一個(gè)源代碼文件中就很不方便了。我們?cè)趯?shí)現(xiàn)一個(gè)項(xiàng)目時(shí),可以將代碼分別寫在多個(gè)源代碼文件中,而只在一個(gè)文件中包括main()函數(shù)?!纠?.13】模塊化的程序設(shè)計(jì)舉例。(1)建立“空項(xiàng)目”類型的項(xiàng)目,項(xiàng)目名稱為eg0413。程序的模塊化設(shè)計(jì)(2)增加新的“C+文件”類型的源文件“s1.cpp”,編寫程序如下。extern float
45、x; /聲明引用外部變量void sum(float a,float b) /求和 x= a+b; 程序的模塊化設(shè)計(jì)(3)增加新的“C+文件”類型的源文件“s2.cpp”,編寫程序如下。extern float y; /聲明引用外部變量void sub(float a,float b) /求差 y=a-b; 程序的模塊化設(shè)計(jì)(4)增加新的“C+文件”類型的源文件“s3.cpp”,編寫程序如下。#includeextern float x,y; /聲明引用外部變量 void fun() printf(sum=%f,?sub=%fn,x,y);程序的模塊化設(shè)計(jì)(5)增加新的“C+文件”類型的源文件
46、“s4.cpp”,編寫程序如下。extern void sum(float a,float b); /聲明引用外部函數(shù) extern void sub(float a,float b); extern void fun(); float x,y; void main() sum(3,4); sub(3,4); fun(); 程序的模塊化設(shè)計(jì)(6)執(zhí)行“BuildBuild Eg0413exe”或按F7鍵,連接生成可執(zhí)行程序。sum=7.000000, sub=-1.000000程序的模塊化設(shè)計(jì)說明:(1)各個(gè)源文件中定義的函數(shù)和外部變量,可以被其他文件調(diào)用。調(diào)用前用extern聲明extern
47、 void sum(float a,float b); /聲明引用外部函數(shù) extern void sub(float a,float b); extern void fun(); extern float x,y;程序的模塊化設(shè)計(jì)說明:(2)也可以把外部函數(shù)的聲明寫在調(diào)用它的函數(shù)體的內(nèi)部。例如:(3)全局外部函數(shù)的聲明和定義在同一個(gè)模塊中時(shí),外部函數(shù)的聲明也可以省略關(guān)鍵字extern。void main() extern void sum(float a,float b); /聲明引用外部函數(shù) sum(3,4); .程序的模塊化設(shè)計(jì)當(dāng)一個(gè)外部函數(shù)和外部變量?jī)H限于本源程序模塊中使用時(shí),可以使用
48、關(guān)鍵字static將其定義為靜態(tài)外部函數(shù)和變量,此函數(shù)和變量?jī)H能在本文件中調(diào)用?!纠?.14】靜態(tài)外部函數(shù)和靜態(tài)外部變量舉例。(1)建立“空項(xiàng)目”類型的項(xiàng)目,項(xiàng)目名稱為eg0414。程序的模塊化設(shè)計(jì)(2)增加新的“C+文件”類型的源文件“s1.cpp”,編寫程序如下。static int t; /靜態(tài)變量只能被本文件調(diào)用 static int sum(int a,int b)/靜態(tài)函數(shù)只能被本文件調(diào)用 return a+b; 程序的模塊化設(shè)計(jì)(3)增加新的“C+文件”類型的源文件“s2.cpp”,編寫程序如下。#include extern int t; /外部變量t為static,不能被外部
49、引用,出錯(cuò)extern int sum(int a,int b);/外部sum函數(shù)為static,不能被外部引用,出錯(cuò)void main() t=sum(3,4); /變量t和sum函數(shù)都不能被外部引用,出錯(cuò) printf(sum=%dn,t); 將s1.cpp中的變量t和函數(shù)sum定義語(yǔ)句的static去掉,就可以被外部引用了。作業(yè)一、選擇題二、編程題算法設(shè)計(jì)程序設(shè)計(jì)程序調(diào)試第5章 選擇結(jié)構(gòu)程序設(shè)計(jì)天津科技大學(xué)公共基礎(chǔ)與新技術(shù)部128主要內(nèi)容選擇結(jié)構(gòu)則會(huì)根據(jù)條件的真假?zèng)Q定程序控制流程,它是實(shí)現(xiàn)復(fù)雜程序的基礎(chǔ)。1選擇結(jié)構(gòu)算法設(shè)計(jì)。2關(guān)系運(yùn)算、邏輯運(yùn)算符和表達(dá)式。3if語(yǔ)句。4switch語(yǔ)句。
50、5選擇結(jié)構(gòu)的嵌套。6條件運(yùn)算符長(zhǎng)征,紅軍四渡赤水,根據(jù)敵人的部署情況做出正確選擇在長(zhǎng)征期間,毛澤東同志指揮紅軍四度赤水,根據(jù)敵人的部署情況做出正確選擇,指揮紅軍運(yùn)動(dòng)和作戰(zhàn),在運(yùn)動(dòng)中大量殲滅敵人,牢牢地掌握戰(zhàn)場(chǎng)的主動(dòng)權(quán),取得了紅軍長(zhǎng)征史上以少勝多、變被動(dòng)為主動(dòng)的光輝戰(zhàn)例。選擇結(jié)構(gòu)的算法設(shè)計(jì)【例5.1】輸入x,求函數(shù)的值。分析:首先判定x1條件,如果為真則結(jié)果為 x;否則判定x1條件,如果為真則結(jié)果為 2x-1;不管執(zhí)行哪個(gè)分支,最后都需要輸出結(jié)果 y選擇結(jié)構(gòu)的算法設(shè)計(jì)【例5.1】輸入x,求函數(shù)的值。分析:首先判定x1條件,如果為真則結(jié)果為x;否則判定x1條件,如果為真則結(jié)果為2x-1;不管執(zhí)行哪
51、個(gè)分支,最后都需要輸出結(jié)果y算法設(shè)計(jì)如果x1為真,則執(zhí)行第一個(gè)分支。如果x1為假,那么第二個(gè)條件x1必然為真,也就不需要再做判斷了。算法設(shè)計(jì)如果x1為真,則執(zhí)行第一個(gè)分支。如果xb為真,則轉(zhuǎn)入(3),否則轉(zhuǎn)入(4)。(3)max=a,轉(zhuǎn)入(5)。 (4)max=b,轉(zhuǎn)入(5)。(5)輸出max。(6)結(jié)束。算法設(shè)計(jì)【例5.2】輸入a、b值,輸出其中較大的數(shù)。(1)輸入變量a和b。(2)如果ab為真,則轉(zhuǎn)入(3),否則轉(zhuǎn)入(4)。(3)max=a,轉(zhuǎn)入(5)。(4)max=b,轉(zhuǎn)入(5)。(5)輸出max。(6)結(jié)束。算法設(shè)計(jì)【例5.3】輸入a、b值,如果ab,那么交換a和b,使得ab。(1)輸
52、入變量a和b。(2)如果條件ab為真,則交換a和b;否則轉(zhuǎn)入(3)。(3)輸出a、b。(4)結(jié)束。算法設(shè)計(jì)【例5.3】輸入a、b值,如果ab,那么交換a和b,使得ab。(1)輸入變量a和b。(2)如果條件ab為真,則交換a和b;否則轉(zhuǎn)入(3)。(3)輸出a、b。(4)結(jié)束。算法設(shè)計(jì)(1)算法依然包括輸入、處理和輸出3個(gè)部分,其中處理部分使用了選擇結(jié)構(gòu)。(2)使用中間變量t交換兩個(gè)變量a和b數(shù)值的方法常用在一些經(jīng)典算法中,交換過程如圖5-6所示,讀者應(yīng)注意理解和掌握。算法設(shè)計(jì)【例5.4】輸入變量a、b和c,將它們按照從小到大的順序排序后輸出。(1)如果ab,則a和b交換。(2)如果ac,則a和c
53、交換,此時(shí)可以保證a最小。(3)如果bc,則b和c交換,此時(shí)可以保證bc。(4)排序完畢。思考4個(gè)、5個(gè)、100個(gè)變量排序問題的算法應(yīng)該怎樣設(shè)計(jì)。算法設(shè)計(jì)【例5.4】輸入變量a、b和c,將它們按照從小到大的順序排序后輸出。(1)如果ab,則a和b交換。(2)如果ac,則a和c交換,此時(shí)可以保證a最小。(3)如果bc,則b和c交換,此時(shí)可以保證bc。(4)排序完畢。思考4個(gè)、5個(gè)、100個(gè)變量排序問題的算法應(yīng)該怎樣設(shè)計(jì)。關(guān)系運(yùn)算與邏輯運(yùn)算關(guān)系運(yùn)算可比較兩個(gè)數(shù)據(jù)的關(guān)系;邏輯運(yùn)算可組合判斷多個(gè)條件,常用來描述程序設(shè)計(jì)中的條件。 關(guān)系運(yùn)算符和關(guān)系表達(dá)式關(guān)系運(yùn)算符用于比較兩個(gè)操作數(shù)的關(guān)系,用關(guān)系運(yùn)算符連
54、接兩個(gè)表達(dá)式稱為關(guān)系表達(dá)式。例如:ab,如果成立,則表達(dá)式值為“真”,否則為“假”。在C語(yǔ)言中,關(guān)系表達(dá)式的值為“真”用整數(shù)1表示,而值為“假”用整數(shù)0表示53 135 0關(guān)系運(yùn)算符和關(guān)系表達(dá)式運(yùn)算符運(yùn)算關(guān)系表達(dá)式(假設(shè):a=5,b=6,c=7)優(yōu)先級(jí)大于ab值為0 a+bc值為1高小于3+a=大于等于a*b=c值為1 =小于等于12+cb+c,相當(dāng)于a(b+c) a=bc,相當(dāng)于a=(bc) a=bc,相當(dāng)于a=(bc)關(guān)系運(yùn)算符和關(guān)系表達(dá)式【例5.5】編寫以下程序,查看結(jié)果。#include void main() int a,b,c; int d,e,f; a=4,b=5,c=6; d=
55、ab;/值為0 e=abba; /值為0 printf(%d %d %d n,d,e,f);0 1 0e=abc;“”運(yùn)算符是按照從左至右的方向結(jié)合先執(zhí)行“ab”,其值為真,即整數(shù)1;而“1ba;“”運(yùn)算符是按照從左至右的方向結(jié)合先執(zhí)行“cb”,其值為真,即整數(shù)1,“1a”的值為假,即整數(shù)0。邏輯運(yùn)算符和邏輯表達(dá)式邏輯運(yùn)算符用于對(duì)操作數(shù)進(jìn)行邏輯運(yùn)算,用邏輯運(yùn)算符連接關(guān)系表達(dá)式或邏輯值稱為邏輯表達(dá)式運(yùn)算符含義說明舉例(a=10)值&與(并且)兩個(gè)操作數(shù)都為真時(shí),結(jié)果才為真1=a & a151|或(或者)兩個(gè)操作數(shù)都為假時(shí),結(jié)果才為假a=200!非(取反)操作數(shù)為真,結(jié)果為假,反之亦然! (a4)
56、1ab! aa & ba | b11011100010110100100邏輯運(yùn)算符和邏輯表達(dá)式說明:(1)邏輯運(yùn)算的操作數(shù)以0表示假,以非0表示真。5 10 9.8 邏輯運(yùn)算的值“真”用整數(shù)1表示,“假”用整數(shù)0表示?!纠?.6】編寫以下程序,查看結(jié)果#include void main() int a,b,c; a=4,b=5,c=6; printf(%dn,!a);/值為0 printf(%dn,a&b); /值為1 printf(%dn,a|b); /值為1 printf(%dn,a&0|b);/值為10111邏輯運(yùn)算符和邏輯表達(dá)式在C語(yǔ)言中,各類運(yùn)算符的優(yōu)先級(jí)關(guān)系例如: ab&cd,相
57、當(dāng)于 (ab)&(cd)。 !a+b|ab+1,相當(dāng)于 (!a)+b)|(a(b+1)學(xué)習(xí)提示:在實(shí)際編程時(shí),為了避免因運(yùn)算符優(yōu)先級(jí)不清楚造成的混亂,可以給需要先執(zhí)行的表達(dá)式加上“( )”。邏輯運(yùn)算符和邏輯表達(dá)式【例5.7】已知判斷年份y是否為閏年的條件為:能被4整除,但不能被100整除;能被400整除。寫出其邏輯表達(dá)式。1996 1992 2000 1900 y%4=0&y%100!=0 | y%400=0(y%4=0&y%100!=0 )| (y%400=0)學(xué)習(xí)提示:注意理解和掌握判斷一個(gè)整數(shù)能否被另一個(gè)整數(shù)整除的方法。邏輯運(yùn)算符和邏輯表達(dá)式【例5.8】寫出判斷變量a是否介于110的表達(dá)
58、式。(1)表達(dá)式“1=a=10”錯(cuò)誤 永遠(yuǎn)為 1相當(dāng)于 (1=a)=10(2)表達(dá)式“1=a & a=10”正確學(xué)習(xí)提示:注意掌握判斷一個(gè)變量是否介于某個(gè)區(qū)間的邏輯表達(dá)式的寫法。短路求值(,先不要求)只要邏輯表達(dá)式的值可以確定就停止繼續(xù)對(duì)表達(dá)式求值,這就是所謂的“短路求值”?!纠?.9】編寫以下程序,查看結(jié)果。#include void main() int a,b,c,d; a=4,b=5; d=(a0)|(b=0); /d為1,b不變,仍然為5 printf(%d %dn,d,b);0 51 5if語(yǔ)句if語(yǔ)句,它會(huì)根據(jù)判定條件的真假,決定執(zhí)行的語(yǔ)句。if (表達(dá)式1) 語(yǔ)句1else i
59、f (表達(dá)式2) 語(yǔ)句2else if (表達(dá)式n) 語(yǔ)句nelse 語(yǔ)句n+1if語(yǔ)句【例5.10】按照?qǐng)D5-10所示的算法,編寫例5.1的程序,輸入x,求函數(shù)的值。if語(yǔ)句【例5.10】按照?qǐng)D5-10所示的算法,編寫例5.1的程序,輸入x,求函數(shù)的值。#include void main() float x,y; printf(Please input x:); scanf(%f,&x); /輸入x if(x1) y=x; else y=2*x-1; printf(y=%fn,y);Please input x:-5y=-5.000000Please input x:5y=9.000000
60、if語(yǔ)句【例5.11】按照?qǐng)D5-11所示的算法,編寫例5.1的程序,求函數(shù)的值。if語(yǔ)句【例5.11】按照?qǐng)D5-11所示的算法,編寫例5.1的程序,求函數(shù)的值。#include void main() float x,y; printf(Please input x:); scanf(%f,&x); /輸入x if(x1) y=x; else if (x10) y=2*x-1; else y=x*x+2*x+2; printf(y=%fn,y);Please input x:-5y=-5.000000Please input x:5y=9.000000Please input x:50y=26
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 家電清洗行業(yè)合同模板
- 個(gè)人土方回填合同模板
- 家政職工合同模板
- 通道綠化施工合同模板
- 餐飲加盟店合同模板完整版
- 退伙合同模板
- 重大疾病合同模板
- 陽(yáng)泉房屋租賃合同模板
- 門廠合同模板
- 酒吧物品供貨合同模板
- 電纜溝鋼板樁支護(hù)施工方案
- 公司轉(zhuǎn)款給另一個(gè)公司應(yīng)該有委托轉(zhuǎn)款函
- 農(nóng)民專業(yè)合作社成員名冊(cè)(模板)
- 部編版二年級(jí)上冊(cè)道德與法治第二單元 我們的班級(jí) 達(dá)標(biāo)測(cè)試卷及答案28
- 裝修工程提出的合理化建議
- 藥品采購(gòu)供應(yīng)制度檢查表
- 如何做好一名責(zé)任護(hù)士ppt課件
- 通信線路畢業(yè)設(shè)計(jì)(論文):通信光纜線路維護(hù)
- 5索夫矩陣模型在觀眾拓展規(guī)劃中的運(yùn)用
- 管道縮寫代號(hào).xlsx
- 2021年科室人材培養(yǎng)和人材梯隊(duì)建設(shè)計(jì)劃.doc
評(píng)論
0/150
提交評(píng)論