C++程序設(shè)計(jì)譚浩強(qiáng)版實(shí)驗(yàn)指導(dǎo)書_第1頁
C++程序設(shè)計(jì)譚浩強(qiáng)版實(shí)驗(yàn)指導(dǎo)書_第2頁
C++程序設(shè)計(jì)譚浩強(qiáng)版實(shí)驗(yàn)指導(dǎo)書_第3頁
C++程序設(shè)計(jì)譚浩強(qiáng)版實(shí)驗(yàn)指導(dǎo)書_第4頁
C++程序設(shè)計(jì)譚浩強(qiáng)版實(shí)驗(yàn)指導(dǎo)書_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、-?C+程序設(shè)計(jì)?實(shí) 驗(yàn) 教 學(xué) 指 導(dǎo) 書課程.撰寫人:朱世華審核人:前言程序設(shè)計(jì)是一門實(shí)踐性很強(qiáng)的課程,通過實(shí)驗(yàn)可以穩(wěn)固和加強(qiáng)課堂教學(xué)容,提高學(xué)生實(shí)際工作能力和動(dòng)手能力,并為后續(xù)課程和從事實(shí)踐技術(shù)工作奠定重要的根底。因此,學(xué)生在進(jìn)展理論知識(shí)學(xué)習(xí)的同時(shí),必須十分重視實(shí)踐環(huán)節(jié)-上機(jī)。上機(jī)實(shí)驗(yàn)時(shí)應(yīng)該一人一組,獨(dú)立上機(jī)。在上機(jī)過程中出現(xiàn)的問題,一般應(yīng)自己獨(dú)立處理,學(xué)生應(yīng)在實(shí)驗(yàn)前將教師指定的題目編好程序,然后上機(jī)輸入和調(diào)試。上機(jī)前應(yīng)事先作好準(zhǔn)備工作,以提高上機(jī)實(shí)驗(yàn)的效率,準(zhǔn)備工作至少應(yīng)包括:(1) 復(fù)習(xí)和掌握與本實(shí)驗(yàn)有關(guān)的教學(xué)容。(2) 準(zhǔn)備好上機(jī)所需的程序。(3) 對(duì)運(yùn)行中可能出現(xiàn)的問題應(yīng)事先做出

2、估計(jì);對(duì)程序中有疑問的地方,應(yīng)做上記號(hào),以便上機(jī)時(shí)給予注意。(4) 準(zhǔn)備好調(diào)試和運(yùn)行時(shí)所需的數(shù)據(jù)。實(shí)驗(yàn)設(shè)備與環(huán)境:1、硬件配置Pentium以上PC兼容機(jī)或品牌機(jī),配有彩色顯示器、鼠標(biāo)、鍵盤,存不小于32MB,硬盤自由空間不少于60MB。推薦配置為存256MB或以上,硬盤自由空間1GB以上。2、軟件配置操作系統(tǒng):Windows *P,Windows 2000以上版本開發(fā)環(huán)境:Microsoft Visual C+ 2021以上版本。目錄實(shí)驗(yàn)一 Visual C+ 2021的根本用法1實(shí)驗(yàn)二數(shù)據(jù)類型、運(yùn)算符和表達(dá)式4實(shí)驗(yàn)三三種根本構(gòu)造的實(shí)現(xiàn)17實(shí)驗(yàn)四三種根本構(gòu)造的實(shí)現(xiàn)29實(shí)驗(yàn)六指針13實(shí)驗(yàn)七函數(shù)

3、14實(shí)驗(yàn)八構(gòu)造和聯(lián)合17實(shí)驗(yàn)九類與對(duì)象20實(shí)驗(yàn)十綜合實(shí)驗(yàn)23. z-實(shí)驗(yàn)一 Visual C+ 2021的根本用法一、實(shí)驗(yàn)?zāi)康?1 熟悉Visual C+2021集成開發(fā)環(huán)境的根本命令和功能鍵。2 學(xué)習(xí)完整的C+ 程序開發(fā)過程。3 理解簡單的C+ 程序構(gòu)造。 二、實(shí)驗(yàn)容與步驟本次實(shí)驗(yàn)將學(xué)習(xí)有關(guān)Visual C+ 開發(fā)環(huán)境的一些知識(shí),并嘗試實(shí)現(xiàn)一個(gè)簡單的DOS程序和Windows程序。通過本次實(shí)驗(yàn),可以了解用Visual C+ 開發(fā)應(yīng)用程序的全過程。1、熟悉Visual C+ 開發(fā)環(huán)境我們選擇Visual C+那一項(xiàng)就可以了。以下列圖是VS2021翻開后的畫面,當(dāng)然可能你的界面跟我的不一樣,沒關(guān)

4、系,那只是設(shè)置問題。菜單欄我們常用的是File,View和Debug菜單下的菜單項(xiàng)。工具欄各項(xiàng)其實(shí)在菜單欄都有與它們對(duì)應(yīng)的菜單項(xiàng),功能是一樣的。左側(cè)面板可以放多個(gè)視圖,我這里放了解決方案瀏覽器、類視圖和資源視圖,解決方案瀏覽器中我們可以看到所有頭文件和源文件構(gòu)成的樹,頭文件就是.h后綴的文件,源文件就是.cpp后綴的文件,類視圖中顯示了每個(gè)工程的每個(gè)類,也是樹狀構(gòu)造,在解決方案瀏覽器或類視圖中雙擊每一項(xiàng),中間區(qū)域都會(huì)翻開相應(yīng)的文件或者到類的位置。資源視圖中顯示了界面工程中使用的一些界面資源。中間區(qū)域默認(rèn)是翻開start page,翻開一個(gè)工程后我們?cè)谧髠?cè)面板上雙擊*項(xiàng)時(shí),中間區(qū)域會(huì)出現(xiàn)相應(yīng)的界

5、面。右側(cè)面板上有個(gè)Toolbo*,是在界面工程中用來往界面資源模板上添加控件的,里面包含了各種控件,直接拖到模板上就行了。底側(cè)還有幾個(gè)標(biāo)簽,其中一個(gè)是output,這是輸出視圖,用來輸出程序運(yùn)行信息和我們程序中寫的一些調(diào)試信息,還有一個(gè)Find Result視圖,用來顯示我們搜索任何字母或單詞的結(jié)果。 File->New->Project項(xiàng)可以創(chuàng)立一個(gè)工程,也可以在start page中點(diǎn)擊New Project.,然后出現(xiàn)的New Project窗口中有多個(gè)工程類型可以選擇, Win32 Console Application是Win32控制臺(tái)程序,MFC Application

6、是MFC應(yīng)用程序,可以建立以開發(fā)界面程序,Win32 Project是Win32程序,Empty Project是空程序,MFC DLL用來建立生成動(dòng)態(tài)庫的工程,其它的不常用就不介紹了。我們要建立一個(gè)沒有應(yīng)用程序界面的只有Dos命令行界面的工程就選Win32 Console Application項(xiàng),我們學(xué)習(xí)C+根底知識(shí)用這個(gè)就可以了。它跟Win32 Project的區(qū)別是,它的入口是main函數(shù),而Win32 Project的入口是WinMain函數(shù)。 File->Open->Project/Solution可以翻開以前建立的工程或者解決方案,一個(gè)解決方案中可以包含多個(gè)工程,你可

7、以把它理解為多個(gè)有關(guān)系或者沒關(guān)系的工程的集合,有時(shí)把多個(gè)工程放到一個(gè)解決方案里調(diào)試起來很方便。在View下的菜單項(xiàng)我們就可以控制它。View->Solution E*plorer可以翻開或關(guān)閉解決方案瀏覽器視圖,View->Class View用來控制類視圖的顯示,View->Resource View控制資源視圖的顯示,當(dāng)然只有界面工程的資源視圖中才會(huì)有容。View->Output和View->FindResults等項(xiàng)大家應(yīng)該也知道它們的含義了吧。 Debug->Start Debugging快捷鍵是F5用來開場調(diào)試,Debug->Toggle B

8、readpoint快捷鍵是F9用來設(shè)置斷點(diǎn),設(shè)置斷點(diǎn)后然后開場調(diào)試,程序運(yùn)行到斷點(diǎn)時(shí)會(huì)停下來,我們用鼠標(biāo)放到斷點(diǎn)處的各個(gè)變量上時(shí)可以看到當(dāng)時(shí)這些變量的值。Debug->Start Without Debugging表示不調(diào)試直接運(yùn)行,也就是到斷點(diǎn)處也不會(huì)停頓運(yùn)行。Debug->Step Into快捷鍵是F11用來單步執(zhí)行,遇到子函數(shù)就進(jìn)入并且繼續(xù)單步執(zhí)行;Debug->Step Over快捷鍵是F10也是單步執(zhí)行,但在單步執(zhí)行時(shí),在函數(shù)遇到子函數(shù)時(shí)不會(huì)進(jìn)入子函數(shù)單步執(zhí)行,而是將子函數(shù)整個(gè)執(zhí)行完而跳到下一步,也就是把子函數(shù)整個(gè)作為一步。 工具欄上有個(gè)下拉列表框,它包含有Debu

9、g、Release和Configuration Manager,選擇Debug時(shí)為調(diào)試模式,生成的可執(zhí)行程序中包含調(diào)試信息,我們可以調(diào)試并清楚的看到變量值,選擇Release時(shí)生成的可執(zhí)行程序中不含調(diào)試信息,在設(shè)置斷點(diǎn)后看到的變量值可能不準(zhǔn)確。 msdn幫助可以點(diǎn)Help->View Help快捷鍵是F1,也可以點(diǎn)開場->Microsoft Visual Studio 2021->Microsoft Visual Studio 2021 Documentation翻開。2、控制臺(tái)應(yīng)用程序的建立用Appwizard建立一個(gè)控制臺(tái)應(yīng)用程序,在顯示器上輸出“Hello,World!

10、。1創(chuàng)立工程project首先創(chuàng)立一個(gè)工程,用來管理用戶的應(yīng)用程序。創(chuàng)立工程的步驟為: 啟動(dòng)visual Studio 2021。 從主菜單中選擇菜單項(xiàng)“File“New,翻開“New對(duì)話框。 選擇“Projects標(biāo)簽,從工程列表中單擊“Win32 Console Application選項(xiàng)。在“project name編輯框中鍵入工程的名字,如“hello,系統(tǒng)將自動(dòng)為用戶的工程分配一個(gè)默認(rèn)的目錄。也可以在“Location編輯框中重新輸入工程存放路徑。單擊“OK按鈕繼續(xù)。2編輯源程序在工程中添加一個(gè)文件: 從主菜單中選擇菜單項(xiàng)“File“New,翻開“New對(duì)話框。 在“New對(duì)話框中選

11、擇“File標(biāo)簽,單擊“+ Source File選項(xiàng),建立源文件擴(kuò)展名為.cpp。選中“Add to Project復(fù)選框。在右邊的“Filename編輯框中為文件指定一個(gè)名字,如“Hello,系統(tǒng)將自動(dòng)加上后綴“.cpp。這時(shí)在編輯窗口將自動(dòng)翻開一個(gè)新的空白文件,在文件中輸入源程序。本例中輸入以下容:include <iostream.h> void main()cout<<hello,world!<<endl;仔細(xì)檢查輸入的容,確保容正確。3保存源文件單擊工具欄中的“save圖標(biāo),或選擇菜單項(xiàng)“File“Save保存源文件。4編譯源文件選擇菜單項(xiàng)“Bu

12、ild“pile Hello.cpp來編譯源文件,如果輸入的容沒有錯(cuò)誤,則,在屏幕下方的輸出窗口將會(huì)顯示:hello.obj-0 error(s),0 warning(s)如果在編譯時(shí)得到錯(cuò)誤或警告,則說明源文件出現(xiàn)錯(cuò)誤,檢查源文件,改正錯(cuò)誤后再編譯,直至無誤。5程序選擇菜單項(xiàng)“Build“Build Hello.e*e程序,如果過程中沒有錯(cuò)誤,則在輸出窗口會(huì)顯示:hello.e*e-0 error(s),0 warning(s)如果有錯(cuò)誤,應(yīng)改正,然后重復(fù)4、5,直至無誤。6運(yùn)行程序選擇菜單項(xiàng)“Build“E*ecute Hello.e*e運(yùn)行程序,將顯示一個(gè)類似于DOS的窗口,在窗口中第一

13、行輸出 “hello,world!,第二行輸出“Press any key to continue,提示用戶按任意鍵回到開發(fā)環(huán)境。3、編寫一個(gè)簡單的C+ 程序要求:輸入圓的半徑,計(jì)算圓的周長和面積。步驟:(1) 按照上面的步驟創(chuàng)立一個(gè)工程,名字為“Circle。(2) 在工程中增加一個(gè)文件,命名為“Circle.cpp。(3) 在文件中輸入源程序如下:*include<iostream.h>const double PI = 3.14159; / 定義符號(hào)常量void main( )double radius; / 定義半徑double perimeter, area ; / 定義

14、周長和面積cout<<"請(qǐng)輸入圓的半徑:"cin>>radius;perimeter=2*PI*radius; / 計(jì)算周長area=PI*radius*radius; / 計(jì)算面積cout<<"圓的周長為:"<<perimeter;cout<<"n圓的面積為:"<<area<<endl;(4) 編譯、程序,直到?jīng)]有錯(cuò)誤。(5) 運(yùn)行程序,輸入測試數(shù)據(jù),測試程序的功能。測試數(shù)據(jù):輸入:5輸出:圓的周長為: 31.4159圓的面積為: 78.5397輸入

15、:7輸出:圓的周長為: 43.9823圓的面積為: 153.938思考問題:(1) 程序中為什么要包含頭文件iostream.h.(2) 建立控制臺(tái)應(yīng)用程序的一般步驟是怎樣的.實(shí)驗(yàn)二 數(shù)據(jù)類型、運(yùn)算符和表達(dá)式一、實(shí)驗(yàn)?zāi)康? 掌握Visual C+ 根本數(shù)據(jù)類型的字節(jié)寬度和圍表示,熟悉如何定義一個(gè)整型、字符型和實(shí)型變量,以及對(duì)它們賦值的方法。2 掌握不同類型數(shù)據(jù)之間賦值的規(guī)律。3 學(xué)會(huì)使用C+的有關(guān)算術(shù)運(yùn)算符,以及包含這些運(yùn)算符的表達(dá)式,特別是自增+和自減運(yùn)算符的使用。4 進(jìn)一步熟悉C+程序的編輯、編譯、連接和運(yùn)行的過程。二、實(shí)驗(yàn)容與步驟1、根本數(shù)據(jù)類型的長度編寫一個(gè)程序,輸出根本數(shù)據(jù)類型cha

16、r、short、int、long、float、double和指針類型void*、char*、short*、int*、long*、float*、double*的數(shù)據(jù)類型的長度。要求:弄清所使用的系統(tǒng)上運(yùn)行的C+編譯器中每個(gè)根本數(shù)據(jù)類型的長度。提示:利用運(yùn)算符sizeof(數(shù)據(jù)類型名)來得到各個(gè)數(shù)據(jù)類型的長度。思考問題:為什么所有的指針長度都一樣.2、整型、字符型變量的定義及賦值(1) 輸入并調(diào)試運(yùn)行下面的程序*include<iomanip.h> void main( ) char c1, c2; c1=a; c2=b; cout<<c1<<setw(5)&l

17、t;<c2<<endl; 運(yùn)行此程序,寫出執(zhí)行結(jié)果。 在此根底上增加一個(gè)語句: cout<<(int)c1<<setw(5)<<(int)c2<<endl;再運(yùn)行,并觀察結(jié)果。 將第1行改為; int c1, c2;再運(yùn)行,并觀察結(jié)果。 將第2、3行改為:c1= a; /不用單撇號(hào)c2= b; 再使之運(yùn)行,分析其運(yùn)行結(jié)果。 將第2、3行改為:c1=a; / 用雙撇號(hào)c2=b;再使之運(yùn)行,分析其運(yùn)行結(jié)果。 將第2、3行改為:c1=300; /用大于127的整數(shù)c2=400;再使之運(yùn)行,分析其運(yùn)行結(jié)果。(2) 輸入并調(diào)試運(yùn)行下面的程

18、序*include<iostream.h>void main( ) char c1=a, c2=b, c3=c, c4=101, c5= 116; cout <<c1<<c2<<t<<c3<<t<<c1<<c2<<c3<<endl; cout<<tb<<c4<<c5<<endl;要求:在實(shí)驗(yàn)前先分析程序,寫出應(yīng)得結(jié)果,實(shí)驗(yàn)時(shí)將二者對(duì)照。3 輸入并調(diào)試運(yùn)行下面的程序include<iomanip.h>void main

19、( ) int *, y, m, n; * = 8; y = 10; m = +*; n = y+; cout<<*<<setw(5)<<y<<setw(5)<<m<<setw(5)<<n<<endl; 運(yùn)行程序,注意*、y、m、n各變量的值。 將第4、5行改為: m = *+; n = +y;再運(yùn)行。 將程序改為:*include<iomanip.h>void main( ) int *,y; * = 8; y = 10; cout<<*+<<setw(5)&l

20、t;<+y<<endl; 在的根底上,將cout語句改為:cout<<+*<<setw(5)<<+y<<endl; 再將cout語句改為:cout<<*<<setw(5)<<y<<setw(5)<<*+<<setw<<y+<<endl; 將程序改為:*include<iomanip.h>void main ( ) int *, y, m=0, n=0; * = 8; y = 10; m += *+: n -= -y; co

21、ut<<*<<setw(5)<<y<<setw(5)<<m<<setw(5)<<n<<endl;寫出程序的執(zhí)行結(jié)果。實(shí)驗(yàn)三 三種根本構(gòu)造的實(shí)現(xiàn)1一、實(shí)驗(yàn)?zāi)康?、 學(xué)會(huì)正確使用邏輯運(yùn)算符和邏輯表達(dá)式。2、 熟練掌握if語句和switch語句。3、 學(xué)習(xí)調(diào)試程序。二、實(shí)驗(yàn)容與步驟 1、三個(gè)數(shù)a、b、c,找出最大值放于ma*中。(1) 輸入并調(diào)試運(yùn)行下面的程序:*include<iostream.h>void main()int a,b,c,ma*; /定義四個(gè)整型變量cin>>a

22、>>b>>c;if(a>= b)ma* = a; /a>=belsema* = b; /a<bif(c>ma*)ma* = c; /c是最大值cout<<"ma*="<<ma*<<endl;2 假設(shè)輸入以下數(shù)據(jù),分析程序的執(zhí)行順序并寫出運(yùn)行結(jié)果。 1 2 3 2 1 3 3 2 1 3 1 2 3 3 2 2 1 22、輸入*學(xué)生的成績,經(jīng)處理后給出學(xué)生的等級(jí),等級(jí)分類如下:90分以上包括90:A80至90包括80:B70至80包括70:C60至70包括60D60分以下:E輸入以下程序并調(diào)試

23、運(yùn)行。*include<iostream.h>void main()float score;char grade;cout<<"input a student score:"cin>> score;if(score <0| score >100)cout<<"input error!"<<endl;elseswitch( intscore/10 )case10:case9: grade = 'A'break;case8: grade = 'B'brea

24、k;case7: grade = 'C'break;case6: grade = 'D'break;default: grade = 'E'cout<<"the student scort:"<< grade <<endl;輸入測試數(shù)據(jù),調(diào)試程序并寫出結(jié)果。測試數(shù)據(jù)要覆蓋所有路徑,注意臨界值,例如此題中的100分、60分、0分以及小于0和大于100的數(shù)據(jù)。3、有一函數(shù): * ( *<1 ) y = 2*-1 ( 1*<10 ) 3*-11 ( *10 )用cin語句輸入*的值,求

25、y值。運(yùn)行程序,輸入*的值分別為*<1、1*<10、*10三種情況,檢查輸出的y值是否正確。思考問題:(1) if語句和switch語句適合于什么情況.(2) 能否用switch語句完成對(duì)輸入值的判斷.實(shí)驗(yàn)四 三種根本構(gòu)造的實(shí)現(xiàn)2一、實(shí)驗(yàn)?zāi)康?、學(xué)會(huì)正確使用邏輯運(yùn)算符和邏輯表達(dá)式。2、理解并掌握程序的循環(huán)構(gòu)造。3、熟練掌握用while語句、dowhile語句和for語句實(shí)現(xiàn)循環(huán)的方法。4、 掌握在程序設(shè)計(jì)中用循環(huán)的方法實(shí)現(xiàn)一些常用算法如窮舉、迭代、遞推等。5、 進(jìn)一步學(xué)習(xí)調(diào)試程序。二、實(shí)驗(yàn)容與步驟1、打印500以的“水仙花數(shù)。“水仙花數(shù)是一個(gè)3位數(shù),其各位數(shù)立方和等于該數(shù)本身。輸入

26、以下程序并調(diào)試運(yùn)行*include <iostream.h>void main() int i, j, k, n; for ( n = 100; n<=500; n+ ) i= n/100; j = n/10-i*10; k = n%10; if ( n=i*i*i+j*j*j+k*k*k) cout<<n<<endl; 2、一個(gè)數(shù)如果恰好等于它的因子之和,這個(gè)數(shù)就稱為完數(shù)。求500之的所有完數(shù)。輸入以下程序并調(diào)試程序。*include <iostream.h>void main() int n, s, j;for ( n=1; n<

27、=500; n+ ) s=0; for ( j=1; j<n; j+) if ( n%j=0 ) s=s+j; if ( s=n ) cout<<s<<endl; 3、任給一個(gè)的正整數(shù),要求:(1) 求出它是幾位數(shù)。(2) 按逆序打印出各位數(shù)字。例如原數(shù)為321,應(yīng)輸出123。(3) 除此之外,程序還應(yīng)當(dāng)對(duì)不合法的輸入作必要的處理。例如:輸入負(fù)數(shù)。 提示:利用 %、/ 運(yùn)算符,循環(huán)迭代。4、編寫一個(gè)程序,循環(huán)從標(biāo)準(zhǔn)輸入讀入*雇員的工作時(shí)間以小時(shí)計(jì)和每小時(shí)的工資數(shù),計(jì)算并輸出他的工資。假設(shè)雇員月工作小時(shí)超過40小時(shí),則超過局部按原工資的1.5倍的加班工資來計(jì)算。假設(shè)

28、雇員月工作小時(shí)超過50小時(shí),則超過50的局部按原工資的3倍的加班工資來計(jì)算。而40到50小時(shí)的工資仍按照原工資的1.5倍的加班工資來計(jì)算。要求:1分別用三種循環(huán)for、while、do-while完成程序要求。2要求有輸入提示和輸出提示,如要輸入雇員的工作時(shí)間和每小時(shí)的工資值時(shí),可以提示: “請(qǐng)輸入雇員的工作時(shí)間和小時(shí)工資:輸出時(shí),提示: “雇員工資為:3循環(huán)在用戶輸入的工作時(shí)間為0時(shí)完畢。測試數(shù)據(jù):輸入:30 4輸出:120輸入:45 4.5輸出:213.75輸入:60 5輸出:425輸入:0 0程序完畢思考問題:(1) 三種循環(huán)語句都適合于什么情況.如果已經(jīng)知道要計(jì)算的雇員的數(shù)目如10個(gè),

29、用哪種循環(huán)更方便.(2) while、dowhile的區(qū)別.實(shí)驗(yàn)五 數(shù) 組一、實(shí)驗(yàn)?zāi)康?、 掌握一維數(shù)組和二維數(shù)組的定義、賦值和輸入輸出的方法。2、 掌握字符數(shù)組和字符串函數(shù)的使用。3、 掌握與數(shù)組有關(guān)的算法特別是排序算法和查找算法。二、實(shí)驗(yàn)容與步驟1、輸入一串字符,計(jì)算其中*字符的個(gè)數(shù)。輸入以下程序并調(diào)試運(yùn)行。 *include <iomanip.h>void main( ) char c30; int i , sum=0; cin>>setw(30)>>c; for ( i=0; ci!=0; i+ ) if (ci = *) sum=sum + 1;

30、cout << c <<endl; cout << “*字符的個(gè)數(shù)為: << sum << endl ;2、輸入一行字符,分別統(tǒng)計(jì)出其中的英文字母、數(shù)字和其他字符的個(gè)數(shù)。在得到正確結(jié)果后,請(qǐng)修改程序使之能分別統(tǒng)計(jì)大小寫字母、數(shù)字和其他字符的個(gè)數(shù)。提示:用數(shù)組統(tǒng)計(jì)個(gè)數(shù)。3、從鍵盤讀入假設(shè)干整數(shù),使用選擇排序方法將它們按由低到高排序輸出。要求:用一個(gè)數(shù)組存放各個(gè)整數(shù),用cin 語句輸入。提示:選擇排序法的算法如下:(1) 從n個(gè)數(shù)中選擇最小的一個(gè),把它和第一個(gè)數(shù)組元素交換;(2) 從剩下的n 1個(gè)數(shù)中選擇最小的一個(gè),把它和第二個(gè)數(shù)組元素交

31、換;(3) 依此類推,直到從最后兩個(gè)元素中選出倒數(shù)第二小的元素并把它和倒數(shù)第二個(gè)元素交換為止。測試數(shù)據(jù):程序先輸出:請(qǐng)輸入數(shù)據(jù)個(gè)數(shù)::用戶輸入: 5程序再輸出:請(qǐng)輸入全部數(shù)據(jù):用戶輸入: 31 75 63 45 58 程序輸出: 31 45 58 63 754、有假設(shè)干個(gè)數(shù)存放在一個(gè)數(shù)組中,輸入一個(gè)數(shù),要求用折半查找法找出該數(shù)是數(shù)組中第幾個(gè)元素的值。如果該數(shù)不在數(shù)組中,則輸出“無此數(shù)。要求:假設(shè)干個(gè)數(shù)用賦初值的方法在程序中給出,要找的數(shù)用 cin語句輸入。 提示:折半查找法:折半查找的思想為:在有序表中,取中間元素作為比較對(duì)象,假設(shè)給定值與中間元素的關(guān)鍵碼相等,則查找成功;假設(shè)給定值小于中間元

32、素的關(guān)鍵碼,則在中間元素的左半?yún)^(qū)繼續(xù)查找;假設(shè)給定值大于中間元素的關(guān)鍵碼,則在中間元素的右半?yún)^(qū)繼續(xù)查找。不斷重復(fù)上述查找過程,直到查找成功,或所查找的區(qū)域無數(shù)據(jù)元素,查找失敗。1low=0;high=length-1; /設(shè)置初始區(qū)間2當(dāng)low>high時(shí),返回查找失敗信息 /表空,查找失敗3low<=high,mid=low+high/2; /取中間 假設(shè)k*<elemmid,high=mid-1;轉(zhuǎn)2 /查找在左半?yún)^(qū)進(jìn)展假設(shè)k*>elemmid,low=mid+1;轉(zhuǎn)2 /查找在右半?yún)^(qū)進(jìn)展 假設(shè)k*=elemmid,返回?cái)?shù)據(jù)元素在表中位置 /查找成功測試數(shù)據(jù):例如,

33、有序表20,25,30,36,42,48,55,61,69,72,83,97程序先輸出: 請(qǐng)輸入一個(gè)整數(shù):用戶輸入: 72程序則應(yīng)輸出: 數(shù)據(jù)72在有序表中的位置下標(biāo)是10。用戶輸入: 35程序則應(yīng)輸出: 在有序表中無此數(shù)!5、將兩個(gè)字符串起來。要求:不使用strcat函數(shù)。提示:定義兩個(gè)字符型數(shù)組,找到第一個(gè)串的最后一個(gè)字符位置,將第二個(gè)串的字符依次放入。注意串的完畢標(biāo)志“0。6、找出一個(gè)二維數(shù)組的“鞍點(diǎn),即該位置上的元素在該行上最大,在該列上最小。也可能沒有鞍點(diǎn)。提示:用cin語句從鍵盤輸入數(shù)組各個(gè)元素的值,檢查結(jié)果是否正確。題目并未指定二維數(shù)組的行數(shù)和列數(shù),程序應(yīng)能處理任意行數(shù)和列數(shù)的數(shù)

34、組。因此,從理論上來說,應(yīng)當(dāng)準(zhǔn)備許多種不同行數(shù)和列數(shù)的數(shù)組數(shù)據(jù),但這樣的工作量太大,一般來說不需要這樣做,只需要準(zhǔn)備典型的數(shù)據(jù)即可。如果已指定了數(shù)組的行數(shù)和列數(shù),可以在程序中對(duì)數(shù)組元素賦初值,而不必用cin語句。請(qǐng)同學(xué)們修改程序以實(shí)現(xiàn)之。測試數(shù)據(jù):至少應(yīng)當(dāng)準(zhǔn)備兩組測試數(shù)據(jù)1二維數(shù)組有鞍點(diǎn) 9 80 205 40 90 -60 96 1 210 -3 101 892二維數(shù)組沒有鞍點(diǎn) 9 80 105 40 90 -60 196 1 210 -3 101 89實(shí)驗(yàn)六 指 針一、實(shí)驗(yàn)?zāi)康?、 掌握指針的概念,會(huì)定義和使用指針變量。2、 能正確使用數(shù)組的指針和指向數(shù)組的指針變量。3、 能正確使用字符串

35、的指針和指向字符串的指針變量。4、 了解二級(jí)指針的概念及其使用方法。二、實(shí)驗(yàn)容與步驟1、輸入兩個(gè)整數(shù),按由大到小的順序輸出。輸入以下程序并調(diào)試運(yùn)行。*include<iomanip.h>void main() int a, b;int * p=&a, *q=&b, *t;cout<<"請(qǐng)輸入a和b:"cin>>a>>b;if ( a<b ) t=p;p=q;q=t;cout<<a<<setw(5)<<b<<endl;cout<<*p<<

36、;setw(5)<<*q<<endl;輸入測試數(shù)據(jù),分析運(yùn)行結(jié)果。2、將假設(shè)干字符串按英文字典由小到大排序。提示:利用字符指針數(shù)組存放假設(shè)干字符串,字符串的比較和交換。3、有n個(gè)人圍成一圈,從第一個(gè)人開場報(bào)數(shù)從1到3,凡報(bào)到3的人退出圈子,問最后留下的是原來第幾號(hào)的那位。4、編寫程序,當(dāng)輸入整數(shù)112月份號(hào)時(shí),輸出該月的英文名稱,輸入其他整數(shù)時(shí)完畢程序。例如,輸入“4,則應(yīng)輸出“April。輸入“0,則退出程序,要求使用指針數(shù)組處理。5、使用動(dòng)態(tài)存分配技術(shù)設(shè)計(jì)一個(gè)計(jì)算學(xué)生平均成績的程序,學(xué)生個(gè)數(shù)和課程門數(shù)是任意的,使用二維數(shù)組,程序按平均成績從大到小輸出每個(gè)學(xué)生的成績。

37、實(shí)驗(yàn)七 函數(shù)一、實(shí)驗(yàn)?zāi)康?、掌握函數(shù)的定義和調(diào)用方法。2、掌握函數(shù)實(shí)參與形參的對(duì)應(yīng)關(guān)系以及C+的三種函數(shù)參數(shù)傳遞機(jī)制。3、掌握函數(shù)嵌套調(diào)用和遞歸調(diào)用的方法。4、掌握全局變量和局部變量、動(dòng)態(tài)變量和靜態(tài)變量的概念和使用方法。二、實(shí)驗(yàn)容與步驟1、寫一個(gè)判斷素?cái)?shù)的函數(shù),在主函數(shù)中輸入一個(gè)整數(shù),輸出是否是素?cái)?shù)的信息。輸入以下程序并調(diào)試運(yùn)行。*include<iostream.h>*include<math.h>*include<string.h>int prime(int number) int flag=1, n; for ( n=2; n<= int(sqr

38、t(number) && flag = 1; n+)if (number%n =0)flag = 0;return flag;void main ( ) int number; cout<<"請(qǐng)輸入一個(gè)正整數(shù):"cin>>number; if (prime(number) cout<<number<<"是素?cái)?shù)."<<endl; else cout<<number<<"不是素?cái)?shù)."<<endl;判斷素?cái)?shù)的算法,在以前學(xué)習(xí)循環(huán)的

39、時(shí)候已經(jīng)學(xué)過了,在這里只是把這個(gè)算法用函數(shù)的形式表示出來 。這里要注意函數(shù)的定義 聲明的方法和格式。 2、分析程序的運(yùn)行結(jié)果輸入以下程序,運(yùn)行它,分析得到的結(jié)果。*include<iostream.h>int n=0;int func( int *=10 );void main()int a, b;a=5;b=func(a);cout<<nlocal a=<<a<<endl<<local b=<<b<<endl<<global n=<<n<<endl;a+;b=func(a)

40、;cout<<nlocal a=<<a<<endl<<local b=<<b<<endl<<global n=<<n<<endl;func();int func( int * )int a=1;static int b=10;a+;b+;*+;n+;cout<<nlocal a=<<a<<endl<<local b=<<b<<endl<<parameter *=<<*<<endl;

41、return a+b;運(yùn)行該程序,得到執(zhí)行結(jié)果。分析得到的結(jié)果,說明為什么得到這樣的結(jié)果。3、遞歸函數(shù)與非遞歸函數(shù)。編寫一個(gè)函數(shù),求從n個(gè)不同的數(shù)中取r個(gè)數(shù)的所有選擇的個(gè)數(shù)。其個(gè)數(shù)值為: n!C rn= r!*n-r!其中:n!=n*(n-1)*(n-2)*.*1。要求:(1) 分別用遞歸和非遞歸兩種方式完成程序設(shè)計(jì);(2) 主程序中設(shè)計(jì)一個(gè)循環(huán),不斷從輸入接收n和r的值,計(jì)算結(jié)果并輸出,當(dāng)用戶輸入0 0時(shí),程序完畢;(3) 能檢查輸入數(shù)據(jù)的合法性,要求n>=1并且n>=r;(4) 注意整數(shù)能存放的數(shù)據(jù)圍有限,如何解決.提示:(1) 可以用double數(shù)據(jù)類型來存放函數(shù)的計(jì)算結(jié)果。

42、(2) 遞歸完畢條件:如果r=0,則C(n,r)=1;如果r=1, 則C(n,r)=n。 測試數(shù)據(jù):輸入:5 3輸出:10輸入:10 20輸出:Iput Invalid1輸入:50 3輸出:1.*IND輸入:0 0Iput Invalid1程序完畢思考問題:(1) 對(duì)各種數(shù)據(jù)類型的字長是否有了新的認(rèn)識(shí).(2) 遞歸函數(shù)的書寫要點(diǎn)是什么.(3) 遞歸和非遞歸函數(shù)各有哪些好處.5、 求兩個(gè)整數(shù)的最大公約數(shù)和最小公倍數(shù),用一個(gè)函數(shù)求最大公約數(shù),用另一個(gè)函數(shù)求最小公倍數(shù)。提示:可以用下面的方法求:一、利用輾除法或其它方法求得最大公約數(shù); 二、 最小公倍數(shù)等于兩數(shù)之積除以最大公約數(shù)。) 要求: 兩個(gè)整數(shù)

43、在主函數(shù)中輸入,并傳送給函數(shù)1,求出的最大公約數(shù)返回主函數(shù),然后再和兩個(gè)整數(shù)一起作為實(shí)參傳遞給函數(shù)2,以求出最小公倍數(shù),再返回到主函數(shù)輸出最大公約數(shù)和最小公倍數(shù)。實(shí)驗(yàn)八 構(gòu)造和聯(lián)合一、實(shí)驗(yàn)?zāi)康?、 掌握構(gòu)造體類型變量的定義和使用。2、 掌握構(gòu)造數(shù)組的概念和使用。3、 掌握鏈表的概念,初步學(xué)會(huì)對(duì)鏈表進(jìn)展操作。4、 掌握聯(lián)合體的概念與應(yīng)用。二、試驗(yàn)容與步驟1、輸入和運(yùn)行以下程序。*include<iostream.h>union data short int s2;float a;int b;char c4;u;void main()cin>>u.s0>>u.s

44、1;cout<<"s0="<<u.s0<<" s1="<<u.s1<<endl<<"a="<<u.a<<" b="<<u.b<<endl<<"c0="<<u.c0<<" c1="<<u.c1<<endl<<"c2="<<u.c2<<"

45、 c3="<<u.c3<<endl;輸入兩個(gè)整數(shù)10000、20000給u.s0和u.s1,分析運(yùn)行結(jié)果。然后將cin語句改為: cin>>u.b;輸入60000給b,分析運(yùn)行結(jié)果。2、打印學(xué)生成績單,容包括*、三門課數(shù)學(xué)MT、英語EN、計(jì)算機(jī)PU的成績。計(jì)算每個(gè)學(xué)生三門課程的總分SUM和平均分AVER。假設(shè)三門課成績都在90分以上者,輸出“Y;否則輸出“N,并打印學(xué)生成績單,格式如下:NUM NAME MTENP SUMAVER>=909501 Liufan 95 9896.5289.596.5Y9502 Zhanghua 95 82 86

46、.5263.587.8333N9503 Liming 68 89 8524280.6667N輸入以下程序并調(diào)試運(yùn)行。*include <iomanip.h>struct studentint num;char name15;float score3;float sum;float aver;char ch;void main()student stu3;int i,j;for ( i=0; i<3; i+ )cin>> stui.num;cin>> ;for ( j=0; j<3; j+ ) cin>> stui.s

47、corej; for ( i=0; i<3; i+ )stui.sum=0;stui.ch='Y'for ( j=0; j<3; j+ )stui.sum +=stui.scorej;if (stui.scorej<90)stui.ch='N'stui.aver=stui.sum/3;cout<<"NUM NAME MT EN P SUM AVER >=90"<<endl;for (i=0;i<3;i+)cout<<stui.num<<setw(8)<<

48、<< setw(8)<<stui.score0<<setw(8)<<stui.score1<<setw(8)<<stui.score2<<setw(8)<<stui.sum<<setw(8)<<stui.aver<< setw(5)<<stui.ch<<endl;3、設(shè)計(jì)一個(gè)單向鏈表。從標(biāo)準(zhǔn)輸入讀取假設(shè)干整數(shù),建立鏈表,每次讀入的數(shù)放入鏈表結(jié)尾。當(dāng)用戶輸入0時(shí),完畢鏈表的建立工作。然后從前往后依次輸出鏈表結(jié)點(diǎn)中的容。提示:

49、(1) 鏈表結(jié)點(diǎn)空間動(dòng)態(tài)申請(qǐng)。(2) 因?yàn)槊看涡陆Y(jié)點(diǎn)插入在表尾,所以應(yīng)設(shè)一個(gè)指針總是指向當(dāng)前的表尾。(3) 處理申請(qǐng)不到空間的情況。測試數(shù)據(jù): 程序輸出:請(qǐng)輸入假設(shè)干整數(shù)建立鏈表輸入0完畢: 用戶輸入:1 2 3 4 5 6 7 0 程序輸出:1 2 3 4 5 6 7思考問題: 如果是雙向鏈表,程序要做哪些改動(dòng).4、有10個(gè)學(xué)生,每個(gè)學(xué)生的數(shù)據(jù)包括*、3門課的成績,從鍵盤輸入10個(gè)學(xué)生數(shù)據(jù),要求打印出3門課的平均成績,以及最高分學(xué)生的數(shù)據(jù)包括*、3門課的成績、平均分?jǐn)?shù)。要求:用input函數(shù)輸入10個(gè)學(xué)生的數(shù)據(jù);用average函數(shù)求平均分;用ma*函數(shù)找出最高分的學(xué)生數(shù)據(jù);平均分和最高分學(xué)

50、生的數(shù)據(jù)都在主函數(shù)中輸出。5、建立一個(gè)鏈表,每個(gè)結(jié)點(diǎn)包括:*、性別、年齡、。輸入一個(gè)年齡,如果鏈表中的結(jié)點(diǎn)所包含的年齡等于此年齡,則將此結(jié)點(diǎn)刪去。實(shí)驗(yàn)九 類與對(duì)象一、實(shí)驗(yàn)?zāi)康?、 掌握類和對(duì)象的定義和使用。2、 理解構(gòu)造函數(shù)和析構(gòu)函數(shù)的作用。3、 學(xué)習(xí)使用靜態(tài)成員和聯(lián)成員函數(shù)。4、 掌握從現(xiàn)有類派生出新類的方式。 5、 了解基類成員在派生類中的控制。6、 了解虛函數(shù)對(duì)多態(tài)性的支持。二、實(shí)驗(yàn)容與步驟1、構(gòu)造函數(shù)和析構(gòu)函數(shù)的調(diào)用。輸入和運(yùn)行以下程序。*include<iostream.h>class A int *a;public: A(int *) a=new int(*); cou

51、t<< Constructor: <<*a<<endl;A() cout<<Destructor: <<*a <<endl; delete a; ;void main()A *(3),*p;p=new A(5);delete p;2、派生類構(gòu)造函數(shù)和析構(gòu)函數(shù)的調(diào)用。輸入以下程序并調(diào)試運(yùn)行。*include<iostream.h>class A int a;public: A(int aa=0):a(aa) cout<<Constructor A: <<a<<endl; A()

52、 cout<<Destructor A: <<a<<endl; ;class B:public A int b;public: B(int aa,int bb):A(aa),b(bb) cout<<Constructor B: <<b<<endl; B() cout<<Destructor B: <<b<<endl; ;void main() B *(2,3),y(4,5);3、多態(tài)性的實(shí)現(xiàn)。1輸入以下程序并調(diào)試運(yùn)行,分析其執(zhí)行結(jié)果。*include<iostream.h>/

53、 類Point的定義class Pointpublic: Point( double i=0, double j=0 ) *=i, y=j; double area() / 返回點(diǎn)的面積 (0.0) return 0.0; private: double *,y; / 點(diǎn)的坐標(biāo);/ 類Circle的定義const double pi=3.14159;class Circle : public Pointpublic: Circle( double i=0, double j=0, double r=1 ) : Point( i,j ) radius=r; double area() /返回圓的

54、面積 return pi*radius*radius; double getRadius() return radius; private: double radius;void main() Point p; cout<<"點(diǎn)的面積為: "<<p.area()<<endl; Circle c( 1, 1, 10 ); cout<<"半徑為 "<<c.getRadius()<<" 的圓的面積為: "<<c.area()<<endl;Poin

55、t *pp; pp=&c; /基類指針指向派生類的對(duì)象 cout<<"半徑為 "<<c.getRadius()<<" 的圓的面積為: "<<pp->area()<<endl;2改寫上面的程序,將成員函數(shù)area定義為虛函數(shù),分析其執(zhí)行結(jié)果。思考:如何正確使用虛函數(shù)實(shí)現(xiàn)運(yùn)行時(shí)的多態(tài)性.4、靜態(tài)成員的使用。*商店經(jīng)銷一種貨物,貨物成箱購進(jìn),成箱賣出,購進(jìn)和賣出時(shí)均以重量為單位,各箱的重量不一樣,因此,商店需要記錄下目前庫存的貨物的總重量,現(xiàn)要求用C+語言把商店貨物購進(jìn)和賣出的情況模擬出來。提示:(1) 應(yīng)將這類貨物用一個(gè)類Goods來描述,而每箱貨物作為這個(gè)類的對(duì)象。每箱貨物有重量,因此應(yīng)有一個(gè)數(shù)據(jù)成員來表示這箱貨物的重量,而總重量用一個(gè)靜態(tài)數(shù)據(jù)成員來記錄。(2) 在貨物類的構(gòu)造函數(shù)和析構(gòu)函數(shù)中分別修改總重量。要求:(1) 提供靜態(tài)成員函數(shù)G

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論