高級語言程序設(shè)計(CC++版) 課件全套 魏濤 第1-9章 基礎(chǔ)知識-文件_第1頁
高級語言程序設(shè)計(CC++版) 課件全套 魏濤 第1-9章 基礎(chǔ)知識-文件_第2頁
高級語言程序設(shè)計(CC++版) 課件全套 魏濤 第1-9章 基礎(chǔ)知識-文件_第3頁
高級語言程序設(shè)計(CC++版) 課件全套 魏濤 第1-9章 基礎(chǔ)知識-文件_第4頁
高級語言程序設(shè)計(CC++版) 課件全套 魏濤 第1-9章 基礎(chǔ)知識-文件_第5頁
已閱讀5頁,還剩272頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第1章

基礎(chǔ)知識課程地位先導(dǎo)課程、奠定基礎(chǔ)歷史悠久、地位卓越內(nèi)涵豐富、外延拓展216:18課程目標(biāo)掌握程序設(shè)計基礎(chǔ)知識培養(yǎng)問題求解應(yīng)用能力提升計算思維核心素養(yǎng)316:18課程規(guī)劃64學(xué)時:理論32+上機32理論教學(xué)實踐教學(xué)在線教學(xué)416:18課程特色突出問題求解緊扣競賽考研強化教學(xué)交互培養(yǎng)計算思維516:18學(xué)習(xí)目標(biāo)及策略考研專業(yè)課程初試語言基礎(chǔ)復(fù)試機試環(huán)節(jié)認(rèn)真聽講,仔細看書習(xí)題訓(xùn)練,真題模擬上機實踐,在線評測最終目的:熟練使用C/C++語言編程解決實際問題。616:18目錄程序設(shè)計語言C與C++語言第一個C++程序內(nèi)存和變量cin/cout輸入輸出整數(shù)類型浮點類型字符類型程序設(shè)計步驟與流程圖716:181.程序設(shè)計語言8返回機器語言計算機能直接識別和接受的二進制代碼稱為機器指令。機器指令的集合就是該計算機的機器語言。特點:難學(xué),難記,難檢查,難修改,難以推廣使用。依賴具體機器難以移植。匯編語言機器語言的符號化。用英文字母和數(shù)字表示指令的符號語言。特點:相比機器語言簡單好記,但仍然難以普及。匯編指令需通過匯編程序轉(zhuǎn)換為機器指令才能被計算機執(zhí)行。依賴具體機器難以移植。高級語言高級語言更接近于人們習(xí)慣使用的自然語言和數(shù)學(xué)語言。特點:功能強大,不依賴于具體機器。用高級語言編寫的源程序需要通過編譯程序轉(zhuǎn)換為機器指令的目標(biāo)程序。B87F01BB210203D8B81F042BC3MOVAX123MOVBX456ADDBXAXMOVAX789SUBAXBXx=789-(123+456)16:182.C/C++發(fā)展簡史1972年,Bell實驗室的DennisRitchie和KenThompson共同發(fā)明了C語言。C語言充分結(jié)合了匯編語言和高級語言的優(yōu)點,高效靈活,且易于移植,很快得到廣泛使用。1979年,Bjarne

Stroustrup加入Bell實驗室,開始致力于將C改良為帶類的C(Cwithclasses)。1983年該語言被正式命名為C++。ANSI和ISO的聯(lián)合標(biāo)準(zhǔn)化委員會在1994年1月25曰提出了第一個C++標(biāo)準(zhǔn)化草案,該草案保持了Stroustrup最初定義的所有特征。在完成C++標(biāo)準(zhǔn)化的第一個草案后不久,Alexanderstepanov創(chuàng)建了標(biāo)準(zhǔn)模板庫(STL)。在通過了第一個草案之后,委員會投票并通過了將STL包含到C++標(biāo)準(zhǔn)中的提議。委員會于1997年11月14日通過了該標(biāo)準(zhǔn)的最終草案,1998年C++的ANSI/ISO標(biāo)準(zhǔn)被投入使用。通常此版本的C++被認(rèn)為是標(biāo)準(zhǔn)C++,所有的主流C++編譯器都支持該版本的C++,包括微軟的VisualC++和Borland公司的C++Builder。9返回16:183.第一個C++程序要求:在屏幕上輸出“Ilovec++programming!”。#include<iostream>usingnamespacestd;intmain(){ cout<<"Ilovec++programming!"<<endl; return0; }10返回16:184.內(nèi)存和變量存儲器是計算機系統(tǒng)的重要組成部分,是用來存儲程序和數(shù)據(jù)的部件。存儲器按其用途可分為主存儲器和輔助存儲器。主存儲器又稱內(nèi)存儲器簡稱內(nèi)存,輔助存儲器又稱外存儲器簡稱外存。內(nèi)存存取速度快,是CPU能夠直接尋址的存儲空間。存儲器中每一個字節(jié)均對應(yīng)唯一的編碼地址,通常以8bit位組成一個字節(jié)(byte)為基本單位,每210(1024)byte為1KB,210KB為1MB,210MB為1GB,210GB為1TB。11返回16:18變量:具有特定屬性的內(nèi)存單元,可通過變量名直接引用該存儲單元在C/C++程序中,變量必須遵循“先定義,后使用”的原則。變量命名遵守以下規(guī)則:(1)變量名只能由字母、數(shù)字和下劃線構(gòu)成;(2)變量名不能以數(shù)字開頭;(3)變量名不能使用系統(tǒng)保留的關(guān)鍵字(見表1.1);(4)變量名嚴(yán)格區(qū)分大小寫。同時,為了增加程序代碼的可讀性,給變量取名時應(yīng)盡可能做到“見名知義”。定義變量的一般格式為:數(shù)據(jù)類型

變量名1,變量名2,……,變量名n;

inta; //定義一個名稱為a的整型變量

inta,b,c; //定義三個整型變量,名稱分別為a,b,c12autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunionunsignedvoidvolatilewhile16:185.cin/cout輸入輸出

C++的輸入和輸出均是采用“流”(stream)方式實現(xiàn),有關(guān)流對象cin、cout和流運算符的信息均存放于C++的輸入輸出流庫中。因此,若要在程序中使用cin、cout和流運算符,則必須用預(yù)處理命令“#include<iostream>”將頭文件iostream包含到本文件中。使用cin可輸入多個變量的值,其一般格式:cin>>變量1>>變量2……>>變量n;使用cout可輸出多個表達式的值,其一般格式:cout<<表達式1<<表達式2……<<表達式n;13返回16:18例1.2:計算兩個整數(shù)的和。輸入:輸入兩個整數(shù),兩個整數(shù)用空格隔開。輸出:輸出為兩個整數(shù)的和,單獨占一行。樣例輸入:12樣例輸出:3#include<iostream>usingnamespacestd;intmain(){ inta,b; cin>>a>>b; cout<<a+b<<endl; return0;}1416:186.整數(shù)類型進制由符號集和兩個基本因數(shù)“基數(shù)”與“位權(quán)”構(gòu)成,基數(shù)指不同符號的個數(shù),位權(quán)指進制每一固定位對應(yīng)的權(quán)值。十進制是10個符號的排列組合,二進制是2個符號的排列組合。1.十進制轉(zhuǎn)二進制對于整數(shù)部分,用被除數(shù)反復(fù)除以2(第一次取該整數(shù)為被除數(shù),以后每次均取前一次商的整數(shù)部分作被除數(shù)),依次記下每次的余數(shù)并將余數(shù)倒序排列,便是轉(zhuǎn)換后的二進制數(shù)。對于小數(shù)部分,采用連續(xù)乘以基數(shù)2并依次取出整數(shù)部分,直至其小數(shù)部分為0結(jié)束。以十進制數(shù)53轉(zhuǎn)換為二進制數(shù)為例,53連續(xù)六次除以2后,得到的余數(shù)依次是:1、0、1、0、1、1。將所有余數(shù)倒序排列為110101。因此十進制數(shù)53轉(zhuǎn)換成二進制數(shù)為110101。2.二進制轉(zhuǎn)十進制二進制數(shù)第0位的權(quán)值是2的0次方,第1位的權(quán)值是2的1次方,……。如二進制數(shù)01100100轉(zhuǎn)換成十進制數(shù)為100。15返回16:186.整數(shù)類型(原碼、反碼、補碼)計算機中的有符號數(shù)存在原碼、反碼和補碼三種表示方法。在計算機系統(tǒng)中,數(shù)值一律采用補碼來表示和存儲,其原因在于:補碼可將符號位和數(shù)值位統(tǒng)一處理;補碼也可將加減運算進行統(tǒng)一處理。原碼、反碼與補碼的表示規(guī)則如下:原碼表示法的最高位為符號位,正數(shù)該位為0,負數(shù)該位為1;其余位為數(shù)值位,表示數(shù)值的大小,為該數(shù)絕對值的二進制形式。正數(shù)的反碼與原碼相同,負數(shù)的反碼為該數(shù)原碼的符號位不變數(shù)值位取反(0變?yōu)?,1變?yōu)?)。反碼通常用作原碼和補碼之間的過渡碼。正數(shù)的補碼與原碼相同,負數(shù)的補碼為該數(shù)反碼加1。16返回16:18補碼符號位的數(shù)學(xué)特征體現(xiàn)了補碼在計算機系統(tǒng)中數(shù)據(jù)表示與運算的優(yōu)勢。以編譯系統(tǒng)為短整型數(shù)據(jù)分配2個字節(jié)存儲空間為例,十進制數(shù)據(jù)13的二進制形式是1101,其在存儲單元中數(shù)據(jù)形式如圖1.1。十進制數(shù)據(jù)-13的原碼、反碼和補碼如圖1.2。17位序151413121110987654321013的原碼0000000000001101-13的原碼1000000000001101-13的反碼1111111111110010-13的補碼111111111111001116:18Dev-C++環(huán)境中各種類型整數(shù)所占用存儲單元長度及取值范圍C++標(biāo)準(zhǔn)并沒有具體規(guī)定各種類型數(shù)據(jù)所占用存儲單元的長度,具體由各編譯系統(tǒng)自行決定,只是要求:sizeof(short)<=sizeof(int)<=sizeof(long)<=sizeof(longlong)。18整數(shù)類型字節(jié)數(shù)取值范圍[signed]int4-2147483648~2147483647(-231~231-1)unsigned[int]40~4294967295(0~232-1)[signed]short[int]2-32768~32767(-215~215-1)unsignedshort[int]20~65535(0~216-1)[signed]long[int]4-2147483648~2147483647(-231~231-1)unsignedlong[int]40~4294967295(0~232-1)[signed]longlong[int]8-9223372036854775808~9223372036854775807(-263~263-1)unsignedlonglong[int]80~18446744073709551615(0~264-1)16:18例1.3:有m支鉛筆分給n位同學(xué)(且m>n),請問每位同學(xué)平均可分幾支?還剩幾支?輸入:輸入兩個整數(shù)m和n,分別表示鉛筆的總數(shù)和學(xué)生的人數(shù)(m>n)。輸出:輸出兩個整數(shù),分別表示每位同學(xué)平均分配的數(shù)量及剩余的鉛筆數(shù)量。樣例輸入:16332樣例輸出:53#include<iostream>usingnamespacestd;intmain(){ intm,n; cin>>m>>n; cout<<m/n<<""<<m%n<<endl; //cout<<“每位同學(xué)平均可分”<<m/n<<"支,還剩"<<m%n<<“支”<<endl; return0;}1916:187.浮點類型浮點表示法是目前為止使用最廣泛的實數(shù)表示方法。相對于定點數(shù)而言,浮點數(shù)利用指數(shù)使小數(shù)點的位置根據(jù)需要而上下浮動,從而可以靈活地表達更大范圍的實數(shù)。在處理浮點型數(shù)據(jù)時,計算機系統(tǒng)將其分成小數(shù)和指數(shù)兩個部分加以存儲。浮點數(shù)類型包括單精度浮點型(float)、雙精度浮點型(double)和長雙精度浮點型(longdouble)。Dev-C++環(huán)境中各種類型浮點數(shù)所占用存儲單元長度及取值范圍見表1.3。同整數(shù)類型一樣,C++也沒有規(guī)定各種浮點型所占用存儲單元的長度,具體由各編譯系統(tǒng)自行決定。20返回整數(shù)類型字節(jié)數(shù)有效數(shù)字絕對值取值范圍float460以及1.2*10-38~3.4*1038double8150以及2.3*10-308~1.7*10308longdouble16190以及3.4*10-4932~1.1*10493216:18

輸入:輸入一個浮點類型的數(shù)r表示圓的半徑。輸出:該圓的面積。樣例輸入:2.3樣例輸出:16.6106#include<iostream>usingnamespacestd;intmain(){ doubler; cin>>r; cout<<3.14*r*r<<endl; return0;}2116:18絕對值與取整函數(shù);指數(shù)、對數(shù)、開方函數(shù)函數(shù)功能intabs(inti)返回整數(shù)的絕對值doublefabs(doubled)返回雙精度數(shù)的絕對值doublelabs(longn)返回長整型數(shù)的絕對值

doubleceil(doubled)向上取整doublefloor(doubled)向下取整doubleround(doubled)四舍五入22函數(shù)功能doublelog(doublex)返回自然對數(shù)ln(x)的值doublelog10(doublex)返回常用對數(shù)lg(x)的值doublepow(doublex,doubley)返回x的y次冪doublesqrt(doublex)返回x的平方根

16:18例1.5:輸入一個正整數(shù),輸出其位數(shù)。輸入:一個正整數(shù)。輸出:正整數(shù)的位數(shù)。樣例輸入:100樣例輸出:3#include<iostream>#include<cmath>usingnamespacestd;intmain(){ intnum,n; cin>>num; n=log10(num)+1; cout<<n<<endl; return0;}2316:188.字符類型在C++中,字符類型分為無符號字符類型和有符號字符類型。字符類型數(shù)據(jù)占一個字節(jié),以其對應(yīng)ASCII碼的二進制形式存儲,因此可看作是存儲空間和取值范圍更小的整數(shù)類型。字符類型數(shù)據(jù)所占用存儲空間和取值范圍見下表。24返回位序76543210字符'A'01000001字符'a'01100001字符'0'00110000字符'1'00110001字符類型字節(jié)數(shù)取值范圍signedchar1-27~27-1unsignedchar10~28-116:18例1.6:輸入一個小寫英文字符,輸出其在英文字母表中的排序。輸入:一個小寫英文字符。輸出:該字符在英文字母表中的排序。樣例輸入:c樣例輸出:3#include<iostream>usingnamespacestd;intmain(){ charc; cin>>c;

cout<<c-'a'+1<<endl; return0;}2516:189.程序設(shè)計的步驟與程序流程圖表示程序設(shè)計的步驟:(1)分析問題(2)設(shè)計算法(3)編寫程序(4)調(diào)試測試(5)撰寫文檔26返回程序流程圖基本元素16:18程序設(shè)計與運行的基本過程27返回分析問題編寫程序設(shè)計算法編輯、編譯、鏈接源程序運行程序、分析結(jié)果編寫程序文檔開始編輯編譯有錯?鏈接執(zhí)行結(jié)果正確?結(jié)束無正確有不正確可執(zhí)行目標(biāo)程序f.exe源程序f.c目標(biāo)程序f.obj庫函數(shù)和其他目標(biāo)程序16:18DevC++環(huán)境中編寫程序16:1828第2章

順序結(jié)構(gòu)目錄常量運算符與表達式數(shù)據(jù)類型轉(zhuǎn)換scanf/printf輸入輸出本章實例16:18301.常量在C++語言中,數(shù)據(jù)分為常量和變量兩大類。常量和變量均有類型之分,常量按照不同的數(shù)據(jù)類型可分為整型常量、浮點型常量、字符常量以及字符串常量等。1.整型常量:1、0、-1、0b1011(二進制)、012(八進制)、0x12(十六進制)等。2.實型常量:實型常量存在小數(shù)形式和指數(shù)形式兩種形式。(1)小數(shù)形式,由數(shù)字和小數(shù)點組成,如1.23、0.2、.2、2.、0.0、-3.45等。(2)指數(shù)形式,如1.234e5(表示1.234*105)、2E9(2*109)、-3.45E-6(-3.45*10-6)等。3.字符常量:字符常量含有普通字符和轉(zhuǎn)義字符兩種形式。(1)普通字符,只能用英文單引號括起來的一個字符。如'A'、'a'、'0'、'#'、'*'等。(2)轉(zhuǎn)義字符,所有的ASCII碼均可用'\ddd'(1~3位八進制數(shù)字)形式來表示。4.字符串常量:由雙引號括起來的0個或者多個字符序列,如"china"、"123"等。常量可使用常變量的方式實現(xiàn),定義常變量的一般格式為:const變量類型標(biāo)識符=初始值;16:1831返回轉(zhuǎn)義字符字符含義輸出效果\'一個單引號輸出單引號\"一個雙引號輸出雙引號\?一個問號輸出問號\\一個反斜杠輸出反斜杠\a警告發(fā)出警告聲音\b退格光標(biāo)后退一個字符\n換行光標(biāo)移至下一行開頭\r回車光標(biāo)移至本行開頭\t水平制表符光標(biāo)移至下一個TAB位置\v垂直制表符光標(biāo)移至下一個垂直制表對齊位\ddd1~3位八進制數(shù)與該八進制對應(yīng)ASCII碼的字符輸出對應(yīng)ASCII碼的字符\xhh1~2位十六進制數(shù)與該十六進制對應(yīng)ASCII碼的字符輸出對應(yīng)ASCII碼的字符在C語言中,合法的實型常數(shù)是_________。A.5E2.0 B.E-3 C.2E0 D.1.3E在C語言中,合法的實型常數(shù)是__________。A.1.2E0.5 B.3.14E C.5E-3 D.E15以下選項中合法的用戶標(biāo)識符是__________。A.long B._2Test C.3Dmax D.A.dat在C語言中,非法的字符常量是__________。A.‘\t’ B.‘\17’ C."\n" D.‘\xaa’以下不合法的字符常量是__________。A.‘\018’ B.‘\"’ C.‘\\’ D.‘\xcc’16:18322.運算符與表達式常用的運算符包括算術(shù)運算符、比較運算符、位運算符、邏輯運算符、賦值運算符、自增和自減運算符等。由運算符、操作數(shù)和括號構(gòu)成的式子稱為表達式。算術(shù)運算符與算術(shù)表達式:由常量、變量、函數(shù)、圓括號和算術(shù)運算符+、-、*、/、%等組成的式子。一個常量、一個變量(已賦過值)、一個函數(shù)都是合法的表達式。賦值運算符與賦值表達式:“=”的作用是將某一數(shù)值賦給某個變量。由“=”將一個變量和一個表達式連接起來的式子稱為賦值表達式,賦值表達式的末尾加上分號就構(gòu)成賦值語句。賦值表達式的值就是執(zhí)行賦值操作后的變量取值。自增運算符與自減運算符:“++”為自增運算符,其作用是使變量的值加1,“--”為自減運算符,其作用是使變量的值減1。此兩種運算符只能用于數(shù)值類型的變量,不能用于非數(shù)值類型變量、常量、表達式和函數(shù)調(diào)用。++可以置于變量之前,也可放在變量之后?!?+i”指“i自增1后再參與其它運算”;“i++”則指“i參與運算后其值再自增1”。16:1833返回位運算符位運算符用來對二進制位進行操作,其操作數(shù)只能為整型和字符型數(shù)據(jù)。位運算符中,除“~”以外,其余均為雙目運算符。1.按位與運算&:雙目運算符,參加運算的兩個數(shù)以補碼形式按二進制位進行“與”運算。運算規(guī)則:0&0=0;0&1=0;1&0=0;1&1=1;即兩位同時為1結(jié)果才為1,否則為0。例如:3&5=1,即00000011&00000101=00000001。常用于保留或清零指定位。2.按位或運算|:雙目運算符,參加運算的兩個數(shù)以補碼形式按二進制位進行“或”運算。運算規(guī)則:0|0=0;0|1=1;1|0=1;1|1=1;即兩位只要有一個為1結(jié)果為1,否則為0。例如:3|5=7,即00000011|00000101=00000111。常用于對某些指定位置1。

3.按位異或運算^:雙目運算符,兩個數(shù)以補碼形式按二進制位進行“異或”運算。運算規(guī)則:0^0=0;0^1=1;1^0=1;1^1=0;即兩位相異結(jié)果為1,否則為0。例如:3^5=6,即00000011^00000101=00000110。常用于使特定位翻轉(zhuǎn)(對應(yīng)位與1異或)。16:1834位運算符(續(xù))

4.按位取反運算~:單目運算符,用于對一個整數(shù)以補碼形式按二進制位取反,1變?yōu)?,0變?yōu)?。例如~9的運算為:~(00001001)=11110110。5.左移運算<<:雙目運算符,其功能是將運算符“<<”左邊的數(shù)按二進制位左移,參與運算的數(shù)以補碼形式參加左移運算。

“m<<n”表示把m按二進制位補碼形式左移n位。左移n位的時候,最左邊的n位將被丟棄,同時在最右邊補上n個0。如:00001010<<2=00101000,10001010<<3=01010000。6.右移運算>>:雙目運算符,其功能是將運算符“>>”左邊的數(shù)按二進制位右移,參與運算的數(shù)以補碼形式參加右移運算。“m>>n”表示把m按二進制位補碼形式右移n位。右移n位的時候,最右邊的n位將被丟棄。但右移時處理最左邊位的情形要稍微復(fù)雜一點:若m是一個正數(shù)或無符號數(shù),則最左邊的n位用0填補;若m是一個有符號負數(shù),則最左邊的n位補0還是補1取決于所用的計算機系統(tǒng),補0的稱為“邏輯右移”(不保留符號),補1的稱為“算術(shù)右移”(保留符號)。以算術(shù)右移為例:00001010>>2=00000010,10001010>>3=11110001。16:1835運算符的優(yōu)先級16:1836運算符及含義運算種類結(jié)合方向.(對象成員)->(指針)[](數(shù)組下標(biāo))()(函數(shù)調(diào)用)

從左向右++(自增)

--(自減)

(typecast)(強制類型轉(zhuǎn)換)sizeof(求類型長度)

~(按位取反)

!(邏輯非)

+(正號)

-(負號)

*(指針)

&(取地址)*(取值運算符)

&(取地址運算符)

newdelete單目運算從右向左*(乘法)/(除法)%(取余)雙目運算從左向右+(加法)-(減法)雙目運算從左向右<<(左移)>>(右移)雙目運算從左向右>(大于)<(小于)>=(大于等于)<=(小于等于)雙目運算從左向右==(判斷相等)!=(判斷不等)雙目運算從左向右&(按位與)雙目運算從左向右^(異或)雙目運算從左向右|(按位或)雙目運算從左向右&&(條件與)雙目運算從左向右||(條件或)雙目運算從左向右?:(條件運算符)三目運算從右向左=*=/=%=+=-=&=|=^=>>=<<=雙目運算從右向左,

從左向右3.?dāng)?shù)據(jù)類型轉(zhuǎn)換數(shù)據(jù)類型轉(zhuǎn)換就是將數(shù)據(jù)(變量、表達式的值)從一種數(shù)據(jù)類型轉(zhuǎn)換為另一種數(shù)據(jù)類型。數(shù)據(jù)類型轉(zhuǎn)換包括自動類型轉(zhuǎn)換和強制類型轉(zhuǎn)換兩種情形。自動類型轉(zhuǎn)換:在不同數(shù)據(jù)類型的混合運算中,編譯器會隱式地進行數(shù)據(jù)類型轉(zhuǎn)換,這種隱式進行的類型轉(zhuǎn)換稱為自動類型轉(zhuǎn)換。自動類型轉(zhuǎn)換遵循以下原則:(1)如果參與運算的數(shù)據(jù)類型不同,那么先轉(zhuǎn)換成同一類型再進行運算。(2)轉(zhuǎn)換朝著數(shù)據(jù)長度增加的方向進行,以保證精度不降低。(3)在賦值運算中,賦值號兩邊的數(shù)據(jù)類型不相同時,將把右邊表達式值的類型轉(zhuǎn)換為左邊變量的類型。若右邊表達式的數(shù)據(jù)類型長度比左邊長,則會丟失部分?jǐn)?shù)據(jù)。(4)在賦值語句中,賦值號兩邊數(shù)據(jù)類型一定是相兼容的類型,否則編譯時會報錯。強制類型轉(zhuǎn)換:自動類型轉(zhuǎn)換不能實現(xiàn)目的時,可以利用強制類型轉(zhuǎn)換將一個表達式轉(zhuǎn)換成所需類型,這種顯式進行的類型轉(zhuǎn)換稱為強制類型轉(zhuǎn)換。一般形式為:(類型名)(表達式)16:1837返回例2.1:輸入一個字符,將其對應(yīng)的ASCII碼值乘以2再輸出。#include<iostream>usingnamespacestd;intmain(){ charc; //字符數(shù)據(jù)以ASCII碼存儲,可看作是長度和范圍更小的整型。 cin>>c; inta=c; //字符變量c的值與整型兼容,可直接將該值賦給變量a cout<<a*2<<endl; return0;}16:1838例2.2:小明買了一箱蘋果共有n個,很不幸的是箱子里混進了一條蟲子。蟲子每x小時能吃掉一個蘋果,假設(shè)蟲子在吃完一個蘋果之前不會吃另一個,那么經(jīng)過y小時后這箱蘋果中還有多少個蘋果沒有被蟲子吃過?#include<iostream>#include<cmath>usingnamespacestd;intmain(){ intn,x,y,eat_int,rest; cin>>n>>x>>y; doubleeat_dou=1.0*y/x;

//本句可改為:doubleeat_dou=(double)y/x; eat_int=ceil(eat_dou); if(eat_int<n)rest=n-eat_int; elserest=0; cout<<rest<<endl; return0;}16:18394.scanf/printf輸入輸出C++語言兼容C語言的基本語法語句,C++程序同樣可使用C中的scanf/printf語句完成數(shù)據(jù)的輸入輸出語句,其效率優(yōu)于cin/cout方式的輸入輸出。對于不同數(shù)據(jù)類型變量和表達式的輸入輸出,scanf/printf語句有嚴(yán)格對應(yīng)的配對格式控制,使用前需包含頭文件cstdio。printf格式輸出函數(shù):用于向輸出設(shè)備輸出數(shù)據(jù),printf函數(shù)調(diào)用的一般格式為:printf(格式控制字符串,輸出列表)其中,格式控制字符串是雙引號括起來的一個字符串,用于指定輸出格式,由格式字符串和非格式字符串組成。非格式字符串是在輸出時需要原樣輸出的字符串。格式字符串是以%開頭的字符串,%后跟著各種格式字符以說明輸出數(shù)據(jù)的類型、長度、小數(shù)位數(shù)等。scanf格式輸入函數(shù):用于從輸入設(shè)備輸入數(shù)據(jù),scanf函數(shù)調(diào)用的一般格式為:scanf(格式控制字符串,地址列表)其中,格式控制字符串的作用與printf函數(shù)相同;地址列表中給出各變量的地址,地址是由取地址符“&”后跟變量名組成。16:1840返回printf函數(shù)格式字符串和各輸出項在數(shù)量和類型上必須一一對應(yīng)。printf函數(shù)的格式符見表2.4。格式字符串中,在%和上述格式字符間可以插入格式修飾符。常見的格式控制字符串用法舉例如下:(1)%5d:5位數(shù),右對齊。不足5位用空格補齊,超過5位按實際位數(shù)輸出。(2)%-5d:5位數(shù),左對齊。不足5位用空格補齊,超過5位按實際位數(shù)輸出。(3)%.2f:保留2位小數(shù)。如果小數(shù)部分超過2位就四舍五入,否則用0補全。(4)%8.2lf:以小數(shù)形式輸出雙精度浮點型數(shù)據(jù),寬度為8精度為2。16:1841printf(格式控制,輸出列表)printf("i=%d,c=%c\n",i,c)普通字符格式聲明格式控制

輸出列表格式符說明%d(或%i)輸出帶符號十進制整數(shù)(正數(shù)不輸出符號)%x(或%X)輸出無符號十六進制整數(shù)(不輸出前綴0x)%o輸出無符號八進整數(shù)(不輸出前綴0)%u輸出無符號十進制整數(shù)%f以十進制形式輸出單、雙精度實數(shù)(缺省保留6位小數(shù))%e(或%E)以指數(shù)形式輸出單、雙精度實數(shù)(缺省保留6位小數(shù))%g(或%G)自動選用%f或%e中較短的輸出寬度輸出單、雙精度實數(shù)%c輸出單個字符%s輸出字符串%%輸出%格式修飾符說明l長整型整數(shù),可加在格式字符d、o、x、u之前m一個正整數(shù),代表數(shù)據(jù)寬度(如“printf("%8.2lf",a)”中的m就是8)n對實數(shù)表示輸出的精度,對字符串表示截取的字符個數(shù)(上例中n是2)-向左對齊若shortint類型占兩個字節(jié),則以下程序輸出為(

)。

shortintk=-1;

printf(“%hd,%hu\n”,k,k);A.-1,-1 B.-1,65536 C.-1,32768 D.-1,6553516:1842scanf函數(shù)其中,格式控制字符串的作用與printf函數(shù)相同;地址列表中給出各變量的地址,地址是由取地址符“&”后跟變量名組成。scanf函數(shù)的格式符及修飾符見表2.6和表2.7。16:1843scanf(格式控制,地址列表)scanf("a=%f,b=%f,c=%f",&a,&b,&c);普通字符格式聲明格式控制

地址列表格式符說明%d(或%i)輸入有符號十進制整數(shù)%u輸入無符號十進制整數(shù)%o輸入無符號八進制整數(shù)%x(或%X)輸入無符號十六進制整數(shù)%c輸入單個字符%s輸入字符串到字符數(shù)組(非空格開始,第一個空格結(jié)束,附‘\0’為最后一個字符)%f輸入實數(shù),可以用小數(shù)形式或指數(shù)形式輸入%e,%E,%g,%G與上同,此處e、g作用與f相同,且e、g不區(qū)分大小寫格式修飾符說明h輸入短整型數(shù)(可用%hd,%ho,%hx)l輸入長整型數(shù)(可用%ld,%lo,%lx,%lu),以及double型數(shù)(%lf,%le)m一個正整數(shù),指定輸入數(shù)據(jù)所占寬度*表示本輸入項不賦給相應(yīng)的變量例2.4:輸入兩個浮點數(shù)a,b,輸出其相加、相減、相乘的結(jié)果。#include<iostream>usingnamespacestd;intmain(){ doublea,b; scanf("%lf%lf",&a,&b); printf("%.2lf\n",a+b); printf("%.2lf\n",a-b); printf("%.2lf\n",a*b); return0;}16:1844例2.5:輸入一個公民身份證號,輸出該公民的出生日期。輸入:公民身份證號。

輸出:年月日(YYYY-MM-DD)。樣例輸入樣例輸出:1979-04-06 #include<iostream>usingnamespacestd;intmain(){ intyear,month,day; scanf("%*6d%4d%2d%2d%*d",&year,&month,&day); printf("%04d-%02d-%02d",year,month,day); return0;}16:1845putchar函數(shù):從計算機向顯示器輸出一個字符16:1846putchar(c)【例】先后輸出BOY三個字符。解題思路:定義3個字符變量,分別賦以初值′B′,′O′,′Y′,然后用putchar函數(shù)輸出這3個字符變量的值。#include<stdio.h>intmain(){ chara='B',b='O',c='Y'; //定義3個字符變量并初始化

putchar(a); //向顯示器輸出字符B putchar(b); //向顯示器輸出字符O putchar(c); //向顯示器輸出字符Y putchar('\n'); //向顯示器輸出一個換行符

return0;}#include<stdio.h>intmain(){

inta=66,b=79,c=89;

putchar(a); putchar(b); putchar(c);

putchar('\n');

return0;}用putchar函數(shù)既可以輸出可顯示字符,也可以輸出控制字符和轉(zhuǎn)義字符。putchar(c)中的c可是字符常量、整型常量、字符變量或整型變量(其值在字符的ASCII代碼范圍內(nèi))。getchar函數(shù):向計算機輸入一個字符16:1847getchar()【例】從鍵盤輸入BOY3個字符,然后將其輸出到屏幕。解題思路:用3個getchar函數(shù)先后從鍵盤向計算機輸入BOY3個字符,然后用putchar函數(shù)輸出。#include<stdio.h>intmain(){ chara,b,c; //定義字符變量a,b,c a=getchar(); //從鍵盤輸入一個字符,送給字符變量a b=getchar(); //從鍵盤輸入一個字符,送給字符變量b c=getchar(); //從鍵盤輸入一個字符,送給字符變量c putchar(a);

//將變量a的值輸出

putchar(b);

//將變量b的值輸出

putchar(c);

//將變量c的值輸出

putchar('\n');//換行

return0;}函數(shù)沒有參數(shù)。函數(shù)的值就是從輸入設(shè)備得到的字符。只能接收一個字符。如果想輸入多個字符就要用多次函數(shù)。不僅可以從輸入設(shè)備獲得一個可顯示的字符,而且可以獲得控制字符。用getchar函數(shù)得到的字符可以賦給一個字符變量或整型變量,也可以作為表達式的一部分。如,putchar(getchar());將接收到的字符輸出。例2.6:雞兔同籠,共有a個頭,b條腿,求雞和兔子各有多少只。#include<iostream>usingnamespacestd;intmain(){ inta,b,x,y; cin>>a>>b; y=(b–2*a)/2; x=a-y; cout<<x<<""<<y<<endl; return0;}16:1848返回例2.7:小明的家距離學(xué)校很遠,小明想知道從家里出發(fā)到學(xué)校耗費了多少時間。

輸入:輸入用空格隔開的四個整數(shù),分別代表從家出發(fā)的時、分和到校的時、分。

輸出:輸出用空格隔開的兩個整數(shù),代表總共花了多少小時多少分鐘。#include<iostream>usingnamespacestd;intmain(){ inta,b,c,d,x,y,time; cin>>a>>b>>c>>d; time=(c*60+d)-(a*60+b); x=time/60; y=time%60; cout<<x<<""<<y<<endl; return0;}16:1849第3章

選擇結(jié)構(gòu)目錄if語句嵌套的if語句關(guān)系運算符與關(guān)系表達式邏輯運算符與邏輯表達式條件運算符與條件表達式switch語句16:18511.if語句if語句通常用來實現(xiàn)雙分支選擇,它通過判斷條件表達式取值(true或false),選擇執(zhí)行相應(yīng)的語句序列。if語句的一般格式為:if(表達式)語句1[else語句2]if...else的功能是:當(dāng)表達式為真時(非0值為真,0值為假)執(zhí)行語句1,否則執(zhí)行語句2(else子句為可選項,無該選項時與語句2為空語句等價)。語句1和語句2可以是一個簡單語句,也可以是一個復(fù)合語句,甚至是一條空語句。表達式可以是關(guān)系表達式、邏輯表達式,甚至是數(shù)值表達式。其執(zhí)行流程圖如圖3.1所示。16:1852返回例3.1:輸入一個雙精度浮點數(shù),將其向0舍入到整數(shù)。向0舍入的含義是“正數(shù)向下舍入,負數(shù)向上舍入”輸入:輸入一個雙精度浮點數(shù)。輸出:該雙精度浮點數(shù)向0舍入的整數(shù)。樣例輸入:3.14樣例輸出:3#include<iostream>usingnamespacestd;intmain(){ doublea;cin>>a;if(a>0)cout<<int(a)<<endl;elsecout<<-int(-a)<<endl;return0;}16:1853例3.2:輸入三個整數(shù),按從小到大的順序輸出這三個數(shù)?#include<iostream>usingnamespacestd;intmain(){ inta,b,c,temp; cin>>a>>b>>c; if(a>b){ temp=a; a=b; b=temp; }

if(b>c){ temp=b; b=c; c=temp; } if(a>b){ temp=a; a=b; b=temp; } cout<<a<<""<<b<<""<<c<<endl; return0;}16:18542.嵌套的if語句if語句還可通過嵌套實現(xiàn)多分支選擇,其一般格式如下:if(條件1)語句1elseif(條件2)語句2elseif(條件3)語句3……注意:if語句可以缺少else選項,但else不能脫離if關(guān)鍵字單獨使用。else必須與if關(guān)鍵字配套使用,且else總是與離它最近的還未配對的if匹配。16:1855返回例3.3:輸入一個整數(shù),判斷該數(shù)是正數(shù)、負數(shù)還是零。輸入:一個整數(shù)。輸出:該數(shù)為正數(shù)則輸出“positive”,負數(shù)則輸出“negative”,零則輸出“zero”。#include<iostream>usingnamespacestd;intmain(){ inta; cin>>a; if(a>0)cout<<"positive"<<endl; elseif(a<0)cout<<"negative"<<endl; elsecout<<"zero"<<endl; return0;}16:1856例3.4:龜兔賽跑中,已知烏龜速度為a米每秒,兔子速度為b米每秒,龜兔賽跑的賽程總長度為s米,兔子在比賽中到達終點前的某一時刻睡著了(且僅睡著這一次),耽誤了t秒的時間,如果烏龜贏了輸出"Turtlewin",兔子贏了輸出"Rabbitwin",否則輸出"Tie"。#include<iostream>usingnamespacestd;intmain(){ inta,b,s,t; cin>>a>>b>>s>>t; doubletur=(double)s/a; doublerab=(double)s/b+t; if(tur<rab)cout<<"Turtlewin"; elseif(tur>rab)cout<<"Rabbitwin"; elsecout<<"Tie"; return0;}16:1857例3.5:輸入a、b、c,求一元二次方程ax2+bx+c=0的解。

輸入:三個整數(shù)a、b、c。

輸出:方程ax2+bx+c=0的解(保留兩位精度),a=0則輸出“Thisisnotaquadraticequation”。若有多個解,則多個解以空格分隔輸出。#include<cstdio>#include<cmath>intmain(){ doublea,b,c,delta,x1,x2,realpart,imagpart; scanf("%lf%lf%lf",&a,&b,&c); if(fabs(a)<=1e-6)printf("Theequationisnotaquadraticequation\n"); else { delta=b*b-4*a*c; if(fabs(delta)<=1e-6)printf("%.2f\n",-b/(2*a)); elseif(delta>1e-6) { x1=(-b+sqrt(delta))/(2*a); x2=(-b-sqrt(delta))/(2*a); printf("%.2f%.2f\n",x1,x2); } else { realpart=-b/(2*a); //realpart是復(fù)根的實部 imagpart=sqrt(-delta)/(2*a); //imagpart是復(fù)根的虛部 printf("%.2f+%.2fi",realpart,imagpart); //輸出一個復(fù)根 printf("%.2f-%.2fi\n",realpart,imagpart); //輸出另一個復(fù)根 } } return0;}16:18583.關(guān)系運算符與關(guān)系表達式關(guān)系運算符也稱比較運算符,關(guān)系運算符都是雙目運算符,其結(jié)合性均為左結(jié)合。關(guān)系運算符的優(yōu)先級低于算術(shù)運算符,高于賦值運算符。在六個關(guān)系運算符中,“<、<=、>、>=”的優(yōu)先級相同,“==、!=”的優(yōu)先級相同,且前四個運算符優(yōu)先級高于后兩個運算符。16:1859返回例3.6:輸入一個整數(shù),判斷該數(shù)的奇偶性(“odd”或“even”)。

輸入:一個整數(shù)。

輸出:奇數(shù)則輸出“odd”,偶數(shù)則輸出“even”。#include<iostream>usingnamespacestd;intmain(){ inta; cin>>a; if(a%2==0)cout<<"even"<<endl; elsecout<<"odd"<<endl; return0;}16:18604.邏輯運算符與邏輯表達式關(guān)系運算符可以方便地構(gòu)成相對簡單的條件判斷,而邏輯運算符則可以連接多個關(guān)系表達式構(gòu)成邏輯表達式,以表達相對復(fù)雜的條件組合判斷。邏輯運算符包括與(&&)、或(||)、非(!)3種,C/C++中邏輯運算符的含義和邏輯運算的真值表分別見表3.1和表3.2。

“&&”和“||”是雙目運算符,“!”是單目運算符?!?”的優(yōu)先級別高于關(guān)系運算符和所有的雙目運算符,“&&”和“||”的優(yōu)先級則低于算術(shù)運算符和關(guān)系運算符,而“&&”的優(yōu)先級又高于“||”。邏輯運算符和其它運算符優(yōu)先級從低到高依次為:

非(!)>算術(shù)運算符>關(guān)系運算符>與(&&)>或(||)>賦值運算符(=)在邏輯表達式的求值過程中,并非所有的邏輯運算符都能夠得到執(zhí)行,只有當(dāng)必須要執(zhí)行下一個邏輯運算符才能求解表達式的值時,才執(zhí)行該運算符。a&&b&&c。只有a為真時才需要計算b的值,只有當(dāng)a和b都為真時才需要判別c的值。a‖b‖c。只要a為真,就不再判斷b和c。只有a為假時才判別b,a和b都為假才判別c。16:1861返回運算符含義示例真值&&與p&&q若p和q均為真則判定為真,否則為假|(zhì)|或p||q若p和q均為假則判定為假,否則為真!非!p若p真則!p為假,若p假則!p為真pq!p!qp&&qp||q110011100101011001001100例3.7:輸入年份year,判斷該年是否為閏年。

輸入:輸入一個整數(shù)代表年份。

輸出:若該年是閏年則輸出“yearisaleapyear”,否則輸出“yearisnotaleapyear”。#include<iostream>usingnamespacestd;intmain(){ intyear; cin>>year; if((year%4==0&&year%100!=0)||year%400==0)cout<<year<<"isaleapyear"<<endl; elsecout<<year<<"isnotaleapyear"<<endl; return0;}//地球繞太陽運行周期為365天5小時48分46秒(合計365.24219天)16:18625.條件運算符與條件表達式“?:”是條件運算符,條件表達式需要3個操作對象,“?”和“:”一起出現(xiàn)在表達式中,條件運算符是C/C++中唯一的一個三目運算符。使用條件表達式的一般形式為:

<表達式1>?<表達式2>:<表達式3>條件表達式的計算過程為:

計算表達式1的值;

若表達式1的值為真(非0),則僅計算表達式2并將其結(jié)果作為整個表達式的值;

若表達式1的值為假(0)則僅計算表達式3并將其結(jié)果作為整個表達式的值。16:1863返回例3.8:輸入兩個整數(shù),輸出其中的較大數(shù)。

輸入:兩個整數(shù)。

輸出:兩個整數(shù)中的較大數(shù)。#include<iostream>usingnamespacestd;intmain(){ inta,b,max; cin>>a>>b; max=a>b?a:b; cout<<max<<endl; return0;}16:18646.switch語句if…else…語句可清晰便捷地實現(xiàn)雙分支選擇,當(dāng)需要處理的分支情況較多時,使用switch語句可使程序結(jié)構(gòu)更清晰,執(zhí)行速度更快。switch常和關(guān)鍵詞case、break、default等一起配合使用。switch語句的一般格式如下:switch(表達式){ case常量表達式1:[語句1][break;]

…… case常量表達式n:[語句2][break;] default:[語句n+1]}16:1865返回說明switch語句中表達式的取值只能是整型、字符型、布爾型或枚舉型。花括號內(nèi)是一個復(fù)合語句,內(nèi)包含多個以關(guān)鍵字case開頭的語句行和最多一個以default開頭的行。case后面跟一個常量(或常量表達式,其取值類型與表達式類型一致),它們和default都是起標(biāo)號作用,用來標(biāo)志一個位置。執(zhí)行switch語句時,先計算switch后面的“表達式”的值,然后將它與各case標(biāo)號比較,如果與某一個case標(biāo)號中的常量相同,流程就轉(zhuǎn)到此case標(biāo)號后面的語句。如果沒有與switch表達式相匹配的case常量,流程轉(zhuǎn)去執(zhí)行default標(biāo)號后面的語句??梢詻]有default標(biāo)號,此時如果沒有與switch表達式相匹配的case常量,則不執(zhí)行任何語句。各個case標(biāo)號出現(xiàn)次序不影響執(zhí)行結(jié)果。任意兩個case后的常量表達式取值必須不同,否則將導(dǎo)致沖突。case標(biāo)號只起標(biāo)記的作用。在執(zhí)行switch語句時,根據(jù)switch表達式的值找到匹配的入口標(biāo)號,在執(zhí)行完一個case標(biāo)號后面的語句后,就從此標(biāo)號開始執(zhí)行下去,不再進行判斷。因此,一般情況下,在執(zhí)行一個case子句后,應(yīng)當(dāng)用break語句使流程跳出switch結(jié)構(gòu)。最后一個case子句(今為default子句)中可不加break語句。在case子句中雖然包含了一個以上執(zhí)行語句,但可以不必用花括號括起來,會自動順序執(zhí)行本case標(biāo)號后面所有的語句。當(dāng)然加上花括號也可以。break語句為可選項,用于終止

switch

中的一個case,是否需要視具體情形而定。若某幾個case子句后無break語句,則這幾個case子句和隨后緊跟的第一個帶break語句的case子句共用一組執(zhí)行語句。16:1866例3.9:給定一個百分制成績,請根據(jù)百分制成績輸出其對應(yīng)的等級。轉(zhuǎn)換關(guān)系如下:90分及以上為'A',80~89為'B',70~79為'C',60~69為'D',60分以下為'E'。

輸入:一個百分制成績(0~100的整數(shù))。

輸出:成績對應(yīng)的等級。#include<iostream>usingnamespacestd;intmain(){ intscore; scanf("%d",&score); switch(score/10) { case10: case9:printf("A\n");break; case8:printf("B\n");break; case7:printf("C\n");break; case6:printf("D\n");break; default:printf("E\n"); } return0;}16:1867例3.10:輸入三個整數(shù),輸出最大數(shù)和最小數(shù)。

輸入:輸入三個整數(shù)a、b、c。

輸出:三個數(shù)中的最大數(shù)和最小數(shù)(以空格分隔)。#include<iostream>usingnamespacestd;intmain(){ inta,b,c,max,min;cin>>a>>b>>c; if(a>b){ max=a; min=b; } else{ max=b; min=a; }if(max<c)max=c;elseif(min>c)min=c;cout<<max<<""<<min;return0;}16:1868例3.11:輸入運算數(shù)和四則運算符,輸出計算結(jié)果。

輸入:輸入兩個浮點數(shù)和一個操作符。

輸出:輸出計算結(jié)果(精度為2)。#include<cstdio>intmain(){ doublea,b; charc; scanf("%lf%lf%c",&a,&b,&c);

switch(c)

{ case'+':printf("%.2lf\n",a+b);break;

case'-':printf("%.2lf\n",a-b);break;

case'*':printf("%.2lf\n",a*b);break;

case'/':printf("%.2lf\n",a/b);break;

default:printf("inputerror\n");

}

return0;}16:1869例3.12:商場國慶促銷,購物500元以下無折扣;購物500元(含)以上95折;購物1000元(含)以上9折;購物3000元(含)以上85折;購物5000元(含)以上8折。根據(jù)消費金額,計算用戶實際需要支付的數(shù)目。

輸入:輸入一個實數(shù),表示消費金額。

輸出:輸出一個實數(shù),表示用戶實際需要支出的數(shù)目,保留兩位小數(shù)。#include<iostream>#include<cstdio>usingnamespacestd;intmain(){ doublesales; cin>>sales; intc=sales/500; switch(c) { case0:break; case1:sales*=0.95;break; case2: case3: case4: case5:sales*=0.90;break; case6: case7: case8: case9:sales*=0.85;break; case10:sales*=0.80;break; default:sales*=0.80; } printf("%.2lf",sales); return0;}16:1870第4章

循環(huán)結(jié)構(gòu)目錄while語句do…while語句for語句break/continue語句多重循環(huán)算法執(zhí)行效率16:1872實際應(yīng)用中經(jīng)常遇到需要反復(fù)執(zhí)行某些固定操作序列的情形,循環(huán)結(jié)構(gòu)正是為此而設(shè)置的控制結(jié)構(gòu),這些需反復(fù)執(zhí)行的固定操作序列就定義為循環(huán)體。當(dāng)程序運行到循環(huán)語句時,若循環(huán)語句的條件判定結(jié)果為真,則選擇執(zhí)行循環(huán)體然后再判斷循環(huán)條件,否則便跳出該循環(huán)轉(zhuǎn)而運行下一條語句。因此,循環(huán)結(jié)構(gòu)的本質(zhì)可歸結(jié)為循環(huán)判斷執(zhí)行的選擇結(jié)構(gòu)。16:18731.while語句while語句是C/C++語言的一種基本循環(huán)模式,若條件為真則執(zhí)行循環(huán)體,當(dāng)條件為假時跳出循環(huán)執(zhí)行后續(xù)語句。while的一般格式為:while(表達式)循環(huán)體while語句的功能是:若表達式為真(非0值為真)則執(zhí)行循環(huán)體;然后再重新判斷表達式,…;如此周而復(fù)始,直至表達式為假(0值為假)則跳出該循環(huán)。因此while語句本質(zhì)上相當(dāng)于循環(huán)判斷執(zhí)行的單分支if語句。while語句的執(zhí)行流程圖如圖4.1所示。while語句中,循環(huán)體可以是一個簡單語句,也可以是一個復(fù)合語句(用{}括起的多條語句),甚至是一條空語句;表達式可以是關(guān)系表達式、邏輯表達式,甚至是數(shù)值表達式。16:1874返回例4.1:求m+(m+1)…+n。輸入:兩個正整數(shù)m和n(m<=n)。輸出:m加到n的和。#include<iostream>usingnamespacestd;intmain(){ intm,n; cin>>m>>n; inti=m,sum=0; while(i<=n) { sum=sum+i; i++; } cout<<sum<<endl; return0;}16:1875例4.2:輸入多組整數(shù),每組數(shù)據(jù)包含兩個整數(shù)a和b,對每組數(shù)據(jù)輸出a+b的結(jié)果。輸入:多組整數(shù)。

輸出:對每組數(shù)據(jù)輸出a+b的結(jié)果。#include<iostream>usingnamespacestd;intmain(){ inta,b;

while(cin>>a>>b) //可以“while(scanf("%d%d",&a,&b)!=EOF)”替代 cout<<a+b<<endl; return0;}16:18762.do…while語句do...while語句首先無條件執(zhí)行一次循環(huán)體,然后再判斷循環(huán)條件,若條件為真則再次執(zhí)行循環(huán)體,……,直至循環(huán)條件為假則跳出循環(huán)。do...while語句的一般格式為:do

循環(huán)體while(表達式);do...while語句的循環(huán)體可以是一個簡單語句,也可以是一個復(fù)合語句,甚至是一條空語句。do...while語句的執(zhí)行流程圖如圖4.2所示。do...while語句和while語句非常相似,但后者是當(dāng)型循環(huán),前者是直到型循環(huán)。do-while語句保證其循環(huán)體至少會執(zhí)行一次;但是在while語句中,若起始時表達式為假則循環(huán)體一次也不會執(zhí)行。不過,若開始時表達式為真,則do...while和while效果完全相同。16:1877返回例4.3:輸入正整數(shù)n,求使1+2+…+i>=n成立的最小i。輸入:一個正整數(shù)n。輸出:使1+2+…+i>=n成立的最小i。#include<iostream>usingnamespacestd;intmain(){ intn,i=0,sum=0; cin>>n; do { i++; sum=sum+i; }while(sum<n); cout<<i<<endl; return0;}16:18783.for語句for語句是C/C++的第三種循環(huán)控制實現(xiàn)方式。for語句的一般格式為:for([表達式1];[表達式2];[表達式3])循環(huán)體表達式1是for語句執(zhí)行的開始部分,通常用于為循環(huán)控制變量賦初值,僅在for語句運行開始時執(zhí)行一次;表達式2是for語句執(zhí)行的結(jié)束部分,與while的判斷表達式作用一致,用于設(shè)置for語句是否執(zhí)行循環(huán)體的判斷條件;表達式3常用于每次執(zhí)行循環(huán)體后改變循環(huán)變量值,以使for語句能趨向于結(jié)束。for語句的執(zhí)行流程圖如圖4.3所示。for語句的循環(huán)體可以是一條簡單語句,也可以是一個復(fù)合語句,甚至是一條空語句。for語句中的三個表達式均可省略,但應(yīng)在其它相應(yīng)位置有同等效用的功能實現(xiàn)。與while和do…while語句相比,for語句將循環(huán)變量賦初值、循環(huán)條件判斷、循環(huán)變量修改三個操作濃縮體現(xiàn)在一對小括號中,不僅適用于循環(huán)次數(shù)確定的情形,也適用于循環(huán)次數(shù)不確定的情形,使用起來更為方便靈活,因而是一種使用更為廣泛的循環(huán)控制語句。16:1879返回例4.4:輸入一個正整數(shù)n,判定它是否為素數(shù)(prime,又稱質(zhì)數(shù))。輸入:一個正整數(shù)n。輸出:若n為質(zhì)數(shù)則輸出“Yes”,否則輸出“No”。#include<cstdio>#include<cmath>intmain(){ intn,i,k,flag=1; scanf("%d",&n); if(n==1)flag=0; k=sqrt(n); for(i=2;i<=k;i++) { if(n%i==0)flag=0; } if(flag==1)printf("Yes\n"); elseprintf("No\n"); return0;}16:1880

輸入:一個整數(shù)n。

輸出:1-2/3+3/5-4/7+5/9-6/11+...的前n項和。#include<cstdio>intmain(){ intn,i; doubleitem,num,deno,sum=0,flag=-1; scanf("%d",&n); for(i=1;i<=n;i++) { num=i; deno=2*i-1; flag=-fl

溫馨提示

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

評論

0/150

提交評論