版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
校本課程
算法與編程C++
目錄
C++語言入門(平臺(tái)安裝介紹基本功能)................3
C++語言簡介.........................................4
C++語言程序結(jié)構(gòu)....................................6
賦值語句............................................8
運(yùn)算符和表達(dá)式.....................................10
常量和變量.........................................12
標(biāo)準(zhǔn)數(shù)據(jù)類型........................................14
數(shù)據(jù)輸入輸出........................................16
順序結(jié)構(gòu)實(shí)例........................................18
概述...............................................20
if選擇結(jié)構(gòu).........................................22
switch語句.........................................24
程序的控制結(jié)構(gòu)練習(xí)與總結(jié)...........................26
循環(huán)的控制結(jié)構(gòu).....................................28
for語句............................................30
while語句..........................................32
do-while語句.......................................36
C++小結(jié)試題........................................38
《算法與編程》校本課程綱要
學(xué)科:算法與編程
課程總課
《算法與編程》
名稱時(shí)數(shù)
課程授課
課程輔導(dǎo)類初中學(xué)生學(xué)分
類型對象
課以《課程標(biāo)準(zhǔn)》為指導(dǎo),結(jié)合我校實(shí)際,充分挖掘?qū)W生的個(gè)性潛能,
程促進(jìn)學(xué)生個(gè)性全面、和諧地發(fā)展,為學(xué)生的終身發(fā)展奠定基礎(chǔ)。學(xué)
目會(huì)交流,在合作中學(xué)習(xí);學(xué)會(huì)探究,培養(yǎng)學(xué)生的創(chuàng)新意識;培養(yǎng)學(xué)
標(biāo)生良好的生活習(xí)慣,懂得生活,成為生活的主人<
課信息學(xué)奧林匹克競賽(NOI)是中學(xué)階段最重要的五大學(xué)科競賽之一,每年11
月是省級聯(lián)賽(NOIP),并不是在五大學(xué)科里只有信息學(xué)競賽最好。比較而言,
程信息學(xué)奧賽有自己的特點(diǎn)。首先,信息學(xué)競賽學(xué)習(xí)的內(nèi)容是計(jì)算機(jī)編程,和文
化課關(guān)聯(lián)不大,所以可以隨時(shí)開始學(xué)習(xí),并不要求其他學(xué)科一定要學(xué)到什么程
內(nèi)度。所以,小學(xué)開始學(xué)習(xí)的有,初中開始的有,高中開始的也有。有的學(xué)生初
中就拿了高中組的一等獎(jiǎng),小學(xué)就拿了初中組的一等獎(jiǎng)。其他學(xué)科就不行了,
容
高中競賽必須學(xué)完高中本學(xué)科的必修課程才能開始學(xué)習(xí)競賽,所以一般來說,
簡其他學(xué)科競賽的首次參賽一般在高二。其次,競爭壓力略小于其他學(xué)科。比如
數(shù)學(xué),作為考試科目和競賽科目,參加的人數(shù)非常多,高手云集。而信息學(xué)競
介賽因?yàn)槭欠强荚嚳颇?參加學(xué)習(xí)和參賽的人數(shù)比較少,較容易脫穎而出。當(dāng)然
并不是說這個(gè)學(xué)科內(nèi)容膚淺,其實(shí)內(nèi)容也很深??偨Y(jié)一下:參加信息學(xué)競賽學(xué)
習(xí)開始早,首次參賽早,可參賽次數(shù)多,競爭壓力略小,這是它的優(yōu)勢。
首先,信息學(xué)競賽對學(xué)生來說是一個(gè)新的領(lǐng)域,每一個(gè)知識都是新的。所以,
課程實(shí)
施建議競賽學(xué)習(xí)要持之以恒,不能斷斷續(xù)續(xù)。三天打魚兩天曬網(wǎng),就需要不斷復(fù)習(xí)舊的
(學(xué)習(xí)方
式或教內(nèi)容,進(jìn)度會(huì)比較緩慢。所以,持續(xù)的意義要遠(yuǎn)大于突擊;其次,養(yǎng)成自律,愛
學(xué)方式)
鉆研,有興趣去探索算法與編程內(nèi)在奧秘學(xué)習(xí)主人,有規(guī)范有格局,
課程實(shí)
信息學(xué)競賽注重實(shí)際操作,學(xué)過的知識都是用來指導(dǎo)編程的。競賽的主要
施簡述
是用程序解決數(shù)學(xué)問題或邏輯問題或兩者都有,所以學(xué)是一方面,實(shí)際寫題
(教學(xué)
更重要,我們叫做"刷題"(其他科競賽也得刷題,只不過信息學(xué)用電腦刷
計(jì)劃或
題)。
教學(xué)手
總結(jié)一下,學(xué)好信息學(xué)競賽的公式是:持續(xù)學(xué)習(xí)+刷題。
段等)
課程評
價(jià)簡述
(評價(jià)
方式、考勤10%課堂表現(xiàn)45%課程考核45%
評價(jià)實(shí)
施等簡
述)
信息學(xué)奧賽校本教材(上)
第1章初識C++語言
C++語言簡介:信息學(xué)奧林匹克競賽是一項(xiàng)益智性的競賽活動(dòng),核心是考查選手的智力和使用計(jì)算機(jī)解題
的能力,選手首先應(yīng)針對競賽題目的要求構(gòu)建數(shù)學(xué)模型,進(jìn)而構(gòu)造出計(jì)算機(jī)可以接受的算法,之后編寫出
計(jì)算機(jī)能夠執(zhí)行的程序。程序設(shè)計(jì)是信息學(xué)競賽的基本功,選手參與競賽活動(dòng)的第一步是熟練掌握一門程
序設(shè)計(jì)語言,目前競賽中允許使用的程序設(shè)計(jì)語言有C語言、C++語言、Pascalo
C++語言概述C++由美國AT&T貝爾實(shí)驗(yàn)室的本賈尼?斯特勞斯特盧普博士在20世紀(jì)80年代初期發(fā)明并
實(shí)現(xiàn)(最初這種語言被稱作"CwithClasses"帶類的C)。開始,C++是作為C語言的增強(qiáng)版出現(xiàn)的,從
給C語言增加類開始,不斷的增加新特性。
今天C++已成為世界主流編程語言之一。
C++語言的特點(diǎn):語言簡潔緊湊,使用靈活方便
C++語言一共只有32個(gè)關(guān)鍵字和9種控制語句,程序書寫自由,主要用小寫字母表示。
運(yùn)算符豐富
C++語言的運(yùn)算符包含的范圍很廣泛,共有34個(gè)運(yùn)算符。
數(shù)據(jù)結(jié)構(gòu)豐富
C++語言的數(shù)據(jù)類型有:整型、實(shí)型、字符型、數(shù)組類型等等
結(jié)構(gòu)化語言
結(jié)構(gòu)化語言的顯著特點(diǎn)是代碼及數(shù)據(jù)的分隔化,即程序的各個(gè)部分除了必要的信息交流外彼
此獨(dú)立。
生成的代碼質(zhì)量高
C++語言在代碼效率方面可以和匯編語言相媲美。
可移植性強(qiáng)
C++語言編寫的程序很容易進(jìn)行移植,在一個(gè)環(huán)境下運(yùn)行的程序不加修改或少許修改就可以
在完全不同的環(huán)境下運(yùn)行。
C++程序結(jié)構(gòu):在介紹C++語言程序的結(jié)構(gòu)之前,我們先來看一個(gè)簡單的例子:
例1.1在屏幕上輸出"HelloWorld!"。
#include<iostream>〃使用cin.cout,須調(diào)用iostream庫,否則編譯出錯(cuò)
#include<cstdlib>//使用system()調(diào)用cstdlib庫
usingnamespacestd;〃在C語言中要省略,例如在VC++和TC++中
intmain()〃有的C語言可用voidmain。例如TC++和VC++
cout<<"HelloWorld!"<<endl;〃輸出"HelloWorld!"
system("pause");〃暫停作用,使用system("pause")調(diào)用cstdlib庫
return0;〃結(jié)束整個(gè)程序
}
運(yùn)行結(jié)果:
HelloWorld!
【說明】:
1、以"http://"開頭為注釋行,“〃”后的內(nèi)容用以對語句進(jìn)行說明,輸入程序時(shí)可以不輸入。
2、#include<iostream>
告訴編譯器的預(yù)處理器將輸入輸出流的標(biāo)準(zhǔn)頭文件(iostream)包括在本程序中。
這個(gè)頭文件包括了C++中定義的基本標(biāo)準(zhǔn)輸入輸出程序庫的聲明。
3、usingnamespacestd
使用std(標(biāo)準(zhǔn))名字空間的意思。所謂的名字空間是標(biāo)準(zhǔn)C++中的一種機(jī)制,用來
控制不同類庫的沖突問題。使用它可以在不同的空間內(nèi)使用相同名字的類或者函數(shù)。
4、intmain()
這一行為主函數(shù)(mainfunction)的起始聲明。main()是所有C++程序的運(yùn)行的起始
點(diǎn)。不管它是在代碼的開頭,結(jié)尾還是中間,此函數(shù)中的代碼總是在程序開始運(yùn)行時(shí)第
一個(gè)被執(zhí)行。所有C++程序都必須有一個(gè)main。,intmain。前int在DevC++中可省略,
在TC++和VC++中最好保留。
main后面跟了一對圓括號(),表示它是一個(gè)函數(shù)。C++中所有函數(shù)都跟有一對圓
括號(),括號中可以有一些輸入?yún)?shù)。注意,圓括號中即使什么都沒有也不能省略。
如例題中顯示,主函數(shù)main。中的內(nèi)容,由一對花括號{}括起來。
5、cout<<"HelloWorld!"<<endl
這個(gè)語句在本程序中最重要。cout是一個(gè)輸出語句,告訴計(jì)算機(jī)把引號之間的字符
串送到標(biāo)準(zhǔn)的輸出設(shè)備(屏幕)上。cout的聲明在頭文件iostream中,所以要想使用cout
必須將頭文件iostream包括在程序開始處。endl是C++語言的換行控制符,表示內(nèi)容輸出
后換行顯示后續(xù)的內(nèi)容。
6、system("pause")
在4.99以前版本的Dev-C++環(huán)境下,為了查看程序運(yùn)行結(jié)果,需要在main函數(shù)的return
0語句前加上:system("pause");這樣程序運(yùn)行到該語句時(shí),結(jié)果顯示屏幕將會(huì)停留,讓大家有時(shí)間看程序
的輸出結(jié)果,否則結(jié)果顯示屏幕將會(huì)一閃而過。在4.99之后的版本可不必加該語句,運(yùn)行結(jié)束后結(jié)果顯示
屏幕將自動(dòng)停留。
7、return0
主函數(shù)main()的返回語句,一般是函數(shù)的最后一條可執(zhí)行語句。main。函數(shù)末尾使用return
語句時(shí),數(shù)值0表示程序順利結(jié)束,其他數(shù)表示有異常。在后面的例子中你會(huì)看到C++程序都以類似的語
句結(jié)束。
在C++中,語句的分隔是以分號為分隔符的,分行寫代碼只是為了更方便人閱讀。
一.啟動(dòng)Dev-C++
1.鼠標(biāo)點(diǎn)擊任務(wù)欄中的“開始”按鈕,選“程序”菜單項(xiàng),然后選“程序”下的子菜單項(xiàng)"Bloodshed
Dev-C++”項(xiàng),顯示該項(xiàng)下的子菜單。
2.方法一:單擊”Dev-C++”菜單項(xiàng),即可啟動(dòng)Dev-C++集成開發(fā)工具。(如圖1所示)
方法二:直接雙擊桌面上的Dev-C++的圖標(biāo)。
如果大家看到界面上的字是英文的,則可以點(diǎn)擊主菜單"Tools>EnvironmentOptions"(如圖
3),在彈出的對話框中選擇第二個(gè)標(biāo)簽頁"interface"(如圖4),在Language下拉列表中選擇Chinese即
可,將操作界面改為中文的。
二、新建源程序
1)從主菜單選擇“文件”〉“新建”〉“源代碼”即可(如圖2所示)。
2).此時(shí)屏幕右下側(cè)出現(xiàn)一片白色區(qū)域,稱為“源程序編輯區(qū)域”;可以在此輸入程序。如(圖5)
所示。
注意:
1?必須在英文輸入環(huán)境下編輯程序(如果你當(dāng)前能在程序編輯區(qū)輸入中文,說明你是在
中文輸入環(huán)境下。為了輸入程序,你必須切換到英文輸入環(huán)境下)。
2.在4.99以前的版本的Dev-C++環(huán)境下,為了查看程序運(yùn)行結(jié)果,需要在main函數(shù)
的return語句前加上:system("pause")或getchar(),這樣程序運(yùn)行到該語句時(shí),結(jié)果顯示屏幕將會(huì)停留,
讓大家有時(shí)間看程序的輸出結(jié)果。否則結(jié)果顯示屏幕將會(huì)一閃而過。在4.99之后的版本可不必加該語句,
運(yùn)行結(jié)束后結(jié)果顯示屏幕將自動(dòng)停留。
三、保存源程序到硬盤
一個(gè)好的習(xí)慣是創(chuàng)建了一個(gè)新程序后,在還未輸入代碼之前先將該程序保存到硬盤某個(gè)目錄
下,然后在程序的編輯過程中經(jīng)常性地保存程序,以防止機(jī)器突然斷電或者死機(jī)。要保存程序,只需從主
菜單選擇“文件”一〉“保存”就可以將文件保存到指定的硬盤目錄。如圖6所示。
此時(shí)會(huì)彈出一個(gè)對話框。在此你需要指定文件要存放的磁盤目錄(例如:D:\temp),自定
文件名稱(例如:exl)以及保存類型。在點(diǎn)擊右下角的保存按鈕后,在D盤上的temp目錄下將會(huì)出現(xiàn)一個(gè)
名為exl.cpp的源文件。
四、編譯、運(yùn)行
編譯:從主菜單選“運(yùn)行”一〉“編譯運(yùn)行”或快捷鍵"F9"(圖7)。如果程序中存在詞法、
語法等錯(cuò)誤,則編譯過程失敗。
編譯器會(huì)在屏幕右下角的"CompileLog"標(biāo)簽頁中顯示錯(cuò)誤信息,如(圖8)所示,并且將
源程序相應(yīng)的錯(cuò)誤行標(biāo)成紅色底色。
五、調(diào)試程序
1,設(shè)置程序斷點(diǎn)
通過預(yù)處理、編譯和鏈接的程序僅僅是該程序中沒有詞法和語法等錯(cuò)誤,而無法發(fā)現(xiàn)程序深
層次的問題(譬如算法不對導(dǎo)致結(jié)果不正確)。當(dāng)程序運(yùn)行出錯(cuò)時(shí),需要找出錯(cuò)誤原因。仔細(xì)讀程序來尋
找錯(cuò)誤固然是一種方法,但是有時(shí)光靠讀程序已經(jīng)解決不了問題,此時(shí)需要借助于程序調(diào)試(Debug)手
段。這是一種有效的排錯(cuò)手段,每一位同學(xué)都需要掌握。
如果想讓程序運(yùn)行到某一行前能暫停下來,就需要將該行設(shè)成斷點(diǎn)。具體方法是在代碼所在
行行首單擊,該行將被加亮。默認(rèn)的加亮顏色是紅色。
如果想取消不讓某行代碼成為斷點(diǎn),則在代碼行首再次點(diǎn)擊即可。
2.運(yùn)行程序
設(shè)置斷點(diǎn)后,此時(shí)程序運(yùn)行進(jìn)入debug狀態(tài)。要想運(yùn)行程序,就不能使用主菜單“Execute”
->"Run",而是需要用主菜單"Debug"—)"Debug"(或者按快捷鍵F8),如圖12所示。
3.單步執(zhí)行程序
要想運(yùn)行藍(lán)色底色的代碼,可以使用圖14所示的"NextStep(F7)"、"StepInto(Shift
F7)"、"Continue(CtrlF7)","RuntoCursor(ShiftF4)"等(具體含義見下面的介紹)。在學(xué)習(xí)函
數(shù)之前,一般用的是NextStep和Continue。學(xué)習(xí)函數(shù)后,還會(huì)用到StepInto。
4.設(shè)置watch窗口
在調(diào)試程序時(shí),可能要看程序運(yùn)行過程中變量的值,以檢測程序?qū)ψ兞康奶幚硎欠裾_,可
以在調(diào)試時(shí)通過調(diào)試菜單下的添加變量(AddWatch)窗口來增加變量watch,新增的變量將會(huì)顯示在最
左邊Explore的Debug頁中。如果左邊Explore中的當(dāng)前頁不是Debug頁,則可以點(diǎn)擊Debug標(biāo)簽使之
成為當(dāng)前頁。
無論做任何事情,都要有一定的方式方法與處理步驟,所謂“無規(guī)矩?zé)o以成方圓”。計(jì)算機(jī)程序設(shè)計(jì)
比日常生活中的事務(wù)處理更具有嚴(yán)謹(jǐn)性、規(guī)范性和可行性。為了使計(jì)算機(jī)有效地解決實(shí)際問題,必須將處
理步驟編排好,用計(jì)算機(jī)能理解的計(jì)算機(jī)語言編寫成“序列”,讓計(jì)算機(jī)自動(dòng)識別并執(zhí)行這個(gè)“序列”,達(dá)
到解決實(shí)際問題的目的。將處理問題的步驟編排好,用計(jì)算機(jī)語言組成序列,就是常說的編寫程序。在C++
語言中,執(zhí)行每條語句都是由計(jì)算機(jī)完成相應(yīng)的具體操作,編寫程序是利用C++語句的功能來實(shí)現(xiàn)預(yù)定的
處理要求。“千里之行,始于足下”,我們從簡單程序?qū)W起,逐步了解和掌握怎樣編寫程序。
在學(xué)習(xí)C++語言之前,讓我們繞過那些繁瑣的語法規(guī)則細(xì)節(jié),通過一些簡單的例題,來熟悉
程序的基本組成和基本語句的用法,選手剛接觸編程時(shí),多動(dòng)手模仿是一條捷徑。
例1.2在梯形中陰影部分面積是150平方厘米,求梯形面積。
【分析】已知梯形上、下底長為15和25。令梯形的高為h,則由已知三角形面積為150平方厘米,
有150=(15*h)/2,得h為20,然后根據(jù)梯形面積公式算出梯形面積。程序如下:
#include<cstdio>//printf和scant調(diào)用cstdio庫,在C語言中可調(diào)用stdio.h庫
#include<cstdlib>〃使用system()調(diào)用cstdlib庫
usingnamespacestd;〃在C語言中要省略,例如在VC++和TC++中
intmain()〃有的C語言可用voidmain。,例如TC++和VC++
〃整個(gè)程序開始
floats,h,up,down;//float定義s,h,up,down為單精度實(shí)型變量
up=15;〃已知上底
down=25;〃已知下底
h=2*150/up;〃根據(jù)上底求出梯形的高
s=(up+down)*h/2;〃求出梯形的面積
printf("s=%0.2f\n",s);//\n是換行控制符,0.2f按實(shí)際位數(shù)輸出,保留2位小數(shù)
system("pause");〃暫停作用,TC++和VC++中使用system()調(diào)用stdlib.h庫
return0;〃結(jié)束程序,在TC++和VC++中也要保留
)
運(yùn)行結(jié)果:
s=400.00
【說明】:
所謂namespace,是指標(biāo)識符的各種可見范圍。C++標(biāo)準(zhǔn)程序庫中的所有標(biāo)識符都被定義于
一個(gè)名為std的namespace中。
當(dāng)使用<iostream.h>時(shí),相當(dāng)于在C中調(diào)用庫函數(shù),使用的是全局命名空間,也就是早期的
C++實(shí)現(xiàn);當(dāng)使用<iostream>的時(shí)候,該頭文件沒有定義全局命名空間,必須使用namespacestd;這樣
才能正確使用cout、cin和endlo
例1.3已知一位小朋友的電影票價(jià)是10元,計(jì)算x位小朋友的總票價(jià)是多少?
【分析】假設(shè)總票價(jià)用y來表示,則這個(gè)問題可以用以下幾個(gè)步驟來實(shí)現(xiàn)
①輸入小朋友的數(shù)目x;
②用公式y(tǒng)=10*x計(jì)算總票價(jià);
③輸出總票價(jià)y的值。
程序如下:
#include<iostream>〃使用cin.cout,須調(diào)用iostream庫
usingnamespacestd;
intmain()
(
intx,y;〃定義整型變量
cout<<"lnputx=";〃輸入提示
cin>>x;〃小朋友的人數(shù)
y=10*x;〃計(jì)算總票價(jià)
cout<<"total="<<y<<endl;〃輸出總票價(jià)
return0;〃結(jié)束程序
}
【說明】:
1、int定義x,y為整型變量,有關(guān)整型變量將在第二章詳細(xì)介紹。
、的作用是在屏幕中顯示字符串
2cout<<"Inputx="0
3、cin>>x的作用是輸入一個(gè)數(shù),賦予變量X。
4、cout<<"total="<<y<<endl的作用是輸出提示符total=,輸出y的值,endl是換行的意思。
通過以上例12和例1.3兩個(gè)例子,可以總結(jié)出C++語言程序的結(jié)構(gòu)如下:
1)C++語言變量在使用之前必須先定義其數(shù)據(jù)類型,未經(jīng)定義的變量不能使用。
2)程序由一個(gè)或多個(gè)函數(shù)組成,一個(gè)程序中必須有且只有一個(gè)主函數(shù),主函數(shù)的名字為main。
不論main。函數(shù)在程序中什么位置,程序都是從main。函數(shù)開始執(zhí)行,main。函數(shù)執(zhí)行完畢,程序也就結(jié)
束了。
3)在程序中可以調(diào)用系統(tǒng)提供的庫函數(shù)。在調(diào)用庫函數(shù)之前,必須將相應(yīng)頭文件包含在程序中。
4)程序中可以有注釋行。注釋是為了使程序更易于理解和提示。
5)程序的語句以分號結(jié)束。分號是C++語言不可缺少的組成部分。
6)程序的書寫要注意適當(dāng)?shù)目s進(jìn),一般采用“逐層縮進(jìn)”形式,以便使程序更加清晰易讀。
把處理問題的步驟編成能從上到下順序執(zhí)行的程序,是簡單程序的基本特征。再來分析下面
一道例題的程序結(jié)構(gòu),同時(shí)繼續(xù)學(xué)習(xí)基本語句。
例1.4有一個(gè)牧場,牧場上的牧草每天都在勻速生長,這片牧場可供15頭牛吃20天,或可供20
頭牛吃10天,那么,這片牧場每天新生的草量可供幾頭牛吃1天?
【分析】解決這類問題的關(guān)鍵是利用牛吃的草量,最終求出這片牧場每天新生長的草量,我們設(shè)
1單位的草量為1頭牛1天所需的草量,于是15頭牛20天所食的草量為300單位(包括這20天內(nèi)的新
生草量),20頭牛10天所食的草量為200單位(包括這10天內(nèi)的新生草量),兩者的差值即為10天內(nèi)的
新生草量。程序如下:
#include<iostream>〃使用cin.cout,須調(diào)用iostream庫
usingnamespacestd;
intmain()
(
intsl,s2,s3;〃變量定義
sl=15*20;〃:L5頭牛20天所食的草量
s2=20*10;//20頭牛10天所食的草量
s3=(sl-s2)/(20-10);〃每天新生的草量單位數(shù)
cout<<"s="<<s3<<endl;//I單位為1頭牛1天的食量
return0;〃結(jié)束程序
)
運(yùn)行結(jié)果:
s=10
?例1.5給定一個(gè)字符,用它構(gòu)造一個(gè)底邊長5個(gè)字符,高3個(gè)字符的等腰字符三角形。
?#
?###
?#####
程序如下:
#include<iostream>〃使用cin.cout,須調(diào)用iostream庫
usingnamespacestd;
intmain()
(
chara;〃定義字符變量,
cin>>a;〃輸入給定一個(gè)字符
cout<<""<<a<<endl;〃輸出1個(gè)字符,先輸出2個(gè)空格
cout?""<<a?a?a?endl;〃輸出3個(gè)字符,先輸出1個(gè)空格
cout<<a<<a<<a<<a<<a<<endl;〃輸出5個(gè)字符
?return0;〃結(jié)束程序
?}
?【DevC++版本注意事項(xiàng)】
?在5.0版本DevC++中,<iostream>不是萬能庫,不包括cstdio,cstring,cstdlib,其
他常用的min,max函數(shù)也不保證包括,需要注意如下幾個(gè)細(xì)節(jié):
?IXgetchar(),stdin,stdout,freopen。,fclose(),scanf()在C++中需要調(diào)用<cstdio>
?②、memset()需要包含C頭文件<string.h>,在C++中需要調(diào)用<cstring>
?③、qsort(),exit。需要包含C頭文件<stdlib.h>,在C++中需要調(diào)用<cstdlib>
?在5.0版本C++中,根據(jù)標(biāo)準(zhǔn)去除了iostream對cstdio,cstring,algorithm的依賴性,
需要顯式包括。你現(xiàn)在還可能不透徹理解以上注意事項(xiàng),就慢慢消化吧,在信息學(xué)奧賽中一定要
注意以上細(xì)節(jié),請記住:”細(xì)節(jié)決定成敗”。
?:
.
第二章順序結(jié)構(gòu)
第一章的簡單程序已體現(xiàn)出處理問題的步驟的順序關(guān)系,每條語句按自上而下的順序依次執(zhí)行一次,
這種自上而下依次執(zhí)行的程序稱為順序結(jié)構(gòu)程序。
在一個(gè)程序中,所有的操作都由執(zhí)行部分來完成,而執(zhí)行部分又都是由一條條語句組成的。因此,
先要學(xué)習(xí)C++語言的基本語句,并且在學(xué)習(xí)過程中逐步學(xué)會(huì)程序設(shè)計(jì)的基本方法。我們還是先繞過那些繁
瑣的語法規(guī)則細(xì)節(jié),先看一些例子,然后給出語法以供選手們參考。
賦值語句:在C++語言中,“=”作為賦值運(yùn)算符,而不表示“等于"判斷。賦值語句是由賦值表達(dá)
式再加上分號構(gòu)成的表達(dá)式語句,它是程序中使用最多的語句之一。
變量=表達(dá)式;
在賦值語句的使用中,需要注意以下幾點(diǎn):
1)由于賦值運(yùn)算符“=”右邊的表達(dá)式也可以是賦值表達(dá)式,因此,下述形式:
變量=(變量=表達(dá)式);
是成立的,從而形成嵌套的情形。其展開之后的一般形式為:
變量=變量=???=表達(dá)式;
例如,"a=b=c=d=e=5;",它實(shí)際上等價(jià)于:e=5;d=e;c=d;b=c;a=b;
2)在進(jìn)行賦值運(yùn)算時(shí),如果賦值運(yùn)算符兩邊的數(shù)據(jù)類型不同,系統(tǒng)將會(huì)自動(dòng)進(jìn)行類型轉(zhuǎn)換,
即將賦值運(yùn)算符右邊的數(shù)據(jù)類型轉(zhuǎn)換成左邊的變量類型。當(dāng)左邊是整型而右邊是實(shí)型時(shí),將去掉小數(shù)部分
并截取該整型對應(yīng)的有效位數(shù)。
例2.1輸入兩個(gè)正整數(shù)A和B,試交換A、B的值(使A的值等于B,B的值等于A)。
【分析】交換兩個(gè)變量的值方法很多,一般我們采用引入第三個(gè)變量的算法,二個(gè)變量交換,
可以想像成一瓶醬油和一瓶醋進(jìn)行交換,這時(shí)容易想到拿一個(gè)空瓶子過來:
①將醬油倒到空瓶中;②將醋倒到醬油瓶中;③將原空瓶中的醬油倒到醋瓶中。
程序如下:
#include<iostream>〃使用cin.cout,須調(diào)用iostream庫
usingnamespacestd;
intmain()
inta,b,c;〃定義三個(gè)變量
cout<<"lnputa,b=";〃輸入提示Inputa,b=
cin>>a>>b;〃輸入A、B的值
c=a;a=b;b=c;〃交換A、B的值
cout?"a="?a<<"b="<<b<<endl;〃輸出結(jié)果
例2.2圓柱體的表面積
輸入底面半徑r和高h(yuǎn),輸出圓柱體的表面積,保留3位小數(shù),格式見樣例。
樣例輸入:3.59樣例輸出:274.889
【分析】
圓柱體的表面積由3部分組成:上底面積、下底面積和側(cè)面積。由于上下底面積相等,完整
的公式可以寫成:表面積=底面積*2+側(cè)面積。根據(jù)平面幾何知識,底面積=TTR2,側(cè)面積=2nrh。參考程序:
#include<cstdio>//使用printf和scanf,須調(diào)用cstdio庫
#include<cmath>〃使用數(shù)學(xué)函數(shù)atan,須調(diào)用cmath庫
usingnamespacestd;〃在這個(gè)程序中可以省略這行
intmain()
{constdoublepi=3.1415926;〃定義pi為常量
doubler,h,sl,s2,s;〃定義雙精度實(shí)型,float為單精度實(shí)型
scanf("%lf%lf",&r,&h);//r和h前的&符號不能漏掉,double型用%If
sl=pi*r*r;〃計(jì)算底面積
s2=2*pi*r*h;〃計(jì)算側(cè)面積
s=2*sl+s2;〃計(jì)算總的表面積
printf("Area=%0.3lf\n",s);〃輸出結(jié)果保留3位小數(shù),注意用If格式
return0;
)
例2.3數(shù)學(xué)中經(jīng)典的“雞兔同籠”問題,已知頭共30個(gè),腳共90只,問籠中的雞和兔各有多少
只?
【分析】設(shè)雞為j只,兔為t只,頭為h,腳為f,那么有:
j+t=30①
2對+4*t=90②
假設(shè)籠中30個(gè)頭全都是兔,那么都按每頭4只腳計(jì)算,總腳數(shù)為(4*h),與實(shí)際腳數(shù)(f)之差為
(4*h-f),如果這個(gè)差=0,則籠中全是兔(即雞為0只);如果這個(gè)差值>0,說明多計(jì)算了腳數(shù),凡是雞都
多計(jì)算了兩只腳,用它除以2就能得到雞的只數(shù),算法為:①j=(4*h-f)/2〃先用腳數(shù)差值
除以2算出雞的只數(shù)
②t=h-j〃再用總頭數(shù)減雞數(shù)算出免
的只數(shù)
注意這兩步運(yùn)算的先后順序。程序如下:
#include<cstdio>〃使用getchar()語句,須調(diào)用cstdio庫
#include<iostream>〃使用cin.cout,須調(diào)用iostream庫
usingnamespacestd;
intmain()
{inth,f,j,t;〃定個(gè)變量
h=30;f=90;〃賦初始值
j=(4*h-f)/2;〃計(jì)算雞的只數(shù)
t=h-j;〃計(jì)算免的只數(shù)
cout<<"j="<<j<<"t="<<t<<endl;〃輸出結(jié)果
getchar();〃和system("pause")作用相似,用于結(jié)果顯示暫停
}
第二節(jié)運(yùn)算符和表達(dá)式:C++語言中運(yùn)算符和表達(dá)式數(shù)量之多,在高級語言中是少見的。正
是豐富的運(yùn)算符和表達(dá)式使C++語言功能十分完善。這也是C++語言的主要特點(diǎn)之一。
運(yùn)算符縱覽
1.算術(shù)運(yùn)算符
用于各類數(shù)值運(yùn)算。包括加(+)、減(-)、乘(*)、除(/)、求余(或稱模運(yùn)算,%)、自增
(++)、自減(--)共七種。
2.關(guān)系運(yùn)算符
用于比較運(yùn)算。包括大于(>)、小于(<)、等于(==)、大于等于(>=)、小于等于(<=)和不等于
(!=)六種。
3.邏輯運(yùn)算符
用于邏輯運(yùn)算。包括與(&&)、或(||)、非⑴三種。
4.位操作運(yùn)算符
參與運(yùn)算的量,按二進(jìn)制位進(jìn)行運(yùn)算。包括位與(&)、位或(|)、位非(~)、位異或(八)、
左移(<<)、右移(>>)六種。
5.賦值運(yùn)算符
用于賦值運(yùn)算,分為簡單賦值(二)、復(fù)合算術(shù)賦值(+=,-=,*=,/=,%=)和復(fù)合位運(yùn)算賦值
(&=,|=,人=,>>=,<<=)三類共H■一種。
6.條件運(yùn)算符
這是一個(gè)三目運(yùn)算符,用于條件求值(?:)。
7.逗號運(yùn)算符
用于把若干表達(dá)式組合成一個(gè)表達(dá)式(,)。
8.指針運(yùn)算符
用于取內(nèi)容(*)和取地址(&)二種運(yùn)算。
9.求字節(jié)數(shù)運(yùn)算符
用于計(jì)算數(shù)據(jù)類型所占的字節(jié)數(shù)(sizeof)。
10.特殊運(yùn)算符
有括號0,下標(biāo)口,成員等幾種。
一、算術(shù)運(yùn)算符
1、模運(yùn)算符
求余的運(yùn)算符"附’也稱為模運(yùn)算符,是雙目運(yùn)算符,兩個(gè)操作數(shù)都是整型數(shù)。a%b的值就是
a除以b的余數(shù),5%2余數(shù)為1。其操作對象只能是整型數(shù),而其他四種運(yùn)算符對int,float,double,char都
適用。
2、除法運(yùn)算符
C++語言的除法運(yùn)算符有一些特殊之處,即如果a、b是兩個(gè)整數(shù)類型的變量或常量,那么
a/b的值是a除以b的商。例如,5/2的值是2,而不是2.5,而5.0/2或5/2.0的值是2.5。
3、自增自減運(yùn)算符
自增、自減運(yùn)算符用來對一個(gè)操作數(shù)進(jìn)行加1或減1運(yùn)算,其結(jié)果仍然賦予該操作數(shù),而且
參加運(yùn)算的操作數(shù)必須是變量,而不能是常量或表達(dá)式。
1)自增運(yùn)算符。例如,x++表示在使用x之后,使x的值加1,即x=x+l;++x表示使用x
之前,先使X的值加1,即x=x+l。
2)自減運(yùn)算符。例如,X--表示在使用x之后,使x的值減1,即x=x-l;--X表示使用x
之前,先使X的值減1,即x=x-l。
4、復(fù)合算術(shù)賦值。例如,a+=l,相當(dāng)于a=a+l;a+=b,相當(dāng)于a=a+b。
例2.4變量自加運(yùn)算
#include<iostream>
usingnamespacestd;
intmain()
(
intx,y,zl,z2;
x=7;y=8;
zl=y-(x++);〃計(jì)算zl=l,計(jì)算后x=8
z2=y-(++x);〃計(jì)算前x的值自加1,x的值為9,再與y求差
cout?,,zl="?zl?endl?"z2="?z2;〃分別輸出zl和z2的值
)
運(yùn)行結(jié)果:
zl=l
z2=-l
二、關(guān)系運(yùn)算符
關(guān)系運(yùn)算符用于數(shù)值的大小比較。包括大于(>)、小于(<)、等于(二二)、大于等于(>二)、小于等于
(<二)和不等于(!二)六種,它們都是雙目運(yùn)算符。
關(guān)系運(yùn)算符運(yùn)算的結(jié)果是整型,值只有兩種:0或1,。代表關(guān)系不成立,1代表關(guān)系成立。
請看下面的例子:
intmain()
{intnl=4,n2=5,n3;
n3=nl>n2;//n3的值為0
n3=nl<n2;//n3的值變?yōu)?
n3=nl==4;//n3的值變?yōu)?
n3=nl!=4;//n3的值變?yōu)?
n3=nl==l+3;〃n3的值變?yōu)?
)
三、邏輯運(yùn)算符C++語言中提供了三種邏輯運(yùn)算符:與運(yùn)算(&&)、或運(yùn)算(||)、非運(yùn)算(!)。與運(yùn)
算符(&&)和或運(yùn)算符(||)均為雙目運(yùn)算符。具有左結(jié)合性。非運(yùn)算符⑴為單目運(yùn)算符,具有右結(jié)合性。邏
輯運(yùn)算符和其它運(yùn)算符優(yōu)先級的關(guān)系可表示如下:
按照運(yùn)算符的優(yōu)先順序可以得出:
a>b&&c>d等價(jià)于(a>b)&&(c>d)
!b==c||d<a等價(jià)于((!b)==c)||(d<a)
a+b>c&&x+y<b等價(jià)于((a+b)>c)&&((x+y)<b)
邏輯運(yùn)算的值也為嗔”和“假”兩種,用“V和"0"來表示。其求值規(guī)則如下:
L與運(yùn)算&&參與運(yùn)算的兩個(gè)量都為真時(shí),結(jié)果才為真,否則為假。例如,5>0&&4>2,由于
5>0為真,4>2也為真,相與的結(jié)果也為真。
2.或運(yùn)算||參與運(yùn)算的兩個(gè)量只要有一個(gè)為真,結(jié)果就為真。兩個(gè)量都為假時(shí),結(jié)果為假。
例如:5>0||5>8,由于5>0為真,相或的結(jié)果也就為真
3.非運(yùn)算!參與運(yùn)算量為真時(shí),結(jié)果為假;參與運(yùn)算量為假時(shí),結(jié)果為真。例如:!(5>0)的結(jié)
果為假。
雖然C++編譯在給出邏輯運(yùn)算值時(shí),以“1"代表嗔”,“0”代表“假但反過來在判
斷一個(gè)量是為“真"還是為“假"時(shí),以"0"代表"假”,以非“0”的數(shù)值作為“真"。例如:由于5和
3均為非“0”因此5&&3的值為,即為1。又如:5||0的值為嗔”,即為1。
需要說明的是,對于有符號數(shù),在右移時(shí),符號位將隨同移動(dòng)。當(dāng)操作數(shù)為正數(shù)時(shí),最高
位為0,而為負(fù)數(shù)時(shí),最高位為1。最高位是補(bǔ)0或補(bǔ)1取決于編譯系統(tǒng)的規(guī)定。
在C++語言中,有一些運(yùn)算可以簡寫,如下表所示。
算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符和賦值運(yùn)算符的優(yōu)先級如下:
賦值運(yùn)算符邏輯運(yùn)算符關(guān)系運(yùn)算符算術(shù)運(yùn)算符
低演)
關(guān)系運(yùn)算符的結(jié)合性為:自左至右。
根據(jù)以上優(yōu)先級和結(jié)合性,計(jì)算出以下表達(dá)式的結(jié)果(假設(shè)a=3,b=2,c=l)
a>b表達(dá)式為真,所以表達(dá)式的值為1
(a>b)==c表達(dá)式為真,所以表達(dá)式的值為1
b+c<a表達(dá)式為假,所以表達(dá)式的值為0
d=a>ba>b為真,所以d的值為1
f=a>b>ca>b為真,結(jié)果為1,l>c為假,所以f的值為0
【上機(jī)練習(xí)】1.A+B問題[1.3編程基礎(chǔ)之算術(shù)表達(dá)式與順序執(zhí)行01】
大部分的在線題庫,都會(huì)將A+B問題作為第一題,以幫助新手熟悉平臺(tái)的使用方法。
A+B問題的題目描述如下:給定兩個(gè)整數(shù)A和B,輸出A+B的值。保證A、B及結(jié)果均在整型范
圍內(nèi)?,F(xiàn)在請你解決這一問題。
輸入:
一行,包含兩個(gè)整數(shù)A,B,中間用單個(gè)空格隔開。A和B均在整型范圍內(nèi)。
輸出:
一個(gè)整數(shù),即A+B的值。保證結(jié)果在整型范圍內(nèi)。
樣例輸入:
12
樣例輸出:
3
2.計(jì)算(a+b)*c的值[1.3編程基礎(chǔ)之算術(shù)表達(dá)式與順序執(zhí)行02]
給定3個(gè)整數(shù)a、b、c,計(jì)算表達(dá)式(a+b)*c的值。
輸入:
輸入僅一行,包括三個(gè)整數(shù)a、b、c,數(shù)與數(shù)之間以一個(gè)空格分開。
(-10,000<a,b,c<10,000)
輸出:
輸出一行,即表達(dá)式的值
樣例輸入:
235
樣例輸出:
25
3.計(jì)算(a+b)/c的值[1.3編程基礎(chǔ)之算術(shù)表達(dá)式與順序執(zhí)行03]
給定3個(gè)整數(shù)a、b、c,計(jì)算表達(dá)式(a+b)/c的值,/是整除運(yùn)算。
輸入;
輸入僅一行,包括三個(gè)整數(shù)a、b、c,數(shù)與數(shù)之間以一個(gè)空格分開。(-10,000<abc<10,000,c
不等于0)
輸出:
輸出一行,即表達(dá)式的值。
樣例輸入:
113
樣例輸出:
0
4.帶余除法[1.3編程基礎(chǔ)之算術(shù)表達(dá)式與順序執(zhí)行04]
給定被除數(shù)和除數(shù),求整數(shù)商及余數(shù)。此題中請使用默認(rèn)的整除和取余運(yùn)算,無需對結(jié)果進(jìn)行任
何特殊處理。
輸入:
一行,包含兩個(gè)整數(shù),依次為被除數(shù)和除數(shù)(除數(shù)非零),中間用一個(gè)空格隔開。
輸出:
一行,包含兩個(gè)整數(shù),依次為整數(shù)商和余數(shù),中間用一個(gè)空格隔開。
樣例輸入:
103
樣例輸出:
31
5.計(jì)算分?jǐn)?shù)的浮點(diǎn)數(shù)值[1.3編程基礎(chǔ)之算術(shù)表達(dá)式與順序執(zhí)行05】
兩個(gè)整數(shù)a和b分別作為分子和分母,既分?jǐn)?shù)a/b,求它的浮點(diǎn)數(shù)值(雙精度浮點(diǎn)數(shù),保留小數(shù)點(diǎn)
后9位)。
輸入:
輸入僅一行,包括兩個(gè)整數(shù)a和b。
輸出:
輸出也僅一行,分?jǐn)?shù)a/b的浮點(diǎn)數(shù)值(雙精度浮點(diǎn)數(shù),保留小數(shù)點(diǎn)后9位)。
樣例輸入:
57
樣例輸出:
0.714285714
第三節(jié)常量和變量:一、常量
常量是指在程序中使用的一些具體的數(shù)、字符。在程序運(yùn)行過程中,其值不能被更改。如
123,145.88,'m',TRUE
1、整型常量:如3、-5、0等。
整型常量是表示整數(shù)的常量。有三種表示形式:
1)十進(jìn)制形式。如99、-1。
2)八進(jìn)制形式。以數(shù)字0打頭,由0-7構(gòu)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)師個(gè)人精彩發(fā)言稿(5篇)
- 主題是微笑的演講稿
- 中隊(duì)委競選演講稿錦集九篇
- 安全的演講稿十篇
- 親子共讀讀后感
- 中秋晚會(huì)致辭范文500字(12篇)
- 中秋節(jié)的演講稿
- DB12∕T 876-2019 農(nóng)村物流綜合服務(wù)站點(diǎn)運(yùn)營服務(wù)規(guī)范
- 探礦權(quán)轉(zhuǎn)讓合同書
- 探究教學(xué)評價(jià)的指導(dǎo)思想、內(nèi)容和方法-教育資料
- 魯濱遜漂流記讀書分享課件
- 北京開放大學(xué)互聯(lián)網(wǎng)營銷方案策劃寫作在線測驗(yàn)5-1:本周測一測
- 高中生知識搶答競賽題
- 幼兒園大班語言繪本《月亮的味道》課件
- 人教版《道德與法治》七年級上冊 成長的節(jié)拍 復(fù)習(xí)教案
- 《中華商業(yè)文化》第六章
- 醫(yī)院玻璃采光頂玻璃雨棚施工方案
- 運(yùn)籌學(xué)-隨機(jī)規(guī)劃課件
- 《電阻》說課課件
- 同濟(jì)外科學(xué)課件之頸腰椎退行性疾病
- 杜邦杜邦工程塑料課件
評論
0/150
提交評論