版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1第三章程序設(shè)計(jì)初步3.1基于過程的程序設(shè)計(jì)和算法3.2C++的程序結(jié)構(gòu)和語句3.3賦值操作3.4C++的輸入與輸出3.5編寫順序結(jié)構(gòu)的程序3.6關(guān)系運(yùn)算和邏輯運(yùn)算3.7選擇結(jié)構(gòu)和if語句3.8循環(huán)結(jié)構(gòu)和循環(huán)語句23.1基于過程的程序設(shè)計(jì)和算法
在基于過程的程序設(shè)計(jì)中,程序設(shè)計(jì)者必須指定計(jì)算機(jī)執(zhí)行的具體步驟,程序設(shè)計(jì)者不僅要考慮程序要“做什么”,還要解決“怎么做”的問題,根據(jù)程序要“做什么”的要求,寫出一個(gè)個(gè)語句,安排好它們的執(zhí)行順序?
怎樣設(shè)計(jì)這些步驟,怎樣保證它的正確性和具有較高的效率,這就是算法需要解決的問題?
33.1.1算法的概念
一個(gè)面向過程的程序應(yīng)包括以下兩方面內(nèi)容:(1)對(duì)數(shù)據(jù)的描述?在程序中要指定數(shù)據(jù)的類型和數(shù)據(jù)的組織形式,即數(shù)據(jù)結(jié)構(gòu)?(2)對(duì)操作的描述?即操作步驟,也就是算法。對(duì)于面向過程的程序,可以用下面的公式表示:
程序=算法+數(shù)據(jù)結(jié)構(gòu)
4不要認(rèn)為只有“計(jì)算”的問題才有算法?廣義地說,
為解決一個(gè)問題而采取的方法和步驟,就稱為“算法”?計(jì)算機(jī)算法可分為兩大類別:數(shù)值算法和非數(shù)值算法?數(shù)值算法的目的是求數(shù)值解?非數(shù)值算法包括的面十分廣泛,最常見的是用于事務(wù)管理領(lǐng)域?目前,計(jì)算機(jī)在非數(shù)值方面的應(yīng)用遠(yuǎn)遠(yuǎn)超過了在數(shù)值方面的應(yīng)用?C++既支持面向過程的程序設(shè)計(jì),又支持面向?qū)ο蟮某绦蛟O(shè)計(jì)?無論面向過程的程序設(shè)計(jì)還是面向?qū)ο蟮某绦蛟O(shè)計(jì),都離不開算法設(shè)計(jì)?53.1.2算法的表示1.自然語言用中文或英文等自然語言描述算法?但容易產(chǎn)生歧義性,在程序設(shè)計(jì)中一般不用自然語言表示算法?2.流程圖可以用傳統(tǒng)的流程圖或結(jié)構(gòu)化流程圖?用圖的形式表示算法,比較形象直觀,但修改算法時(shí)顯得不大方便?3.偽代碼偽代碼是用介于自然語言和計(jì)算機(jī)語言之間的文字和符號(hào)來描述算法?如6
ifxispositivethenprintxelseprint-x用偽代碼寫算法并無固定的?嚴(yán)格的語法規(guī)則,只需把意思表達(dá)清楚,并且書寫的格式要寫成清晰易讀的形式?它不用圖形符號(hào),因此書寫方便?格式緊湊,容易修改,便于向計(jì)算機(jī)語言算法(即程序)過渡?4.用計(jì)算機(jī)語言表示算法
用一種計(jì)算機(jī)語言去描述算法,這就是計(jì)算機(jī)程序?
教材中常用的:流程圖和計(jì)算機(jī)語言73.2C++的程序結(jié)構(gòu)和語句
由第1章已知,一個(gè)程序包含一個(gè)或多個(gè)程序單位(每個(gè)程序單位構(gòu)成一個(gè)程序文件)?每一個(gè)程序單位由以下幾個(gè)部分組成:(1)預(yù)處理命令?如#include命令和#define命令?(2)全局聲明?例如對(duì)數(shù)據(jù)類型和函數(shù)的聲明,以及對(duì)變量的定義?(3)函數(shù)?包括函數(shù)首部和函數(shù)體,在函數(shù)體中可以包含若干聲明語句和執(zhí)行語句?8#include<iostream>//預(yù)處理命令usingnamespacestd;//在函數(shù)之外的聲明部分inta=3;//在函數(shù)之外的聲明部分intmain()//函數(shù)首部{floatb;//函數(shù)內(nèi)的聲明部分
b=4.5;//執(zhí)行語句
cout<<a<<b;//執(zhí)行語句
return0;//執(zhí)行語句}910C++語句可以分為以下4種:1.聲明語句如inta,b;
在C語言中,只有產(chǎn)生實(shí)際操作的才稱為語句,對(duì)變量的定義不作為語句,而且要求對(duì)變量的定義必須出現(xiàn)在本塊中所有程序語句之前?因此C程序員已經(jīng)養(yǎng)成了一個(gè)習(xí)慣:在函數(shù)或塊的開頭位置定義全部變量?
在C++中,對(duì)變量(以及其他對(duì)象)的定義被認(rèn)為是一條語句,并且可以出現(xiàn)在函數(shù)中的任何行,即可以放在其他程序語句可以出現(xiàn)的地方,也可以放在函數(shù)之外?112.執(zhí)行語句通知計(jì)算機(jī)完成一定的操作?執(zhí)行語句包括:(1)控制語句,完成一定的控制功能?C++有9種控制語句,即①if()~else~(條件語句)②for()~(循環(huán)語句)③while()~(循環(huán)語句)④do~while()(循環(huán)語句)⑤continue(結(jié)束本次循環(huán)語句)⑥break(中止執(zhí)行switch或循環(huán)語句)⑦switch(多分支選擇語句)⑧goto(轉(zhuǎn)向語句)⑨return(從函數(shù)返回語句)12(2)函數(shù)和流對(duì)象調(diào)用語句?函數(shù)調(diào)用語句由一次函數(shù)調(diào)用加一個(gè)分號(hào)構(gòu)成一個(gè)語句,例如:sort(x,y,z);//假設(shè)已定義了sort函數(shù),它有3個(gè)參數(shù)
cout<<x<<endl;//流對(duì)象調(diào)用語句(3)表達(dá)式語句?由一個(gè)表達(dá)式加一個(gè)分號(hào)構(gòu)成一個(gè)語句?最典型的是:由賦值表達(dá)式構(gòu)成一個(gè)賦值語句?i=i+1i=i+1;任何一個(gè)表達(dá)式的最后加一個(gè)分號(hào)都可以成為一個(gè)語句?一個(gè)語句必須在最后出現(xiàn)分號(hào)?表達(dá)式能構(gòu)成語句是C和C++語言的一個(gè)重要特色?是一個(gè)賦值表達(dá)式
是一個(gè)賦值語句133.空語句下面是一個(gè)空語句:;即只有一個(gè)分號(hào)的語句,它什么也不做?4.復(fù)合語句用{}把一些語句括起來成為復(fù)合語句?{z=x+y;if(z>100)z=z-100;cout<<z;}注意:復(fù)合語句中最后一個(gè)語句中最后的分號(hào)不能省略?143.3賦值操作前面已介紹,賦值語句是由賦值表達(dá)式加上一個(gè)分號(hào)構(gòu)成?(1)C++的賦值語句具有其他高級(jí)語言的賦值語句的功能?但不同的是:C++中的賦值號(hào)“=”是一個(gè)運(yùn)算符,可以寫成:a=b=c=d;而在其他大多數(shù)語言中賦值號(hào)不是運(yùn)算符,上面的寫法是不合法的?15(2)關(guān)于賦值表達(dá)式與賦值語句的概念?在C++
中,賦值表達(dá)式可以包括在其他表達(dá)式之中.例如
if((a=b)>0)cout<<"a>0"<<endl;
不能寫成
if((a=b;)>0)cout<<"a>0"<<endl;因?yàn)樵趇f的條件中不能包含賦值語句?C++把賦值語句和賦值表達(dá)式區(qū)別開來,增加了表達(dá)式的種類,能實(shí)現(xiàn)其他語言中難以實(shí)現(xiàn)的功能?163.4C++的輸入與輸出輸入和輸出并不是C++語言中的正式組成成分?C和C++本身都沒有為輸入和輸出提供專門的語句結(jié)構(gòu)?輸入輸出不是由C++本身定義的,而是在編譯系統(tǒng)提供的I/O庫中定義的?C++的輸出和輸入是用“流”(stream)的方式實(shí)現(xiàn)的?17有關(guān)流對(duì)象cin?cout和流運(yùn)算符的定義等信息是存放在C++的輸入輸出流庫中的,因此如果在程序中使用cin?cout和流運(yùn)算符,就必須使用預(yù)處理命令把頭文件stream包含到本文件中:#include<iostream>C++通過流進(jìn)行輸出的過程C++通過流進(jìn)行輸入的過程18*3.4.1輸入流與輸出流的基本操作cout語句的一般格式為
cout<<表達(dá)式1<<表達(dá)式2<<……<<表達(dá)式n;cin語句的一般格式為
cin>>變量1>>變量2>>……>>變量n;在定義流對(duì)象時(shí),系統(tǒng)會(huì)在內(nèi)存中開辟一段緩沖區(qū),用來暫存輸入輸出流的數(shù)據(jù)?在執(zhí)行cout語句時(shí),先把插入的數(shù)據(jù)順序存放在輸出緩沖區(qū)中,直到輸出緩沖區(qū)滿或遇到cout語句中的endl(或'\n',ends,flush)為止,此時(shí)將緩沖區(qū)中已有的數(shù)據(jù)一起輸出,并清空緩沖區(qū)?輸出流中的數(shù)據(jù)在系統(tǒng)默認(rèn)的設(shè)備(一般為顯示器)輸出?19
一個(gè)cout語句可以分寫成若干行?如cout<<"ThisisasimpleC++program."<<endl;可以寫成cout<<"Thisis"http://注意行末尾無分號(hào)<<"aC++"<<"program."<<endl;//語句最后有分號(hào)也可寫成多個(gè)cout語句,即cout<<"Thisis";//語句末尾有分號(hào)cout<<"aC++";cout<<"program.";cout<<endl;20注意不能用一個(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ī)按何種類型輸出,系統(tǒng)會(huì)自動(dòng)判別輸出數(shù)據(jù)的類型,使輸出的數(shù)據(jù)按相應(yīng)的類型輸出?如已定義a為int型,b為float型,c為char型,則cout<<a<<‘,'<<b<<‘,'<<c<<endl;會(huì)以下面的形式輸出:4,345.789,a21與cout類似,一個(gè)cin語句可以分寫成若干行?如cin>>a>>b>>c>>d;可以寫成
cin>>a//注意行末尾無分號(hào)
>>b//這樣寫可能看起來清晰些
>>c>>d;也可以寫成cin>>a;cin>>b;cin>>c;cin>>d;以上3種情況均可以從鍵盤輸入:1234↙也可以分多行輸入數(shù)據(jù):1↙23↙4↙22在用cin輸入時(shí),系統(tǒng)也會(huì)根據(jù)變量的類型從輸入流中提取相應(yīng)長度的字節(jié)?如有
charc1,c2;inta;floatb;cin>>c1>>c2>>a>>b;cout<<c1<<","<<c2<<","<<a<<","<<b<<endl;如果輸入123456.78↙也可以按下面格式輸入:123456.78↙(在1和2之間有空格)輸出如下:1,2,34,56.78輸出同上23注意:不能用cin語句把空格字符和回車換行符作為字符輸入給字符變量,它們將被跳過?如果想將空格字符或回車換行符(或任何其他鍵盤上的字符)輸入給字符變量,可以用getchar函數(shù)(3.4.3節(jié)介紹)?在組織輸入流數(shù)據(jù)時(shí),要仔細(xì)分析cin語句中變量的類型,按照相應(yīng)的格式輸入,否則容易出錯(cuò)?24*3.4.2在輸入流與輸出流中使用控制符上面介紹的是使用cout和cin時(shí)的默認(rèn)格式?但有時(shí)人們在輸入輸出時(shí)有一些特殊的要求,如在輸出實(shí)數(shù)時(shí)規(guī)定字段寬度,只保留兩位小數(shù),數(shù)據(jù)向左或向右對(duì)齊等?C++提供了在輸入輸出流中使用的控制符(有的書中稱為操縱符),見書中表3.1?需要注意的是:如果使用了控制符,在程序單位的開頭除了要加iostream頭文件外,還要加iomanip頭文件?25浮點(diǎn)數(shù)輸出舉例:doublea=123.456789012345;對(duì)a賦初值(1)cout<<a;
輸出:123.456或123.457
(2)cout<<setprecision(9)<<a;
輸出:123.456789(3)cout<<setiosflags(ios∷fixed)<<setprecision(8)<<a;
輸出:123.45678901(4)cout<<setiosflags(ios∷scientific)<<a;
輸出:1.234568e+002(5)cout<<setiosflags(ios∷scientific)<<setprecision(4)<<a;
輸出:1.2346e+002注意四舍五入問題,vc6為后者26整數(shù)輸出舉例:intb=123456;對(duì)b賦初值(1)cout<<b;
輸出:123456(2)cout<<setw(10)<<b<<','<<b;
輸出:123456,123456
設(shè)置相同寬度右對(duì)齊
精度相同綜合使用27如果在多個(gè)cout語句中使用相同的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.463.14-3214.67統(tǒng)一設(shè)置定點(diǎn)形式輸出?取兩位小數(shù)?右對(duì)齊?這些設(shè)置對(duì)其后的輸出均有效(除非重新設(shè)置),而setw只對(duì)其后一個(gè)輸出項(xiàng)有效,因此必須在輸出a,b,c之前都要寫setw(10)?283.4.3用getchar和putchar函數(shù)進(jìn)行字符的輸入和輸出C++還保留了C語言中用于輸入和輸出單個(gè)字符的函數(shù),使用很方便?其中最常用的有g(shù)etchar函數(shù)和putchar函數(shù)?1.putchar函數(shù)(字符輸出函數(shù))putchar函數(shù)的作用是向終端輸出一個(gè)字符?
例如putchar(c);它輸出字符變量c的值?29
例3.2輸出單個(gè)字符?#include<iostream>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é)果為BOYBOY30
putchar('\101')(輸出字符'A',八進(jìn)制的101是'A'的ASCII碼)putchar('\'')(輸出單引號(hào)字符')putchar('\015')(輸出回車,不換行,使輸出的當(dāng)前位置移到本行開頭)312.getchar函數(shù)(字符輸入函數(shù))此函數(shù)的作用是從終端(或系統(tǒng)隱含指定的輸入設(shè)備)輸入一個(gè)字符?getchar函數(shù)沒有參數(shù),函數(shù)的值就是從輸入設(shè)備得到的字符?例3.3輸入單個(gè)字符?#include<iostream>usingnamespacestd;intmain(){charc;c=getchar();putchar(c+32);putchar('\n');return0;}在運(yùn)行時(shí),如果從鍵盤輸入大寫字母'A'并按回車鍵,就會(huì)在屏幕上輸出小寫字母'a'?32請注意,getchar()只能接收一個(gè)字符?getchar函數(shù)得到的字符可以賦給一個(gè)字符變量或整型變量,也可以不賦給任何變量,作為表達(dá)式的一部分?例3.3中的:
charc;c=getchar();putchar(c+32);putchar('\n');可以用下面程序行代替:putchar(getchar()+32);putchar('\n');此時(shí)不必定義變量c?33假設(shè):charc;思考下面代碼行的功能:(輸入時(shí)敲入A)(1)cout<<(c=getchar());(2)cout<<(c=getchar()+32);可以看到用putchar和getchar函數(shù)輸出和輸入字符十分靈活方便,由于它們是函數(shù)所以可以出現(xiàn)在表達(dá)式中。輸出A輸出a343.4.4用scanf和printf函數(shù)進(jìn)行輸入和輸出不做要求353.5編寫順序結(jié)構(gòu)的程序例3.5求一元二次方程式ax2+bx+c=0的根?a,b,c的值在運(yùn)行時(shí)由鍵盤輸入,它們的值滿足b2-4ac≥0?#include<iostream>#include<cmath>//由于程序要用到數(shù)學(xué)函數(shù)sqrtusingnamespacestd;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;}運(yùn)行結(jié)果如下:4.58.82.4↙x1=-0.327612x2=-1.17794363.6關(guān)系運(yùn)算和邏輯運(yùn)算往往要求根據(jù)某個(gè)指定的條件是否滿足來決定執(zhí)行的內(nèi)容?例如,購物在1000元以下的打九五折,1000元及以上的打九折?C++提供if語句來實(shí)現(xiàn)這種條件選擇?//amount代表購物總額,tax代表折扣
//pay為實(shí)付款
if(amount<1000)tax=0.95;elsetax=0.9;pay=amount*tax;373.6.1關(guān)系運(yùn)算和關(guān)系表達(dá)式上面if語句中的“amount<1000”實(shí)現(xiàn)的不是算術(shù)運(yùn)算,而是關(guān)系運(yùn)算?實(shí)際上是比較運(yùn)算,將兩個(gè)數(shù)據(jù)進(jìn)行比較,判斷比較的結(jié)果?“amount<1000”就是一個(gè)比較式,在高級(jí)語言中稱為關(guān)系表達(dá)式,其中“>”是一個(gè)比較符,稱為關(guān)系運(yùn)算符?C++的關(guān)系運(yùn)算符有:①< (小于)②<= (小于或等于) ③> (大于)④>= (大于或等于) ⑤== (等于)⑥!= (不等于)優(yōu)先級(jí)相同(高)優(yōu)先級(jí)相同(低)38關(guān)于優(yōu)先次序:①前4種關(guān)系運(yùn)算符(<,<=,>,>=)的優(yōu)先級(jí)別相同,后兩種也相同?前4種高于后兩種?例如,“>”優(yōu)先于“==”?而“>”與“<”優(yōu)先級(jí)相同?②關(guān)系運(yùn)算符的優(yōu)先級(jí)低于算術(shù)運(yùn)算符?③關(guān)系運(yùn)算符的優(yōu)先級(jí)高于賦值運(yùn)算符?例如:c>a+b等效于c>(a+b)a>b==c等效于(a>b)==ca==b<c等效于a==(b<c)a=b>c等效于a=(b>c)用關(guān)系運(yùn)算符將兩個(gè)表達(dá)式連接起來的式子,稱為關(guān)系表達(dá)式?39關(guān)系表達(dá)式的一般形式可以表示為表達(dá)式關(guān)系運(yùn)算符表達(dá)式其中的“表達(dá)式”可以是算術(shù)表達(dá)式或關(guān)系表達(dá)式?邏輯表達(dá)式?賦值表達(dá)式?字符表達(dá)式?例如,下面都是合法的關(guān)系表達(dá)式:a>b,a+b>b+c,(a==3)>(b==5),'a'<'b',(a>b)>(b<c)關(guān)系表達(dá)式的值是一個(gè)邏輯值,即“真”或“假”?例如,關(guān)系表達(dá)式“5==3”的值為“假”,“5>=0”的值為“真”?在C和C++中都用數(shù)值1代表“真”,用0代表“假”?如果有以下賦值表達(dá)式:d=a>b則d得到的值為1f=a>b>cf得到的值為0403.6.2邏輯常量和邏輯變量C++中提供了邏輯型數(shù)據(jù)?邏輯型常量只有兩個(gè),即false(假)和true(真)?邏輯型變量要用類型標(biāo)識(shí)符bool來定義,它的值只能是true和false之一?如
boolfound,flag=false;found=true;由于邏輯變量是用關(guān)鍵字bool來定義的,因此又稱為布爾變量?邏輯型常量又稱為布爾常量?設(shè)立邏輯類型的目的是為了看程序時(shí)直觀易懂?41在編譯系統(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?423.6.3邏輯運(yùn)算和邏輯表達(dá)式有時(shí)只用一個(gè)關(guān)系表達(dá)式不能正確表示所指定的條件C++提供3種邏輯運(yùn)算符(運(yùn)算規(guī)則參考書中表3.2)(1)&&
邏輯與(相當(dāng)于其他語言中的AND)(2)||
邏輯或(相當(dāng)于其他語言中的OR)(3)!邏輯非(相當(dāng)于其他語言中的NOT)邏輯運(yùn)算舉例如下:a&&b若a,b為真,則a&&b為真?a||b若a,b之一為真,則a||b為真?!a若a為真,則!a為假?43在一個(gè)邏輯表達(dá)式中如果包含多個(gè)邏輯運(yùn)算符,按以下的優(yōu)先次序:(1)!(非)→&&(與)→||(或),即“!”為三者中最高的?(2)!
>
算術(shù)運(yùn)算符
>
關(guān)系運(yùn)算符>&&>||
>賦值運(yùn)算符例如:(a>b)&&(x>y)可寫成a>b&&x>y(a==b)||(x==y)可寫成a==b||x==y(!a)||(a>b)可寫成!a||a>b將兩個(gè)關(guān)系表達(dá)式用邏輯運(yùn)算符連接起來就成為一個(gè)邏輯表達(dá)式,上面幾個(gè)式子就是邏輯表達(dá)式?44邏輯表達(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)為是“真”?例如:(1)若a=4,則!a的值為0?(2)若a=4,b=5,則a&&b的值為1?(3)a,b值同前,a-b||a+b的值為1?(4)a,b值同前,!a||b的值為1?(5)4&&0||2的值為1?45在C++中,整型數(shù)據(jù)可以出現(xiàn)在邏輯表達(dá)式中,在進(jìn)行邏輯運(yùn)算時(shí),根據(jù)整型數(shù)據(jù)的值是0或非0,把它作為邏輯量假或真,然后參加邏輯運(yùn)算?小結(jié):
邏輯運(yùn)算結(jié)果不是0就是1,不可能是其他數(shù)值?而在邏輯表達(dá)式中作為參加邏輯運(yùn)算的運(yùn)算對(duì)象可以是0(“假”)或任何非0的數(shù)值(按“真”對(duì)待)?如果在一個(gè)表達(dá)式中的不同位置上出現(xiàn)數(shù)值,應(yīng)區(qū)分哪些是作為數(shù)值運(yùn)算或關(guān)系運(yùn)算的對(duì)象,哪些作為邏輯運(yùn)算的對(duì)象?實(shí)際上,邏輯運(yùn)算符兩側(cè)的表達(dá)式不但可以是關(guān)系表達(dá)式或整數(shù)(0和非0),也可以是任何類型的數(shù)據(jù),系統(tǒng)最終以0和非0來判定它們屬于“真”或“假”?例如'c'&&'d'的值為1?
46可以將表3.2改寫成書中表3.3形式?熟練掌握C++的關(guān)系運(yùn)算符和邏輯運(yùn)算符后,可以巧妙地用一個(gè)邏輯表達(dá)式來表示一個(gè)復(fù)雜的條件?例如,要判別某一年(year)是否為閏年?閏年的條件是符合下面兩者之一:①能被4整除,但不能被100整除?②能被100整除,又能被400整除?例如2004?2000年是閏年,2005?2100年不是閏年?(year%4==0&&year%100!=0)||year%400==0可以加一個(gè)“!”用來判別非閏年:!((year%4==0&&year%100!=0)||year%400==0)473.7選擇結(jié)構(gòu)和if語句if語句是用來判定所給定的條件是否滿足,根據(jù)判定的結(jié)果(真或假)決定執(zhí)行給出的兩種操作之一483.7.1if語句的形式1.if(表達(dá)式)語句例如:if(x>y)cout<<x<<endl;這種if語句的執(zhí)行過程見圖(a)2.if(表達(dá)式)語句1else語句2例如:if(x>y)cout<<x;elsecout<<y;見圖(b)493.if(表達(dá)式1)語句1elseif(表達(dá)式2)語句2elseif(表達(dá)式3)語句3…elseif(表達(dá)式m)語句melse語句n例如:if(number>500)cost=0.15;elseif(number>300)cost=0.10;elseif(number>100)cost=0.075;elseif(number>50)cost=0.05;elsecost=0;對(duì)應(yīng)流程圖50說明:(1)3種形式的if語句都是由一個(gè)入口進(jìn)來,經(jīng)過對(duì)“表達(dá)式”的判斷,分別執(zhí)行相應(yīng)的語句,最后歸到一個(gè)共同的出口?這種形式的程序結(jié)構(gòu)稱為選擇結(jié)構(gòu)?在C++
中if語句是實(shí)現(xiàn)選擇結(jié)構(gòu)主要的語句?(2)3種形式的if語句中在if后面都有一個(gè)用括號(hào)括起來的表達(dá)式,它是程序編寫者要求程序判斷的“條件”,一般是邏輯表達(dá)式或關(guān)系表達(dá)式?(3)第2?第3種形式的if語句中,在每個(gè)else前面有一分號(hào),整個(gè)語句結(jié)束處有一分號(hào)?(4)在if和else后面可以只含一個(gè)內(nèi)嵌的操作語句(如上例),也可以有多個(gè)操作語句,此時(shí)用花括號(hào)“{}”將幾個(gè)語句括起來成為一個(gè)復(fù)合語句?51例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ù)合語句開始
doubles,area;//在復(fù)合語句內(nèi)定義變量
s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c));cout<<setiosflags(ios∷fixed)<<setprecision(4);cout<<"area="<<area<<endl;}//復(fù)合語句結(jié)束
elsecout<<"itisnotatrilateral!"<<endl;return0;}運(yùn)行情況如下:pleaseentera,b,c:2.453.674.89↙area=4.3565523.7.2if語句的嵌套在if語句中又包含一個(gè)或多個(gè)if語句稱為if語句的嵌套?一般形式如下:if()if()語句1else語句2 內(nèi)嵌ifelseif()語句3else語句4 內(nèi)嵌if應(yīng)當(dāng)注意if與else的配對(duì)關(guān)系?else總是與它上面最近的?且未配對(duì)的if配對(duì)?53假如寫成if()if()語句1elseif()語句2else語句3 但實(shí)際上else是與第二個(gè)if配對(duì),因?yàn)樗鼈兿嗑嘧罱?。為了避免誤用,最好使每一層內(nèi)嵌的if語句都包含else子句(如本節(jié)開頭列出的形式),這樣if的數(shù)目和else的數(shù)目相同,從內(nèi)層到外層一一對(duì)應(yīng),不致出錯(cuò)?編程序希望else與第一個(gè)if對(duì)應(yīng)54如果if與else的數(shù)目不一樣,為實(shí)現(xiàn)程序設(shè)計(jì)者的圖,可以加花括號(hào)來確定配對(duì)關(guān)系?例如:if()
{if()語句1}//這個(gè)語句是上一行if語句的內(nèi)嵌ifelse
語句2//本行與第一個(gè)if配對(duì){}限定了內(nèi)嵌if語句的范圍,{}外的else不會(huì)與{}內(nèi)的if配對(duì)?關(guān)系清楚,不易出錯(cuò)?553.7.3條件運(yùn)算符和條件表達(dá)式若在if語句中,當(dāng)被判別的表達(dá)式的值為“真”或“假”時(shí),都執(zhí)行一個(gè)賦值語句且給同一個(gè)變量賦值時(shí),可以用簡單的條件運(yùn)算符來處理?例如,若有以下if語句:if(a>b)max=a;elsemax=b;可以用條件運(yùn)算符(?:)來處理:max=(a>b)?a:b;56
條件運(yùn)算符要求有3個(gè)操作對(duì)象,稱三目(元)運(yùn)算符,它是C++中惟一的一個(gè)三目運(yùn)算符?條件表達(dá)式的一般形式為
表達(dá)式1?表達(dá)式2∶表達(dá)式3條件運(yùn)算符的執(zhí)行順序是:先求解表達(dá)式1,若為非0(真)則求解表達(dá)式2,此時(shí)表達(dá)式2的值就作為整個(gè)條件表達(dá)式的值?若表達(dá)式1的值為0(假),則求解表達(dá)式3,表達(dá)式3的值就是整個(gè)條件表達(dá)式的值?“max=(a>b)?a:b”的執(zhí)行結(jié)果是將條件表達(dá)式的值賦給max?也就是將a和b二者中的大者賦給max?(條件運(yùn)算符優(yōu)先于賦值運(yùn)算符)57例3.7輸入一個(gè)字符,判別它是否為大寫字母,如果是,將它轉(zhuǎn)換成小寫字母;如果不是,不轉(zhuǎn)換?然后輸出最后得到的字符?#include<iostream>usingnamespacestd;intmain(){charch;cin>>ch;
ch=(ch>='A'&&ch<='Z')?(ch+32):ch;//判別ch是否大寫字母,是則轉(zhuǎn)換
cout<<ch<<endl;return0;}583.7.4多分支選擇結(jié)構(gòu)和switch語句switch語句是多分支選擇語句,用來實(shí)現(xiàn)多分支選擇結(jié)構(gòu)?它的一般形式如下:switch(表達(dá)式){case常量表達(dá)式1:語句1case常量表達(dá)式2:語句2...case常量表達(dá)式n:語句ndefault:語句n+1}59例如,要求按照考試成績的等級(jí)打印出百分制分?jǐn)?shù)段。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<<"error\n";}說明:(1)switch后面括號(hào)內(nèi)的“表達(dá)式”,可以為整型類型或字符類型?(2)當(dāng)switch表達(dá)式的值與某一個(gè)case子句中的常量表達(dá)式的值相匹配時(shí),就執(zhí)行此case子句中的內(nèi)嵌語句,若所有的case子句中的常量表達(dá)式的值都不能與switch表達(dá)式的值匹配,就執(zhí)行default子句的內(nèi)嵌語句?60(3)每一個(gè)case表達(dá)式的值必須互不相同,否則就會(huì)出現(xiàn)互相矛盾的現(xiàn)象(對(duì)表達(dá)式的同一個(gè)值,有兩種或多種執(zhí)行方案)?(4)各個(gè)case和default的出現(xiàn)次序不影響執(zhí)行結(jié)果?例如,可以先出現(xiàn)“default:…”,再出現(xiàn)“case'D':…”,然后是“case'A':…”?(5)執(zhí)行完一個(gè)case子句后,流程控制轉(zhuǎn)移到下一個(gè)case子句繼續(xù)執(zhí)行?“case常量表達(dá)式”只是起語句標(biāo)號(hào)作用,并不是在該處進(jìn)行條件判斷?在執(zhí)行switch語句時(shí),根據(jù)switch表達(dá)式的值找到與之匹配的case子句,就從此case子句開始執(zhí)行下去,不再進(jìn)行判斷?61switch(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<<"error\n";}若grade的值等于'A',則將連續(xù)輸出:
85~10070~8460~69<60error62因此,應(yīng)該在執(zhí)行一個(gè)case子句后,使流程跳出switch結(jié)構(gòu),即終止switch語句的執(zhí)行?可以用一個(gè)break語句來達(dá)到此目的?將上面的switch結(jié)構(gòu)改寫如下:switch(grade){case'A':cout<<"85~100\n";break;case'B':cout<<"70~84\n";break;case'C':cout<<"60~69\n";break;case'D':cout<<"<60\n";break;default:cout<<"error\n";break;}在case子句中雖然包含一個(gè)以上執(zhí)行語句,但可以不必用花括號(hào)括起來,會(huì)自動(dòng)順序執(zhí)行本case子句中所有的執(zhí)行語句?63(6)多個(gè)case可以共用一組執(zhí)行語句,如...case'A':case'B':case'C':cout<<">60\n";break;...當(dāng)grade的值為'A'?'B'或'C'時(shí)都執(zhí)行同一組語句?643.7.5編寫選擇結(jié)構(gòu)的程序例3.8編寫程序,判斷某一年是否為閏年?intmain(){intyear;boolleap;cout<<"pleaseenteryear:";cin>>year;//輸入年份
if(year%4==0){if(year%100==0){if(year%400==0)//年份能被400整除
leap=true;//閏年
elseleap=false;//非閏年
}else//年份能被4整除但不能被100整除肯定是閏年
leap=true;//是閏年,令leap=true}else//年份不能被4整除肯定不是閏年
leap=false;運(yùn)行情況如下:①2005↙2005isnotaleapyear.②1900↙1900isaleapyear.③2004↙2004isaleapyear.if(leap)cout<<year<<"is";elsecout<<year<<"isnot";cout<<"aleapyear."<<endl;return0;}65也可以用一個(gè)邏輯表達(dá)式包含所有的閏年條件,將上述if語句用下面的if語句代替:if((year%4==0&&year%100!=0)||(year%400==0))leap=true;elseleap=false;66例3.9運(yùn)輸公司對(duì)用戶計(jì)算運(yùn)費(fèi)?路程(s)越遠(yuǎn),每公里運(yùn)費(fèi)越低?標(biāo)準(zhǔn)如下:s<250km沒有折扣
250≤s<5002%折扣
500≤s<10005%折扣1000≤s<20008%折扣2000≤s<300010%折扣3000≤s15%折扣設(shè)每公里每噸貨物的基本運(yùn)費(fèi)為p(price的縮寫),貨物重為w(wright的縮寫),距離為s,折扣為d(discount的縮寫),則總運(yùn)費(fèi)f(freight的縮寫)的計(jì)算公式為f=p*w*s*(1-d)67#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;
68switch(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;}運(yùn)行結(jié)果如下:pleaseenterp,w,s:10020300↙freight=588000693.8循環(huán)結(jié)構(gòu)和循環(huán)語句在人們所要處理的問題中常常遇到需要反復(fù)執(zhí)行某一操作的情況?這就需要用到循環(huán)控制?許多應(yīng)用程序都包含循環(huán)?順序結(jié)構(gòu)?選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)是結(jié)構(gòu)化程序設(shè)計(jì)的3種基本結(jié)構(gòu),是各種復(fù)雜程序的基本構(gòu)造單元?因此程序設(shè)計(jì)者必須熟練掌握選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)的概念及使用方法?703.8.1用while語句構(gòu)成循環(huán)while語句的一般形式如下:while(表達(dá)式)語句其作用是:當(dāng)指定的條件為真(表達(dá)式為非0)時(shí),執(zhí)行while語句中的內(nèi)嵌語句?其特點(diǎn)是:先判斷表達(dá)式,后執(zhí)行語句?while循環(huán)稱為當(dāng)型循環(huán)?while語句對(duì)應(yīng)的流程圖71例3.10求1+2+3+…+100?用流程圖表示的算法?#include<iostream>usingnamespacestd;intmain(){inti=1,sum=0;while(i<=100){sum=sum+i;i++;}cout<<"sum="<<sum<<endl;}運(yùn)行結(jié)果為sum=505072需要注意:(1)循環(huán)體如果包含一個(gè)以上的語句,應(yīng)該用花括號(hào)括起來,以復(fù)合語句形式出現(xiàn)?如果不加花括號(hào),則while語句的范圍只到while后面第一個(gè)分號(hào)處?(2)在循環(huán)體中應(yīng)有使循環(huán)趨向于結(jié)束的語句?733.8.2用do-while語句構(gòu)成循環(huán)do-while語句的特點(diǎn)是先執(zhí)行循環(huán)體,然后判斷循環(huán)條件是否成立?其一般形式為do
語句
while(表達(dá)式);它是這樣執(zhí)行的:先執(zhí)行一次指定的語句(即循環(huán)體),然后判別表達(dá)式,當(dāng)表達(dá)式的值為非零(“真”)時(shí),返回重新執(zhí)行循環(huán)體語句,如此反復(fù),直到表達(dá)式的值等于0為止,此時(shí)循環(huán)結(jié)束?74do
語句
while(表達(dá)式);do-while語句對(duì)應(yīng)的流程圖75例3.11用do-while語句求1+2+3+…+100?先畫出流程圖,見圖3.12?#include<iostream>usingnamespacestd;intmain(){inti=1,sum=0;do{sum=sum+i;i++;}while(i<=100);cout<<"sum="<<sum<<endl;return0;}763.8.3用for語句構(gòu)成循環(huán)C++中的for語句使用最為廣泛和靈活,不僅可以用于循環(huán)次數(shù)已經(jīng)確定的情況,而且可以用于循環(huán)次數(shù)不確定而只給出循環(huán)結(jié)束條件的情況,它完全可以代替while語句?for語句的一般格式為
for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語句它的執(zhí)行過程如下:(1)先求解表達(dá)式1?(2)求解表達(dá)式2,若其值為真(值為非0),則執(zhí)行for語句中指定的內(nèi)嵌語句,然后執(zhí)行下面第(3)步?若為假(值為0),則結(jié)束循環(huán),轉(zhuǎn)到第(5)步?(3)求解表達(dá)式3?(4)轉(zhuǎn)回上面第(2)步驟繼續(xù)執(zhí)行?(5)循環(huán)結(jié)束,執(zhí)行for語句下面的一個(gè)語句?for語句對(duì)應(yīng)的流程圖77
for語句最簡單的形式也是最容易理解的格式如下:
for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值)語句例如for(i=1;i<=100;i++)sum=sum+i;它相當(dāng)于以下語句:i=1;while(i<=100){sum=sum+i;i++;}for語句的使用有許多技巧,如果熟練地掌握和運(yùn)用for語句,可以使程序精煉簡潔?顯然,用for語句簡單?方便?78說明:(1)for語句的一般格式中的“表達(dá)式1”可以省略,此時(shí)應(yīng)在for語句之前給循環(huán)變量賦初值?i=1;for(;i<=100;i++)sum=sum+i;(2)如果表達(dá)式2省略,即不判斷循環(huán)條件,循環(huán)無終止地進(jìn)行下去?也就是認(rèn)為表達(dá)式2始終為真?for(i=1;;i++)sum=sum+i;
相當(dāng)于:inti=1,sum=0;while(1){sum=sum+i;i++;}(3)表達(dá)式3也可以省略,但此時(shí)程序設(shè)計(jì)者
應(yīng)另外設(shè)法保證循環(huán)能正常結(jié)束?for(i=1;i<=100;){sum=sum+i;i++;}(4)可以省略表達(dá)式1和表達(dá)式3,只有表達(dá)式2,即只給循環(huán)條件?for(;i<=100;){sum=sum+i;i++;}79(5)表達(dá)式2一般是關(guān)系表達(dá)式(如i<=100)或邏輯表達(dá)式(如a<b&&x<y),但也可以是數(shù)值表達(dá)式或字符表達(dá)式,只要其值為非零,就執(zhí)行循環(huán)體?
語句1:for(i=0;(c=getchar())!=‘\n’;i+=c);語句2:for(;(c=getchar())!=‘\n’;)cout<<c;80空語句循環(huán)體內(nèi)完成的語句
運(yùn)行結(jié)果:Computer↙Computer81C++中的for語句比其他語言中的循環(huán)語句功能強(qiáng)得多?可以把循環(huán)體和一些與循環(huán)控制無關(guān)的操作也作為表達(dá)式1或表達(dá)式3出現(xiàn),這樣程序可以短小簡潔?但過分地利用這一特點(diǎn)會(huì)使for語句顯得雜亂,可讀性降低,建議不要把與循環(huán)控制無關(guān)的內(nèi)容放到for語句中?823.8.4循環(huán)的嵌套一個(gè)循環(huán)體內(nèi)又包含另一個(gè)完整的循環(huán)結(jié)構(gòu),稱為循環(huán)的嵌套?內(nèi)嵌的循環(huán)中還可以嵌套循環(huán),這就是多層循環(huán)?3種循環(huán)(while循環(huán)?dowhile循環(huán)和for循環(huán))可以互相嵌套?例如,下面幾種都是合法的形式:(1)while(){………while(){…}}83(2)do{┆do{…}while();}while();(3)for(;;){┆for(;;){…}}(4)while(){┆do{…}while();┆}(5)for(;;){┆while(){…}┆}(6)do{┆for(;;){…}}while();
843.8.5提前結(jié)束循環(huán)(break語句和continue語句)1.用break語句提前結(jié)束循環(huán)break語句的一般格式為
break;break語句可以使流程跳出switch結(jié)構(gòu),繼續(xù)執(zhí)行switch語句下面的一個(gè)語句?實(shí)際上,break語句還可以用于循環(huán)體內(nèi)?其作用為使流程從循環(huán)體內(nèi)跳出循環(huán)體,即提前結(jié)束循環(huán),接著執(zhí)行循環(huán)體下面的語句?break語句只能用于循環(huán)語句和switch語句內(nèi),不能單獨(dú)使用或用于其他語句中?852.用continue語句提前結(jié)束循環(huán)continue語句的一般格式為
continue;其作用為結(jié)束本次循環(huán),即跳過循環(huán)體中下面尚未執(zhí)行的語句,接著進(jìn)行下一次是否執(zhí)行循環(huán)的判定?86continue語句和break語句的區(qū)別:continue語句只結(jié)束本次循環(huán),而不是終止整個(gè)循環(huán)的執(zhí)行?而break語句則是結(jié)束整個(gè)循環(huán)過程,不再判斷執(zhí)行循環(huán)的條件是否成立?
(1)
while(表達(dá)式1){if(表達(dá)式2)break;┆}(2)while(表達(dá)式1){if(表達(dá)式2)continue;┆}87continue語句對(duì)應(yīng)的流程圖break語句對(duì)應(yīng)的流程圖883.8.6編寫循環(huán)結(jié)構(gòu)的程序例3.12用下面公式求π的近似值?直到最后一項(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;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的類型(double)若將它定義為int變量,
t=s/n;語句怎樣修改?
求實(shí)型表達(dá)式的絕對(duì)值89例3.13求Fibonacci數(shù)列前40個(gè)數(shù)?這個(gè)數(shù)列有如下特點(diǎn):第1?2個(gè)數(shù)為1?1?從第3個(gè)數(shù)開始,每個(gè)數(shù)是其前面兩個(gè)數(shù)之和?即F1=1(n=1)F2=1(n=2)Fn=Fn-1+Fn-2(n≥3)這是一個(gè)有趣的古典數(shù)學(xué)問
溫馨提示
- 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ǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國銀行保險(xiǎn)行業(yè)市場前景預(yù)測及投資戰(zhàn)略研究報(bào)告
- 2025年行政事業(yè)單位物業(yè)設(shè)備采購與安裝合同2篇
- 2025年浙江新北園區(qū)開發(fā)有限公司招聘筆試參考題庫含答案解析
- 2025年福建東南設(shè)計(jì)集團(tuán)有限公司招聘筆試參考題庫含答案解析
- 二零二五年度二零二五健康養(yǎng)生產(chǎn)品銷售代理合同4篇
- 2025年山西晉沃投資發(fā)展有限公司招聘筆試參考題庫含答案解析
- 2025年廣西合山市儲(chǔ)備糧管理公司招聘筆試參考題庫含答案解析
- 2025年合肥肥西縣鄉(xiāng)村振興投資集團(tuán)有限公司子公司招聘筆試參考題庫附帶答案詳解
- 《藥品銷售專業(yè)人士高級(jí)培訓(xùn)課件》
- 二零二五年度門窗玻璃深加工合作協(xié)議2篇
- 高考對(duì)聯(lián)題(對(duì)聯(lián)知識(shí)、高考真題及答案、對(duì)應(yīng)練習(xí)題)
- 新版《鐵道概論》考試復(fù)習(xí)試題庫(含答案)
- 【律師承辦案件費(fèi)用清單】(計(jì)時(shí)收費(fèi))模板
- 高中物理競賽真題分類匯編 4 光學(xué) (學(xué)生版+解析版50題)
- Unit1FestivalsandCelebrations詞匯清單高中英語人教版
- 西方經(jīng)濟(jì)學(xué)-高鴻業(yè)-筆記
- 2024年上海市中考語文試題卷(含答案)
- 幼兒園美術(shù)教育研究策略國內(nèi)外
- 生豬養(yǎng)殖生產(chǎn)過程信息化與數(shù)字化管理
- (完整)六年級(jí)數(shù)學(xué)上冊寒假每天10道計(jì)算題5道應(yīng)用題
- (2024年)版ISO9001質(zhì)量管理體系培訓(xùn)教材
評(píng)論
0/150
提交評(píng)論