《小學生C++創意編程》第8單元課件 函數_第1頁
《小學生C++創意編程》第8單元課件 函數_第2頁
《小學生C++創意編程》第8單元課件 函數_第3頁
《小學生C++創意編程》第8單元課件 函數_第4頁
《小學生C++創意編程》第8單元課件 函數_第5頁
已閱讀5頁,還剩46頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

英第8單元C++快樂編程——小學C++創意編程實例(課件)堂課Hi,Pythonlist,tuple,dictionary語復雜問題,函數上陣——函數目錄目錄第27課老鷹捉小雞游戲――庫函數第28課剪刀石頭布游戲——自定義函數第29課古老漢諾塔游戲——函數的聲明和調用老鷹捉小雞游戲――庫函數第27課

體育課上,皮皮魯與小伙伴玩老鷹捉小雞的游。皮皮魯的小伙伴,一共有6位小朋友,按1至6號進行編號,從中隨機選擇一位當老鷹。皮皮魯準備編程調用隨機函數rand(),產生一個機隨數,隨機數是幾,就讓幾號小朋友來當老鷹。讀故事理思路C++函數有兩種,一種是庫函數,一種是自己編寫的函數。常見的庫函數有隨機函數rand()、時間函數time()等。在編程時,這些函數不需要自己定義和編寫,如果想使用這些庫函數,必須在文件開頭“包含”有關頭文件即可,本題中需要添加的頭文件是<stdlib.h>和<time.h>。1.理解題意2.問題思考理思路3.思路分析本題,其思路如下:第一步:使用srand(time(0))函數,獲取當前系統時間,設置隨機數種子;第二步:調用隨機函數rand()產生一個1~6之間的隨機數;第三步:輸出隨機數n。理思路查秘籍1.英漢字典main[me?n]主要的;重要的

void[v??d]空的;無參數;無返回值;無類型2.庫函數的使用在程序設計中,常常將一些常用的功能模塊編寫成函數放在C++庫中,叫庫函數。C++常用庫中提供了大量的可以調用的庫函數,如數學運算的、文件操作的等,在編寫程序的過程中,可以直接拿來使用。格式如下:求解決1.編寫代碼2.測試程序運行結果:第1次運行產生隨機數為:第2次運行產生隨機數為:第3次運行產生隨機數為:求解決2.程序解決3.易犯錯誤一般情況下,rand()和srand()要一起使用,其中srand()用來初始化隨機數種子,rand()用來產生隨機數。time()函數用來獲取系統時間,因為每次運行程序的時間是不相同的,所以產生的隨機數也是不一樣的。一般情況下,rand()和srand()要一起使用,其中srand()用來初始化隨機數種子,rand()用來產生隨機數。time()函數用來獲取系統時間,因為每次運行程序的時間是不相同的,所以產生的隨機數也是不一樣的。求解決4.拓展應用默認情況下隨機數種子為1,而相同的隨機數種子產生的隨機數是一樣的,失去了隨機性的意義,所以為使每次得到的隨機數不一樣,用函數srand()初始化隨機數種子。srand()的參數是time函數的值(即當前時間),因為兩次調用rand()函數的時間通常是不同的,這樣就可以保證隨機性了。如產生10個1~100之間的隨機數可以這樣寫:#include<iostream>#include<cstdlib>//調用rand()和srand()函數

#include<ctime>//調用time()函數

usingnamespacestd;intmain(){inti,n;srand(time(0));for(i=0;i<10;i++){ n=rand()%100+1;cout<<n<<endl; }}閱覽室每個C程序都至少有一個函數,即主函數main()。每個程序可以包含若干個其他函數,但有且只有一個main函數。程序總是從main函數開始執行,在程序執行時main函數可以調用其他函數,其他函數也可以互相調用,但其他函數不能調用main函數。1.主函數閱覽室2.常用數學函數

編寫程序時,如果需要解決一些數學問題,此時千萬不要著急先去寫代碼,C++庫中提供了很多數學函數,隨時可以調用,這些庫函數多包含中<cmath>庫中。練武功1.閱讀程序寫結果輸入:5輸入:-8輸出:

輸出:

練武功2.修改程序錯誤1:

錯誤2:

下面這段代碼是求一個實數的平方根,其中有2處錯誤,快來改正吧!

練武功3.完善程序傳說古代的敘拉古國王海倫二世發現一個公式,利用三角形的三條邊長可以用來求取三角形面積。已知△ABC中的三邊長分別為a,b,c,求△ABC的面積(提示:海倫公式如下,其中p=(a+b+c)/2)。練武功4.編寫程序

班級聯歡會上要舉行抽獎活動,全班50名同學每人都拿到了1個抽獎號,試編寫程序實現隨機抽獎活動,每次抽出5位幸運同學。剪刀石頭布游戲――自定義函數第28課

剪刀石頭布,是一種非常簡單而有趣的小游戲,游戲規則很簡單,通過剪刀,石頭,布三種手勢判斷勝負,即剪刀勝布,布勝石頭,石頭勝剪刀。現在,需要你編寫一個程序,判斷人與電腦進行剪刀石頭布游戲的結果。讀故事理思路這是一個猜拳游戲(剪刀勝布,布勝石頭,石頭勝剪刀),人與電腦對決。人出的拳由自己決定,電腦則隨機出拳,最后判斷勝負。

1.理解題意2.問題思考理思路3.算法分析本題可通過自定義不同的函數來實現特定的功能,思路如下:第一步:定義一個玩家出拳函數voidplayer(inta);第二步:定義電腦出拳函數intcomputer();第三步:定義判斷輸贏函數voidpd(intx,intn)。理思路查秘籍1.函數的定義當C++提供給我們的標準函數不能滿足需要時,沒關系,我們也可以自己編寫函數的。在C++語言中,函數是由函數頭和函數體組成,每個組成部分都有著不同的作用。函數定義的一般格式如下:查秘籍2.函數定義的說明(1)返回值類型函數的數據類型是函數的返回值類型,可能是int、double、char等,若數據類型為void,則無返回值。(2)函數名函數名是函數的實際名稱。一個程序中除了主函數必須為main外,其余函數的名稱按照變量的取名規則命名,最好取有助于記憶的名字。(3)形式參數形式參數(簡稱形參)表可以是空的(即無參函數);也可以有多個形參,形參間用逗號隔開,不管有無參數,函數名后的圓括號都必須有。(4)函數主體函數主體包含一組定義函數執行任務的語句。函數體內的語句決定該函數功能。函數體實際上是一個復合語句,它可以沒有任何類型說明,而只有語句,也可以兩者都沒有,即空函數。求解決1.編寫代碼求解決2.測試程序

求解決3.程序解決4.易犯錯誤首先,我們需要定義3個函數來完成玩家出拳(player)、電腦出拳頭(computer)和比較判斷(pd)結果。然后給出文字提示,讓玩家輸入對應的數字代表玩家出拳。玩家出拳結束,電腦開始出拳,電腦通過產生隨機數來出拳。剪刀石頭布游戲規則很簡單,即剪刀勝布,布勝石頭,石頭勝剪刀。如果x代表人出拳,n代表電腦出拳,1代表剪刀,2代表石頭,3代表布,則通過以下邏輯表達式,判斷人和電腦對決輸贏的結果。求解決5.程序改進想一想,為了避免玩一次游戲就退出程序,可以將主程序代碼放在循環中,while(1)條件一直成立,這樣可以一直不斷在玩,添加如下所示代碼。intmain(){while(1){cout<<"剪刀石頭布開始\n"<<endl;cout<<"請選擇:1.剪刀2.石頭3.布"<<endl;cin>>x;player(x);n=computer();pd(x,n);}}6.拓展應用在本程序末尾還可以添加用于統計整個戰況的代碼,如cout<<"戰況:贏:"<<y<<"次輸:"<<s<<"次平:"<<p<<"次"<<endl。閱覽室一個C++程序可由一個主函數和若干個其他函數構成。一個較大的程序可分為若干個程序模塊,每一個模塊用來實現一個特定的功能。在C++語言中用子程序實現模塊的功能。子程序由函數來完成。1.主函數與其他函數閱覽室2.形式參數與實際參數

函數的參數分為形式參數和實際參數。在定義函數時,函數名后面圓括號中的變量名稱為形式參數,簡稱“形參”。調用函數時函數名后面圓括號中的參數稱為實際參數,也叫實參。調用函數將實際參數傳遞給形式參數,然后執行函數體。練武功1.閱讀程序寫結果練武功2.修改程序下面這段代碼是定義一個輸出“*”的函數,利用它輸出三角形的“*”號圖,其中,輸出的行數在程序運行時輸入。其中有2處錯誤,快來改正吧!錯誤1:

錯誤2:

練武功3.完善程序練武功4.編寫程序

已知1個六邊形,其六邊形的面積是4個三角形面積之和,已知4個三角形各邊的長度,求六邊形的面積。請利用函數編程求解此題(提示:六邊形的面積等于四個三角形的面積)。古老漢諾塔游戲――函數聲明和調用第29課

有一個的古老傳說:在印度北部的一個圣廟里,大梵天創造世界的時候做了3根金剛石柱子A、B、C。其中,在A柱子上穿好了由小到大,且編號為1到n的黃金圓盤,這就是所謂的漢諾塔。有一位僧侶,不論白天黑夜要將所有的圓盤從A柱子移到C柱子,但他同時要遵守以下規則:(1)一次只能移動1個圓盤,它必須位于某個柱子的頂部;(2)圓盤只能在三個柱子上存放。(3)大圓盤不能放在小圓盤上面。試編程輸出每一步移動的方法。并估算下,要將A柱上的64個圓盤,按規則要求全部移動到C柱上,需要多長時間。讀故事理思路

游戲最簡單的情況是當只有1個圓盤時,只要將圓盤從A柱移到C柱上就可以了。如果有2個圓盤,則需要通過3個步驟解決這個游戲:①將1號圓盤從A柱移到B柱上;②將2號圓盤從A柱移到C柱上。③再將1號圓盤從B柱移C到柱上。以此類推,雖然游戲的目的是將圓盤從A柱移到C柱上,但是有必要使用B柱作為圓盤的臨時安放位置。可以定義函數hanoi(n,a,b,c),通過遞歸解決該問題。1.理解題意2.問題思考理思路3.算法分析本題要求用最少的移動次數,把1到n號圓盤從A柱經過B柱移動到C柱。根據分析,需要經過以下幾步:第一步:用最少移動次數把1到n-1號圓盤從A柱經過C柱移動到B柱;第二步:把n號圓盤直接從A柱移動到C柱;第三步:用最少移動次數把1到n-1號圓盤從B柱經過A柱移動到C柱。觀察發現,第1步和第3步與原問題的本質是一樣的,只是圓盤數量在減少,源柱、中間柱和目標柱的狀態發生了變化。至此,遞歸關系比較明顯,遞歸終止條件就是當n=1時,直接從A柱移動到C柱即可。理思路查秘籍1.函數的聲明與調用編寫程序時,若想調用函數,必須先告訴計算機,也就是要先聲明函數。只有聲明了函數之后,才可以按規定格式調用函數。具體格式如下:如果在所有函數定義之前聲明了函數,那么該函數在本程序文件中任何地方都有效。如果是在某個主調函數內部聲明了被調用函數,那么該函數就只能在這個函數內部有效。函數聲明與函數定義時的第一行類似,只多了1個“;”號。查秘籍2.函數的返回值在組成函數體的各類語句中,在程序的最后要加一個返回語句return。它的一般形式是:return(表達式);其功能是把程序流程從被調函數轉向主調函數并把表達式的值帶回主調函數,實現函數的返回。當一個函數類型定義為void,或沒有返回值時,函數中可以沒有return語句;函數類型定義為int,必須有返回值。求解決1.編寫代碼2.測試程序輸入:1運行結果:

輸入:2運行結果:

輸入:3運行結果:

求解決3.程序解決4.易犯錯誤如果要把64個圓盤,由一根柱上移到另一根柱上,并且始終保持上小下大的順序。這需要多少次移動呢?通過遞歸的方法,假設有n片,移動次數是f(n),顯然f(1)=1,f(2)=3,f(3)=7,且f(k+1)=2*f(k)+1,且不難證明f(n)=2n-1。n=64時,f(n)=18446744073709551615。這個數字非常龐大,如每秒鐘一次,共需多長時間呢?假如一個平年365天,才有60秒×60分×24小時×365=31536000秒,因此,移完這些圓盤需要5845.54億年以上,而地球存在至今不過45億年。因此,眾僧們即便是耗盡畢生精力也不可能完成64個圓盤的移動。函數定義與函數聲明是不同的,定義是寫出函數的完整形式,而聲明是告訴系統此函數的返回值類型、參數的個數與類型,便于編譯時進行有效的類型檢查。函數聲明與函數定義時的第一行類似,只多了1個“;”號。在函數定義時,函數名后沒有分號。求解決5.程序改進在C語言中,除了主函數外,對于用戶定義的函數要遵循“先定義,后使用”的規則。若把函數的定義放在調用之后,應該在調用之前對函數進行聲明(或稱為函數說明)。但若被調函數的定義出現在主調函數之前,也可以不進行函數聲明。程序代碼如下所示。求解決6.拓展應用在印度還有一個傳說,國王打算獎賞國際象棋的發明人——宰相西達依爾。就問他想要什么,他對國王說:“陛下,請您在這張棋盤的第1個小格里賞給我一粒麥子,在第2個小格里給2粒,第3個小格給4粒,以后每一小格都比前一小格加一倍。請您把這樣擺滿棋盤上所有64格的麥粒,都賞給您的仆人吧!”國王覺得這個要求太容易滿足了,就命令給他這

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論