版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第3章程序設(shè)計(jì)初步第4章函數(shù)與預(yù)處理第5章數(shù)組第6章指針第7章自定義數(shù)據(jù)類(lèi)型第2篇
面向過(guò)程的程序設(shè)計(jì)第3章程序設(shè)計(jì)初步3.1面向過(guò)程的程序設(shè)計(jì)和算法3.2C++程序和語(yǔ)句3.3賦值語(yǔ)句3.4C++的輸入與輸出3.5編寫(xiě)順序結(jié)構(gòu)的程序3.6關(guān)系運(yùn)算和邏輯運(yùn)算3.7選擇結(jié)構(gòu)和if語(yǔ)句3.8條件運(yùn)算符和條件表達(dá)式3.9多分支選擇結(jié)構(gòu)和switch語(yǔ)句3.10編寫(xiě)選擇結(jié)構(gòu)的程序3.11循環(huán)結(jié)構(gòu)和循環(huán)語(yǔ)句3.12循環(huán)的嵌套3.13break語(yǔ)句和continue語(yǔ)句3.14編寫(xiě)循環(huán)結(jié)構(gòu)的程序一個(gè)面向過(guò)程的程序應(yīng)包括以下兩方面內(nèi)容:(1)對(duì)數(shù)據(jù)的描述。在程序中要指定數(shù)據(jù)的類(lèi)型和數(shù)據(jù)的組織形式,即數(shù)據(jù)結(jié)構(gòu)(datastructure)。(2)對(duì)操作的描述。即操作步驟,也就是算法(algorithm)。對(duì)于面向過(guò)程的程序,可以用下面的公式表示:程序=算法+數(shù)據(jù)結(jié)構(gòu)3.1.1算法的概念3.1面向過(guò)程的程序設(shè)計(jì)和算法1.自然語(yǔ)言用中文或英文等自然語(yǔ)言描述算法。2.流程圖
可以用傳統(tǒng)的流程圖或結(jié)構(gòu)化流程圖。3.偽代碼(pseudocode)
偽代碼是用介于自然語(yǔ)言和計(jì)算機(jī)語(yǔ)言之間的文字和符號(hào)來(lái)描述算法。4.用計(jì)算機(jī)語(yǔ)言表示算法用一種計(jì)算機(jī)語(yǔ)言去描述算法,這就是計(jì)算機(jī)程序。3.1.2算法的表示由第1章已知,一個(gè)程序包含一個(gè)或多個(gè)程序單位(每個(gè)程序單位構(gòu)成一個(gè)程序文件)。每一個(gè)程序單位由以下幾個(gè)部分組成:(1)預(yù)處理命令。如#include命令和#define命令。(2)聲明部分。例如對(duì)數(shù)據(jù)類(lèi)型和函數(shù)的聲明,以及對(duì)變量的定義。(3)函數(shù)。包括函數(shù)首部和函數(shù)體,在函數(shù)體中可以包含若干聲明語(yǔ)句和執(zhí)行語(yǔ)句。3.2C++程序和語(yǔ)句C++語(yǔ)句可以分為以下4種:1.聲明語(yǔ)句如inta,b;2.執(zhí)行語(yǔ)句(1)控制語(yǔ)句,C++有9種控制語(yǔ)句,即
①if()~else~(條件語(yǔ)句)②for()~(循環(huán)語(yǔ)句)③while()~(循環(huán)語(yǔ)句)④do~while()(循環(huán)語(yǔ)句)⑤continue(結(jié)束本次循環(huán)語(yǔ)句)⑥break(中止執(zhí)行switch或循環(huán)語(yǔ)句)⑦switch(多分支選擇語(yǔ)句)⑧goto(轉(zhuǎn)向語(yǔ)句)⑨return(從函數(shù)返回語(yǔ)句)(2)函數(shù)和流對(duì)象調(diào)用語(yǔ)句。sort(x,y,z);//假設(shè)已定義了sort函數(shù),它有3個(gè)參數(shù)cout<<x<<endl;//流對(duì)象調(diào)用語(yǔ)句(3)表達(dá)式語(yǔ)句。由一個(gè)表達(dá)式加一個(gè)分號(hào)構(gòu)成一個(gè)語(yǔ)句。最典型的是:由賦值表達(dá)式構(gòu)成一個(gè)賦值語(yǔ)句。i=i+1//是一個(gè)賦值表達(dá)式i=i+1;//是一個(gè)賦值語(yǔ)句3.空語(yǔ)句;即只有一個(gè)分號(hào)的語(yǔ)句,它什么也不做。4.復(fù)合語(yǔ)句可以用{}把一些語(yǔ)句括起來(lái)成為復(fù)合語(yǔ)句。{z=x+y;if(z>100)z=z-100;cout<<z;}賦值語(yǔ)句是由賦值表達(dá)式加上一個(gè)分號(hào)構(gòu)成。(1)C++的賦值語(yǔ)句具有其他高級(jí)語(yǔ)言的賦值語(yǔ)句的功能。但不同的是:C++中的賦值號(hào)“=”是一個(gè)運(yùn)算符,可以寫(xiě)成a=b=c=d;(2)賦值表達(dá)式可以包括在其他表達(dá)式之中,例如if((a=b)>0)cout<<″a>0″<<endl;3.3賦值語(yǔ)句C++的輸出和輸入是用“流”(stream)的方式實(shí)現(xiàn)的。有關(guān)流對(duì)象cin、cout和流運(yùn)算符的定義等信息是存放在C++的輸入輸出流庫(kù)中的,因此如果在程序中使用cin、cout和流運(yùn)算符,就必須使用預(yù)處理命令把頭文件stream包含到本文件中:#include<iostream>3.4C++的輸入與輸出cout語(yǔ)句的一般格式為
cout<<表達(dá)式1<<表達(dá)式2<<……<<表達(dá)式n;cin語(yǔ)句的一般格式為cin>>變量1>>變量2>>……>>變量n;在定義流對(duì)象時(shí),系統(tǒng)會(huì)在內(nèi)存中開(kāi)辟一段緩沖區(qū),用來(lái)暫存輸入輸出流的數(shù)據(jù)。在執(zhí)行cout語(yǔ)句時(shí),先把插入的數(shù)據(jù)順序存放在輸出緩沖區(qū)中,直到輸出緩沖區(qū)滿或遇到cout語(yǔ)句中的endl(或′\n′,ends,flush)為止,此時(shí)將緩沖區(qū)中已有的數(shù)據(jù)一起輸出,并清空緩沖區(qū)。*3.4.1輸入流與輸出流的基本操作cout<<″ThisisasimpleC++program.″<<endl;也可寫(xiě)成多個(gè)cout語(yǔ)句,即cout<<″Thisis″;//語(yǔ)句末尾有分號(hào)cout<<″aC++″;cout<<″program.″;cout<<endl;注意不能用一個(gè)插入運(yùn)算符“<<”插入多個(gè)輸出項(xiàng):cout<<a,b,c;//錯(cuò)誤,不能一次插入多項(xiàng)cout<<a+b+c;//正確,這是一個(gè)表達(dá)式,作為一項(xiàng)在用cout輸出時(shí),用戶不必通知計(jì)算機(jī)按何種類(lèi)型輸出,系統(tǒng)會(huì)自動(dòng)判別輸出數(shù)據(jù)的類(lèi)型,使輸出的數(shù)據(jù)按相應(yīng)的類(lèi)型輸出。inta=4;floatb=345.789;charc=‘a(chǎn)’;cout<<a<<′′<<b<<′′<<c<<endl;cin>>a>>b>>c>>d;也可以寫(xiě)成cin>>a;cin>>b;cin>>c;cin>>d;在用cin輸入時(shí),系統(tǒng)也會(huì)根據(jù)變量的類(lèi)型從輸入流中提取相應(yīng)長(zhǎng)度的字節(jié)。如有charc1,c2;inta;floatb;cin>>c1>>c2>>a>>b;如果輸入123456.78↙如果使用了控制符,在程序單位的開(kāi)頭要加iomanip頭文件。dec設(shè)置整數(shù)的基數(shù)為10hex設(shè)置整數(shù)的基數(shù)為16oct設(shè)置整數(shù)的基數(shù)為8setfill(c)設(shè)置填充字符c,c可以是字符常量或字符變量setprecision(n)設(shè)置實(shí)數(shù)的精度為n位。在以一般十進(jìn)制小數(shù)形式輸出時(shí),n代表有效數(shù)字。在以fixed(固定小數(shù)位數(shù))形式和scientific(指數(shù))形式輸出時(shí),n為小數(shù)位數(shù)。*3.4.2在輸入流與輸出流中使用控制符setw(n)設(shè)置字段寬度為n位。setiosflags(ios::fixed)設(shè)置浮點(diǎn)數(shù)以固定的小數(shù)位數(shù)顯示。setiosflags(ios::scientific)設(shè)置浮點(diǎn)數(shù)以科學(xué)計(jì)數(shù)法(即指數(shù)形式)顯示。setiosflags(ios::left)輸出數(shù)據(jù)左對(duì)齊。setiosflags(ios::right)輸出數(shù)據(jù)右對(duì)齊。setiosflags(ios::shipws)忽略前導(dǎo)的空格。setiosflags(ios::uppercase)在以科學(xué)計(jì)數(shù)法輸出E和十六進(jìn)制輸出字母X時(shí),以大寫(xiě)表示。setiosflags(ios::showpos)輸出正數(shù)時(shí),給出“+”號(hào)。doublea=123.456789012345;對(duì)a賦初值(1)cout<<a;輸出:123.456(2)cout<<setprecision(9)<<a;輸出:123.456789(3)cout<<setprecision(6);恢復(fù)默認(rèn)格式(精度為6)(4)cout<<setiosflags(ios∷fixed);輸出:123.456789(5)cout<<setiosflags(ios∷fixed)<<setprecision(8)<<a;輸出:123.45678901(6)cout<<setiosflags(ios∷scientific)<<a;輸出:1.234568e+02(7)cout<<setiosflags(ios∷scientific)<<setprecision(4)<<a;輸出:1.2346e02下面是整數(shù)輸出的例子:intb=123456;對(duì)b賦初值(1)cout<<b;輸出:123456(2)cout<<hex<<b;輸出:1e240(3)cout<<setiosflags(ios∷uppercase)<<b;輸出:1E240(4)cout<<setw(10)<<b<<′,′<<b;輸出:123456,123456(5)cout<<setfill(′*′)<<setw(10)<<b;輸出:****123456(6)cout<<setiosflags(ios∷showpos)<<b;輸出:+123456如果在多個(gè)cout語(yǔ)句中使用相同的setw(n),并使用setiosflags(ios∷right),可以實(shí)現(xiàn)各行數(shù)據(jù)右對(duì)齊,如果指定相同的精度,可以實(shí)現(xiàn)上下小數(shù)點(diǎn)對(duì)齊。例3.1各行小數(shù)點(diǎn)對(duì)齊。#include<iostream>#include<iomanip>usingnamespacestd;intmain(){doublea=123.456,b=3.14159,c=-3214.67;cout<<setiosflags(ios∷fixed)<<setiosflags(ios∷right)<<setprecision(2);cout<<setw(10)<<a<<endl;cout<<setw(10)<<b<<endl;cout<<setw(10)<<c<<endl;return0;}輸出如下:123.46(字段寬度為10,右對(duì)齊,取兩位小數(shù))3.14-3214.67先統(tǒng)一設(shè)置定點(diǎn)形式輸出、取兩位小數(shù)、右對(duì)齊。這些設(shè)置對(duì)其后的輸出均有效(除非重新設(shè)置),而setw只對(duì)其后一個(gè)輸出項(xiàng)有效,因此必須在輸出a,b,c之前都要寫(xiě)setw(10)。C++還保留了C語(yǔ)言中用于輸入和輸出單個(gè)字符的函數(shù),使用很方便。其中最常用的有g(shù)etchar函數(shù)和putchar函數(shù)。1.putchar函數(shù)(字符輸出函數(shù))putchar函數(shù)的作用是向終端輸出一個(gè)字符。例如putchar(c);它輸出字符變量c的值。3.4.3用getchar和putchar函數(shù)進(jìn)行字符的輸入和輸出例3.2輸出單個(gè)字符。#include<iostream>//或者包含頭文件stdio.h:#include<stdio.h>usingnamespacestd;intmain(){chara,b,c;a=′B′;b=′O′;c=′Y′;putchar(a);putchar(b);putchar(c);putchar(′\n′);putchar(66);putchar(79);putchar(89);putchar(10);return0;}運(yùn)行結(jié)果為BOYBOY2.getchar函數(shù)(字符輸入函數(shù))此函數(shù)的作用是從終端(或系統(tǒng)隱含指定的輸入設(shè)備)輸入一個(gè)字符。例3.3輸入單個(gè)字符。#include<iostream>usingnamespacestd;intmain(){charc;c=getchar();putchar(c+32);putchar(′\n′);return0;}在運(yùn)行時(shí),如果從鍵盤(pán)輸入大寫(xiě)字母′A′并按回車(chē)鍵,就會(huì)在屏幕上輸出小寫(xiě)字母′a′。在C語(yǔ)言中是用printf函數(shù)進(jìn)行輸出,用scanf函數(shù)進(jìn)行輸入的。scanf函數(shù)一般格式是scanf(格式控制,輸入變量地址表列)printf函數(shù)的一般格式是printf(格式控制,輸出表列)3.4.4用scanf和printf函數(shù)進(jìn)行輸入和輸出例3.4用scanf和printf函數(shù)進(jìn)行輸入和輸出。#include<iostream>usingnamespacestd;intmain(){inta;floatb;charc;scanf(″%d%c%f″,&a,&c,&b);
printf(″a=%d,b=%f,c=%c\n″,a,b,c);return0;}運(yùn)行情況如下:12A67.98↙a=12,b=67.980003,c=A例3.5求一元二次方程式ax2+bx+c=0的根。a,b,c的值在運(yùn)行時(shí)由鍵盤(pán)輸入,它們的值滿足b2-4ac≥0。根據(jù)求x1,x2的算法。它可以編寫(xiě)出以下C++程序:#include<iostream>#include<cmath>//由于用到數(shù)學(xué)函數(shù)sqrt,故應(yīng)包含頭文件cmathusingnamespacestd;intmain(){floata,b,c,x1,x2;cin>>a>>b>>c;x1=(-b+sqrt(b*b-4*a*c))/(2*a);x2=(-b-sqrt(b*b-4*a*c))/(2*a);cout<<″x1=″<<x1<<endl;cout<<″x2=″<<x2<<endl;return0;}3.5編寫(xiě)順序結(jié)構(gòu)的程序C++的關(guān)系運(yùn)算符有:①< (小于)②<= (小于或等于) 優(yōu)先級(jí)相同(高)③> (大于)④>= (大于或等于) ⑤== (等于)⑥!= (不等于) 優(yōu)先級(jí)相同(低)3.6關(guān)系運(yùn)算和關(guān)系表達(dá)式用關(guān)系運(yùn)算符將兩個(gè)表達(dá)式連接起來(lái)的式子,稱(chēng)為關(guān)系表達(dá)式。關(guān)系表達(dá)式的一般形式可以表示為表達(dá)式關(guān)系運(yùn)算符表達(dá)式a>b,a+b>b+c,(a==3)>(b==5),′a′<′b′,(a>b)>(b<c)關(guān)系表達(dá)式的值是一個(gè)邏輯值,即“真”或“假”。用數(shù)值1代表“真”,用0代表“假”。inta=3,b=2,c=5;d=a>b則d得到的值為1f=a>b>cf得到的值為0邏輯型,也叫布爾型,常量只有兩個(gè),即false(假)和true(真)。邏輯型變量要用bool來(lái)定義,值只能是true或falseboolfound,flag=false;found=true;在編譯系統(tǒng)處理邏輯型數(shù)據(jù)時(shí),將false處理為0,將true處理為1。因此,邏輯型數(shù)據(jù)可以與數(shù)值型數(shù)據(jù)進(jìn)行算術(shù)運(yùn)算。如果將一個(gè)非零的整數(shù)賦給邏輯型變量,則按“真”處理,如flag=123;//賦值后flag的值為truecout<<flag;輸出為數(shù)值1。3.6.2邏輯常量和邏輯變量C++提供3種邏輯運(yùn)算符:(1)&&邏輯與(2)||邏輯或(3)!邏輯非邏輯運(yùn)算舉例如下:a&&b若a,b為真,則a&&b為真。a||b若a,b之一為真,則a||b為真。!a若a為真,則!a為假。3.6.3邏輯運(yùn)算和邏輯表達(dá)式在一個(gè)邏輯表達(dá)式中如果包含多個(gè)邏輯運(yùn)算符,按以下的優(yōu)先次序:(1)!(非)→&&(與)→||(或),即“!”為三者中最高的。(2)邏輯運(yùn)算符中的“&&”和“||”低于關(guān)系運(yùn)算符,“!”高于算術(shù)運(yùn)算符。例如:(a>b)&&(x>y)可寫(xiě)成a>b&&x>y(a==b)||(x==y)可寫(xiě)成a==b||x==y(!a)||(a>b)可寫(xiě)成!a||a>b將兩個(gè)關(guān)系表達(dá)式用邏輯運(yùn)算符連接起來(lái)就成為一個(gè)邏輯表達(dá)式,上面幾個(gè)式子就是邏輯表達(dá)式。邏輯表達(dá)式的一般形式可以表示為:表達(dá)式邏輯運(yùn)算符表達(dá)式邏輯表達(dá)式的值是一個(gè)邏輯量“真”或“假”。在給出邏輯運(yùn)算結(jié)果時(shí),以數(shù)值1代表“真”,以0代表“假”,但在判斷一個(gè)邏輯量是否為“真”時(shí),采取的標(biāo)準(zhǔn)是:如果其值是0就認(rèn)為是“假”,如果其值是非0就認(rèn)為是“真”。例如:若a=4,則!a。若a=4,b=5,則a&&b′c′&&′d′
(4)a=4,b=5,!a||b(5)4&&0||2例如,要判別某一年(year)是否為閏年。閏年的條件是符合下面兩者之一:①能被4整除,但不能被100整除。②能被100整除,又能被400整除。可以用一個(gè)邏輯表達(dá)式來(lái)表示:(year%4==0&&year%100!=0)||year%400==0
可以加一個(gè)“!”用來(lái)判別非閏年:!((year%4==0&&year%100!=0)||year%400==0)if(表達(dá)式)
語(yǔ)句2.if(表達(dá)式)
語(yǔ)句1
else語(yǔ)句2if語(yǔ)句的3種形式3.7選擇結(jié)構(gòu)和if語(yǔ)句3.if(表達(dá)式1)
語(yǔ)句1elseif(表達(dá)式2)
語(yǔ)句2elseif(表達(dá)式3)
語(yǔ)句3
… elseif(表達(dá)式m)
語(yǔ)句m說(shuō)明:(1)3種形式的if語(yǔ)句都是由一個(gè)入口進(jìn)來(lái),經(jīng)過(guò)對(duì)“表達(dá)式”的判斷,分別執(zhí)行相應(yīng)的語(yǔ)句,最后歸到一個(gè)共同的出口。這種形式的程序結(jié)構(gòu)稱(chēng)為選擇結(jié)構(gòu)。(2)3種形式的if語(yǔ)句中在if后面都有一個(gè)用括號(hào)括起來(lái)的表達(dá)式,它是程序編寫(xiě)者要求程序判斷的“條件”,一般是邏輯表達(dá)式或關(guān)系表達(dá)式。(3)第2、第3種形式的if語(yǔ)句中,在每個(gè)else前面有一分號(hào),整個(gè)語(yǔ)句結(jié)束處有一分號(hào)。(4)在if和else后面可以只含一個(gè)內(nèi)嵌的操作語(yǔ)句,也可以有多個(gè)操作語(yǔ)句,此時(shí)用花括號(hào)“{}”將幾個(gè)語(yǔ)句括起來(lái)成為一個(gè)復(fù)合語(yǔ)句。例3.6求三角形的面積。#include<iostream>#include<cmath>//使用數(shù)學(xué)函數(shù)時(shí)要包含頭文件cmath#include<iomanip>//使用I/O流控制符要包含頭文件iomanipusingnamespacestd;intmain(){doublea,b,c;cout<<″pleaseentera,b,c:″;cin>>a>>b>>c;if(a+b>c&&b+c>a&&c+a>b){//復(fù)合語(yǔ)句開(kāi)始
doubles,area;//在復(fù)合語(yǔ)句內(nèi)定義變量
s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c));cout<<setiosflags(ios∷fixed)<<setprecision(4);//指定輸出的數(shù)包含4位小數(shù)
cout<<″area=″<<area<<endl;//在復(fù)合語(yǔ)句內(nèi)輸出局部變量的值}//復(fù)合語(yǔ)句結(jié)束elsecout<<″itisnotatrilateral!″<<endl;return0;}條件運(yùn)算符(?:)條件表達(dá)式的一般形式為表達(dá)式1?表達(dá)式2∶表達(dá)式3 max=(a>b)?a:b;條件運(yùn)算符的執(zhí)行順序是:先求解表達(dá)式1,若為非0(真)則求解表達(dá)式2,此時(shí)表達(dá)式2的值就作為整個(gè)條件表達(dá)式的值。若表達(dá)式1的值為0(假),則求解表達(dá)式3,表達(dá)式3的值就是整個(gè)條件表達(dá)式的值。3.8條件運(yùn)算符和條件表達(dá)式條件表達(dá)式中,表達(dá)式1的類(lèi)型可以與表達(dá)式2和表達(dá)式3的類(lèi)型不同。如x?′a′∶′b′如果已定義x為整型變量,若x=0,則條件表達(dá)式的值為字符′b′的ASCII碼。表達(dá)式2和表達(dá)式3的類(lèi)型也可以不同,此時(shí)條件表達(dá)式的值的類(lèi)型為二者中較高的類(lèi)型。如x>y?1:1.5,如果x≤y,則條件表達(dá)式的值為1.5,若x>y,值應(yīng)為1,由于C++把1.5按雙精度數(shù)處理,雙精度的類(lèi)型比整型高,因此,將1轉(zhuǎn)換成雙精度數(shù),以此作為表達(dá)式的值。例3.7輸入一個(gè)字符,判別它是否為大寫(xiě)字母,如果是,將它轉(zhuǎn)換成小寫(xiě)字母;如果不是,不轉(zhuǎn)換。然后輸出最后得到的字符。#include<iostream>usingnamespacestd;intmain(){charch;cin>>ch;ch=(ch>=′A′&&ch<=′Z′)?(ch+32):ch;
cout<<ch<<endl;return0;}一般形式如下:switch(表達(dá)式){case常量表達(dá)式1:語(yǔ)句1
case常量表達(dá)式2:語(yǔ)句2...
case常量表達(dá)式n:語(yǔ)句ndefault:語(yǔ)句n+1}3.9多分支選擇結(jié)構(gòu)和switch語(yǔ)句例如,要求按照考試成績(jī)的等級(jí)打印出百分制分?jǐn)?shù)段,可以用switch語(yǔ)句實(shí)現(xiàn):switch(grade){case′A′:cout<<″85~100\n″;case′B′:cout<<″70~84\n″;case′C′:cout<<″60~69\n″;case′D′:cout<<″<60\n″;default:cout<<″e(cuò)rror\n″;}說(shuō)明:(1)switch后面括號(hào)內(nèi)的“表達(dá)式”,可為任何類(lèi)型。(2)當(dāng)switch表達(dá)式的值與某一個(gè)case子句中的常量表達(dá)式的值相匹配時(shí),就執(zhí)行此case子句中的內(nèi)嵌語(yǔ)句,若所有的case子句中的常量表達(dá)式的值都不能與switch表達(dá)式的值匹配,就執(zhí)行default子句的內(nèi)嵌語(yǔ)句。(3)每一個(gè)case表達(dá)式的值必須互不相同,否則就會(huì)出現(xiàn)互相矛盾的現(xiàn)象。(4)各個(gè)case和default的出現(xiàn)次序不影響執(zhí)行結(jié)果。(5)執(zhí)行完一個(gè)case子句后,流程控制轉(zhuǎn)移到下一個(gè)case子句繼續(xù)執(zhí)行。應(yīng)該在執(zhí)行一個(gè)case子句后,可以用一個(gè)break語(yǔ)句終止switch語(yǔ)句的執(zhí)行。(6)多個(gè)case可以共用一組執(zhí)行語(yǔ)句,如...
case′A′:case′B′:case′C′:cout<<″>60\n″;break;...。例3.8編寫(xiě)程序,判斷某一年是否為閏年。#include<iostream>usingnamespacestd;intmain(){intyear;boolleap;cout<<″pleaseenteryear:″;//輸出提示
cin>>year;//輸入年份
if(year%4==0)//年份能被4整除{if(year%100==0)//年份能被4整除又能被100整除{if(year%400==0)//年份能被4整除又能被400整除
leap=true;//閏年,令leap=true(真)
elseleap=false;}//非閏年,令leap=false(假)
else//年份能被4整除但不能被100整除肯定是閏年
leap=true;}//是閏年,令leap=true3.10編寫(xiě)選擇結(jié)構(gòu)的程序else//年份不能被4整除肯定不是閏年
leap=false;//若為非閏年,令leap=falseif(leap)cout<<year<<″is″;//若leap為真,就輸出年份和“是”
elsecout<<year<<″isnot″;//若leap為真,就輸出年份和“不是”
cout<<″aleapyear.″<<endl;//輸出“閏年”
return0;}運(yùn)行情況如下:①2005↙2005isnotaleapyear.②1900↙1900isnptaleapyear.也可以用一個(gè)邏輯表達(dá)式包含所有的閏年條件,將上述if語(yǔ)句用下面的if語(yǔ)句代替:if((year%4==0&&year%100!=0)||(year%400==0))leap=true;elseleap=false;例3.9運(yùn)輸公司對(duì)用戶計(jì)算運(yùn)費(fèi)。路程(s)越遠(yuǎn),每公里運(yùn)費(fèi)越低。標(biāo)準(zhǔn)如下:
s<250km沒(méi)有折扣250≤s<5002%折扣500≤s<10005%折扣1000≤s<20008%折扣2000≤s<300010%折扣3000≤s15%折扣設(shè)每公里每噸貨物的基本運(yùn)費(fèi)為p(price的縮寫(xiě)),貨物重為w(wright的縮寫(xiě)),距離為s,折扣為d(discount的縮寫(xiě)),則總運(yùn)費(fèi)f(freight的縮寫(xiě))的計(jì)算公式為f=p*w*s*(1-d)據(jù)此寫(xiě)出程序如下:#include<iostream>usingnamespacestd;intmain(){intc,s;floatp,w,d,f;cout<<″pleaseenterp,w,s:″;cin>>p>>w>>s;if(s>=3000)c=12;elsec=s/250;switch(c){case0:d=0;break;case1:d=2;break;case2:case3:d=5;break;case4:case5:case6:case7:d=8;break;case8:case9:case10:case11:d=10;break;case12:d=15;break;}f=p*w*s*(1-d/100.0);cout<<″freight=″<<f<<endl;return0;}while語(yǔ)句的一般形式如下:while(表達(dá)式)語(yǔ)句其作用是:當(dāng)指定的條件為真(表達(dá)式為非0)時(shí),執(zhí)行while語(yǔ)句中的內(nèi)嵌語(yǔ)句。其特點(diǎn)是:先判斷表達(dá)式,后執(zhí)行語(yǔ)句。while循環(huán)稱(chēng)為當(dāng)型循環(huán)。3.11循環(huán)結(jié)構(gòu)和循環(huán)語(yǔ)句例3.10求1+2+3+…+100。根據(jù)流程圖寫(xiě)出程序:#include<iostream>usingnamespacestd;intmain(){inti=1,sum=0;while(i<=100){sum=sum+i;i++;}cout<<″sum=″<<sum<<endl;}運(yùn)行結(jié)果為sum=5050需要注意:循環(huán)體如果包含一個(gè)以上的語(yǔ)句,應(yīng)該用花括號(hào)括起來(lái),以復(fù)合語(yǔ)句形式出現(xiàn)。如果不加花括號(hào),則while語(yǔ)句的范圍只到while后面第一個(gè)分號(hào)處。(2)在循環(huán)體中應(yīng)有使循環(huán)趨向于結(jié)束的語(yǔ)句。do-while語(yǔ)句的特點(diǎn)是先執(zhí)行循環(huán)體,然后判斷循環(huán)條件是否成立。其一般形式為do
語(yǔ)句
while(表達(dá)式);它是這樣執(zhí)行的:先執(zhí)行一次指定的語(yǔ)句(即循環(huán)體),然后判別表達(dá)式,當(dāng)表達(dá)式的值為非零(“真”)時(shí),返回重新執(zhí)行循環(huán)體語(yǔ)句,如此反復(fù),直到表達(dá)式的值等于0為止,此時(shí)循環(huán)結(jié)束。用do-while語(yǔ)句構(gòu)成循環(huán)例3.11用do-while語(yǔ)句求1+2+3+…+100??删帉?xiě)出下面的程序:#include<iostream>usingnamespacestd;intmain(){inti=1,sum=0;do{sum=sum+i;i++;}while(i<=100);cout<<″sum=″<<sum<<endl;return0;}C++中的for語(yǔ)句使用最為廣泛和靈活,不僅可以用于循環(huán)次數(shù)已經(jīng)確定的情況,而且可以用于循環(huán)次數(shù)不確定而只給出循環(huán)結(jié)束條件的情況,它完全可以代替while語(yǔ)句。for語(yǔ)句的一般格式為for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語(yǔ)句用for語(yǔ)句構(gòu)成循環(huán)for語(yǔ)句最簡(jiǎn)單的形式也是最容易理解的格式如下:for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值)語(yǔ)句例如for(i=1;i<=100;i++) sum=sum+i;說(shuō)明:(1)for語(yǔ)句的一般格式中的“表達(dá)式1”可以省略,此時(shí)應(yīng)在for語(yǔ)句之前給循環(huán)變量賦初值。(2)如果表達(dá)式2省略,即不判斷循環(huán)條件,循環(huán)無(wú)終止地進(jìn)行下去。也就是認(rèn)為表達(dá)式2始終為真。(3)表達(dá)式3也可以省略,但此時(shí)程序設(shè)計(jì)者應(yīng)另外設(shè)法保證循環(huán)能正常結(jié)束。(4)可以省略表達(dá)式1和表達(dá)式3,只有表達(dá)式2,即只給循環(huán)條件。(5)3個(gè)表達(dá)式都可省略。(6)表達(dá)式1可以是設(shè)置循環(huán)變量初值的賦值表達(dá)式,也可以是與循環(huán)變量無(wú)關(guān)的其他表達(dá)式。(7)表達(dá)式一般是關(guān)系表達(dá)式(如i<=100)或邏輯表達(dá)式(如a<b&&x<y),但也可以是數(shù)值表達(dá)式或字符表達(dá)式,只要其值為非零,就執(zhí)行循環(huán)體。(1)3種循環(huán)都可以用來(lái)處理同一問(wèn)題,一般情況下它們可以互相代替。(2)while和do-while循環(huán),是在while后面指定循環(huán)條件的,在循環(huán)體中應(yīng)包含使循環(huán)趨于結(jié)束的語(yǔ)句。for循環(huán)可以在表達(dá)式3中包含使循環(huán)趨于結(jié)束的操作,甚至可以將循環(huán)體中的操作全部放到表達(dá)式3中。因此for語(yǔ)句的功能更強(qiáng),凡用while循環(huán)能完成的,用for循環(huán)都能實(shí)現(xiàn)。(3)用while和do-while循環(huán)時(shí),循環(huán)變量初始化的操作應(yīng)在while和do-while語(yǔ)句之前完成。而for語(yǔ)句可以在表達(dá)式1中實(shí)現(xiàn)循環(huán)變量的初始化。3.11.4幾種循環(huán)的比較一個(gè)循環(huán)體內(nèi)又包含另一個(gè)完整的循環(huán)結(jié)構(gòu),稱(chēng)為循環(huán)的嵌套。內(nèi)嵌的循環(huán)中還可以嵌套循環(huán),這就是多層循環(huán)。3種循環(huán)(while循環(huán)、do-while循環(huán)和for循環(huán))可以互相嵌套。3.12循環(huán)的嵌套break語(yǔ)句的一般格式為break;其作用為使流程從循環(huán)體內(nèi)跳出循環(huán)體,即提前結(jié)束循環(huán),接著執(zhí)行循環(huán)體下面的語(yǔ)句。break語(yǔ)句只能用于循環(huán)語(yǔ)句和switch語(yǔ)句內(nèi),不能單獨(dú)使用或用于其他語(yǔ)句中。3.13break語(yǔ)句和continue語(yǔ)句continue語(yǔ)句的一般格式為continue;其作用為結(jié)束本次循環(huán),即跳過(guò)循環(huán)體中下面尚未執(zhí)行的語(yǔ)句,接著進(jìn)行下一次是否執(zhí)行循環(huán)的判定。continue語(yǔ)句和break語(yǔ)句的區(qū)別是:continue語(yǔ)句只結(jié)束本次循環(huán),而不是終止整個(gè)循環(huán)的執(zhí)行。而break語(yǔ)句則是結(jié)束整個(gè)循環(huán)過(guò)程,不再判斷執(zhí)行循環(huán)的條件是否成立。如果有以下兩個(gè)循環(huán)結(jié)構(gòu):用下面公式求π的近似值。π/4≈1-1/3+1/5-1/7+…直到最后一項(xiàng)的絕對(duì)值小于10-7為止。#include<iostream>#include<iomanip>#include<cmath>usingnamespacestd;intmain(){ints=1;doublen=1,t=1,pi=0;while((fabs(t))>1e-7){pi=pi+t;n=n+2;3.14編寫(xiě)循環(huán)結(jié)構(gòu)的程序s=-s;t=s/n;}pi=pi*4;cout<<″pi=″<<setiosflags(ios∷fixed)<<setprecision(6)<<pi<<endl;return0;}運(yùn)行結(jié)果為pi=3.141592注意:不要把n定義為整型變量,否則在執(zhí)行“t=s/n;”時(shí),得到t的值為0(原因是兩個(gè)整數(shù)相除)。例3.13求Fibonacci數(shù)列前40個(gè)數(shù)。這個(gè)數(shù)列有如下特點(diǎn):第1、2個(gè)數(shù)為1、1。從第3個(gè)數(shù)開(kāi)始,每個(gè)數(shù)是其前面兩個(gè)數(shù)之和。即F1=1(n=1)F2=1(n=2)Fn=Fn-1+Fn-2(n≥3)這是一個(gè)有趣的古典數(shù)學(xué)問(wèn)題:有一對(duì)兔子,從出生后第3個(gè)月起每個(gè)月都生一對(duì)兔子。小兔子長(zhǎng)到第3個(gè)月后每個(gè)月又生一對(duì)兔子。假設(shè)所有兔子都不死,問(wèn)每個(gè)月的兔子總數(shù)為多少?可以從書(shū)中表3.4看出兔子數(shù)的規(guī)律。根據(jù)給出的每月兔子總數(shù)的關(guān)系,可編寫(xiě)程序如下:#include<iostream>#include<iomanip>usingnamespacestd;intmain(){longf1,f2;inti;f1=f2=1;for(i=1;i<=20;i++){cout<<setw(12)<<f1<<setw(12)<<f2;if(i%2==0)cout<<endl;
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025國(guó)際貿(mào)易合同
- 2025開(kāi)關(guān)插座采購(gòu)合同標(biāo)準(zhǔn)版
- 2025年度高科技企業(yè)公司股權(quán)協(xié)議書(shū)模板3篇
- 2025年度智能家居生態(tài)鏈消費(fèi)者協(xié)議3篇
- 2025年度新材料研發(fā)與應(yīng)用公司整體轉(zhuǎn)讓協(xié)議版3篇
- 2025年度醫(yī)療設(shè)備融資租賃服務(wù)合同模板3篇
- 2025年度農(nóng)村宅基地房買(mǎi)賣(mài)合同(農(nóng)村電商服務(wù)站建設(shè))
- 2025年度公租房合同(含租賃合同簽訂及備案費(fèi)用)3篇
- 2025年度環(huán)保處理設(shè)備專(zhuān)業(yè)維修與改造合同3篇
- 2025年度新能源汽車(chē)充電基礎(chǔ)設(shè)施合作項(xiàng)目協(xié)議書(shū)范本3篇
- 裝飾公司與項(xiàng)目經(jīng)理合作協(xié)議
- 接待上級(jí)領(lǐng)導(dǎo)工作總結(jié)
- 《新時(shí)代高校勞動(dòng)教育理論與實(shí)踐教程》教案 第9課 強(qiáng)化勞動(dòng)安全意識(shí)
- 小學(xué)數(shù)學(xué)項(xiàng)目化教學(xué)這:基于教學(xué)評(píng)一體化的大單元整體設(shè)計(jì)《測(cè)量》
- ACC-AHA-HRSICD治療適應(yīng)證指南
- 共享單車(chē)電動(dòng)車(chē)加盟城市代理協(xié)議模板
- 2024年上海市交大附中嘉定高二物理第一學(xué)期期末達(dá)標(biāo)檢測(cè)試題含解析
- 新版《電力設(shè)備典型消防規(guī)程》
- 《艱辛探索和建設(shè)成就》教學(xué)設(shè)計(jì)
- YS/T 673-2013還原鈷粉
- GB/T 7631.5-1989潤(rùn)滑劑和有關(guān)產(chǎn)品(L類(lèi))的分類(lèi)第5部分:M組(金屬加工)
評(píng)論
0/150
提交評(píng)論