版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C++入門2
§電腦的組成——硬體和軟體
一、電腦硬體1
硬體組成:由運算器、控制器、記憶體、輸入設備和輸出設備等五大部分組成,如圖所示。3二、電腦軟體1軟體的作用:軟體是電腦系統的靈魂,沒有配備任何軟體的“裸機”無法使用,沒有配備足夠的軟體,電腦的功能將不能很好地發揮,應用範圍也將受到很大的影響。2軟體的組成:43程式語言的發展:正象人與人之間的交流需要自然語言一樣,人與計算交流也需要語言,我們把這種語言稱為電腦語言,電腦語言有多種:C++;C;PB;VB;Java等等①電腦語言的發展過程:
機器語言組合語言高級語言
機器語言:由0或1代碼組成的且是電腦唯一能夠直接讀懂並能直接執行的語言。
組合語言:將機器指令映射為一些可以被人讀懂的助記符,如ADD、SUB等。5
高級語言:遮罩低級語言硬體細節的語言,各類電腦能通用、接近人們“自然語言”和“數學語言”的程式設計語言,通用性和可移植好翻譯系統:把高級語言編寫的程式翻譯成用二進位形式表示的機器語言程序的軟體翻譯方式有兩種:編譯方式和解釋方式根源程式:用高級語言編寫的程式目的程式:是翻譯後得到的機器語言程式,它是電腦可執行的程式程式:為使電腦完成一個預定的任務而設計的一系列語句或指令。程式是指令的集合。電腦的工作是用程式來控制的。程式設計:設計、書寫及檢查調試程式的過程6各種電腦語言的發展演化進程:FORTRANFORTRAN77FORTRAN90BASICANSI-BASICQBASICVISUAL-BASICDELPHIPASCALALGOLALGOL68SIMULA67SMALLTALKC++JAVAC#BCPLBC7§電腦的工作過程一利用電腦解題的步驟
1.上機前的準備:①建立數學模型
②確定解題步驟(即演算法)
③用某種計算語言將演算法寫成程式
2上機調試運行該程式
3維護,升級該程式電腦的工作過程取指令→分析指令→執行指令(程式=演算法+數據結構)8§演算法的表示形式⒈用流程圖表示演算法演算法:是程式的靈魂,是為解決一個問題而採取的方法和步驟,或者說是解題步驟的精確描述演算法的主要表示形式:流程圖:用一些框圖表示各種操作,且為提高演算法的品質,規定演算法(程式)只能由三種基本結構(順序、選擇和迴圈)組成。ANSI(美國國家標準化協會)規定了一些常用的流程圖符號:起止框
(示演算法的開始和結束)判斷框
(一個入口兩個出口,依給定的條件是否滿足決定執行兩條路徑中的某一路徑)9處理框
(示“賦值”等一般處理)輸入/輸出框
(示輸入輸出操作)流程線
(示流程的方向)連接點
(小圓圈,將畫在不同地方的流程線連接起來)注釋框
(對流程線中某些部分作必要的說明,不是流程圖中的必要部分,不反映流程和操作)例題:求1+2+3+…直到其和等於或大於100為止。用流程圖表示其演算法10分析:和數用變數t
存放,加數用變數i
存放結束開始0t,1it+iti+1it
100輸出t的值不成立成立順序結構順序結構迴圈結構11⒉用N-S流程圖表示演算法a.順序結構塊A、B是按順序執行的b.選擇結構(if‥‥‥else)P條件成立執行A操作,p條件不成立執行B操作ABABp成立
不成立12c.迴圈結構前測試當型迴圈當p1滿足A前測試直到型迴圈直到p2滿足A後測試當型迴圈當p1滿足A後測試直到型迴圈直到p2滿足A(for、while、do‥‥‥while)13例題:
求1+2+3…直到其和等於或大於100為止,用N-S圖表示其演算法直到t
100輸出t0t,1it+iti+1i分析:和數用變數t
存放,加數用變數i
存放intt=0,i=0;t=t+i;i=i+1;do
{}while(t<100);cout<<t;voidmain(){#include<iostream.h>}143用偽代碼(演算法描述語言)表示演算法
偽代碼:用介於自然語言和電腦語言之間的文字和符號來描述演算法
特點:書寫方便,格式緊湊,便於向程式過渡,適用軟體專業人員使用。例題:
將x,y中最大的輸出分析:用偽代碼表示其演算法為:if(x>y)輸出xelse輸出y15
對複雜問題如何進行抽象和分解,對程式如何進行組織,使得程式的可維護性、可讀性、穩定性、效率等更好,是程式設計方法研究的問題。目前,有兩種重要的程式設計方法:結構化的程式設計和面向對象的程式設計
結構化程式設計(StructuredProgramming,簡稱SP)
主要思想是:
把一個複雜的任務不斷進行功能分解,劃分成一系列較小的任務,直到這些子任務小到易於理解和實現。結構化程式設計兩個要點:①採用“自頂向下逐步求精”的設計思想
②程式只採用順序、迴圈和選擇三種控制結構用C++編寫的結構化程式是由許多函數組成的,其程式的結構清晰。但也有一些缺點:
§程式的設計方法16
①恰當的功能分解是結構化程式設計的前提。然而對用戶來講,變化最大的就是功能的改進、添加和刪除。結構化程式要實現這種功能變化不容易,有時甚至要重新設計整個程式的結構。
②在結構化程式設計中,數據和對數據的操作(即函數)分離,函數依賴於數據類型的表示。數據的表示發生變化,則與之相關的所有函數均要修改,使得程式難於維護。
③由於數據結構和函數密切相關,使得程式代碼複用性較差
面向對象的程式設計面向對象程式設計是在吸取結構化程式設計的一切優點的基礎上發展起來的,其程式由對象組成,對象間通過消息相互作用。它的本質是把數據和處理數據的過程當成一個整體——對象。17
■
對象:客觀世界中任何一個事物都可以看作一個對象,例如三年級一班。一個對象應包括兩個因素:一是數據(相當於班級中的學生);二是需要進行的操作,相當於學生進行的活動:上課、休息、開會和文娛活動等。對象是由數據和操作代碼組成:
■
類(class):對象的類型叫做類,例如三年級一班、二班、三班是三個不同的對象,它們具有完全相同的結構和特性故它們屬於同一類。類代表了某一批對象的共性和特徵,類是對象的抽象,而對象是類的具體實例。類是用來定義對象的一種抽象數據類型,或者說它是產生對象的範本。
18
■
封裝:有兩個含義:①把對象的全部屬性和全部服務結合在一起,形成一個不可分割的獨立單位(即對象);②第二個涵義也稱作“數據隱藏”,即盡可能隱蔽對象的內部細節。例如:聲卡是自成一體的,這種自成一體性稱為封裝性,無需知道其工作原理就能使用的思想稱為數據隱藏。在C++中,封裝是通過定義類來實現的。
■
繼承:類與類之間可以組成繼承層次,一個類的定義(子類或派生類)可以定義在另一個已定義類(父類或超類或基類)的基礎上。子類可以繼承父類中的屬性和操作,也可以定義自己的屬性和操作。繼承的主要益處是可以複用超類的程式代碼。
■
多態性:對象的多態性是指在一般類中定義的屬性或操作被特殊類繼承之後,可以具有不同的數據類型或表現出不同的行為。這使得同一個屬性或操作名在一般類及其各個特殊類中具有不同的語義。
19§C++語言概述一、C++的發展史:BCPLBCC++CPLALGOL60二、從C到C++:
C語言:是介於低級組合語言與高級語言之間的語言;C語言既可向彙編語言一樣直接訪問電腦硬體,又具備高級語言的優點(面向用戶、容易記憶、清晰靈活),可稱之為高級的組合語言。
常用來編寫系統軟體。然而,C語言也存在一些缺陷:類型檢查機制較弱,代碼的重用率也低。為了克服C的缺點並保持其優點,在1980年貝爾實驗實對C進行了改進和擴充,構成最早的C++(又稱帶類的C語言)語言。20
C++語言:保留了C語言的優點同時也吸收其他面向對象編程語言的長處。可以說C++是C的一個超集、一個更好的C語言、C語言的改良版本,也是建立C++的基礎。C++既支持傳統的結構化程式設計,又支持面向對象的程式設計。三C++程式開發過程步驟:1.編輯2.編譯3.連接4.運行
編輯(.cpp/.h)
編譯(.obj)聯接(.exe)運行21
編輯:是指把按照C++語法規則編寫的程式代碼通過編輯器(如:VisualC++6.0)輸入電腦,並存盤。在存盤時,C++原始檔案的擴展名為.CPP。編譯:將編輯好的C++根源程式用編譯器進行語法檢查並轉換為目標代碼檔(OBJ檔)。即生成該原始檔案的目標代碼。鏈接:將用戶程式生成的(多個)目標代碼檔(.obj)以及系統提供的
庫檔(.lib)中的代碼連接在一起,生成一個可執行檔(.exe)
(或動態,靜態庫,.dll,.lib)。執行:運行所生成的可執行檔,用戶可以根據運行結果來判斷程式是否出錯。如果有輸入數據,嘗試各種不同的輸入是否都能得到正確結果.調試:編碼調試是一個迴圈過程編輯編譯鏈接執行22§C++程式的框架結構1.編程顯示:ThisismyfirstC++program.
/*ch1_1.cppcreatedon2004-02-10author小王*/#include<iostream.h>voidmain(){
//下麵將輸出ThisismyfirstC++program.
cout<<“ThisismyfirstC++program.\n”;}是iostream.h檔定義的標準輸出流設備是將其右邊的數據送到顯示設備上23
#include<iostream.h>
#include<math.h>
doublemax(doublex,doubley);
voidmain()
{
doublea,b,c;
cout<<"inputtwonumbers:\n";
cin>>a>>b;
c=max(a,b);
cout<<"thesquartofmaximum="<<sqrt(c);
}
doublemax(doublex,doubley)
{
if(x>y)
returnx;
else
returny;
}
運行結果為:
2.求較大數平方根的程式:inputtwonumbers:216
thesquartofmaximum=4.0000024
#include<iostream.h>
#include<math.h>doublemax(doublex,doubley)
{
if(x>y)
returnx;
else
returny;
}
voidmain()
{
doublea,b,c;
cout<<"inputtwonumbers:\n";
cin>>a>>b;
c=max(a,b);
cout<<"thesquartofmaximum="<<sqrt(c);
}
運行結果為:
3.求較大數平方根的程式:inputtwonumbers:216
thesquartofmaximum=4.0000025一、結構化程式設計的C++程式結構:
編譯預處理指令全局說明程式的主函數main()用戶自定義的子函數其結構用圖表示為右圖:26①編譯預處理部分(宏定義,檔包含和條件編譯、):由井字型大小“#”引入的指令為預處理指令,“#include”稱為檔包含預處理指令,通過該指令系統將其後程式段使用的名稱進行了預先的說明。◆#include<iostream.h>的作用是:將系統定義的一個頭檔iostream.h包含到該程式中,iostream.h檔定義了輸入輸出流對象cout與cin等②全局說明部分:包括程式要用的全局變數、類說明、用戶定義函數的原型
說明等。③主函數:任何一個C++程式都有且只有一個主函數main(),它可以帶參數。
main函數的返回值有兩種情況:無返回值(返回類型為void)及返回值為整型27④用戶自定義函數:是程式員為了實現某些特定的操作而編寫的一組代碼。常用的函數一般都帶有一定數目的參數和一個返回值。⑤注釋部分:多行注釋"/*------*/"或單行注釋"//-----"
函數的結構形式:函數類型函數名(形式參數類型:形式參數){數據定義函數執行}例:doublemax(doublex,doubley)
{
if(x>y)
returnx;
else
returny;
}
28二、面向對象程式設計的C++程式結構:
編譯預處理指令全局說明類的說明類成員函數的定義用戶定義函數主函數main()29§VisualC++6.0開發環境介紹
VisualC++6.0(簡稱VC)
:是美國微軟公司開發的C++集成開發環境,它集根源程式的編寫、編譯、連接、調試、運行,以及應用程式的檔管理於一體,
是當前PC機上最流行的C++程式開發環境。C++的集成環境開發環境有:VisualC++,Turbo-C++,BorlandC++,C++
Builder等。VC的功能較多,應在以後逐步掌握,但是本章應掌握它的基本用法:30
VC++6.0用戶介面簡介:31菜單欄:包含了該系統的各種功能工具條:由常用功能按鈕組成。專案工作區(workspace):用來查看和修改專案中的所有元素。
檔專案和專案配置是由專案工作區組織起來的。專案工作區的內容和設置通過專案工作區檔(.dsw)
來描述。在建立一個專案工作區文件的同時,還生成專案檔(.dsp)和工作區選項檔(.opt)用來保存工作區的設置。32專案(專案)——一個程式是一個專案專案是一些相互關聯原始檔案的集合,這些原始檔案組成一個程式包含根源程式、頭檔、目標檔等一個專案的所有資訊。專案檔的擴展名.dspdsw和dsp由系統自動產生。代碼編輯窗口:通過該窗口輸入根源程式輸出窗口:用來顯示專案創建過程中的錯誤資訊及運行結果33
用VC開發程式的步驟:1:首先創建一個C++專案file/new/workspace選擇win32consoleapplication輸入專案名稱選擇:創建或加入工作空間2:創建C++原始檔案file/new/file選擇C++sourcefile.選擇Addtoproject把原始檔案加入專案。343:編輯、編譯、連接、運行程式編譯:build/compile連接:build/build運行:build/!execute35§2.1
C++的詞法及詞法規則C++的字元集大小寫字母:a,b,A,B‥‥‥數字:0~9。運算符:+,-,*,/,
%,<,<=,=,>=,
>,!=,==,<<,>>,&,|,
&&,‖,∧,~,(),[],{},->,
•
,!,?,?:,,,;,”,#。特殊字元:連字元或下劃線,空格、換行和跳位字元等。36二詞與詞法規則識別字:用來標識用戶定義的常量名、變數名、函數名、檔案名、數組名、和數據類型名和程式等。由字母、下劃線或數字
組成的字元序列,識別字必須由字母或下劃線開始,有效長度是8個字元。正確不正確smart5smart(不能數字開頭)_decisionbomb?(有非法字元?)key_boardkey.board(有非法字元.)【例】:下圖是正確和不正確的識別字實例:37
識別字的命名規則:
①所有識別字必須由字母或下劃線開頭且由字母、下劃線或數字組成②識別字應該儘量有意義。如:年year,長度用length,累加和用sum等。④大小寫字母表示不同意義,即代表不同的識別字⑤不能把關鍵字它們再定義為變數的識別字關鍵字:預定義的識別字,稱之為關鍵字,它是一種特殊的識別字。關鍵字具有特定的含義,作為專用定義符的單詞,不允許另作它用。標準C++中預定義了以下關鍵字(常用):38auto break case char
classconst continue default do
ddefaultdelete double else enum
explicit
extern float for friend
gotoif
inline int long
mutablenew operator private protectedpublic register return short
signedsizeof static static_cast struct
switchthis typedef union unsignedvirtualvoid while3.運算符和分隔符號
運算符是C++語言實現加、減等各種運算的符號。C++語言的分隔符主要是:空格、製錶和換行符。394.字串字串是由雙引號括起來的字元。如“China”,“C++Program”
5.常量
C++中常量包括實型(浮點常量)和整型常量(十進位常量、八進制常量、十六進制常量)、字元常量和字串常量。
6.注釋注釋是用來幫助閱讀、理解及維護程式。在編譯時,注釋部分被忽略,不產生目標代碼。C++語言提供兩種注釋方式。一種是與C相容的多行注釋用/*和*/分界。另一種是單行注釋,以“//”開頭的表明本行中“//”符號後的內容是注釋。40§2.2
數據類型數據類型:它定義了變數可存儲的數值範圍以及可進行的操作。每個變數(是用於記憶體中保存數據的)都必須有確定的數據類型,C++語言的數據類型有:數據類型基本類型整型int實型(浮點型)單精確度型float雙精度型double字元型單字符型char寬字元型w-char邏輯型bool非基本類型空類型(無值類型)void構造類型數組類型結構類型struct聯合型類型union枚舉型類型enum指針類型類類型class41基本數據類型寬度及表示範圍:各類型精度由低到高排列為:
如果運算符兩邊運算元類型不同,先要將較低類型轉換為較高類型,然後再運算42
#include<iostream.h>
voidmain()
{
chara='x';
intb=3,f=2;
floatc=2.5678;
doubled=5.2345
longe=32L;
cout<<a-b+d/c-e*f<<endl;
}運行結果為:55.038515
43§2.3
變數變數:指程式在運行時其值可改變的量。每個變數由一個變數名惟一標識,同時,每個變數又具有一個特定的數據類型。不同類型的變數在內存中佔有存儲單元的個數不同不能是C++的關健字。第一個字元必須是字母或下劃線且由字母、數字或下劃線組成。一般不要超過31個字元。不要與C++中的庫函數名、類名和對象名相同。應該儘量有意義。如:numOfStudents;my-car;myCar;iMyCar等區分大小寫1.變數的命名規則:注意:C++中,變數使用之前一定要定義或說明!442.變數的定義的格式:[存儲類型]類型變數名;存儲類型有:autoregisterexternstatic默認的是autoauto存儲類屬於臨時性存儲,其存儲空間可以被若干變數多次覆蓋使用。register存儲類存放在通用寄存器中。extern存儲類在所有函數和程式段中都可引用。static存儲類在內存中是以固定地址存放的,在整個程式運行期間都有效。45
例如:inta,b,c;//定義3個整型變數a,b,c
和: inta; //定義整型變數a intb; //定義整型變數b intc; //定義整型變數c
二者等價。3.變數的初始化:變數初始化一般採用兩種方式:①在定義變數時就給變數賦初值
例如:
inta=3;
floatb=3.4;
②先定義,再賦植
例如:
inta;
a=3;46
sizeof操作符
typedef
為一個已有的類型名提供一個同意詞typedefintINTEGER;//新類型名INTEGERnum1,num2;//完全等價於:intnum1,num2例:
例:
count<<“sizeofcharis”<<sizeof(char)<<end1;其運行的結果為:sizeofcharis
1其語法形式為:sizeof(類型名)或sizeof(運算式)其結果值為:“類型名”所指定的類型或“運算式”的結果類型所占位元組數。47§2.4常量常量:指在程式運行過程中其值不能改變的量。C++支持5種類型的常量:浮點型、整型、字元型、布爾型和枚舉型。十進位:123,-23456八進制:0123,0765十六進制:0x123,0xa4d3長整型:123L,0123L,0X123L無符號整形:13579ul
//無符號長整數1、整型常量2.實型常量①.小數形式:由數字和小數點組成如:0.123,.234,-56.789等48②.指數形式:如:123E5,123e5,0.123e8,1.23E7,-0.123e234.字串常量只表示一個字元,用單撇號。例:‘a’存儲字元的ASCII碼。例:‘a’在電腦中存為其ASCII碼97
字元常量可與整數進行混合運算,它門在功能上等價轉義字元(是以\開頭的特殊的字元常量)常用轉義字元:\a;\n
;\t
;\b
;\\
;\’
;\”
;
\ddd;
\xhh
3.字元常量用雙撇號括起來的量。如“a”存儲時系統自動在字串常量的末尾加上‘\0’
,表示字串結束。‘a’是字元常量,占一個位元組,“a”是字串常量,占兩個位元組。
494.枚舉常量若一個變數只有幾種可能的值,就可以把它定義為枚舉類型。其形式為:enum
枚舉類型名
{常量值1,常量值2,…,常量值n};例:enumweekday{sun=7,mon=1,tue,wed,thu,fri,sat};enumcolor{Red,Green,Blue,White,Black};5.常量的定義①若想使某個變數的值一直不變可用const來定義其為一個常量。一旦加了const修飾符,只能通過聲明時初始化其值,而不能在隨後再改變其值.例:計算圓面積
#include<stdio.h>voidmain()
{
constfloatpi=3.14159;
floatr=3;
printf(“Area=%f\n”,
r*r*pi);
}50②
用#define來定義常量例:計算圓面積
#include<stdio.h>
#definePI3.14159
voidmain()
{
floatr=3;
printf(“Area=%f\n”,
r*r*PI);
}在程式編譯前,所有的PI都被替換成3.141592651#include<iostream.h>voidmain(){constintPI=30;intnum,total;floatv,r,h;num=10;total=num*PI;cout<<total<<endl;r=2.5;h=3.2;v=3.14159*r*r*h;cout<<v<<endl;}變數變數先定義後使用符號常量52§2.6輸入/輸出(I/O)
I/O:
C++沒有提供輸入/輸出語句,而是以下兩種方法來實現:②或由檔stdio.h中定義的庫函數scanf()、
printf()來實現
①由檔iostream.h中定義的輸入對象cin、輸出對象cout與抽取操作符“>>”和插入操作符“<<”來實現。
輸入/輸出流(I/0流):C++中把數據之間的傳輸操作稱作流。I/0流指輸入或輸出的一系列位元組。1.用標準I/O流庫實現輸入輸出:①
輸入:當程式需要從鍵盤輸入時,可以使用抽取操作符“>>”從輸入流cin中抽取鍵盤輸入的字元和數字,並把它賦給指定的變數。53例2:
doublex;inty;charz;cin>>x>>y>>z;注意:①cin:指標準的輸入設備(鍵盤)
②>>:提取操作符,從輸入流讀入數據
③從控制臺(鍵盤)接收輸入數據:cin>>變數1>>變數2……
④用空格或回車符作為數據之間的分隔符號,每個輸入數據的格式應與相應變數的類型相符。
⑤若用程式中用了I/O流則必需在該程式前寫上預處理指令:
#include<iostream.h>例1:#include<iostream.h>voidmain(){
inta;
cin>>a;}54其運行結果為:i的值為3.14159例:doublei=3.14159;
cout<<“i的值為”<<i;
等價:cout<<“i的值為”;cout<<i;
或等價:cout<<“i的值為”
<<i;
注意:①cout:指標準的輸出設備(顯示器),用於在螢幕上輸出變數的值和雙引號中的字串。
②<<:插入操作符,把數據送到輸出流
③把變數的值或字串送到控制臺(螢幕)輸出:
cout<<運算式1<<運算式2……
cout<<“字元1”<<“字元2”……④cin,cout在檔<iostream.h>中,故在程式開始必須寫出其檔②
輸出:當需要在螢幕上輸出變數的值或字串時,可用輸出流庫對象
cout與插入操作符“<<”來實現。55例:用流進行輸入輸出:#include<iostream.h>voidmain(){ intm; charch1,ch2; floatx,y; cin>>m>>ch1>>ch2>>x>>y; cout<<“m=“<<m<<endl; cout<<“ch1=“<<ch1<<“,ch2=“<<ch2<<endl; cout<<“x=“<<x<<“;y=“<<y<<endl;}在C++程式中,對標準I/O的操作必須說明相關頭檔,cin,cout使用的頭檔是<iostream.h>鍵盤輸入的格式:以空格或回車分隔數據。但字元數據要注意:空格也是合法字元。“”內字元原樣輸出56
I/O流的格式控制用控制符(檔iomanip.h中定義的對象)可以對輸入輸出格式進行控制常用的控制有:dechex
oct
setfill(c)
setprecision(n)
setw(n)
setiosflags(ios::fixed)setiosflags(ios::scientific)
setiosflags(ios::left)setiosflags(ios::right)setiosflags(ios::skipws)setiosflags(ios::uppercase)setiosflags(ios::lowercase)setiosflags(ios::showpoint)setiosflags(ios::showpos)
置基數為10置基數為16置基數為8設填充字元為c
設顯示小數精度為n位
設域寬為n個字元
固定的浮點顯示
指数表示
左对齐
右對齊
忽略前导空白
16進制數大寫輸出
16進制數小寫輸出強制顯示小數點強制顯示符號57#include<iostream.h>
#include<iomanip.h>//要用到格式控制符voidmain()
{
doubleamount=22.0/7;
cout<<amount<<endl;
cout<<setprecision(0)<<amount<<endl
<<setprecision(1)<<amount<<endl
<<setprecision(2)<<amount<<endl
<<setprecision(3)<<amount<<endl
<<setprecision(4)<<amount<<endl;
cout<<setiosflags(ios::fixed);
cout<<setprecision(8)<<amount<<endl;
cout<<setiosflags(ios::scientific)
<<amount<<endl;
cout<<setprecision(6);//重新設置成原默認設置
}
運行結果為:
3.14286
例:3
3
3.1
3.14
3.143
3.14285714
3.14285714e+0058①cout<<setfill('*')
<<setw(2)<<21<<endl
<<setw(3)<<21<<endl
<<setw(4)<<21<<endl;
cout<<setfill('');//恢復默認設置
運行結果為:
21
*21
**21②number=1001;cout<<"1001:"<<hex
<<setiosftags(ios::uppercase)
<<number<<endl;
運行結果為:
1001:3E9。③cout<<10.0/5<<endl;
cout<<setiosflags(ios::showpoint)
<<10.0/5<<endl;
運行結果為:
2
2.00000
59④cout<<10<<""<<-20<<endl;
cout<<setiosflags(ios::showpos)
<<10<<""<<-20<<endl;
運行結果為:10-20
+10-20
2.調用標準I/O函數完成輸入輸出標準函數:各種電腦都提供的一些通用函數被稱為標準函數標準I/O函數:常用的是由檔stdio.h定義的輸入函數scanf()和輸出函數printf()①
輸出函數:printf()格式:printf(”格式控制串”,輸出項1,輸出項2,…,)功能:將後面的輸出項按前面給定的格式輸出60格式控制串的組成:“普通字串和格式串“格式串:以%開頭,以格式字元結束。其完整的形式為:%
–0m.nl或h格式字元格式說明的起始符號指定左對齊輸出指定空位填0指定輸出的寬度及精度輸出長度修正指出輸出的類型:d:十進位
o:八進制
x:十六進制
c:字元
s:字串
u:無符號的十進位
f:小數形式
e:指數形式表示
例:floata=2.14235;printf(“a=%–05.2f”,a);其輸出結果為:a=002.14
61實例1:
#include<stdio.h>voidmain(){printf("ThisisaCprogram.\n");}實例2:
#include“stdio.h”voidmain(){inta=1,b=2,c=100;printf("a=%d,b=%3d,d=%3d%%\n",a,b,a*c/b);printf("%d,%o,%x\n",c,c,c);}
輸出:a=1,
b=
2,
d=
50%100,144,
6462格式:scanf(”格式控制串”,地址1,地址2,…,)②輸入函數:scanf()%*mh或l格式字元格式說明的起始符號虛讀,不送變數域寬說明短整型或常整型及雙精度型指出輸入的類型:d:十進位
o:八進制
x:十六進制
c:字元
s:字串
u:無符號的十進位
f:小數形式
e:指數形式表示
“格式控制串”完整的組成:變數a的地址可表示為:&a功能:將數據按給定的格式存入對應的變數中。實例:1:scanf("%3d%2d",&x,&y);
輸入序列:123456[ENTER]
結果:x=123,y=452:scanf("%d,%d:%f",&x,&y,&z);
輸入序列:1,2:3.5[ENTER]
結果:x=1,y=2,z=3.5633:scanf("%d%d%d",&x,&y,&z);
輸入序列一:1
2
3[ENTER]
結果:x=1,y=2,z=3
輸入序列二:1[TAB]23[ENTER]
輸入序列三:1[ENTER]
23[ENTER]
結果與輸入序列一的結果一樣。4:scanf("%2d
%*2d,%2d",&x,&y);
輸入序列:1234,56[ENTER]
結果:x=12,y=56。注意:在scanf中,可以使用[ENTER]、空格或[TAB]作為數據之間的分隔符號。645:scanf(”x=%d",&x);
要使x的值等於12,從鍵盤應怎樣輸入?
正確的輸入序列:x=12[ENTER]
注意:字元x=被過濾掉了
若輸入序列為:12[ENTER]錯誤!
65§3.1
C++的運算符運算符:在程式中,許多語句是由運算式構成的。運算式是由運算符和運算數組成的式子。運算符指運算的符號,而運算數包含常量、變數和函數等。運算符的分類:
單目運算(一元運算符,只需一個運算元)
雙目運算(二元運算符,需兩個運算元)
三目運算(三元運算符,需三個運算元)
①
按運算符連接運算對象的個數分為:②
按其在運算式中所起的作用又可分為:66
算術運算符
+-*/%
關係運算符
<<=>===!=
邏輯運算符
!&&||
位運算符
<<>>~|^&
自增自減運算符
++--
賦值運算符
=及其擴展(+=-=*=/=%=等)條件運算符
?:
指針運算符
*和
&
逗號運算符
,
分量運算符
*->
函數調用運算符()下標運算符[]
求位元組運算符
sizeof
強制類型轉換運算符:(type)
671、算術運算符運算符名字實例+加12+4.9//得出16.9-減3.98-4//得出-0.02*乘2*3.4//得出6.8/除9/2.0//得出4.5%取餘13%3//得出12、自加和自減運算符++是自增運算符,――自減運算符,它門都是單目運算符,都是將數值變數的值加1或減1,該類操作符應用於變數而不能應用於常量。例:inti=5;
68運算符名字實例++自加(首碼)++i+10//得出16,i變為6++自加(尾碼)i+++10//得出15,i變為6--自減(首碼)--i+10//得出14,i變為4--自減(尾碼)i--+10//得出15,i變為4注意:
①++或--只能用於變數
②++i或--i是先增值再引用,i++或i--是先引用再增值
③自右向左將運算符結合在一起,但調用函數時,實參的求值順序一般為自右向左。a=6;b=6;
c1=a++;c2=++b;
例:執行結果為:c1=6,a=7,b=7,c2=7inta=1;printf(“%d,%d,%d”,a++,a++,a++);輸出的結果為3,2,1而不是1,2,3。
693、關係運算符
關係運算符用於數值之間的比較,運算式的值為1(表示true),或為0(表示false),見表:運算符名字實例==等於5==5//得出1!=不等於5!=5//得出0<小於5<5.5//得出1<=小於或等於5<=5//得出1>大於5>5.5//得出0>=大於或等於6.3>=5//得出1關係運算符都是雙目運算符,兩邊的數值結果必須是類型相同的其結合性是從左到右,優先順序低於算術運算符。字串不應當用關係運算符比較,因為被比較的不是字串的內容本身,而是字串的地址70①如何表示數學中的邏輯關係:0≤a≤9?用0<=a<=9表示?行嗎?X
因為0<=a<=9等價於(0<=a)<=9若a=5則(0<=a)<=9的值為:1②如何表示數學中的邏輯系:0≤a≤9
0≤a≤9應表示為為:a>=0&&a<=9714、邏輯運算符運算符名字實例!邏輯非
!(5==5)
//得出0&&邏輯與5<6&&6<6
//得出0||邏輯或5<6||6<5
//得出1注意:
①邏輯非的優先順序最高,邏輯與次之,邏輯或最低
②&&:如果第一運算元為0,則不再求解第二運算元。
例:(x=0)&&(y=4):只完成了x的賦值,不再操作y=4,所以,
y沒有實現賦值。
③||
:如果第一運算元為1,則不再求解第二運算元。
例:(x=4)||(y=4)結果如何?例:該式5>3&&2||8<3-!0的值為:172例:從鍵盤上輸入年份year(4位十進位數),判斷其是否閏年。
閏年的條件是:能被4整除、但不能被100整除;或者能被400整除。#include<stdio.h>voidmain(){intyear;printf("Pleaseinputtheyear:");scanf("%d",&year);if((year%4==0&&year%100!=0)||(year%400==0))printf("%disaleapyear.\n",year);elseprintf("%disnotaleapyear.\n",year);}735、條件運算符
一般形式為:
運算式1?運算式2:運算式3
其運算方式為:先計算運算式1的值,如果其值為非0(真),則表達式2的值就是整個運算式的最終結果;否則運算式
3的值就是整個運算式的值。
運行的結果為:x=y?no!例如:①x=10;
y=x>9?100:200;②x=10;y=20;
printf(“x=y?%s!”,x==y?“yes”:“no”);//y=10074注意:
①條件運算符的結合性是自右向左。例如:a>b?a:c>d?c:d;
//相當於a>b?a:(c>d?c:d)
②條件運算符優先順序高於賦值運算符低於關係和算術運算符。例如:
a>b?a-b:b-a;//相當於a>b?(a-b):(b-a)
6、位運算符
位運算符是對其運算元按其二進制形式逐位進行運算,參加位運算的運算元必須為整數。C++提供6種位運算符:
運算符名字功能~取反按位求反&逐位與把兩運算元對應的二進位位進行邏輯與|逐位或把兩運算元對應的二進位位進行邏輯或^逐位異或把兩個運算元對應的二進位位進行異或<<逐位左移將左運算元的每個二進位位左移右運算元位>>逐位右移左運算元的每一個二進位位右移右運算元位757、賦值運算符
①=是賦值運算符,它的作用是將一個運算式的值賦給一個左值。
左值:是指能出現在賦植運算式左邊的運算式,左值能存放數據,能
夠被修改,不能是常量。可用變數作左值,指針和引用也可以作左值。右值:只能出現在賦植運算式右邊。
②賦值運算符“=”的一般格式為:變數=運算式;
例如:inti=1.2*3; intj;j=3*(4+5); //j的值變為27//結果為3,而不是3.6例:二進位數左移:0110<<1其值為:1100
二進位數右移(缺位補最左一位的數值)1100>>1
其值為:111076③賦值運算符的種類:運算符實例等價於=n=25
+=n+=25n=n+25-=n-=25n=n-25*=n*=25n=n*25/=n/=25n=n/25%=n%=25n=n%25&=n&=0xF2F2n=n&0xF2F2|=n|=0xF2F2n=n|0xF2F2^=n^=0xF2F2n=n^0xF2F2<<=n<<=4n=n<<4>>=n>>=4n=n>>477注意:
①賦值運算式本身的運算結果是右側運算式的值,而結果類型是左側
變數的數據類型.
②賦值運算符的結合性是從右至左的
例如:inta=12;a+=a-=a*=a;表示:
a=a*a//a=12*12=144
a=a-a//a=144-144=0
a=a+a//a=0+0=0注意:x*=y+8等價於x=x*(y+8),788、sizeof運算符(求位元組運算符)
sizeof運算符是單目運算符,用於計算運算對象在內存中所占位元組的多少,它有兩種形式:
sizeof(類型識別字);
sizeof運算式;
例如:inta,則sizeof(a)表示:求變數a在內存中所占位元組數。inta[10],則sizeof(a)表示:求數組a在內存中所占位元組數。
9、逗號運算符①逗號運算符用於將多個運算式連在一起,並將各運算式從左到右的順序依次求值,且最右端的運算式的結果,為整個逗號運算式的結果。②一般格式為:運算式1,運算式2,……,運算式n(i=3,i++,++i,i+5)這個逗號運算式的值是10,i的值為579C++運算符的優先順序和結合性:
①當不同的運算符混合運算時,運算順序是根據運算符的優先順序而定的。②若各運算符有相同的優先順序,運算順序是從左向右,還是從右向左,是由運算符的結合性確定的。所謂結合性是指運算符可以和左邊的運算式結合,也可以與右邊的運算式結合。C++運算符的優先順序和結合性見表(P=課本35頁)注意:
①優先順序:一般情況為:
1)單目,雙目,三目,賦值
2)算術,移位,關係,位運算,邏輯,條件,賦植,逗號
②結合性:僅單目、三目和賦值的結合性是從右到左。80括弧!++,--,sizeof*,/,%+,-
移位(>><<)關係(>,>=,<,<=和==,!=)位運算&&||?:賦值運算逗號運算高低③常用運算符優先順序:即:先()→單目!→算數→移位→關係→位運算→&&和︳︳→?→賦值→逗號81運算式:
①運算式:由運算符、運算元組成的計算式子。最簡單的運算式只有一個常量或變數。②運算式的分類(據運算式中的運算符的種類):算術運算式:a+5.2/3.0-9%5關係運算式:(a+b*c)>d邏輯運算式:a>b&&c>d賦值運算式:a=b+c、a+=b*c+d和a=b=c=1條件運算式:a>b?a:b逗號運算式:x=a+b,y=c+d,z=x+y混合運算式:(a>b)+(a=b+c)*(x>y?x:y)
82③運算式求值的順序:●按運算符的優先順序高低次序執行。例如,先乘除後加減●如果在一個運算對象(或稱運算元)兩側的運算符的優先順序相同,則按C語言規定的結合方向(結合性)進行。且運算元必需化成同類型才能計算例:算術運算符的結合方向是“自左至右”,即:在執行“a-b+c”時,變數b先與減號結合,執行“a-b”83數據類型轉換:
C++中數據類型轉換有兩類,①隱式轉換:是由編譯器自動將不同類型的數據轉換為相同類型後再進行運算。隱式類型轉換按從低到高的順序進行:int
unsigned
long
unsignedlong
double
longdouble↑
↑short,char
float②顯式轉換:由程式員顯式指出的類型轉換,轉換形式有兩種:
類型名(運算式)
(類型名)運算式例如:
doublef=3.6;
intn=(int)f;
這樣n為3。
84§語句語句:是組成程式最基本的單位,語句是最小的可執行單元,一條語句由一個分號結束。語句分類:
⒈
根據複雜程度的不同分:①簡單語句:空語句是簡單語句,僅由一個分號組成。②複合語句:由一對花括弧“{}”和括弧裏的一系列簡單語句組成,⒉
根據執行流程的不同分:順序控制語句:指按照語句在程式中先後次序一條一條的順次執行的語句選擇控制語句:據一個條件或一個值從一組語句中選擇一個執行。迴圈控制語句:根據某個條件重複執行一組語句
85§順序控制語句順序控制語句:其語句在執行過程中,程式的流程不會發生轉移。常見的順序結構語句有:聲明語句、賦值語句和輸入輸出語句。例如:doubledval;//聲明語句dval=302.2948;//賦值語句,給變數賦值
cout<<"congratulation!";//輸出語句
cin>>dval;//輸入語句86§選擇控制語句選擇控制語句:又稱為分支語句,它通過對給定的條件進行判斷,從而決定執行兩個或多個分支中的哪一支。因此,在編寫選擇語句之前,應該首先明確判斷條件是什麼,並確定當判斷結果為“真”或“假”時應分別執行什麼樣的操作。選擇控制語句種類:if…else語句和switch語句。
⒈if語句有三種格式:
87運算式執行語句2執行語句1成立不成立運算式執行語句成立不成立①
if(<運算式>)
<語句>②
if(<運算式>)
<語句1>
else<語句2>88運算式1運算式2運算式3運算式4語句1語句2語句3語句4假假假語句5假真真真真③if(運算式1)語句1
elseif(運算式2)語句2
elseif(運算式3)語句3
…
else語句n89例:求a和b兩數中較大的一個。a>b?max=bmax=a成立不成立#include<iostream.h>voidmain(){inta,b,max;cout<<"Inputaandb:";cin>>a>>b;if(a>b)max=a;elsemax=b;cout<<“Themaxofaandb:”<<max;}90例:判斷用戶的輸入,如果輸入的數值大於0,則在螢幕上顯示“正數”;否則在螢幕上顯示“不是正數”。#include<iostream.h>voidmain(){floata;cin>>a;if(a>0)cout<<“正數”<<endl;elsecout<<“不是正數”<<endl;}91例:輸入兩個整數,比較兩個數的大小。#include<iostream.h>voidmain(){intx,y;cout<<"Enterxandy:";cin>>x>>y;
if(x!=y)
if(x>y)cout<<x<<“>“<<y<<endl;
elsecout<<x<<“<“<<y<<endl;
else
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 身体用润肤液市场发展预测和趋势分析
- 2024年度影视制作合同的制片内容、制作周期与投资回报
- 纸或塑料杯市场发展预测和趋势分析
- 2024年度商务咨询合同:涉及咨询内容、咨询期限及咨询费用等细节
- 2024年度服装定制合同标的:企业员工工作服设计制作
- 2024年度5G基站建设项目工程承包合同
- 2024年度品牌授权使用合同with品牌管理条款
- 04年特许经营权授予合同
- 2024年度专利实施许可合同:某专利持有者将其专利许可给另一方的合同
- 2024年度环保项目评估咨询服务合同
- 【基于重心法的S饮料公司配送中心选址探究15000字(论文)】
- 穴位贴敷法技术操作评分标准
- (新版)碳排放管理员(高级)职业鉴定考试题库(含答案)
- 学生宿舍合租合约模板
- 宿迁2024年江苏省宿迁市宿城区教师发展中心招聘研训员5人笔试上岸历年典型考题与考点剖析附带答案详解
- 交通肇事罪课件
- 2024年医师定期考核题库(人文医学测评) 含答案
- 一年级10以内加减法口算题(1000道)(A4直接打印)
- 心律失常介入治疗
- 数字营销课程课程大纲
- DZ∕T 0287-2015 矿山地质环境监测技术规程(正式版)
评论
0/150
提交评论