




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
第4章語句及控制結構4.1C語言語句4.2簡單語句4.3輸入/輸出功能語句4.4條件語句4.5循環(huán)語句4.6轉(zhuǎn)向語句習題44.1C語言語句
C語言中,語句的含義也非常廣泛。任何數(shù)據(jù)成分,只要以分號結尾,就稱為語句,甚至只有一個分號也稱為語句(空語句)。分號是C語言中語句的標志。一個語句可分寫成多行,只要未遇到分號就認為還在同一個語句中;反之,在一行中也可以寫多個語句。也就是說,C程序的書寫是相當自由的。不過為了醒目起見,最好一行只寫一條語句,并且根據(jù)不同的語法成分,錯落有致地加以排列,這樣會更好地增加程序的可讀性。本章我們將詳述C中的語句。在學習一種語言時,要對其使用的語法規(guī)則、語義含義等深刻理解,靈活運用。表4-1中先給出了C語言中語句的類別、名稱及一般形式。4.2簡單語句4.2.1空語句空語句在程序中只用一個分號表示:;它什么也不做。它主要用在:①轉(zhuǎn)向語句的轉(zhuǎn)向點;②循環(huán)語句的循環(huán)體。若循環(huán)體為空,則其循環(huán)的動作全在循環(huán)頭中進行。4.2.2表達式語句表達式是由運算符和運算對象構成的式子,本身并沒有執(zhí)行的功能,但如果在它的后面加上一個分號,就變成了語句,可以被執(zhí)行了。雖然表達式的種類很多,但最常見的表達式語句多為賦值語句和函數(shù)調(diào)用語句。例如:i=3;x=PI*r*r;++i;printf(″Hello!″);其中前三個為賦值語句,第四個為函數(shù)調(diào)用語句。
x+3;也是個表達式語句,實現(xiàn)x和3相加,但它未改變x的內(nèi)容,也未引起其他變化,因此對這個語句的執(zhí)行沒有實際意義。
【例4-1】交換兩個變量的值。
解題思路:要交換兩個變量的值,必須借助第三者。設有兩個變量a和b,當把a的數(shù)據(jù)直接賦給b時就會破壞b中的內(nèi)容,而通過第三個變量作中間過渡,就可以避免這種情況的發(fā)生,如圖4-1所示。圖4-1交換兩個變量值的示意圖程序?qū)崿F(xiàn)如下:#include<stdio.h>main(){inta,b,c;a=4,b=8;printf(″a=%d,b=%d\n″,a,b);c=a;a=b;b=c;printf(″a=%d,b=%d\n″,a,b);return0;}運行輸出:a=4,b=8a=8,b=4其中,a=4,b=8;是逗號表達式(包含了賦值)語句。在前后兩個表達式的運算互不相關的時候,可以用逗號運算符把它們連起來,當然也可以用分號。4.2.3復合語句把多條語句用花括號括起來即構成所謂的復合語句,例如:{sum=sum+i+j;i++;j--;}復合語句對內(nèi)部來說有多條語句,對外部來說它又是一個整體,算是一個語句。復合語句通常用做循環(huán)語句的循環(huán)體或條件語句的分支。例如,在上例中假設只有在a大于b時才交換它們的值,則可以寫為if(a>b){c=a;a=b;b=c;}4.3輸入/輸出功能語句
C語言沒有提供專門的輸入/輸出語句,但是卻提供了有輸入/輸出功能的函數(shù),通過函數(shù)調(diào)用就可以達到輸入/輸出的目的。函數(shù)屬于表達式的一部分,因此函數(shù)調(diào)用語句也是表達式語句的一種。要使用這些輸入/輸出函數(shù),必須要把有關函數(shù)的信息告訴程序。告訴的方法是在程序頭部加上#include<stdio.h>說明?!皊tdio.h”是一個頭文件,stdio代表“standardinputandoutput(標準輸入/輸出)”,即用系統(tǒng)提供的標準輸入/輸出設備來進行輸入/輸出。標準輸入設備有鍵盤,標準輸出設備有屏幕、打印機等。擴展名“h”代表head,說明該文件是頭文件。#include是包含,它表示在編譯以前先把頭文件stdio.h包含進來,程序中就可以使用標準輸入/輸出函數(shù)了。4.3.1字符輸入/輸出功能語句
1.getchar函數(shù)該函數(shù)形式為:
getchar()
getchar是函數(shù)名,后面圓括號內(nèi)是空的,說明該函數(shù)沒有參數(shù)。該函數(shù)的使用形式是:
〈字符變量〉=getchar();其功能是從鍵盤上敲入一個字符,然后把它賦給字符變量。需注意的是,所鍵入的字符并不立即賦給字符變量,只有在輸入一個回車符后,字符變量才能得到字符。要想使字符變量立即得到所鍵入的字符,可用getch()函數(shù)。單獨調(diào)用getchar()函數(shù)不能得到字符,但有其他用途,比如在程序的最后增加getchar();語句,可便于在用戶界面觀察程序的執(zhí)行結果。
2.putchar函數(shù)該函數(shù)形式為:
putchar(〈字符對象〉)
putchar是函數(shù)名,其參數(shù)可以是一個字符常量或字符變量。該函數(shù)的功能是向終端輸出一個字符。因整型和字符型是通用的,所以putchar函數(shù)也能夠把代表某個字符編碼的整數(shù)作為一個字符輸出。
【例4-2】字符輸入/輸出。#include<stdio.h>main(){charch1,ch2,ch3;ch1=getchar();ch2=getchar();ch3=getchar();putchar(ch1);putchar(′′);putchar(ch2);putchar(′′);putchar(ch3);putchar(′\n′);putchar(′\101′);putchar(66);putchar(′\″′);putchar(′\n′);return0;}運行程序: 輸入: abc↙
輸出為: a└┘b└┘c AB″其中,′\101′是′A′的八進制編碼,66是′B′的十進制編碼,輸出結果中的表示一個空格,下同。注意:
如果輸入時按了空格鍵或回車鍵,則getchar函數(shù)會把空格符或換行符作為字符讀入。有時還可以直接用getchar和putchar輸入和輸出字符,不需要再定義一個字符變量,例如:
putchar(getchar());此時,getchar()函數(shù)作為putchar()函數(shù)的參數(shù)被調(diào)用,它輸入的字符不經(jīng)轉(zhuǎn)手就被putchar輸出了。4.3.2格式化輸入/輸出功能語句
getchar、putchar函數(shù)只能對字符進行輸入/輸出,而對其他類型的數(shù)據(jù)就必須用格式輸入/輸出函數(shù)進行輸入/輸出。
1.printf函數(shù)這是一個格式化的輸出函數(shù),它使用的一般格式是:
printf(〈控制格式〉,〈輸出列表〉)前面我們已知,輸出的對象必須有相應的控制字符限定修飾才能輸出,那么C中都有哪些控制字符呢?我們在這里主要介紹以下控制字符:d,o,x,u,c,s,f,e,g,p。不同的控制字符用以輸出不同類型的數(shù)據(jù)。表4-2給出了要輸出的數(shù)據(jù)類型與其控制格式之間的對應關系。
1)%d格式
(1)%d格式用來輸出十進制整數(shù),按數(shù)據(jù)的實際長度輸出。
(2)可以對輸出數(shù)據(jù)所占字節(jié)位數(shù)加以限制,方法是在%和d之間加一整數(shù),整數(shù)可正可負。正整數(shù)表示輸出數(shù)據(jù)在所給空間中右對齊,左邊留出空格;負整數(shù)表示左對齊,右邊留出空格。當輸出數(shù)據(jù)位數(shù)大于所給空間時,則可突破位數(shù)的限制,按其實際大小全部輸出,例如:
printf(″a=%5d″,13); 輸出為:a=└┘
└┘
└┘13 printf(″a=%-5d″,13); 輸出為:a=13└┘
└┘
└┘
printf(″a=%3d″,12345); 輸出為:a=12345
(3)%ld格式。當輸出的數(shù)據(jù)大于32767時,不能再用%d格式,這時應該用長格式%ld輸出。例如:
printf(″a=%ld″,1234567);的輸出為:a=1234567。也可以對長格式的位數(shù)加以限制,方法如(2)。
2)%o格式
%o以八進制形式輸出整數(shù),其機理是把整數(shù)在內(nèi)存中的ASCII編碼由低位向高位三位一組進行分節(jié),每一節(jié)用一個八進制數(shù)碼表示,這樣如果原來的數(shù)據(jù)為負,則符號位的1也被作為八進制數(shù)的一部分加以處理了。例如:
inta=-1; printf(″%d,%o\n″,a,a);的輸出為:-1,177777。a=-1的內(nèi)存形式為因此,用八進制格式輸出整數(shù)時以正整數(shù)為宜。1111111111111111
3)%x格式(或%X)
%x以十六進制形式輸出整數(shù),其機理和八進制輸出一樣,只是它將對二進制編碼按四位一組進行分節(jié),每節(jié)用一個十六進制數(shù)碼表示,同樣也不考慮符號。如:inta=-1;printf(″%d,%o,%x\n″,a,a,a);的輸出為:-1,177777,ffff。
4)%u格式
%u以十進制形式輸出無符號整數(shù)。可以用%u格式輸出定義為其他整數(shù)類型的數(shù)據(jù),用其他輸出整數(shù)的格式也可以輸出定義為無符號整數(shù)的數(shù)據(jù),只是要注意,這兩種情況只能在正整數(shù)的區(qū)間內(nèi)使用。
【例4-3】格式化輸出。#include<stdio.h>main(){inti=-2;unsignedintu=65535;printf(″u=%d,%o,%x,%u\n″,u,u,u,u);printf(″i=%d,%o,%x,%u\n″,i,i,i,i);return0;}運行輸出:u=-1,177777,ffff,65535i=-2,177776,fffe,65534由例4-3的運行輸出可以看出,%u格式是把最高位也作為數(shù)值位處理的,而%d格式是把最高位當成符號位來處理的。
5)%c格式
%c格式輸出一個字符,和字符ASCII編碼對應的整數(shù)也以字符形式輸出,并可以為其指定長度。例如charc=′a′;printf(″c=%c,%c\n″,c,97);printf(″c=%5c\n″,c);則結果為:c=a,ac=└┘└┘└┘a
6)%s格式
%s格式用來輸出字符串。
(1)%s格式按實際大小輸出字符串,但若字符串中含有′\0′字符,則輸出到′\0′截止,即并不把雙引號中的內(nèi)容全部輸出。例如:
printf(″s=%s\n″,″China″);輸出:s=China printf(″s=%s\n″,″China\0Japan″);輸出:s=China字符′\0′后的內(nèi)容被舍掉,′\0′本身也不輸出。如果字符串中有控制字符,則控制字符也會發(fā)揮作用。例如:
printf(″%s\n″,″China\nJapan″);則輸出為:
China Japan
(2)指定輸出字符串的長度,規(guī)則如前。例如:
printf(″s=%6s″,″book″);輸出:s=└┘└┘book(右對齊) printf(″s=%-6s″,″book″);輸出:s=book└┘└┘(左對齊) printf(″s=%2s″,″book″);輸出:s=book(突破限制)
(3)輸出字符串前端的部分字符格式%<m>.<n>s。這種格式指明:在m列寬度中輸出字符串的前n個字符,當m<n時,有m=n。例如:
printf(″s=%5.3s″,″China″);輸出:s=└┘└┘Chi printf(″s=%-5.3s″,″China″);輸出:s=Chi└┘└┘
printf(″s=%2.3s″,″China″);〖HT5SS]輸出:s=Chi
7)%f格式
%f格式以小數(shù)形式輸出單精度、雙精度類型的浮點數(shù)。
(1)以%f格式輸出浮點數(shù)時,整數(shù)部分全部輸出,小數(shù)部分輸出6位,但輸出的不一定全是有效數(shù)字。對單精度數(shù)只有左邊7位有效,而對雙精度數(shù)只有前16位有效。
(2)也可以指定輸出的寬度和小數(shù)位數(shù),例如:
printf(″f=%10.2f\n″,123.456);輸出:f=└┘└┘└┘└┘123.46輸出寬度中包含小數(shù)點位數(shù),小數(shù)部分進行四舍五入。
printf(″f=%-10.2f″,123.456);輸出:f=123.46 printf(″f=%1.2f″,123.456);輸出:f=123.46└┘└┘└┘└┘當所給寬度小于數(shù)據(jù)位數(shù)時會自動突破位數(shù)的限制,這時數(shù)據(jù)的整數(shù)部分全部輸出,小數(shù)部分按要求輸出。
8)%e格式(或%E)
%e格式以指數(shù)形式輸出浮點數(shù),包括單精度數(shù)和雙精度數(shù)。輸出時,尾數(shù)的整數(shù)部分只有1位,系統(tǒng)自動指定尾數(shù)的小數(shù)部分的寬度和指數(shù)部分的寬度。對此不同的系統(tǒng)有不同的規(guī)定。對TurboC來說,小數(shù)部分6位,指數(shù)部分4位(包括字母e或E,1位階符,2位階碼)。例如:
printf(″f=%e″,123.456);輸出:f=1.234560e+02也可以指定輸出寬度和尾數(shù)的小數(shù)位數(shù):
printf(″f=%10.2e″,123.456);輸出:f=└┘└┘1.23e+02同樣,當總寬度定義得小時會被突破。當有小數(shù)部分時,輸出至少要用6位:尾數(shù)的整數(shù)1位,小數(shù)點1位,指數(shù)部分的4位。這6位再加上小數(shù)部分指定的位數(shù),即為實際使用的位數(shù),例如:
printf(″f=%6.2e″,123.456); 輸出:f=1.23e+02輸出占用了8位。
9)%g格式(或%G)
%g格式用于輸出尾數(shù)中不帶無效0的浮點數(shù),以盡可能地少占輸出寬度。例如:
printf(″g=%g″,123.4); 輸出:g=123.4這種輸出更符合人們的閱讀習慣。
10)%p格式
%p格式用于輸出變量的地址,而變量的地址是由編譯程序分配的。通過查看變量的地址,可以知道變量在內(nèi)存中的相對位置。例如:
inta,b; printf(″&a=%p,&b=%p\n″,&a,&b);輸出:&a=FFD4, &b=FFD2
11)對printf函數(shù)控制字符的進一步說明
(1)以上介紹了10種控制字符的一般用法,為了滿足特殊的要求,還可以對控制字符加一些特殊的修飾。修飾符或標志共有6種,如表4-3所示。標志的具體用法看下面的例子。
【例4-4】標志的具體用法。#include<stdio.h>main(){printf(″%+d\t%+d\n″,786,-786);/*輸出:+786-786*/printf(″a=%d\ta=%d\n″,5,-5);/*輸出:a=5a=-5*/printf(″%#o\n″,1427);/*輸出:02623*/printf(″%#x\n″,1427);/*輸出:0x593*/printf(″%g\n″,1427.00);/*輸出:1427*/ printf(″%#g\n″,1427.00);/*輸出:1427.00*/ printf(″%+09d″,125);/*輸出:+00000125*/ printf(″%*.*f″,7,2,87.4573);/*輸出:87.46*/ printf(″%-+09d″,125);/*輸出:+125,此時0占位符不起作用,只有在域?qū)挻笥跀?shù)據(jù)位數(shù)且是右對齊時,0占位符才起作用*/ return0; }其中:″%+09d″中的9是輸出總域?qū)挘ㄔ谡龜?shù)前所加的“+”字符,0表示用0來填充;printf(″%*.*f″,7,2,87.4573);中的*號表示的數(shù)值是由后面的參數(shù)提供的,兩個*號分別和7、2相對應,也就是″%7.2f″這樣的格式。采用格式串中用不定寬度表示而后由參數(shù)確定的格式有一定的靈活性。
(2)精度說明。我們已介紹過用%f和%e對浮點數(shù)的輸出作精度說明,同樣對%d和%g控制符我們也可以作精度說明。
%d的精度說明是指至少要打印的數(shù)字位數(shù),例如:
printf(″%.9d″,123);輸出:000000123多余的位數(shù)用0填充。
%g的精度說明是指輸出的有效數(shù)字的最大位數(shù),例如:
printf(″%.3g″,12.389);輸出:12.4
(3)程序中易出現(xiàn)的錯誤:①把除%X、%G、%E外的控制字符寫成大寫,如%D等。②試圖用%c格式輸出字符串的第一個字符。如:
printf(″%c″,″China″);這樣輸出不了′C′。③試圖用%s格式輸出字符。如:
printf(″%s\n″,′a′);結果也是錯誤的。
2.scanf函數(shù)
scanf函數(shù)能對各種類型的數(shù)據(jù)變量進行格式化輸入。
scanf函數(shù)的一般格式為:
scanf(〈控制格式〉,〈輸入列表〉)前面我們已知,scanf的輸入列表中是以逗號分開的變量的地址,即每個變量名前面必須加一個地址運算符&。而在控制格式串中必須有和后面地址相對應的控制字符,里面還可以出現(xiàn)非控制字符,如果出現(xiàn)有非控制字符,則在輸入時必須也把它們輸入,否則就會發(fā)生輸入錯誤。例如:inta,b,c;scanf(″%d,%d,%d″,&a,&b,&c);格式控制串中除有三個格式控制符%d外,還有兩個逗號,這兩個逗號在輸入時也必須輸入,即必須按如下格式輸入:
3,4,5↙
如果輸入時以
345↙形式敲入,則會出現(xiàn)錯誤。為了避免這種錯誤,在控制串中最好不要加入其他成分,以免在輸入時忘掉或不匹配。如果在輸入格式控制串中沒有其他字符,如:
scanf(″%d%d%d″,&a,&b,&c);則輸入時就可以非常靈活多樣。例如,可以作
3└┘└┘4└┘└┘5↙這樣的輸入,也可以隨意換行,作
3↙ 4└┘└┘5↙這樣的輸入,只要能把兩個整數(shù)分開即可。表4-4列出了輸入的數(shù)據(jù)與其所用的控制符之間的對應關系。在表4-4中的基本輸入控制符之前還可以再加如表4-5所示的修飾符。例如:
inta,b; scanf(″%2d%*3d%*2c%2d″,&a,&b);若輸入:
12345&&67↙
則結果為a=12,b=67。%*3d會把345舍掉,%*2c會把&&舍掉。應注意,和%*3d對應的應該是三位數(shù)字,和%*2c對應的應該是兩個字符。這種方法主要用于對已有數(shù)進行選取,一般不用。注意:
(1)用′%c′格式輸入時,敲入的任何字符,包括空格,均作為有效字符輸入。
(2)用scanf輸入時,應做到變量類型、輸入格式和輸入數(shù)據(jù)三者相一致。例如有變量定義:inta,b,c;longintl1,l2,l3;floatx,y,z;doubled1,d2,d3;
①輸入數(shù)據(jù)和控制格式不一致時會出錯。例如對于
scanf(″%d%d%d″,&a,&b,&c);輸入:
23.4└┘65└┘71.8↙
則a、b、c均無正確的整數(shù)值。②用短格式輸入長變量時會出錯,如scanf(″%d%d″,&l1,&l2);scanf(″%f%f″,&d1,&d2);③用長格式輸入短變量時也會出錯,如
scanf(″%ld%ld″,&a,&b);scanf(″&lf&lf″,&x,&y);④對長變量只能用長格式進行輸入,下面的寫法是正確的:
scanf(″%ld%ld″,&l1,&l2);scanf(″%lf%lf″,&d1,&d2);對格式化輸入/輸出的具體細節(jié)在上機時應多加注意和練習,這樣才能逐漸明白和掌握。
【例4-5】輸入一個字符,求其先導字符和后繼字符。
編程思路:對字符的輸入,既可以用getchar函數(shù),也可以用“%c”控制格式;輸出時既可以用putchar函數(shù),也可以用“%c”作格式輸出。字符是有序類型,故可求其先導和后繼,前后字符的ASCII編碼相差為1。#include<stdio.h>main(){charc,ch,pre,pos;c=getchar();pre=c-1;putchar(pre);putchar(′,′);putchar(c);putchar(′\n′);scanf(″%c″,&ch);pos=ch+1;printf(″%c,%c″,ch,pos);return0;}運行輸出:ii↙
h,ii,j
注意:輸入時一定要敲入兩個字符再按回車鍵,這樣一個字符給變量c,一個字符給ch。如果只輸入一個字符就按回車鍵,則把這個字符交給了變量c,而把回車符交給了變量ch,它就輸出不出來了。凡涉及字符輸入時都要考慮這種情況。
【例4-6】輸入一個球的半徑,求其體積;輸入一個圓柱體的底面半徑和高,求圓柱體的表面積。
編程思路:①找出和問題有關的量,每個量用一個變量表示。本題需要定義5個變量:球半徑rg,球體積volume,圓柱底面半徑rs,高h,表面積area。②寫出數(shù)學公式:③把代數(shù)公式轉(zhuǎn)換成C語言的表達式形式:volume=4*π*rg*rg*rg/3area=2*π*rs*rs+2*π*rs*h④C語言中沒有π這個字符,必須用一個常數(shù)代換它,因為對它要使用多次,所以可以把它定義為符號常量,方法如下: #definePI3.141593于是可寫出程序如下:
#include<stdio.h>#definePI3.141593main(){floatarea,volume,rg,rs,h;printf(″Inputradiumofglobal:\n″);
scanf(″%f″,&rg);volume=4*PI*rg*rg*rg/3;
printf(″Inputradiumandhightofcolumn:\n″);scanf(″%f%f″,&rs,&h);area=2*PI*rs*rs+2*PI*rs*h;printf(″Thevolume=%10.2f\n″,volume);printf(″Thearea=%-10.2f\n″,area);return0;}運行輸出:
Inputradiumofglobal: 3.5↙
Inputradiumandhightofcolumn:
4.24.5↙
Thevolume=└┘└┘└┘└┘179.59(右對齊) Thearea=229.59└┘└┘└┘└┘(左對齊)
【例4-7】輸入一個三位數(shù),分別以十進制格式(%d)和字符格式(%c)輸出其百位、個位、十位數(shù)字。編程思路:①首先運用求模(%)和整除(/)運算求出個位、十位、百位上的數(shù)字。②根據(jù)數(shù)字和相應數(shù)字字符之間的關系確定與個位、十位和百位上的數(shù)字對應的字符。數(shù)字和相應數(shù)字字符的關系如下: 數(shù)字+′0′=相應數(shù)字字符如7+′0′=′7′,9+′0′=′9′。程序如下:#include<stdio.h>main(){intn,ge,shi,bai;printf(″Inputaninteger:\n″);scanf(″%d″,&n);ge=n%10;shi=(n/10)%10;bai=n/100;printf(″bai:%d\n″,bai);printf(″digit:%d%d%d\n″,bai,shi,ge);printf(″chara:%c%c%c\n″,bai+′0′,shi+′0′,ge+′0′);return0;}運行輸出:Inputaninteger:379↙
digit:379chara:3794.4條件語句
C語言中有兩種條件語句:雙分支的if語句和多分支的switch語句。根據(jù)不同的情況恰當?shù)厥褂盟鼈儯梢蕴岣呔幊绦省?.4.1if語句
1.if語句的一般形式
if語句的一般形式是:
if(〈表達式〉)〈語句1〉else〈語句2〉
if語句的語義如圖4-2所示。圖4-2if語句的語義首先對表達式求值,若值為真就執(zhí)行語句1,否則就執(zhí)行語句2。
說明:
(1)語句1和語句2可以是簡單語句,也可以是復合語句。else前若是簡單語句則必須由分號結束,不要認為分號會把整個if語句攔腰截斷,事實上不加分號在C語言中反而是錯誤的。
(2)語句2也可以沒有,這時的if語句結構稱為單路結構;若兩個分支都有則稱為雙路結構。
【例4-8】輸入三角形的三邊,求三角形的面積。編程思路:①定義4個變量a,b,c和area,分別表示三角形的三條邊與面積。②由三邊求三角形面積的公式是:其中,在C語言中寫為s=(a+b+c)/2。開平方要調(diào)用C語言提供的內(nèi)部函數(shù)sqrt(),有關這個函數(shù)的性質(zhì)在math.h頭文件中說明,因此在程序中應該把這個頭文件包含進來。③根據(jù)數(shù)學知識,三角形任意兩邊之和大于第三邊,因此對輸入的三邊必須進行判斷,以保證輸入的三邊能夠構成一個有意義的三角形。程序如下:#include<stdio.h>#include<math.h>main(){floata,b,c,area,s;printf(″Input3edges:\n″);scanf(″%f%f%f″,&a,&b,&c);if(a+b>c&&b+c>a&&a+c>b){s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c));printf(″Thearea=%.2f″,area);}elseprintf(″Inputerror!\n″);return0;}運行輸出:Input3edges:237↙
Inputerror!再運行一次:Input3edges:357↙Thearea=6.50
2.if語句的嵌套在if語句中,它的任一分支又可以是一個if語句,這樣就形成了嵌套的if語句,其一般形式為:if(〈條件1〉)〈語句1〉elseif(〈條件2〉)〈語句2〉
elseif(〈條件n〉)〈語句n〉else〈語句n+1〉其語義如圖4-3所示。圖4-3嵌套的if語句的語義
寫嵌套的if語句時應注意以下問題:
(1)if和else應配對出現(xiàn),每一個else和離它最近且尚未匹配的if相匹配。
(2)應在條件為真時執(zhí)行一個操作,而在條件為假時再去測試下一個條件。不要在某條件成功后再接著去測試下一個條件,這樣做的話,在嵌套層次數(shù)多時會失去智力上的控制,即不要寫成下面的形式:if〈條件1〉if〈條件2〉if〈條件3〉
else…else…else…
(3)在嵌套的多個條件中,應盡量把求值為真的概率最大的條件放在前面優(yōu)先判斷,這樣可以提高if語句的運行效率。例如:在學生成績的登記中,90分以上為A,80~90分為B,70~80分為C,60~70分為D。如果80~90分之間的學生最多,就應先對這個分數(shù)段進行處理:if(score>=80&&score<90)printf(″B″);elseif(score>=90){printf(″A″);printf(″Verygood!\n″);} elseif(score>=70) printf(″C″); else printf(″D″);這樣寫是為了避免在嵌套層數(shù)過多時語句不斷向右縮而使一行的空間不斷減少,從而不得不使語句折行,那樣就破壞了程序的可讀性,因此我們推薦上面這種寫法,即不管嵌套多少層,都使else處在同一列上。在條件score>=90成立的情況下有兩條語句,它們構成了復合語句,因此要用花括號括起來,如果缺少花括號,則會出現(xiàn)錯誤。
【例4-9】輸入一個字符,若為數(shù)字字符,則輸出Number;若為大寫字母,則輸出Upper;若為小寫字母,則輸出Lower;若為回車換行符,則輸出ReturnLine,其他字符則輸出Other。編程思路:①用嵌套的if語句對輸入的字符進行連續(xù)判斷。②C語言中沒有集合運算符,要判斷一個對象是否屬于某個集合,應該列出這個集合的上下界,這要用關系運算符和邏輯運算符來描述范圍。程序如下:#include<stdio.h>main(){charch;printf(″Inputacharacter:\n″);ch=getchar();if(ch==′0′&&ch<=′9′)printf(″Number\n″);elseif(ch>=′A′&&ch<=′Z′) printf(″Upper\n″);elseif(ch>=′a′&&ch<=′z′) printf(″Lower\n″);elseif(ch==′\n′) printf(″ReturnLine\n″);elseprintf(″Other\n″);return0;}運行輸出:Inputacharacter:A↙
Upper
注意:不能把代數(shù)中的不等式簡單地搬到C語言中來,如表示大寫字母的范圍應該寫成ch>=′A′&&ch<=′Z′,而不能寫成′A′<=ch<=′Z′。
if語句在程序中常見的錯誤是:①忘記標記復合語句的一個或兩個花括號。對嵌套在中間的復合語句來說,這樣會引起語法錯誤;對最后的一個復合語句來說,這樣會引起邏輯錯誤。②if結構的條件部分沒有用圓括號括起來,如:ifa>b…。③在if結構的條件部分后面加分號,這樣在單路選擇中會出現(xiàn)邏輯錯誤,在雙路選擇中會出現(xiàn)語法錯誤。例如:
if(a>b);printf(″OK″):原意為當a大于b時打印OK,現(xiàn)在的情況是不管a是否大于b都打印OK。if(a>b);printf(″Yes″);elseprintf(″No″);這時會出現(xiàn)語法錯誤。
3.if語句中條件表達式的靈活設置因為C語言中是用非0和0來表示真和假的,所以條件的表示可以有多種形式:
(1)用一個數(shù)值表示條件。如:intm;scanf(″%d″,&m);if(!m)printf(″Yes″);其中if(!m)等價于if(m==0)。
(2)將賦值運算和條件判斷結合起來。如:charch;if((ch=getchar())!=′\n′)putchar(ch);這里先調(diào)用getchar函數(shù),輸入一個字符,賦給ch,再判斷ch是否為回車符,若不是回車符則將其輸出。
(3)用復合的邏輯表達式表示條件。如:
if(score>70&&score<80)printf(″B″);此時常犯的錯誤是寫成數(shù)學中的不等式形式:
if(70<score<80)數(shù)學中的式子要經(jīng)過適當改造才能用于C程序中,不能直接照搬。
4.if語句和條件表達式的關系如有條件表達式語句max=a>b?a:b;,其功能是把a、b中的最大者賦給變量max,用if語句來實現(xiàn)即為:if(a>b)max=a;elsemax=b;在條件不太復雜的情況下,用條件表達式比較簡單,但如果條件復雜,嵌套層數(shù)較多時,還是用if語句為好。在程序設計中,將if語句和條件表達式結合起來使用會使程序變得簡練。
【例4-10】猜數(shù)游戲。程序預置一個常數(shù)(稱為幻數(shù)),讓用戶猜,猜對時給出正確信息,否則會給出是大了還是小了的提示。#include<stdio.h>main(){intmagic=618,guess;printf(″Inputyourguess:\n″);scanf(″%d″,&guess);if(guess!=magic)guess>magic?printf(″High″):printf(″Low″);else{printf(″***Right***\n″);printf(″%disthemagicnumber.\n″,magic);}return0;}運行輸出:Inputyourguess:600↙
Low再運行:
Inputyourguess: 700↙
High再運行:
Inputyourguess: 618↙
***Right*** 618isthemagicnumber.這里的條件表達式語句相當于一個內(nèi)嵌的if語句。4.4.2switch語句
if語句是雙分支結構,如果要連續(xù)地測試多個條件,就需要用嵌套的if語句來實現(xiàn)。如果嵌套層次過多,不僅寫起來麻煩,而且還不清晰。對于這類問題,用switch語句可以很好地解決。switch語句是一種多分支結構,其一般形式是:switch(〈表達式〉){case〈常量1〉:〈語句1〉case〈常量2〉:〈語句2〉
case〈常量n〉:〈語句n〉default:〈語句n+1〉}
switch語句的語義如圖4-4所示。它的含義是:首先對表達式e進行計算,如果其值是e1,則轉(zhuǎn)去執(zhí)行語句s1。如s1后面有break語句,則switch語句結束;如s1后面無break語句,則在switch內(nèi)部繼續(xù)向下執(zhí)行s2。如果e的值不為e1,而為e2,則轉(zhuǎn)去執(zhí)行e2后面的s2語句,執(zhí)行完s2后的情況如上。如e的值與e1,e2,…,en全不相同,就去執(zhí)行語句sn+1。處在switch語句中最后位置上的語句,其后面加不加break效果相同,程序執(zhí)行到此處都會退出switch語句。圖4-4switch語句的語說明:
(1)switch語句中的表達式的類型只能是有序類型。
(2)e1,e2,…,en是表達式的求值結果,必須互不相同。
(3)可以有多個常量共同擁有一個語句的情況,如:
case1:case2:case3:printf(″123″);break;
(4)default指出當表達式求值結果和所有常量均不相同時要執(zhí)行的動作。它的位置可以放在switch中的任何地方,不一定放在最后。
(5)語句si(i=1,2,…,n)可以是一條語句,也可以是多條語句,是多條語句時不必用花括號括起來。
【例4-11】用switch語句輸出學生的分數(shù)等級。設分數(shù)大于等于90分為A等,70~90分為B等(含70),60~70分為C等(含60),60分以下為D等,分數(shù)為浮點數(shù)。
編程思路:switch后的表達式必須是有序類型而且求出的結果應當是一個個離散的值,而不是一個數(shù)值范圍。應該想辦法把一個范圍轉(zhuǎn)換成一個確定的值,這是使用switch語句的關鍵。在這里我們可以把分數(shù)除以10再取整,即可變成離散的數(shù)值,就可以用switch語句解決了。#include<stdio.h>main(){inti;floatscore;printf(″Inputascore\n″);scanf(″%f″,&score);i=score/10;
switch(i){case9:case10:printf(″A″);break;case7:case8:printf(″B″);break;case6:printf(″C″);break;default:printf(″D″);}return0;}運行輸出:Inputascore87.5↙
B再運行:Inputascore99.8A輸入的分數(shù)是實數(shù),但通過賦值語句就變成了整型,整型是有序類型,并且i具有有限的離散值。printf(″D″);語句后面可以不要break,但如果把其他地方的break全去掉,則當輸入分數(shù)95.9時,會連續(xù)地輸出ABCD,因此一定要注意break的使用。4.5循環(huán)語句到目前為止我+們所遇到的程序都是簡單程序,解決的問題都很簡單。要解決復雜問題,并充分發(fā)揮計算機快速的優(yōu)勢,那么程序中很可能要用到循環(huán)語句。掌握好循環(huán)語句就可編出高質(zhì)量的程序。C語言提供了三種循環(huán)語句:for語句、while語句和do_while語句。下面分別加以討論。4.5.1for語句
for語句的基本形式如下:
for(〈表達式e1〉;〈表達式e2〉;〈表達式e3〉)〈語句s〉其中,表達式e2的類型為邏輯型,表達式e1和表達式e3都不是邏輯型,在其中不能使用比較運算符與邏輯運算符。
for語句的語義如圖4-5所示。它的含義是:首先對表達式e1求值,然后判斷表達式e2是否為真,如為真就去執(zhí)行語句s,接著對表達式e3求值,再回去判斷e2,直到e2為假時退出for循環(huán)。先看一個簡單的例子。圖4-5for語句的語義
【例4-12】求1~100之間所有奇數(shù)之和。#include<stdio.h>main(){inti,sum=0;for(i=1;i<=100;i+=2)sum+=i;printf(″sum=%d\n″,sum);return0;}運行輸出:
sum=2500在該例的for循環(huán)頭中有三個表達式,它們被兩個分號分開。循環(huán)頭的組成部分如下:循環(huán)控制變量控制變量的終值↓ ↓
for(i=1;i<=100;i+=2) ↑↑↑for關鍵字控制變量初值遞增控制變量可以看出能否循環(huán)是由循環(huán)控制變量決定的。一進入循環(huán),首先對控制變量置初值,這個初值是否合適,還要由表達式e2對它進行判斷,只有在e2為真的情況下才能去執(zhí)行循環(huán)體。若一開始條件就假,則循環(huán)體一次也不執(zhí)行。在每次循環(huán)之后,控制變量的值都要加以改變,這個改變量是決定能否繼續(xù)循環(huán)或是否會無窮循環(huán)的關鍵,一定要使它的值逐漸向循環(huán)終值方向變化。當表達式e3計算完之后,再回來計算表達式e2,若e2為真則繼續(xù)循環(huán),否則退出循環(huán)。for循環(huán)頭中的三個表達式可以缺省,可以缺一個,缺兩個,甚至三個全缺,但不管怎么缺,其中的兩個分號不能缺,而且這三個表達式的功能也一定要在或前或后的其他地方以其他的形式表現(xiàn)出來。另外,在表達式e1
和表達式e3
的地方可以只有一個表達式,也可以有多個用逗號分開的表達式,并且還可以包含和循環(huán)無關的其他表達式。下面是幾種不同的表示方法:
(1)表達式e1
和表達式e3
是逗號表達式,如intsum,i;for(sum=0,i=1;i<=100;i++,i++)sum+=i;其中sum=0和循環(huán)控制變量無關。
(2)省略表達式e1
和表達式e3,如intsum=0,i=1;for(;i<=100;){sum+=i;i+=2;}表達式e1移到了for語句前,而表達式e3則移到了for循環(huán)體中。
(3)三個表達式全部省略,如intsum=0,i=1;for(;;){sum+=i;i+=2;if(i>100)break;}表達式e1移到了for語句前,而表達式e2和表達式e3的功能全部在循環(huán)體中。
(4)省略循環(huán)體,把循環(huán)體變成空語句,原來的工作放到循環(huán)頭中完成,如intsum=0,i;for(i=1;i<=100;sum+=i,i+=2);這時應注意,原循環(huán)體中的語句一定要放在控制變量增值之前,否則就會出錯。雖然以上幾種寫法都是可以的,但為了程序清晰起見,我們不主張這樣使用,在for循環(huán)頭中應只放置和控制變量有關的表達式,而其他的操作應放在循環(huán)之前或循環(huán)體中。
【例4-13】計算復利。某人在銀行存入10000.00元錢,存期8年,年利率為3.5%,求其每一年的存款額。計算復利的公式是:a=p(1+r)n。其中:
p:本金,初始存款值 r:利率
a:n年后的存款數(shù) n:年數(shù)#include<stdio.h>#include<math.h>main(){intn;doublea,p=10000.00,r=0.035;printf(″%s%21s\n″,″Year″,″Amount″);
for(n=1;n<=8;n++)
{a=p*pow(1+r,n);printf(″%4d%21.2f″,n,a);}return0;}運行輸出:YearAmount1 10350.002 10712.253 11087.184 11475.235 11876.866 12292.557 12722.798 13168.09程序中引用了一個內(nèi)部數(shù)學函數(shù)pow(x,y),其功能是求x的y次方,因此應把包含其信息說明的頭文件math.h包含進來。
【例4-14】求序列前20項之和。
編程思路:首先從觀察序列中每一項的組成及前后項之間的關系入手。發(fā)現(xiàn)除首項外,每一項的分子都是前一項的分子與分母之和,而每一項的分母又等于前一項的分子,因此可以很容易地從前一項求出后一項,而第一項可以直接設置。另外,雖然每項的分子、分母都是整數(shù),但考慮到C語言中整除的特點,必須把它們定義成浮點類型。又因循環(huán)次數(shù)已知,故選用for循環(huán)語句。程序如下:#include<stdio.h>main(){
floatsum=0,num=2,den=1;inti;for(i=1;i<=20;i++){ sum+=num/den; num+=den; den=num-den;}printf(″Thesum=%.2f\n″,sum);return0;}運行輸出:
Thesum=32.664.5.2while語句
while語句的基本形式為:
while(〈表達式e〉) 〈語句s〉
while語句的語義如圖4-6所示。其含義是:首先計算表達式e的值,只要其值為真就執(zhí)行循環(huán)體語句s,直到表達式e求值為假,然后退出循環(huán)。在循環(huán)體中,一定要對循環(huán)控制變量進行修改。圖4-6while語句的語義
【例4-15】求1~100之間所有偶數(shù)之和。#include<stdio.h>main(){intsum,i;sum=0;i=2;while(i<=100){ sum=sum+i; i+=2;}printf(″sum=%d\n″,sum);return0}運行輸出:
sum=2550
while語句多用在循環(huán)次數(shù)預先難以確定的循環(huán)中,如下例所示。
【例4-16】輸入并輸出一個字符串,遇“#”結束。#include<stdio.h>main(){charc;while((c=getchar())!=′?!?putchar(c);return0;}運行程序,當輸入為:
Thisisastring#↙
則輸出為:
Thisisastring程序在執(zhí)行時并不是輸入一個字符后立即把它送到屏幕,而是先放入內(nèi)存緩沖區(qū)中,只有在打了回車符之后才把緩沖區(qū)里的內(nèi)容一塊輸出。
【例4-17】輸入一個字符串,去掉所有的前導空格,并將其余地方的多個連續(xù)空格壓縮為一個空格。例如
″└┘└┘└┘└┘This└┘└┘└┘is└┘└┘└┘a└┘└┘└┘└┘program″壓縮為
″Thisisaprogram″
編程思路:可考慮用雙重循環(huán)解決。外循環(huán)用以輸入整個字符串,內(nèi)循環(huán)處理連續(xù)的空字符。因整個字符串的長度和連續(xù)的空格數(shù)都是不確定的,因此可用while循環(huán)語句。當輸入一個空格字符時,用循環(huán)語句把可能連續(xù)的空格都讀出來,但不輸出,直到輸入一個非空格字符時才輸出一個空格,此時內(nèi)循環(huán)結束,并輸出最近讀入的非空格字符。程序如下:#include<stdio.h>main(){charch;printf(″Inputastring:\n″);while((ch=getchar())==′′);//去掉前導空格putchar(ch);while((ch=getchar())!=′\n′){ if(ch==′′) {while(ch==′′) ch=getchar(); putchar(′′); } putchar(ch); }putchar(′\n′);return0;}運行輸出:
Inputastring:
└┘└┘└┘└┘This└┘└┘└┘is└┘└┘└┘a└┘└┘└┘└┘program↙
Thisisaprogram
【例4-18】愛因斯坦階梯問題。設有階梯,不知其階數(shù),但知:每步跨兩階最后剩1階;每步跨3階最后剩2階;每步跨5階最后剩4階;每步跨6階最后剩5階;每步跨7階正好到樓頂,求階梯共有多少階。編程思路:本題擬采用窮舉法求解:從整數(shù)1試起,一旦發(fā)現(xiàn)某個整數(shù)符合所有條件限制,就算找到了答案。這樣逐次加1地測試,雖然是可以的,但這未免也太機械了,我們可以根據(jù)條件,找出一個相對快捷的算法。設階數(shù)為n,根據(jù)所給的條件有下列關系:①n%2=1;②n%3=2;③n%5=4;④n%6=5;⑤n%7=0。由⑤可知,階梯數(shù)一定是7的倍數(shù),所以測試的初值可以從7開始并且在7的倍數(shù)14、21、28、35、…中測試。由①知,階梯數(shù)一定是奇數(shù),則進一步簡化測試范圍為7,21,35,…,這個數(shù)列的公差為14。對這個數(shù)列中的數(shù)值再用②、③、④式中的條件去檢測,符合②、③、④式條件的數(shù)即為所求。根據(jù)上面的分析,可編程如下:#include<stdio.h>main(){intn=7;while(n%3!=2‖n%5!=4‖n%6!=5)n+=14;printf(″Total=%d\n″,n);return0;}運行輸出:
Total=119
注意:while語句的表達式中,‖是或運算符,表示只要有一個等式不成立,表達式就為真,就執(zhí)行循環(huán)體,直到三個等式全成立時為止。
【例4-19】求兩個正整數(shù)a,b的最大公約數(shù)(GreatestCommonDivisor,GCD)。求最大公約數(shù)的算法在第一章中已作過介紹,這里直接寫出程序。#include<stdio.h>main(){
intu,v,t;
printf(″Input2integers:\n″);
scanf(″%d%d″,&u,&v);while(v){
t=u%v;
u=v;
v=t;}printf(″TheGCD=%d\n″,u);return0;}運行輸出:Input2integers:2639↙
TheGCD=13程序中的while(v)等價于while(v!=0)。
請思考:設有while(!e),其中條件!e和下列哪個表達式等價?①e!=0②e==0③e!=1④~e(~是求反運算符)while中的條件是讓循環(huán)能夠進行的條件,要求其值為真。這樣要使!e為真,就必須使e為假,所以答案應是②式。
【例4-20】用近似公式求π的近似值,直到時為止(其中n為奇數(shù))。
編程思路:這是個求級數(shù)和的問題。解決這類問題時,首先要找出級數(shù)的構成規(guī)律,即前后項之間的關系,怎樣用前項求出后項,這樣才便于用循環(huán)結構求解。本例中,各項都是分數(shù),分母逐次遞增2;各項的符號是正、負相間。于是只要能表示出第i項,則分母加2再乘以-1即可得到第i+1項。接著設定變量,題目中要有表示和、項、分母和符號的4個變量,符號只取1和-1兩個值,表示在正負數(shù)之間轉(zhuǎn)換。因為不知道循環(huán)次數(shù),只知道結束循環(huán)的條件,所以選用while語句。程序如下:#include<stdio.h>#include<math.h>main(){ints=1;floatpi=0,t=1,n=1.0;while((fabs(t))>=1e-6){pi=pi+t; /*累加本項t*/n=n+2; /*分母加2,為下一項的分母*/s=-s; /*改變符號,為下一項的符號*/t=s/n; /*求出下一項t*/}pi=pi*4;
printf(″pi=%f\n″,pi);return0;}運行輸出:
pi=3.141594說明:
(1)程序中要用到求絕對值的數(shù)學函數(shù)fabs(),因此要把頭文件math.h包含進來。
(2)分母n定義成float類型,是為了保證s/n的值為一實數(shù),否則其值永遠為0。
(3)數(shù)學中的寫法10-6應轉(zhuǎn)換為C語言的表示形式1e-6。4.5.3do_while語句
do_while語句的一般形式為:
do 〈語句s〉 while〈表達式e〉其語義如圖4-7所示。進入do_while循環(huán)后,首先執(zhí)行一次循環(huán)體,然后再測試表達式e,如其為真則繼續(xù)執(zhí)行循環(huán)體,直至表達式求值為假。
do_while語句與while語句的差別僅僅在于:while語句是條件判斷在前,循環(huán)體執(zhí)行在后,如一開始就不滿足條件,則循環(huán)體一次也不執(zhí)行;而do_while語句是先執(zhí)行循環(huán)體,后判斷條件,所以它至少執(zhí)行循環(huán)體一次。圖4-7do_while語句的語義現(xiàn)在我們再來觀察前面的輸入字符串的例子,現(xiàn)在要求結束符“?!币惨敵龀鰜恚海nclude<stdio.h>main(){charc;do{c=getchar();putchar(c);}while(c!=′#′);return0;}運行,輸入字符串:
thisisastring#↙
則輸出為:
Thisisastring#↙
【例4-21】輸入一個正整數(shù),然后按反向輸出。比如輸入12345,則輸出為54321。
編程思路:輸入時一次把一個整數(shù)完整地輸入,而輸出則是一次一個數(shù)字地輸出,并且要求把最低位先輸出,所以首先應該把最低位數(shù)字分離出來,然后再分離出下一個最低位數(shù)字……怎樣才能把最低位分離出來呢?可用對10求模的方法。之后用對10求商的方法求出除掉最低位后的數(shù),作為進一步反向輸出的基數(shù)。#include<stdio.h>main(){intnumber,digit;printf(″Inputaninteger\n″);scanf(″%d″,&number);do{digit=number%10;printf(″%d″,digit);number/=10;}while(number);printf(″\n″);return0;}運行輸出:Inputaninteger12345↙
543214.5.4循環(huán)語句的嵌套循環(huán)嵌套以構成多重循環(huán),這在解決很多實際問題中是經(jīng)常遇到的。C語言中的三種循環(huán)結構可以互相組合使用。比如下面的一些嵌套形式: ①while() ②do { {
while() do {…} {…} while();
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 深化文化國企改革的心得體會
- 2024年秋季九年級語文考核方案計劃
- 高校師生學習傳承紅色基因心得體會
- 六年級下冊綜合實踐活動課本使用計劃
- 二年級學生責任感培養(yǎng)計劃
- 學生違紀處罰執(zhí)行計劃
- 發(fā)熱學生數(shù)據(jù)統(tǒng)計流程
- 以客戶為導向:重慶水運口岸績效多維剖析與提升策略
- 2024-2025年蘇教版小學數(shù)學四年級上冊教學資源計劃
- 高校后勤服務輿情應對職責
- 國開網(wǎng)電大 市場調(diào)查形成性考核1-3答案
- GB/T 5161-2014金屬粉末有效密度的測定液體浸透法
- 建筑工程公司安全生產(chǎn)責任制度
- 變電站交、直流系統(tǒng)培訓課件
- 被執(zhí)行人財產(chǎn)申報表
- 人教版五年級語文(下冊)期末試卷(附答案)
- [北京]輸變電工程標準工藝應用圖冊(圖文并茂)
- 信用修復申請書
- 深圳房地產(chǎn)開發(fā)企業(yè)資質(zhì)申報表
- 美變出廠檢驗記錄
- 2020年雀巢公司北京總部十周年慶典暨雀巢家庭日活動策劃案ppt課件
評論
0/150
提交評論