版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
C語言程序設計教程電子教案目錄
第1章C語言概述第2章數(shù)據(jù)類型、運算符和表達式第3章C程序中的輸入、輸出第4章C程序的控制結(jié)構(gòu)第5章數(shù)
組第6章函數(shù)第7章編譯預處理命令第8章指
針第9章結(jié)
構(gòu)
體第10章文
件第1章C語言概述學習目標
對C語言有一個概括的了解,能夠編寫包含鍵盤輸入、計算和顯示輸出等操作的簡單C程序。主要內(nèi)容C語言的產(chǎn)生與特點
簡單C程序的組成C語言應用程序開發(fā)的基本步驟1.1C語言的產(chǎn)生及特點
C語言是為了編寫系統(tǒng)程序而在1968年開始研發(fā)的計算機高級語言C語言表達能力強,使用靈活,程序結(jié)構(gòu)清晰,緊湊,可移植性好C語言是進一步學習面向?qū)ο蟮某绦蛟O計語言C++和VC的基礎
【例1-1】從鍵盤輸入三個整數(shù),輸出它們的和
main()/*計算三個整數(shù)的和*/{intx,y,z,sum;scanf("%d,%d,%d",&x,&y,&z);sum=x+y+z;printf("sum=%d\n",sum);}
語句
函數(shù)體
主函數(shù)名最簡單的C程序的組成對程序的注釋1.2C語言程序的結(jié)構(gòu)及書寫格式
main(){intx,y,z,sum;scanf("%d,%d,%d",&x,&y,&z);sum=x+y+z;printf("sum=%d\n",sum)}定義變量x,y,z和sum從鍵盤輸入三個整數(shù)賦給變量x,y和z顯示變量sum的值計算x+y+z,并將結(jié)果賦給變量sum程序說明一般C程序的組成【例1-2】采用模塊結(jié)構(gòu),改寫例1-1的程序。add(intx,inty,intz){return(x+y+z);}
main(){intx,y,z;printf("PleaseInputThreeIntegers:\n");scanf("%d,%d,%d",&x,&y,&z);printf("sum=%d\n",add(x,y,z));}函數(shù)add()主函數(shù)main()調(diào)用函數(shù)add()
……函數(shù)1主函數(shù)main()函數(shù)2函數(shù)k注意:每個C程序必定有一個、而且只能有一個主函數(shù)main()。
主函數(shù)可以調(diào)用其它子函數(shù),而子函數(shù)不可以調(diào)用主函數(shù),子函數(shù)彼此之間也可以相互調(diào)用。C程序的組成
,當一個語句分幾行書寫時,在換行前應加上“\”符,然后從下一行的開頭繼續(xù)。2.習慣上,書寫C程序時均使用小寫英文字母。3.C程序一般都采用縮進格式的書寫方法,不同結(jié)構(gòu)層次的語句,從不同的起始位置開始,同一結(jié)構(gòu)層次中的語句,縮進同樣個數(shù)的字符位置。4.應當在程序中適當?shù)靥砑右恍┳⑨屝小?.3C程序的編輯、調(diào)試和運行編輯源程序
生成目標程序
經(jīng)編譯
經(jīng)連接庫修改源程序函數(shù)
生成exe文件
運行運行時出錯編譯出錯第1章結(jié)束
第2章
數(shù)據(jù)類型、運算符和表達式
學習目標1.掌握基本數(shù)據(jù)類型的概念和常量表示方法,掌握變量的定義方法,能夠根據(jù)實際情況選用適當?shù)臄?shù)據(jù)類型2.熟練掌握數(shù)值表達式的構(gòu)造方法,能夠利用表達式完成數(shù)值計算主要內(nèi)容C數(shù)據(jù)類型概述常量和變量算術(shù)運算表達式賦值表達式自增、自減表達式2.1概述C語言支持的數(shù)據(jù)類型基本數(shù)據(jù)類型整型單精度型主要數(shù)據(jù)類型構(gòu)造數(shù)據(jù)類型指針類型實型字符型數(shù)組類型結(jié)構(gòu)體類型雙精度型基本數(shù)據(jù)類型說明符整型:intlong字符型:char實型:floatdoublelongdouble2.2常量常量∶在程序運行過程中,其值不能被改變的量。
一.不同數(shù)制整型常量的表示例如:12:十進制數(shù)12012:八進制數(shù)12(等于十進制數(shù)10,用前導符0表示八進制數(shù)常量)0x12:十六進制數(shù)12(等于十進制數(shù)18,用前導符0X或0x表示十六進制數(shù)常量)用‘’括起來的可顯示字符,如∶‘A’、‘$’、‘3’等(轉(zhuǎn)義字符除外)2.用八進制數(shù)表示其ASC代碼的字符,如‘\101’表示西文字符A、‘\63’表示數(shù)字字符3。3.用十六進制數(shù)表示其ASC代碼的字符,如:‘\x41’表示西文字符A、‘\x2A’表示字符*。4.用‘\’’表示字符’,‘\”’表示字符”,‘\\’表示字符\。5.用雙引號括起來的字符序列表示字符串常量,其中最后一個字符是字符串結(jié)束符‘\0’,不顯式地表示出來。如:“English”?!纠?-1】常量的例子main(){floatr;printf("PleaseInputRadius:\n");scanf("%f",&r);printf("TheCircumferenceofCirle:%f\n",2*3.1415926*r);}定義浮點型變量r人機對話,通知用戶輸入半徑的值從鍵盤輸入半徑的值,并將值賦給變量r顯示結(jié)果常量2常量三.符號常量
可以用#define命令定義符號常量,在程序的執(zhí)行過程中不允許改變符號常量的值?!纠?-2】說明符號常量的例子#definePRICE30main(){intnum,total;
num=10;total=num*PRICE;printf("total=%d",total);}通過#include定義符號常量PRICE為30定義二個整型變量num和total使變量num的值為10執(zhí)行運算10×30并把運算的結(jié)果賦予變量total顯示結(jié)果2.3變量的定義和初始化變量:在程序運行時,其值可變的量被稱為變量,分為整型變量、實型變量和字符型變量一.C語言中的標識符C語言把用戶給常量、變量、函數(shù)、標號和其它對象所起的名字統(tǒng)稱為標識符。用戶定義的標識符須遵循如下規(guī)則:標識符只能由字母、數(shù)字和下劃線三種字符組成,且第一個字符必須為字母或下劃線,標識符的長度不超過32個字符。同時,C語言的關(guān)鍵字和庫函數(shù)名不能作為標識符。例如,下面的字符序列均為合法的C語言標識符:a,b,word,_file,file2,F(xiàn)_name,f_name注意:C編譯程序字母區(qū)分大小寫,所以上述F_name和f_name是二個不同的標識符。下面的字符序列為不合法的C語言標識符:2L──違反了標識符第一個字符必須為字母或下劃線的規(guī)定。a**──違反了標識符只能由字母、數(shù)字和下劃線三種字符組成的規(guī)定。int──違反了C語言的關(guān)鍵字和庫函數(shù)名不能作為標識符的規(guī)定。
二.變量分類有符號整型說明符無符號整型說明符整型intsigned?signedintunsignedunsigned?int長整型longlong?intsigned?longsigned?longintunsigned?longunsigned?longint
有符號整型無符號整型占字節(jié)數(shù)整型int-32768~32767unsigned0~655352字節(jié)長整型long-231~(231-1)
unsigned?long0~4,294,967,2954字節(jié)整型變量的值域Longdouble取值(絕對值)范圍占字節(jié)數(shù)10-4931~104932
單精度型雙精度型10-37~10384float
double10-307~10308
浮點型說明符816說明符取值范圍(字符的ASC碼值)占字節(jié)數(shù)char0~2551在設計程序時,應當根據(jù)數(shù)據(jù)本身的特點和變化范圍正確選擇變量類型。
變量的定義格式:
類型說明符變量名表
;
int、unsigned、long、float、double、char等變量名只能由字母、數(shù)字和下劃線三種字符組成,且第一個字符必須為字母或下劃線。例如,語句:inta1,a2,age;
floatx,y,z;
charch;分別定義了整型變量a1,a2,age,浮點型變量x,y,z和字符型變量ch。變量的初始化:
在定義變量的同時對變量預先設置初值。例如,執(zhí)行語句:
intnum=20;floatpi=3.14;charc1,c2='M';變量num、pi、c2的初值分別為20、3.14和字符M。四.各類數(shù)值型數(shù)據(jù)間的混合運算高doublefloat
longunsigned
低intchar當各種不同類型的數(shù)據(jù)混合運算時,其運算結(jié)果的類型由上圖所示的類型轉(zhuǎn)換原則確定?!纠?-3】設程序中定義變量:inti;floatf;doubled;
執(zhí)行運算:i+(f*d)-(f+i)(這里的*表示乘法)下圖給出了在運算過程中所發(fā)生的數(shù)據(jù)類型的轉(zhuǎn)換i+(f*d)-(f+i)
doubledoubledouble
doubledouble
double
doubledouble
double2.4算術(shù)運算符和算術(shù)運算表達式一.算術(shù)運算符算術(shù)運算符包括:
+(加)-(減)*(乘)/(除)%(求余)
操作符%只作用于整數(shù)x%y的值就是x除以y的余數(shù)。操作符/的兩種含義:整數(shù)除法(整除)
當被除數(shù)和除數(shù)都是整型數(shù)據(jù)時,“\”運算的結(jié)果為整型。
例如:5/2的值為2(而不是2.5)實數(shù)除法
當被除數(shù)和除數(shù)中至少有一個是實數(shù)型數(shù)據(jù)時,“\”運算的結(jié)果為實數(shù)型。
用算術(shù)運算符和括號將運算對象連接起來、并符合C語言語法規(guī)則的式子,稱為算術(shù)運算表達式或算術(shù)表達式。例如:設r、x、y是已經(jīng)定義的數(shù)值型變量,則:3.14*r*r、x+2*y-3/z、(x-y)*(x-y/2)均是合法的算術(shù)運算表達式,單獨的r、x、y也是合法的算術(shù)運算表達式。實際上,單獨的常量或變量是最簡單的算術(shù)運算表達式。注意:算術(shù)運算表達式中的分數(shù)線須用/表示
例如:2+3×i
k×j
表示為C語言表達式就是:
(2+3*i)/(k*j)或(2+3*i)/k/jC程序中,稱表達式的運算結(jié)果為表達式的值。C語言規(guī)定,在表達式求值時,須按運算符優(yōu)先級的高低次序執(zhí)行。對算術(shù)運算而言,必須遵循先括號內(nèi)后括號外,先乘、除及求余運算,后加減的運算優(yōu)先級規(guī)則。C語言規(guī)定了運算符二種不同的結(jié)合方向:左結(jié)合:當參于運算的數(shù)據(jù)兩側(cè)的運算符優(yōu)先級相同時,運算順序為自左至右。C語言規(guī)定算術(shù)運算符遵循左結(jié)合的規(guī)則。例如,計算算術(shù)運算表達式a+b-c時,運算符“+”和“–”具有相同的優(yōu)先級,所以先執(zhí)行
a+b,其結(jié)果再和c相減。右結(jié)合:當參于運算的數(shù)據(jù)兩側(cè)的運算符優(yōu)先級相同時,運算順序為自右向左。
C語言提供的運算符中有少量運算符遵循右結(jié)合的規(guī)則。教材的附錄部分列出了C語言中所有運算符以及它們的優(yōu)先級和結(jié)合性。2.5賦值運算符與賦值運算表達式賦值符號“=”就是賦值運算符,它的作用是將一個數(shù)據(jù)賦給一個變量。例如:執(zhí)行程序段inta;a=3;a=a-5;當執(zhí)行語句“a=3;”就完成一次賦值運算,把賦值運算符右邊的值3賦給賦值運算符左邊的變量a,賦值后,a的值為3。再執(zhí)行語句“a=a-5;”,賦值運算符右邊的表達式a-5的運算結(jié)果為-2,將-2賦給a。最后,變量a的值變?yōu)?2。復合的賦值運算符復合的賦值運算符的格式:算術(shù)運算符=所以,+=、-=、*=、/=、%=都是復合的賦值運算符。將一個變量通過賦值運算符或復合的賦值運算符與一個表達式連接而成的式子稱為賦值運算表達式。賦值運算表達式的格式為:變量名=表達式或變量名復合的賦值運算符表達式例如:x=1.414,m1='E',s=3.14159*r*r或a+=5,x/=a+1上述各例都是合法的賦值運算表達式。賦值運算表達式的作用是把賦值運算符右邊表達式的值賦給賦值運算符左邊的變量。當算術(shù)運算符和賦值運算符同時出現(xiàn)在一個表達式中時,算術(shù)運算符的優(yōu)先級高于賦值運算符。C語言允許賦值運算表達式中的表達式部分還是一個賦值表達式,這樣就構(gòu)成了多重賦值。多重賦值表達式中,賦值運算符遵循右結(jié)合的法則,即:自右向左的運算順序。例如:多重賦值語句a=b=c=x+8;在執(zhí)行時等價于依次執(zhí)行三個語句:c=x+8;b=c;a=b;將一個變量通過復合的賦值運算符與一個表達式連接而成的式子同樣稱為賦值運算表達式。例如:a+=5,x/=a+1
下面的例子說明了復合的賦值運算符的運算規(guī)則。表達式a+=5等價于a=a+5表達式a*=4-b等價于a=a*(4-b)表達式a%=b-1等價于a=a%(b-1)注意:
復合的賦值運算符右邊的表達式是作為一個整體參與其左邊算術(shù)運算符所規(guī)定的運算的?!纠?-4】賦值運算表達式舉例1)y=3*(x-1);/*將3*(x-1)的結(jié)果賦值給變量y。*/2)a=(b=4)+(c=6);/*這里的賦值運算表達式(b=4)、(c=6)參于算術(shù)運算,C言規(guī)定,將賦值運算符右邊表達式的值作為賦值運算表達式的值。所以,賦值運算表達式(b=4)的值為4,(c=6)的值為6,最后將它們的和賦值給變量a,由于算術(shù)運算符的優(yōu)先級高于賦值運算符,所以表達式中的括號是必須的。*/3)a+=a*=a+2;/*這里的語句等價于:a=a*(a+2);a=a+a;*/字符型數(shù)據(jù)的值在內(nèi)存表現(xiàn)為它們的ASC代碼值(0--255之間的一個整數(shù))2.字符常量以其ASC代碼值參與整數(shù)運算。
如:‘A’+2的值為67字符A的ASC碼值為65【例2-5】字符型變量參與算術(shù)運算main(){inta;chari;a='B'-1;i=a+10;printf("a:%d,a:%c\n",a,a);printf("i:%d,i:%c\n",i,i);}以字符格式輸出變量a的值結(jié)果為字符A以整型格式輸出變量a的值結(jié)果為67【例2-6】大小寫字母的轉(zhuǎn)換
main(){charc1='a',c2='B';c1=c1-32;c2=c2+32;printf("c1:%c,c2%c",c1,c2);}大小寫英文字母的ASC碼值相差322.6自增、自減運算符++、--功能:(設i為整型變量)++i:在使用i之前,先執(zhí)行i+=1,使i的值加1。--i:在使用i之前,先執(zhí)行i-=1,使i的值減1。i++:在使用i之后,執(zhí)行i+=1,使i的值加1。i--:在使用i之后,執(zhí)行i-=1,使i的值減1。上述“使用”指的是i加1或減1前后的其他操作,如賦值、運算、顯示等。若不存在其它操作,則i++與++i一樣,執(zhí)行i+=1,使i的值加1;i--與--i一樣,執(zhí)行i-=1,使i的值減1?!纠?-7】自加、自減運算符的應用。main(){inti=10,j;floatpi=3.14,pa;j=i++;pa=++pi;printf("j=%d,pa=%f\n",j,pa);printf("i=%d,pi=%f\n",i++,--pi);}先將i的值賦給變量j再執(zhí)行i+=1;先執(zhí)行pi+=1;再將pi的值賦給變量pa先將i的值輸出再執(zhí)行i+=1;先執(zhí)行pi-=1;再將pi的值輸出2.7位運算符
位運算以字節(jié)(byte)中的每一個二進位(bit)為運算對象,最終的運算結(jié)果是整型數(shù)據(jù)。位運算分為按位邏輯運算和移位運算。
按位邏輯運算符包括:按位邏輯與運算符:“&”按位邏輯或運算符:“|”按位邏輯非運算符:“~”按位邏輯異或運算符:“^”運算法則設用x、y表示字節(jié)中的二進位,取值為0或1。按位邏輯運算符的運算法則為:
按位邏輯與運算:x&y的結(jié)果為1,當且僅當x、y均為1,否則x&y的結(jié)果為0。按位邏輯或運算:x|y的結(jié)果為0,當且僅當x、y均為0,否則x|y的結(jié)果為1。按位邏輯異或運算:x^y的結(jié)果為1,當且僅當x、y的值不相同,否則x^y的結(jié)果為0。按位邏輯非運算:當x=1時,~x=0,而當x=0時,~x=1。
位運算表達式的格式:整型變量名運算符(&、|、^)整型變量名或~整型變量名【例2-8】位運算符的應用設有:inta=55,b=36;計算:a&b、a|b、a^b及~a的結(jié)果。假定每個整型變量占二個字節(jié)(16bit),則在內(nèi)存中的二進制數(shù)a、b為:a:0000000000110111b:0000000000100100按上述按位運算的法則,列出下述算式:
a&b:a|b:00000000001101110000000000110111&0000000000100100|000000000010010000000000001001000000000000110111
a^b:00000000001101110000000000100100a:0000000000110111^0000000000100100~a:11111111110010000000000000010011結(jié)果:a&b=24,a|b=37a^b=13,~a=ffc8(用十六進制表示)
C語言提供的移位運算實現(xiàn)將整數(shù)數(shù)據(jù)按二進位右移或左移的功能。向右移位運算符:“>>”,向左移位運算符:“<<”。移位運算表達式的格式:整型變量名移位運算符整型常量其中,整型常量指出右移或左移的位數(shù)?!纠?-9】移位運算符的應用設定義inta=55,b=36;計算(a+b)>>2、(a-b)<<3的結(jié)果。a+b和a-b的結(jié)果91和19在內(nèi)存中的二進制數(shù)分別為:
a+b:0000000001011011和a-b:0000000000010011a+b:0000000001011011(a+b)>>2:00000000010110左邊補0
結(jié)果:0000000000010110a-b:0000000000010011(a-b)<<3:0000000010011右邊補0結(jié)果:00000000100110002.8其他運算符和表達式
C語言提供的強制類型轉(zhuǎn)換運算符可以將一個表達式轉(zhuǎn)換成指定的數(shù)據(jù)類型。格式:(類型說明符)(表達式)例如:(double)(x+y)/*將表達式x+y的結(jié)果轉(zhuǎn)換成雙精度型*/(int)a/*將變量a的值轉(zhuǎn)換成int類型*/【例2-10】強制類型轉(zhuǎn)換運算符的使用main(){floatx=3.6,y=6.6;printf("x+y=%f\n",x+y);printf("x+y=%f\n",(int)x+(int)y);}將x的值強制轉(zhuǎn)換成整型值3將y的值強制轉(zhuǎn)換成整型值6
C語言通過逗號運算符“,”將兩個以上的表達式連接起來,組成逗號表達式。逗號表達式的一般格式:表達式1,表達式2,……,表達式k逗號表達式的運算:
依次求表達式1、表達式2、……、表達式k的值,并以最后一個表達式k的值作為整個逗號表達式的值。
例如,語句:x=(a=3,6*3);等價于:a=3;x=6*3;x=6*3;將表達式6*3的結(jié)果作為整個逗號表達式的值第2章結(jié)束
第3章
C程序中的輸入、輸出
學習目標
對C語言的輸入、輸出有一個初步的了解,學會使用scanf()、printf()函數(shù)實現(xiàn)整型、浮點型和字符型數(shù)據(jù)的輸入、輸出。主要內(nèi)容·C語言的輸入、輸出·printf()函數(shù)·scanf()函數(shù)·getchar()函數(shù)和putchar()函數(shù)3.1概述C語言中沒有輸入、輸出語句,通過調(diào)用庫函數(shù)中的輸入、輸出函數(shù)printf()、scanf()、getchar()和putchar()實現(xiàn)輸入、輸出。在使用輸入、輸出函數(shù)時,應當在源程序的開始處使用#include<stdio.h>命令將輸入、輸出函數(shù)的頭文件包含進來,以便在編譯時實現(xiàn)連接。一.格式輸出函數(shù)printf()函數(shù)功能∶從指定的輸出設備輸出數(shù)據(jù),默認的輸出設備為顯示器。使用格式∶
printf(格式控制,輸出表列)由格式控制符%和格式字符實現(xiàn)表達式3.2格式輸入、輸出函數(shù)scanf()和printf()
格式控制的內(nèi)容這部分是用雙引號括起來的字符串,其中包含兩種信息:格式說明:由%和格式字符組成。如%d、%f、
%f等,它們的作用是將待輸出的數(shù)據(jù)按指定的格式輸出。普通字符:即需要按原樣輸出的字符。例如,語句:
printf("TotalNumberis%d,Priceis%f\n",total,price);中的TotalNumberis
、Priceis●輸出表列部分:這部分是需要輸出的數(shù)據(jù)值,通常是表達式,如上例中的total、price。
常用的printf()格式字符
格式字符說明c(*)以字符形式輸出,只輸出一個字符d(*)以帶符號的十進制形式輸出整數(shù)(正數(shù)不輸出符號)e或,E以指數(shù)形式輸出實數(shù),數(shù)字部分小數(shù)位數(shù)為6位f(*)以小數(shù)形式輸出單、雙精度數(shù),隱含輸出6位小數(shù)l用于長整型數(shù)據(jù),可加在格式符d,o,x,u前面
當于∶2.5×10-3如∶%ld,%lo,%lx等接上頁格式字符說明o以八進制無符號形式輸出整數(shù)(不輸出前導符0)s(*)輸出字符串u以無符號十進制形式輸出整數(shù)x或X以十六進制無符號形式輸出整數(shù)(不輸出前導符0x),用x則輸出十六進制數(shù)的a~f以小數(shù)形式,用X時,則用大寫字母輸出【例3-1】輸出格式控制符的應用main(){intx=35;floaty=123.456;charch='A';printf("x=%d\n",x);printf("y=%f\n",y);printf("y=%10.2f\n",y);printf("y=%-10.2f\n",y);printf("ch=\'%c\'\n",ch);printf("String:\"%s\"\n","Shanghai");}以整數(shù)格式輸出表達式x的值\n為轉(zhuǎn)義字符,輸出時將光標移到下一行的開始處按原樣輸出字符串String%-m.nf與%m.n相似,只是在其右邊以空格補足不足部分。
%m.nf表示以小數(shù)形式輸出,輸出結(jié)果共占m位,其中小數(shù)部分占n位。如果輸出結(jié)果不足m個字符,則在其左邊以空格補足。
格式轉(zhuǎn)義字符
字符形式功
能\n(*)換行\(zhòng)t(*)橫向跳格(即跳到下一個輸出區(qū))\v豎向跳格\b退格\r回車\”(*)雙引號字符\\(*)反斜杠字符“\”\’(*)單引號字符\ddd1到3位8進制數(shù)所代表的字符\xhh1到2位16進制數(shù)所代表的字符
【例3-2】轉(zhuǎn)義字符的應用main(){printf("Chinese\tEnglish\n");printf("\"Welcome,friends!\"\n");printf("\101,\x41\n");}轉(zhuǎn)義字符'\t'使字符串"English“輸出到第2個輸出區(qū)
轉(zhuǎn)義字符\”用以輸出雙引號字符。
\101以八進制形式給出大寫字母A的ASC碼值65。\x41以十六進制形式給出大寫字母A的ASC碼值65。
二.格式輸入函數(shù)scanf()
功能∶從鍵盤輸入數(shù)據(jù),并存入相應變量的存儲單元。使用格式∶
scanf(格式控制,地址表)與printf()函數(shù)的格式控制類似,以%d%f,%c,%s為最常用由取地址運算符“&”取出變量的存儲單元的起始地址
格式字符說明
c用以輸入單個字符d用以輸入有符號的十進制整數(shù)f用以輸入實數(shù),可以用小數(shù)形式或指數(shù)形式輸入L用以輸入長整型數(shù)據(jù)以及double型數(shù)據(jù)o用以輸入無符號的八進制整數(shù)s用以輸入字符串,將字符串送到一個字符數(shù)組中,在輸入時以非空白字符開始,以第一個空白字符結(jié)束。字符串以串結(jié)束標志’\0’作為其最后一個字符u用以輸入無符號的十進制整數(shù)x或X用來輸入無符號的十六進制整數(shù)(大小寫作用相同)*表示本輸入項在讀入后不賦給相應的變量域?qū)捴付ㄝ斎霐?shù)據(jù)所占寬度(列數(shù)),域?qū)拺獮檎麛?shù)常用的scanf()格式字符表
【例3-3】輸入格式控制符的應用main(){inta,b;floatc,d;chare;scanf("%d%d",&a,&b);scanf("%f,%f",&c,&d);scanf("%c",&e);printf("%d+%d=%d\n",a,b,a+b);printf("%f-%f=%f\n",c,d,c-d);printf("%c\n",e);}當二個%d之間沒有分隔符時,相應的二個輸入數(shù)據(jù)之間也必須用空格分隔當二個%f之間用逗號分隔時,相應的二個輸入數(shù)據(jù)之間也必須用逗號分隔3.3字符輸入、輸出函數(shù)getchar()和putchar()一.字符輸出函數(shù)putchar()putchar()函數(shù)用以輸出字符變量的值。調(diào)用putchar()函數(shù)的一般格式:
putchar(整型表達式);其中,“整型表達式”的值應當在字符ASC碼值的范圍內(nèi)。通常,putchar()的參數(shù)是字符型變量、字符常量,也可以是整型變量、整型常量。【例3-4】字符輸出函數(shù)putchar()的應用
#include<stdio.h>main(){chara='C';inti=97;putchar(a);putchar(b);putchar('t');}將變量或表達式的值以字符格式輸出使用putchar()函數(shù),必須用命令“#include”將標準輸入輸出函數(shù)的頭文件“stdio.h”包含到用戶的源文件中
二.getchar()函數(shù)功能:getchar()函數(shù)用以從鍵盤上輸入一個字符。調(diào)用getchar()函數(shù)的一般格式:getchar()【例3-5】字符輸入函數(shù)getchar()的使用
#include<stdio.h>main(){charch;ch=getchar();putchar(ch);putchar(getchar());}由getchar()函數(shù)從鍵盤輸入一個字符,并立即由putchar()函數(shù)將其輸出使用getchar()函數(shù),必須用命令“#include”將標準輸入輸出函數(shù)的頭文件“stdio.h”包含到用戶的源文件中
第3章結(jié)束
第4章
C程序的控制結(jié)構(gòu)
學習目標熟練掌握if語句,掌握switch語句,會利用這兩種語句進行條件分支結(jié)構(gòu)的程序設計。熟練掌握for語句、while語句和do…while語句,會利用這三種語句進行循環(huán)結(jié)構(gòu)的程序設計。掌握break語句和continue語句與上述語句配合使用的方法。主要內(nèi)容程序算法的概念順序結(jié)構(gòu)分支結(jié)構(gòu)循環(huán)結(jié)構(gòu)
4.1程序算法簡介計算機科學家沃思提出公式:
數(shù)據(jù)結(jié)構(gòu)+算法=程序
數(shù)據(jù)結(jié)構(gòu)──對數(shù)據(jù)的描述。如前面所介紹的各種數(shù)據(jù)類型就是最簡單的數(shù)據(jù)結(jié)構(gòu)。
算法──對操作的描述,是為解決一個問題而采取的方法和步驟。通常用流程圖表示算法。
計算1+2+3+4+…+100可以二種不同的算法:算法一:先作1+2,再加3,再加4,一直加到100,最后得到結(jié)果:5050。算法二:利用等差數(shù)列求和公式:n(n+1)21+2+3+……+n=
比較算法一和算法二:
算法二不具有普遍性,許多級數(shù)求和問題是不能簡單地用公式表示的,如:cos1+cos2+cos3+……+cosn算法一所反復實施的是二個數(shù)的加法運算:1、1+2、(1+2)+3、(1+2+3)+4、……、(1+2+3+……+99)+100這種看似枯燥、單一,反復實施的運算利用C語言提供的選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)卻是很容易實現(xiàn)的,而且這一算法適用于不同的級數(shù)求和問題。由于計算機具有極高的運算速度,這樣的程序結(jié)構(gòu)恰好發(fā)揮了計算機的特長。結(jié)論:對計算機而言,算法一優(yōu)于算法二。選擇一個好的算法是設計出高質(zhì)量程序的前提?!纠?-1】為計算1+2+3+……+n設計一個算法,其中n的值由鍵盤輸入步驟1:從鍵盤輸入n的值步驟2:0sum(使變量sum具有初值0)步驟3:1i(使變量i具有初值1)步驟4:sum+isum(用sum+i的值取代sum原來的值)步驟5:i+1i(使變量i的值增1)步驟6:若i≤n,再返回到步驟4,否則結(jié)束。說明:算法中,步驟4到步驟6組成一個循環(huán),最后的計算結(jié)果存放在變量sum中。上述算法中的每一個步驟都可以用C語言來描述,并最終成為一個完整的C程序。
二.算法的表示算法用流程圖來表示。所謂流程圖就是用一些圖框表示各種操作,形象直觀,易于理解。
常用的流程圖符號:或開始、結(jié)束框輸入、輸出框處理框判斷框流程線按算法一計算1+2+3+……..+n的流程圖,其中n的值由鍵盤輸入。
開始輸入n0sum1isum+ifaci+1ii≤n?y輸出sumn結(jié)束返回三.算法的特性有窮性:一個算法所包含的操作步驟必須是有限的。2.確定性:指算法中的每一個步驟的含義必須是明確的,不能有二義性。3.由零個或多個輸入:如果算法中的n是已知的數(shù)據(jù),而不是來自外部,可以沒有輸入。4.有一個或多個輸出:通過輸出了解算法的結(jié)果。5.有效性:算法中的每一個步驟都應當是可以被執(zhí)行的,并能得到確定的結(jié)果。4.2順序結(jié)構(gòu)
語句1語句2
順序結(jié)構(gòu):順序結(jié)構(gòu)是最簡單的程序結(jié)構(gòu),在執(zhí)行時,按語句的先后次序依次執(zhí)行,直至結(jié)束?!纠?-2】編寫程序,要求從鍵盤輸入圓的半徑r,計算圓的面積s和周長l
main(){floats,l,r;printf("PleaseInputr");scanf("%f",&r);s=PI*r*r;l=2*PI*r;printf("r=%f,s=%f,l=%f\n",r,s,l);}將r2表示為r*r或用函數(shù)表示為∶pow(r,2)定義符號常量【例4-3】從鍵盤上輸入一個三位正整數(shù),然后逆序輸出main(){inta,b;scanf("%d",&a);b=a%10;a/=10;printf("%d",b);b=a%10;printf("%d",b);a/=10;printf("%d\n",a);}
取出個位數(shù)得到由百位數(shù)數(shù)字和個位數(shù)數(shù)字組成的二位數(shù)4.3關(guān)系運算符和關(guān)系運算表達式
關(guān)系運算符用于表達式之間的比較:大于比較運算符:>小于比較運算符:<大于等于比較運算符:>=小于等于比較運算符:<=等于比較運算符:==不等于比較運算符:!=關(guān)系運算符按運算優(yōu)先級可分為二組:>、<、>=、<=具有相同的運算優(yōu)先級,==和!=具有相同的運算優(yōu)先級。后一組的運算優(yōu)先級又低于前一組。同優(yōu)先級的關(guān)系運算符遵循左結(jié)合──自左至右的結(jié)合方向。二.關(guān)系運算表達式
二個表達式通過關(guān)系運算符連接而成為關(guān)系運算表達式。
關(guān)系運算表達式的一般形式為:
<表達式1><關(guān)系運算符><表達式2>
例如:
c>a+b、a!=2、-5<=b-c都是合法的關(guān)系
運算表達式。
關(guān)系運算表達式的結(jié)果為邏輯值。
1(表示“真”)──當關(guān)系運算表達式成立時(True)。邏輯值=0(表示“假”)──當關(guān)系運算表達式不成立時(False)。
關(guān)系運算符的優(yōu)先級高算術(shù)運算符:+-*/%
關(guān)系運算符:><>=<=關(guān)系運算符:==!=低
賦值運算符:=+=-=*=/=%=【例4-4】設:a=3,b=4,c=5,判斷下列各關(guān)系運算表達式的結(jié)果。
x=b>a
由于關(guān)系運算符優(yōu)先于賦值運算符,所以原式等價于x=(b>a),由題設可知b>a成立,結(jié)果為1,故最后執(zhí)行賦值運算x=1。(2)a!=b>=c
由于關(guān)系運算符!=的運算優(yōu)先級低于關(guān)系運算符>=,所以原式等價于a!=(b>=c),由題設可知b>=c不成立,結(jié)果為0,原式可化為a!=0,由題設可知a!=0成立,結(jié)果為1。(3)(a>b)>(b<c)由題設可知,a>b不成立,結(jié)果為0,b<c成立,結(jié)果為1,原式可化為0>1,其結(jié)果為0。(4)f=a<b<c由于同優(yōu)先級的關(guān)系運算符遵循自左至右的結(jié)合方向,故原式等價于:f=((a<b)<c),由題設可知,a<b的結(jié)果為1,(a<b)<c的結(jié)果為1,最后執(zhí)行賦值運算:f=1。4.4邏輯運算符和邏輯運算表達式
邏輯運算符包括∶
!
(邏輯非運算)
&&
(邏輯與運算)
||
(邏輯或運算)
邏輯表達式∶
用邏輯運算符連接而成的表達式。邏輯運算的結(jié)果為邏輯值,以1表示“真”(true),以0表示“假”(false)。高
邏輯運算符:!
算術(shù)運算符:+、-、*、/、%
關(guān)系運算符:>、<、>=、<=
關(guān)系運算符:==、!=
邏輯運算符:&&、||低
賦值運算符:=、+=、-=、*=、/=、n%=運算符的優(yōu)先級:注意:
C++允許算術(shù)運算表達式參與邏輯運算,在參與邏輯運算時,一切非零值均作為邏輯值1,而將零值作為邏輯值0。邏輯運算法則:
(設A,B是參與邏輯運算的二個量)邏輯“與”運算法則:(運算符:&&)
A&&B的結(jié)果為1,當且僅當A,B的值均為非0,否則,A&&B的結(jié)果為0。
例如:1&&0的結(jié)果為0-5&&3.14的結(jié)果為10&&0的結(jié)果為0邏輯“或”運算法則:(運算符:||)A||B的結(jié)果為0,當且僅當A、B的值均為0,否則,A||B的結(jié)果為1。例如:1||0的結(jié)果為1-5||3.14的結(jié)果為10||0的結(jié)果為0
邏輯“非”運算法則:(運算符:!)!A的結(jié)果為0,當且僅當A的值為非0,否則,!A的結(jié)果為1。例如:!0的結(jié)果為1!3.14的結(jié)果為0【例4-5】設inta=3,b=4,c=5;判斷下列表達式的值:
說明:由于邏輯與、或運算的優(yōu)先級低于關(guān)系運算符,故將下列各式中的括號去除后對結(jié)果沒有影響。(1)(a>b)||(c>a)由題設可知,原式等于0||1,結(jié)果為1。(2)(!c<a)&&(b>a)||(b<a)由題設可知,原式等于(!5<3)&&(4>3)||(4<3)由于邏輯非運算的優(yōu)先級高于關(guān)系運算符,而!5的值為0,故原式又等于(0<3)&&(4>3)||(4<3)也即是:1&&1||0,按自左向右的結(jié)合方向,最后結(jié)果為1。【例4-6】設inta=3,b=4,c=5;判斷表達式a=(b=!a)&&(c=b)的值。原表達式等價于a=((b=!a)&&(c=b))。C語言規(guī)定:
在執(zhí)行“&&”運算時,如果“&&”運算符左邊表達式的值為0,則已經(jīng)可以確定“&&”運算的結(jié)果一定為0,故不再執(zhí)行“&&”運算符右邊表達式規(guī)定的運算。類似地,在執(zhí)行“||”運算時,如果“||”運算符左邊表達式的值為1,則已經(jīng)可以確定“||”運算的結(jié)果一定為1,故不再執(zhí)行“||”運算符右邊表達式規(guī)定的運算。
由題設可知,!a的值為0,故賦值運算表達式b=!a的值為0,按C語言規(guī)定,賦值運算表達式(c=b)將不被執(zhí)行,c的值還是5,b的值為0,由于邏輯運算表達式(b=!a)&&(c=b)的值為0,故a的值為0,整個賦值運算表達式為0。
邏輯表達式的應用舉例1.數(shù)學中的1≤x<5,并且x≠3可用邏輯表達式表示為:x>=1&&x<5&&x!=3;2.x是3的倍數(shù)或5的倍數(shù),可用邏輯表達式表示為:x%3==0||x%5==0;4.5選擇結(jié)構(gòu)在許多場合,需要根據(jù)不同的情況執(zhí)行不同的語句。稱這種程序結(jié)構(gòu)為選擇結(jié)構(gòu)。C語言提供的條件語句和開關(guān)語句可用于實現(xiàn)選擇結(jié)構(gòu)程序設計。
一.if語句和if…else…語句
if語句if語句的格式:
if(表達式)
語句
值為0值為非0表達式語句執(zhí)行時,首先計算表達式的值,若其值不為0(表示真),則執(zhí)行語句部分,否則,跳過語句部分,執(zhí)行其后面的語句
【例4-7】從鍵盤輸入實數(shù)a,輸出a的絕對值main(){floata;printf("Enterafloat\n");scanf("%f",&a);if(a<0)a=-a;printf("a=%f\n",a);}若a<0成立,執(zhí)行a=-a否則直接執(zhí)行printf語句【例4-8】從鍵盤輸入一個正整數(shù)n,如果n是一個三位數(shù),將其逆序輸出,否則,直接結(jié)束。
main(){inta,b;scanf("%d",&a);if((a>=100)&&(a<1000))printf("TheEnd\n");}{b=a%10;a/=10;printf("%d",b);b=a%10;printf("%d",b),a/=10;printf("%d\n",a);}復合語句取出個位數(shù)字取出由百位數(shù)字和十位數(shù)字構(gòu)成的二位數(shù)
if……else……語句
if……else……語句的格式:if(表達式)
語句1
else
語句2值為非0值為0表達式語句1語句2執(zhí)行時,首先計算表達式的值,若其值不為0,則執(zhí)行語句1,否則,執(zhí)行語句2。語句1和語句2必定有一個、而且只能有一個被執(zhí)行。之后,執(zhí)行其后續(xù)語句。
【例4-9】從鍵盤上輸入兩個整數(shù)a和b,按先大后小的順序輸出。main(){inta,b;printf("Pleaseentertwointegers\n");scanf("%d,%d",&a,&b);if(a>b)printf("MAX=%d,MIN=%d,\n",a,b);elseprintf("MAX=%d,MIN=%d,\n",b,a);}a>b成立,執(zhí)行這一語句a>b不成立,執(zhí)行這一語句例4.10輸入a,b,c,利用求根公式求一元二次方程ax2+bx+c=0的根。流程圖:開始輸入a,b,c計算b*b-4*a*c并賦值給變量deltadelta>=0?計算:sqrt(delta)并將結(jié)果賦給變量delta輸出實根結(jié)束計算:sqrt(-delta)并將結(jié)果賦給變量delta輸出復根開始輸入a,b,c計算b*b-4*a*c并賦值給變量delta
delt>=0?YesNo計算:sqrt(delta)并將結(jié)果賦給變量delta輸出實根計算:sqrt(-delta)并將結(jié)果賦給變量delta輸出復根結(jié)束#include<math.h>main(){floata,b,c;floatx1,x2,delta;printf("PleaseInputa,b,c:");scanf("%f,%f,%f",&a,&b,&c);delta=b*b-4*a*c;if(delta>=0){delta=sqrt(delta);printf("x1=%f,",(-b+delta)/(2*a));printf("x2=%f\n",(-b-delta)/(2*a));}else{delta=sqrt(-delta);printf("x1=%f+%fi\n",-b/(2*a),delta/(2*a));printf("x1=%f-%fi\n",-b/(2*a),delta/(2*a));}}程序:if與else配對,用以找出a、b中的大者【例4-11】編程求整數(shù)a、b、c中的最大者,a、b、c由鍵盤輸入。main(){inta,b,c,max;print{("Pleaseenterthreeintegers:\n");scanf("%d,%d,%d",&a,&b,&c);if(a>b)max=a;elsemax=b;if(max<c)max=c;printf("a=%d,b=%d,c=%d,MAX=%d\n",a,b,c,max);}條件運算符C語言提供了條件運算符“?:”。由條件運算符構(gòu)成的表達式稱為條件運算表達式。在某些情況下,條件語句if……else……可以用條件運算表達式來代替。條件運算表達式的格式:表達式1?表達式2:表達式3
執(zhí)行時,先判斷表達式1的值,如果其不為0,則以表達式2的值作為條件運算表達式的值,否則,以表達式3的值作為條件運算表達式的值。例如,賦值語句:y=x>0?10:-10;等價于:條件語句:if(x>0)y=10;elsey=-10;只有在if語句內(nèi)嵌的語句為賦值語句、且兩個分支都給同一個變量賦值時,才能用條件表達式代替if語句
【例4-12】從鍵盤輸入二個整數(shù),輸出其中的較大者。main(){inta,b;printf("Pleaseinputtwointegers:\n");scanf("%d,%d",&a,&b);printf("MAX=%d\n",(a>b)?a:b);}使用條件運算符使程序變得簡潔C語言允許在條件語句中又包含另一個條件語句,稱之為條件語句的嵌套。
在if語句中又嵌套了另一個if語句【例4-13】從鍵盤上輸入一個字符,判斷它是英文字母、數(shù)字或其它字符。輸入的是數(shù)字?輸入的是字母?顯示:是數(shù)字顯示:是字母顯示:是其它字符結(jié)束yesnoyesno流程簡圖:程序:#include<stdio.h>main(){charch;printf("Enteracharacter:");ch=getchar();if(ch>='0'&&ch<='9')printf("Thecharacterisadigit\n");elseif((ch>='A'&&ch<='Z')||((ch>='a'&&c<='z'))printf("Thecharacterisacaptalletter\n");elseprintf("Thecharacterisothercharacter\n");}【例4-14】修改例4-10的程序,要求在求解方程之前,先判斷輸入的二次項系數(shù)a是否為0,若為0,則輸出出錯信息。輸入a,b,c開始a≠0?其余部分請參閱圖4-6中的相應部分
顯示:Error!結(jié)束計算b*b-4*a*c并賦值給變量deltadelta>=0?其余部分請參閱圖4-6中的相應部分yesnoyesno流程圖:“if”和“else”的正確配對
復合語句和條件語句的嵌套結(jié)構(gòu)為解決一些較為復雜的編程問題提供了必要的條件。但同時也使程序的結(jié)構(gòu)變得復雜,不易讀懂。特別是在程序中有多個{}和if…else…的情況。在閱讀程序之前,必須能正確地將“{”和“}”配對、將“if”和“else”配對,使程序的結(jié)構(gòu)變得清晰和有條理?!癷f”和“else”配對應遵循下述規(guī)律:自上而下,“else”總是和上面離它最近的“if”配對。而且,每一個“else”只能和一個“if”配對。由于單獨的“if”也是條件語句,所以,允許無“else”配對的“if”單獨存在。同理,“{”和“}”配對應遵循下述規(guī)律:自上而下,“}”總是和上面離它最近的“{”配對?!纠?-15】如果變量x的值是-15,變量y的值是-10,則執(zhí)行下面的程序段后,屏幕上顯示的內(nèi)容是什么?if(x>0)if(x>10)printf("A");elseprintf("B");elseif(y<-8)if(y>-20)printf("C");elseprintf("D");printf("E");
為了看清程序結(jié)構(gòu),必須先將if和else正確配對。if(x>0)if(x>10)printf("A");elseprintf("B");elseif(y<-8)if(y>-20)printf("C");elseprintf("D");printf("E");if(x>0)if(x>10)printf("A");elseprintf("B");elseif(y<-8)if(y>-20)printf("C");elseprintf("D");printf("E");將if和else正確配對:該程序段采用了縮進格式,這種格式更容易反映出程序結(jié)構(gòu)。顯示:Ex>0
?x>10?顯示:A顯示:By<-8?
y>-20?顯示:C顯示:Dyesyesnonoyesnonoyes流程圖:switch語句的格式:
switch(整型表達式){
case整型常量表達式1:語句序列1〖break;〗
case整型常量表達式2:語句序列2〖break;〗……
case整型常量表達式k:語句序列k〖break;〗
〖default:語句序列k+1〗
}開關(guān)語句用于在程序中實現(xiàn)多路選擇。Yes語句序列1語句序列2有break?有break?語句序列k-1有break?語句序列k語句序列k+1開關(guān)語句之后的語句有break?開關(guān):整型表達式………YesYesYesnonononoSwitch語句的執(zhí)行流程:說明:
格式中的break語句不是必須的,應根據(jù)需要而
定。
格式中的default語句不是必須的,在缺省的情
況下,相當于語句序列k+1是空語句。
格式中的{}是必須的。(1)switch語句與if語句的不同之處在于:switch語句只能對整型(含字符型)表達式的值是否等于給定的值進行判斷,而if語句可以用于判斷各種表達式。(2)switch語句中,case后面只能是常量。(3)同一個switch語句中,任意兩個case后面的常量值不能相同。注意:【例4-16】編寫一個四則運算計算器程序,可以實現(xiàn)輸入二個數(shù)和一個四則運算符,輸出運算結(jié)果的功能。main(){floatoperandl,operand2,result;charoperator;scanf("%f,%c,%f",&operandl,&operator,&operand2);switch(operator){case'+':result=operandl+operand2;break;case'-':result=operandl一operand2;break;case'*':result=operandl*operand2;break;case'/':result=operandl/operand2;break;default:printf("Illegaloperator,error!\n");}printf("result=%f\n",result);}由operator的值決定執(zhí)行哪一個case語句執(zhí)行break語句后就結(jié)束switch語句【例4-17】用switch語句實現(xiàn)從鍵盤輸入成績,轉(zhuǎn)換成相應的等級后輸出(90-100為A,80-89為B,70-79為C,60-69為D,59及以下為E)。main(){intscore;printf("PleaseInputAScore:");scanf("%d",&score);printf("\n");switch(score/10){case10:case9:printf("%c\n",'A');break;case8:printf("%c\n",'B');break;case7:printf("%c\n",'C');break;case6:printf("%c\n",'D');break;default:printf("%
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2018年四川內(nèi)江中考滿分作文《我心中的英雄》15
- 2024年太原客運車資格證考試題庫及答案
- 關(guān)于少先隊競選演講稿模板集錦7篇
- 網(wǎng)格員出租房消防培訓
- 智能物流弱電系統(tǒng)施工合同
- 公園物業(yè)員工招聘合同
- 惠州市環(huán)保租賃合同
- 工業(yè)園區(qū)聘用電工勞務合同
- 滑坡治理工程錨桿格梁施工合同
- 寫字樓承臺施工合同
- 保健按摩師(高級)技能理論考試題庫(含答案)
- 2024冶金等工業(yè)企業(yè)較大以上安全風險目錄
- 公民科學素質(zhì)大賽參考試題庫600題(含答案)
- 期中模擬檢測(1-4單元)(試題)(含答案)-2024-2025學年四年級上冊數(shù)學北師大版
- 餐飲服務課件 學習任務3 西餐宴會服務
- 初級會計實務題庫(613道)
- 初中七年級主題班會:如何管理好自己的時間(課件)
- 2024-2030年全球及中國岸電行業(yè)發(fā)展現(xiàn)狀與未來前景預測報告
- GB 5920-2024汽車和掛車光信號裝置及系統(tǒng)
- 高中地理人教版(2019)必修第一冊 全冊教案
- 萬達入職性格在線測評題
評論
0/150
提交評論