信息學奧賽校本教材_第1頁
信息學奧賽校本教材_第2頁
信息學奧賽校本教材_第3頁
信息學奧賽校本教材_第4頁
信息學奧賽校本教材_第5頁
已閱讀5頁,還剩57頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

校本課程

算法與編程C++

目錄

C++語言入門(平臺安裝介紹基本功能)................3

C++語言簡介.........................................4

C++語言程序結構....................................6

賦值語句............................................8

運算符和表達式.....................................10

常量和變量.........................................12

標準數據類型........................................14

數據輸入輸出........................................16

順序結構實例........................................18

概述...............................................20

if選擇結構.........................................22

switch語句.........................................24

程序的控制結構練習與總結...........................26

循環(huán)的控制結構.....................................28

for語句............................................30

while語句..........................................32

do-while語句.......................................36

C++小結試題........................................38

《算法與編程》校本課程綱要

學科:算法與編程

課程總課

《算法與編程》

名稱時數

課程授課

課程輔導類初中學生學分

類型對象

課以《課程標準》為指導,結合我校實際,充分挖掘學生的個性潛能,

程促進學生個性全面、和諧地發(fā)展,為學生的終身發(fā)展奠定基礎。學

目會交流,在合作中學習;學會探究,培養(yǎng)學生的創(chuàng)新意識;培養(yǎng)學

標生良好的生活習慣,懂得生活,成為生活的主人<

課信息學奧林匹克競賽(NOI)是中學階段最重要的五大學科競賽之一,每年11

月是省級聯賽(NOIP),并不是在五大學科里只有信息學競賽最好。比較而言,

程信息學奧賽有自己的特點。首先,信息學競賽學習的內容是計算機編程,和文

化課關聯不大,所以可以隨時開始學習,并不要求其他學科一定要學到什么程

內度。所以,小學開始學習的有,初中開始的有,高中開始的也有。有的學生初

中就拿了高中組的一等獎,小學就拿了初中組的一等獎。其他學科就不行了,

高中競賽必須學完高中本學科的必修課程才能開始學習競賽,所以一般來說,

簡其他學科競賽的首次參賽一般在高二。其次,競爭壓力略小于其他學科。比如

數學,作為考試科目和競賽科目,參加的人數非常多,高手云集。而信息學競

介賽因為是非考試科目,參加學習和參賽的人數比較少,較容易脫穎而出。當然

并不是說這個學科內容膚淺,其實內容也很深??偨Y一下:參加信息學競賽學

習開始早,首次參賽早,可參賽次數多,競爭壓力略小,這是它的優(yōu)勢。

首先,信息學競賽對學生來說是一個新的領域,每一個知識都是新的。所以,

課程實

施建議競賽學習要持之以恒,不能斷斷續(xù)續(xù)。三天打魚兩天曬網,就需要不斷復習舊的

(學習方

式或教內容,進度會比較緩慢。所以,持續(xù)的意義要遠大于突擊;其次,養(yǎng)成自律,愛

學方式)

鉆研,有興趣去探索算法與編程內在奧秘學習主人,有規(guī)范有格局,

課程實

信息學競賽注重實際操作,學過的知識都是用來指導編程的。競賽的主要

施簡述

是用程序解決數學問題或邏輯問題或兩者都有,所以學是一方面,實際寫題

(教學

更重要,我們叫做"刷題"(其他科競賽也得刷題,只不過信息學用電腦刷

計劃或

題)。

教學手

總結一下,學好信息學競賽的公式是:持續(xù)學習+刷題。

段等)

課程評

價簡述

(評價

方式、考勤10%課堂表現45%課程考核45%

評價實

施等簡

述)

信息學奧賽校本教材(上)

第1章初識C++語言

C++語言簡介:信息學奧林匹克競賽是一項益智性的競賽活動,核心是考查選手的智力和使用計算機解題

的能力,選手首先應針對競賽題目的要求構建數學模型,進而構造出計算機可以接受的算法,之后編寫出

計算機能夠執(zhí)行的程序。程序設計是信息學競賽的基本功,選手參與競賽活動的第一步是熟練掌握一門程

序設計語言,目前競賽中允許使用的程序設計語言有C語言、C++語言、Pascalo

C++語言概述C++由美國AT&T貝爾實驗室的本賈尼?斯特勞斯特盧普博士在20世紀80年代初期發(fā)明并

實現(最初這種語言被稱作"CwithClasses"帶類的C)。開始,C++是作為C語言的增強版出現的,從

給C語言增加類開始,不斷的增加新特性。

今天C++已成為世界主流編程語言之一。

C++語言的特點:語言簡潔緊湊,使用靈活方便

C++語言一共只有32個關鍵字和9種控制語句,程序書寫自由,主要用小寫字母表示。

運算符豐富

C++語言的運算符包含的范圍很廣泛,共有34個運算符。

數據結構豐富

C++語言的數據類型有:整型、實型、字符型、數組類型等等

結構化語言

結構化語言的顯著特點是代碼及數據的分隔化,即程序的各個部分除了必要的信息交流外彼

此獨立。

生成的代碼質量高

C++語言在代碼效率方面可以和匯編語言相媲美。

可移植性強

C++語言編寫的程序很容易進行移植,在一個環(huán)境下運行的程序不加修改或少許修改就可以

在完全不同的環(huán)境下運行。

C++程序結構:在介紹C++語言程序的結構之前,我們先來看一個簡單的例子:

例1.1在屏幕上輸出"HelloWorld!"。

#include<iostream>〃使用cin.cout,須調用iostream庫,否則編譯出錯

#include<cstdlib>//使用system()調用cstdlib庫

usingnamespacestd;〃在C語言中要省略,例如在VC++和TC++中

intmain()〃有的C語言可用voidmain。例如TC++和VC++

cout<<"HelloWorld!"<<endl;〃輸出"HelloWorld!"

system("pause");〃暫停作用,使用system("pause")調用cstdlib庫

return0;〃結束整個程序

運行結果:

HelloWorld!

【說明】:

1、以"http://"開頭為注釋行,“〃”后的內容用以對語句進行說明,輸入程序時可以不輸入。

2、#include<iostream>

告訴編譯器的預處理器將輸入輸出流的標準頭文件(iostream)包括在本程序中。

這個頭文件包括了C++中定義的基本標準輸入輸出程序庫的聲明。

3、usingnamespacestd

使用std(標準)名字空間的意思。所謂的名字空間是標準C++中的一種機制,用來

控制不同類庫的沖突問題。使用它可以在不同的空間內使用相同名字的類或者函數。

4、intmain()

這一行為主函數(mainfunction)的起始聲明。main()是所有C++程序的運行的起始

點。不管它是在代碼的開頭,結尾還是中間,此函數中的代碼總是在程序開始運行時第

一個被執(zhí)行。所有C++程序都必須有一個main。,intmain。前int在DevC++中可省略,

在TC++和VC++中最好保留。

main后面跟了一對圓括號(),表示它是一個函數。C++中所有函數都跟有一對圓

括號(),括號中可以有一些輸入參數。注意,圓括號中即使什么都沒有也不能省略。

如例題中顯示,主函數main。中的內容,由一對花括號{}括起來。

5、cout<<"HelloWorld!"<<endl

這個語句在本程序中最重要。cout是一個輸出語句,告訴計算機把引號之間的字符

串送到標準的輸出設備(屏幕)上。cout的聲明在頭文件iostream中,所以要想使用cout

必須將頭文件iostream包括在程序開始處。endl是C++語言的換行控制符,表示內容輸出

后換行顯示后續(xù)的內容。

6、system("pause")

在4.99以前版本的Dev-C++環(huán)境下,為了查看程序運行結果,需要在main函數的return

0語句前加上:system("pause");這樣程序運行到該語句時,結果顯示屏幕將會停留,讓大家有時間看程序

的輸出結果,否則結果顯示屏幕將會一閃而過。在4.99之后的版本可不必加該語句,運行結束后結果顯示

屏幕將自動停留。

7、return0

主函數main()的返回語句,一般是函數的最后一條可執(zhí)行語句。main。函數末尾使用return

語句時,數值0表示程序順利結束,其他數表示有異常。在后面的例子中你會看到C++程序都以類似的語

句結束。

在C++中,語句的分隔是以分號為分隔符的,分行寫代碼只是為了更方便人閱讀。

一.啟動Dev-C++

1.鼠標點擊任務欄中的“開始”按鈕,選“程序”菜單項,然后選“程序”下的子菜單項"Bloodshed

Dev-C++”項,顯示該項下的子菜單。

2.方法一:單擊”Dev-C++”菜單項,即可啟動Dev-C++集成開發(fā)工具。(如圖1所示)

方法二:直接雙擊桌面上的Dev-C++的圖標。

如果大家看到界面上的字是英文的,則可以點擊主菜單"Tools>EnvironmentOptions"(如圖

3),在彈出的對話框中選擇第二個標簽頁"interface"(如圖4),在Language下拉列表中選擇Chinese即

可,將操作界面改為中文的。

二、新建源程序

1)從主菜單選擇“文件”〉“新建”〉“源代碼”即可(如圖2所示)。

2).此時屏幕右下側出現一片白色區(qū)域,稱為“源程序編輯區(qū)域”;可以在此輸入程序。如(圖5)

所示。

注意:

1?必須在英文輸入環(huán)境下編輯程序(如果你當前能在程序編輯區(qū)輸入中文,說明你是在

中文輸入環(huán)境下。為了輸入程序,你必須切換到英文輸入環(huán)境下)。

2.在4.99以前的版本的Dev-C++環(huán)境下,為了查看程序運行結果,需要在main函數

的return語句前加上:system("pause")或getchar(),這樣程序運行到該語句時,結果顯示屏幕將會停留,

讓大家有時間看程序的輸出結果。否則結果顯示屏幕將會一閃而過。在4.99之后的版本可不必加該語句,

運行結束后結果顯示屏幕將自動停留。

三、保存源程序到硬盤

一個好的習慣是創(chuàng)建了一個新程序后,在還未輸入代碼之前先將該程序保存到硬盤某個目錄

下,然后在程序的編輯過程中經常性地保存程序,以防止機器突然斷電或者死機。要保存程序,只需從主

菜單選擇“文件”一〉“保存”就可以將文件保存到指定的硬盤目錄。如圖6所示。

此時會彈出一個對話框。在此你需要指定文件要存放的磁盤目錄(例如:D:\temp),自定

文件名稱(例如:exl)以及保存類型。在點擊右下角的保存按鈕后,在D盤上的temp目錄下將會出現一個

名為exl.cpp的源文件。

四、編譯、運行

編譯:從主菜單選“運行”一〉“編譯運行”或快捷鍵"F9"(圖7)。如果程序中存在詞法、

語法等錯誤,則編譯過程失敗。

編譯器會在屏幕右下角的"CompileLog"標簽頁中顯示錯誤信息,如(圖8)所示,并且將

源程序相應的錯誤行標成紅色底色。

五、調試程序

1,設置程序斷點

通過預處理、編譯和鏈接的程序僅僅是該程序中沒有詞法和語法等錯誤,而無法發(fā)現程序深

層次的問題(譬如算法不對導致結果不正確)。當程序運行出錯時,需要找出錯誤原因。仔細讀程序來尋

找錯誤固然是一種方法,但是有時光靠讀程序已經解決不了問題,此時需要借助于程序調試(Debug)手

段。這是一種有效的排錯手段,每一位同學都需要掌握。

如果想讓程序運行到某一行前能暫停下來,就需要將該行設成斷點。具體方法是在代碼所在

行行首單擊,該行將被加亮。默認的加亮顏色是紅色。

如果想取消不讓某行代碼成為斷點,則在代碼行首再次點擊即可。

2.運行程序

設置斷點后,此時程序運行進入debug狀態(tài)。要想運行程序,就不能使用主菜單“Execute”

->"Run",而是需要用主菜單"Debug"—)"Debug"(或者按快捷鍵F8),如圖12所示。

3.單步執(zhí)行程序

要想運行藍色底色的代碼,可以使用圖14所示的"NextStep(F7)"、"StepInto(Shift

F7)"、"Continue(CtrlF7)","RuntoCursor(ShiftF4)"等(具體含義見下面的介紹)。在學習函

數之前,一般用的是NextStep和Continue。學習函數后,還會用到StepInto。

4.設置watch窗口

在調試程序時,可能要看程序運行過程中變量的值,以檢測程序對變量的處理是否正確,可

以在調試時通過調試菜單下的添加變量(AddWatch)窗口來增加變量watch,新增的變量將會顯示在最

左邊Explore的Debug頁中。如果左邊Explore中的當前頁不是Debug頁,則可以點擊Debug標簽使之

成為當前頁。

無論做任何事情,都要有一定的方式方法與處理步驟,所謂“無規(guī)矩無以成方圓”。計算機程序設計

比日常生活中的事務處理更具有嚴謹性、規(guī)范性和可行性。為了使計算機有效地解決實際問題,必須將處

理步驟編排好,用計算機能理解的計算機語言編寫成“序列”,讓計算機自動識別并執(zhí)行這個“序列”,達

到解決實際問題的目的。將處理問題的步驟編排好,用計算機語言組成序列,就是常說的編寫程序。在C++

語言中,執(zhí)行每條語句都是由計算機完成相應的具體操作,編寫程序是利用C++語句的功能來實現預定的

處理要求?!扒Ю镏?,始于足下”,我們從簡單程序學起,逐步了解和掌握怎樣編寫程序。

在學習C++語言之前,讓我們繞過那些繁瑣的語法規(guī)則細節(jié),通過一些簡單的例題,來熟悉

程序的基本組成和基本語句的用法,選手剛接觸編程時,多動手模仿是一條捷徑。

例1.2在梯形中陰影部分面積是150平方厘米,求梯形面積。

【分析】已知梯形上、下底長為15和25。令梯形的高為h,則由已知三角形面積為150平方厘米,

有150=(15*h)/2,得h為20,然后根據梯形面積公式算出梯形面積。程序如下:

#include<cstdio>//printf和scant調用cstdio庫,在C語言中可調用stdio.h庫

#include<cstdlib>〃使用system()調用cstdlib庫

usingnamespacestd;〃在C語言中要省略,例如在VC++和TC++中

intmain()〃有的C語言可用voidmain。,例如TC++和VC++

〃整個程序開始

floats,h,up,down;//float定義s,h,up,down為單精度實型變量

up=15;〃已知上底

down=25;〃已知下底

h=2*150/up;〃根據上底求出梯形的高

s=(up+down)*h/2;〃求出梯形的面積

printf("s=%0.2f\n",s);//\n是換行控制符,0.2f按實際位數輸出,保留2位小數

system("pause");〃暫停作用,TC++和VC++中使用system()調用stdlib.h庫

return0;〃結束程序,在TC++和VC++中也要保留

)

運行結果:

s=400.00

【說明】:

所謂namespace,是指標識符的各種可見范圍。C++標準程序庫中的所有標識符都被定義于

一個名為std的namespace中。

當使用<iostream.h>時,相當于在C中調用庫函數,使用的是全局命名空間,也就是早期的

C++實現;當使用<iostream>的時候,該頭文件沒有定義全局命名空間,必須使用namespacestd;這樣

才能正確使用cout、cin和endlo

例1.3已知一位小朋友的電影票價是10元,計算x位小朋友的總票價是多少?

【分析】假設總票價用y來表示,則這個問題可以用以下幾個步驟來實現

①輸入小朋友的數目x;

②用公式y(tǒng)=10*x計算總票價;

③輸出總票價y的值。

程序如下:

#include<iostream>〃使用cin.cout,須調用iostream庫

usingnamespacestd;

intmain()

(

intx,y;〃定義整型變量

cout<<"lnputx=";〃輸入提示

cin>>x;〃小朋友的人數

y=10*x;〃計算總票價

cout<<"total="<<y<<endl;〃輸出總票價

return0;〃結束程序

}

【說明】:

1、int定義x,y為整型變量,有關整型變量將在第二章詳細介紹。

、的作用是在屏幕中顯示字符串

2cout<<"Inputx="0

3、cin>>x的作用是輸入一個數,賦予變量X。

4、cout<<"total="<<y<<endl的作用是輸出提示符total=,輸出y的值,endl是換行的意思。

通過以上例12和例1.3兩個例子,可以總結出C++語言程序的結構如下:

1)C++語言變量在使用之前必須先定義其數據類型,未經定義的變量不能使用。

2)程序由一個或多個函數組成,一個程序中必須有且只有一個主函數,主函數的名字為main。

不論main。函數在程序中什么位置,程序都是從main。函數開始執(zhí)行,main。函數執(zhí)行完畢,程序也就結

束了。

3)在程序中可以調用系統(tǒng)提供的庫函數。在調用庫函數之前,必須將相應頭文件包含在程序中。

4)程序中可以有注釋行。注釋是為了使程序更易于理解和提示。

5)程序的語句以分號結束。分號是C++語言不可缺少的組成部分。

6)程序的書寫要注意適當的縮進,一般采用“逐層縮進”形式,以便使程序更加清晰易讀。

把處理問題的步驟編成能從上到下順序執(zhí)行的程序,是簡單程序的基本特征。再來分析下面

一道例題的程序結構,同時繼續(xù)學習基本語句。

例1.4有一個牧場,牧場上的牧草每天都在勻速生長,這片牧場可供15頭牛吃20天,或可供20

頭牛吃10天,那么,這片牧場每天新生的草量可供幾頭牛吃1天?

【分析】解決這類問題的關鍵是利用牛吃的草量,最終求出這片牧場每天新生長的草量,我們設

1單位的草量為1頭牛1天所需的草量,于是15頭牛20天所食的草量為300單位(包括這20天內的新

生草量),20頭牛10天所食的草量為200單位(包括這10天內的新生草量),兩者的差值即為10天內的

新生草量。程序如下:

#include<iostream>〃使用cin.cout,須調用iostream庫

usingnamespacestd;

intmain()

(

intsl,s2,s3;〃變量定義

sl=15*20;〃:L5頭牛20天所食的草量

s2=20*10;//20頭牛10天所食的草量

s3=(sl-s2)/(20-10);〃每天新生的草量單位數

cout<<"s="<<s3<<endl;//I單位為1頭牛1天的食量

return0;〃結束程序

運行結果:

s=10

?例1.5給定一個字符,用它構造一個底邊長5個字符,高3個字符的等腰字符三角形。

?#

?###

?#####

程序如下:

#include<iostream>〃使用cin.cout,須調用iostream庫

usingnamespacestd;

intmain()

(

chara;〃定義字符變量,

cin>>a;〃輸入給定一個字符

cout<<""<<a<<endl;〃輸出1個字符,先輸出2個空格

cout?""<<a?a?a?endl;〃輸出3個字符,先輸出1個空格

cout<<a<<a<<a<<a<<a<<endl;〃輸出5個字符

?return0;〃結束程序

?}

?【DevC++版本注意事項】

?在5.0版本DevC++中,<iostream>不是萬能庫,不包括cstdio,cstring,cstdlib,其

他常用的min,max函數也不保證包括,需要注意如下幾個細節(jié):

?IXgetchar(),stdin,stdout,freopen。,fclose(),scanf()在C++中需要調用<cstdio>

?②、memset()需要包含C頭文件<string.h>,在C++中需要調用<cstring>

?③、qsort(),exit。需要包含C頭文件<stdlib.h>,在C++中需要調用<cstdlib>

?在5.0版本C++中,根據標準去除了iostream對cstdio,cstring,algorithm的依賴性,

需要顯式包括。你現在還可能不透徹理解以上注意事項,就慢慢消化吧,在信息學奧賽中一定要

注意以上細節(jié),請記住:”細節(jié)決定成敗”。

?:

.

第二章順序結構

第一章的簡單程序已體現出處理問題的步驟的順序關系,每條語句按自上而下的順序依次執(zhí)行一次,

這種自上而下依次執(zhí)行的程序稱為順序結構程序。

在一個程序中,所有的操作都由執(zhí)行部分來完成,而執(zhí)行部分又都是由一條條語句組成的。因此,

先要學習C++語言的基本語句,并且在學習過程中逐步學會程序設計的基本方法。我們還是先繞過那些繁

瑣的語法規(guī)則細節(jié),先看一些例子,然后給出語法以供選手們參考。

賦值語句:在C++語言中,“=”作為賦值運算符,而不表示“等于"判斷。賦值語句是由賦值表達

式再加上分號構成的表達式語句,它是程序中使用最多的語句之一。

變量=表達式;

在賦值語句的使用中,需要注意以下幾點:

1)由于賦值運算符“=”右邊的表達式也可以是賦值表達式,因此,下述形式:

變量=(變量=表達式);

是成立的,從而形成嵌套的情形。其展開之后的一般形式為:

變量=變量=???=表達式;

例如,"a=b=c=d=e=5;",它實際上等價于:e=5;d=e;c=d;b=c;a=b;

2)在進行賦值運算時,如果賦值運算符兩邊的數據類型不同,系統(tǒng)將會自動進行類型轉換,

即將賦值運算符右邊的數據類型轉換成左邊的變量類型。當左邊是整型而右邊是實型時,將去掉小數部分

并截取該整型對應的有效位數。

例2.1輸入兩個正整數A和B,試交換A、B的值(使A的值等于B,B的值等于A)。

【分析】交換兩個變量的值方法很多,一般我們采用引入第三個變量的算法,二個變量交換,

可以想像成一瓶醬油和一瓶醋進行交換,這時容易想到拿一個空瓶子過來:

①將醬油倒到空瓶中;②將醋倒到醬油瓶中;③將原空瓶中的醬油倒到醋瓶中。

程序如下:

#include<iostream>〃使用cin.cout,須調用iostream庫

usingnamespacestd;

intmain()

inta,b,c;〃定義三個變量

cout<<"lnputa,b=";〃輸入提示Inputa,b=

cin>>a>>b;〃輸入A、B的值

c=a;a=b;b=c;〃交換A、B的值

cout?"a="?a<<"b="<<b<<endl;〃輸出結果

例2.2圓柱體的表面積

輸入底面半徑r和高h,輸出圓柱體的表面積,保留3位小數,格式見樣例。

樣例輸入:3.59樣例輸出:274.889

【分析】

圓柱體的表面積由3部分組成:上底面積、下底面積和側面積。由于上下底面積相等,完整

的公式可以寫成:表面積=底面積*2+側面積。根據平面幾何知識,底面積=TTR2,側面積=2nrh。參考程序:

#include<cstdio>//使用printf和scanf,須調用cstdio庫

#include<cmath>〃使用數學函數atan,須調用cmath庫

usingnamespacestd;〃在這個程序中可以省略這行

intmain()

{constdoublepi=3.1415926;〃定義pi為常量

doubler,h,sl,s2,s;〃定義雙精度實型,float為單精度實型

scanf("%lf%lf",&r,&h);//r和h前的&符號不能漏掉,double型用%If

sl=pi*r*r;〃計算底面積

s2=2*pi*r*h;〃計算側面積

s=2*sl+s2;〃計算總的表面積

printf("Area=%0.3lf\n",s);〃輸出結果保留3位小數,注意用If格式

return0;

)

例2.3數學中經典的“雞兔同籠”問題,已知頭共30個,腳共90只,問籠中的雞和兔各有多少

只?

【分析】設雞為j只,兔為t只,頭為h,腳為f,那么有:

j+t=30①

2對+4*t=90②

假設籠中30個頭全都是兔,那么都按每頭4只腳計算,總腳數為(4*h),與實際腳數(f)之差為

(4*h-f),如果這個差=0,則籠中全是兔(即雞為0只);如果這個差值>0,說明多計算了腳數,凡是雞都

多計算了兩只腳,用它除以2就能得到雞的只數,算法為:①j=(4*h-f)/2〃先用腳數差值

除以2算出雞的只數

②t=h-j〃再用總頭數減雞數算出免

的只數

注意這兩步運算的先后順序。程序如下:

#include<cstdio>〃使用getchar()語句,須調用cstdio庫

#include<iostream>〃使用cin.cout,須調用iostream庫

usingnamespacestd;

intmain()

{inth,f,j,t;〃定個變量

h=30;f=90;〃賦初始值

j=(4*h-f)/2;〃計算雞的只數

t=h-j;〃計算免的只數

cout<<"j="<<j<<"t="<<t<<endl;〃輸出結果

getchar();〃和system("pause")作用相似,用于結果顯示暫停

}

第二節(jié)運算符和表達式:C++語言中運算符和表達式數量之多,在高級語言中是少見的。正

是豐富的運算符和表達式使C++語言功能十分完善。這也是C++語言的主要特點之一。

運算符縱覽

1.算術運算符

用于各類數值運算。包括加(+)、減(-)、乘(*)、除(/)、求余(或稱模運算,%)、自增

(++)、自減(--)共七種。

2.關系運算符

用于比較運算。包括大于(>)、小于(<)、等于(==)、大于等于(>=)、小于等于(<=)和不等于

(!=)六種。

3.邏輯運算符

用于邏輯運算。包括與(&&)、或(||)、非⑴三種。

4.位操作運算符

參與運算的量,按二進制位進行運算。包括位與(&)、位或(|)、位非(~)、位異或(八)、

左移(<<)、右移(>>)六種。

5.賦值運算符

用于賦值運算,分為簡單賦值(二)、復合算術賦值(+=,-=,*=,/=,%=)和復合位運算賦值

(&=,|=,人=,>>=,<<=)三類共H■一種。

6.條件運算符

這是一個三目運算符,用于條件求值(?:)。

7.逗號運算符

用于把若干表達式組合成一個表達式(,)。

8.指針運算符

用于取內容(*)和取地址(&)二種運算。

9.求字節(jié)數運算符

用于計算數據類型所占的字節(jié)數(sizeof)。

10.特殊運算符

有括號0,下標口,成員等幾種。

一、算術運算符

1、模運算符

求余的運算符"附’也稱為模運算符,是雙目運算符,兩個操作數都是整型數。a%b的值就是

a除以b的余數,5%2余數為1。其操作對象只能是整型數,而其他四種運算符對int,float,double,char都

適用。

2、除法運算符

C++語言的除法運算符有一些特殊之處,即如果a、b是兩個整數類型的變量或常量,那么

a/b的值是a除以b的商。例如,5/2的值是2,而不是2.5,而5.0/2或5/2.0的值是2.5。

3、自增自減運算符

自增、自減運算符用來對一個操作數進行加1或減1運算,其結果仍然賦予該操作數,而且

參加運算的操作數必須是變量,而不能是常量或表達式。

1)自增運算符。例如,x++表示在使用x之后,使x的值加1,即x=x+l;++x表示使用x

之前,先使X的值加1,即x=x+l。

2)自減運算符。例如,X--表示在使用x之后,使x的值減1,即x=x-l;--X表示使用x

之前,先使X的值減1,即x=x-l。

4、復合算術賦值。例如,a+=l,相當于a=a+l;a+=b,相當于a=a+b。

例2.4變量自加運算

#include<iostream>

usingnamespacestd;

intmain()

(

intx,y,zl,z2;

x=7;y=8;

zl=y-(x++);〃計算zl=l,計算后x=8

z2=y-(++x);〃計算前x的值自加1,x的值為9,再與y求差

cout?,,zl="?zl?endl?"z2="?z2;〃分別輸出zl和z2的值

)

運行結果:

zl=l

z2=-l

二、關系運算符

關系運算符用于數值的大小比較。包括大于(>)、小于(<)、等于(二二)、大于等于(>二)、小于等于

(<二)和不等于(!二)六種,它們都是雙目運算符。

關系運算符運算的結果是整型,值只有兩種:0或1,。代表關系不成立,1代表關系成立。

請看下面的例子:

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)?

)

三、邏輯運算符C++語言中提供了三種邏輯運算符:與運算(&&)、或運算(||)、非運算(!)。與運

算符(&&)和或運算符(||)均為雙目運算符。具有左結合性。非運算符⑴為單目運算符,具有右結合性。邏

輯運算符和其它運算符優(yōu)先級的關系可表示如下:

按照運算符的優(yōu)先順序可以得出:

a>b&&c>d等價于(a>b)&&(c>d)

!b==c||d<a等價于((!b)==c)||(d<a)

a+b>c&&x+y<b等價于((a+b)>c)&&((x+y)<b)

邏輯運算的值也為嗔”和“假”兩種,用“V和"0"來表示。其求值規(guī)則如下:

L與運算&&參與運算的兩個量都為真時,結果才為真,否則為假。例如,5>0&&4>2,由于

5>0為真,4>2也為真,相與的結果也為真。

2.或運算||參與運算的兩個量只要有一個為真,結果就為真。兩個量都為假時,結果為假。

例如:5>0||5>8,由于5>0為真,相或的結果也就為真

3.非運算!參與運算量為真時,結果為假;參與運算量為假時,結果為真。例如:!(5>0)的結

果為假。

雖然C++編譯在給出邏輯運算值時,以“1"代表嗔”,“0”代表“假但反過來在判

斷一個量是為“真"還是為“假"時,以"0"代表"假”,以非“0”的數值作為“真"。例如:由于5和

3均為非“0”因此5&&3的值為,即為1。又如:5||0的值為嗔”,即為1。

需要說明的是,對于有符號數,在右移時,符號位將隨同移動。當操作數為正數時,最高

位為0,而為負數時,最高位為1。最高位是補0或補1取決于編譯系統(tǒng)的規(guī)定。

在C++語言中,有一些運算可以簡寫,如下表所示。

算術運算符、關系運算符、邏輯運算符和賦值運算符的優(yōu)先級如下:

賦值運算符邏輯運算符關系運算符算術運算符

低演)

關系運算符的結合性為:自左至右。

根據以上優(yōu)先級和結合性,計算出以下表達式的結果(假設a=3,b=2,c=l)

a>b表達式為真,所以表達式的值為1

(a>b)==c表達式為真,所以表達式的值為1

b+c<a表達式為假,所以表達式的值為0

d=a>ba>b為真,所以d的值為1

f=a>b>ca>b為真,結果為1,l>c為假,所以f的值為0

【上機練習】1.A+B問題[1.3編程基礎之算術表達式與順序執(zhí)行01】

大部分的在線題庫,都會將A+B問題作為第一題,以幫助新手熟悉平臺的使用方法。

A+B問題的題目描述如下:給定兩個整數A和B,輸出A+B的值。保證A、B及結果均在整型范

圍內?,F在請你解決這一問題。

輸入:

一行,包含兩個整數A,B,中間用單個空格隔開。A和B均在整型范圍內。

輸出:

一個整數,即A+B的值。保證結果在整型范圍內。

樣例輸入:

12

樣例輸出:

3

2.計算(a+b)*c的值[1.3編程基礎之算術表達式與順序執(zhí)行02]

給定3個整數a、b、c,計算表達式(a+b)*c的值。

輸入:

輸入僅一行,包括三個整數a、b、c,數與數之間以一個空格分開。

(-10,000<a,b,c<10,000)

輸出:

輸出一行,即表達式的值

樣例輸入:

235

樣例輸出:

25

3.計算(a+b)/c的值[1.3編程基礎之算術表達式與順序執(zhí)行03]

給定3個整數a、b、c,計算表達式(a+b)/c的值,/是整除運算。

輸入;

輸入僅一行,包括三個整數a、b、c,數與數之間以一個空格分開。(-10,000<abc<10,000,c

不等于0)

輸出:

輸出一行,即表達式的值。

樣例輸入:

113

樣例輸出:

0

4.帶余除法[1.3編程基礎之算術表達式與順序執(zhí)行04]

給定被除數和除數,求整數商及余數。此題中請使用默認的整除和取余運算,無需對結果進行任

何特殊處理。

輸入:

一行,包含兩個整數,依次為被除數和除數(除數非零),中間用一個空格隔開。

輸出:

一行,包含兩個整數,依次為整數商和余數,中間用一個空格隔開。

樣例輸入:

103

樣例輸出:

31

5.計算分數的浮點數值[1.3編程基礎之算術表達式與順序執(zhí)行05】

兩個整數a和b分別作為分子和分母,既分數a/b,求它的浮點數值(雙精度浮點數,保留小數點

后9位)。

輸入:

輸入僅一行,包括兩個整數a和b。

輸出:

輸出也僅一行,分數a/b的浮點數值(雙精度浮點數,保留小數點后9位)。

樣例輸入:

57

樣例輸出:

0.714285714

第三節(jié)常量和變量:一、常量

常量是指在程序中使用的一些具體的數、字符。在程序運行過程中,其值不能被更改。如

123,145.88,'m',TRUE

1、整型常量:如3、-5、0等。

整型常量是表示整數的常量。有三種表示形式:

1)十進制形式。如99、-1。

2)八進制形式。以數字0打頭,由0-7構

溫馨提示

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

評論

0/150

提交評論