學(xué)習(xí)筆記20170601">【PMP】學(xué)習(xí)筆記20170601
873
2022-05-29
根據(jù)C程序設(shè)計(第五版)以及相關(guān)題目復(fù)習(xí)!
1. 程序設(shè)計和C語言
1.1 Hello world
#include
1.2 程序的結(jié)構(gòu)
一個程序由一個或多個原程序文件組成
函數(shù)是C程序的主要組成部分,函數(shù)是程序的基本單位
一個函數(shù)包括兩個部分,函數(shù)首部(int max(int a, int b))和函數(shù)體(花括號中的部分)
程序總是從main函數(shù)開始執(zhí)行,無論main函數(shù)在什么位置
程序中要求計算機的操作是由函數(shù)中的C語句完成的
在每個數(shù)據(jù)聲明和語句的最后必須有一個分號
C語言本身不提供輸入輸出語句,是通過庫函數(shù)scanf和printf提供的
程序應(yīng)當(dāng)包含注釋,注釋能大大的提升代碼的可讀性
對于長期打js代碼的來說,分號真的是它容易忘記了!!
注意:
手寫代碼的時候一定要注意分號,以及注意雙引號
1.3 運行 C 語言的步驟
編輯-編譯-連接-執(zhí)行
1.4 練習(xí)題
答案在習(xí)題后面噢~
一個C程序的組成部分可以是( )。
A) 一個主函數(shù)和一至若干個其他函數(shù) B) 一至若干個主函數(shù)
C) 一個主程序和一至若干個其他函數(shù) D) 一個主程序和一至若干個子程序
一個C程序的執(zhí)行是從( )。
(A) 本程序的main函數(shù)開始,到main函數(shù)結(jié)束
(B) 本程序文件的第一個函數(shù)開始,到本程序文件的最后一個函數(shù)結(jié)束
? 本程序的main函數(shù)開始,到本程序文件的最后一個函數(shù)結(jié)束
(D) 本程序文件的第一個函數(shù)開始,到本程序main函數(shù)結(jié)束
第一題: A,第二題:A
2. 順序、選擇、循環(huán)結(jié)構(gòu)
2.1 標識符
標識符的==命名規(guī)則==是:
只能由字母、數(shù)字和下劃線組成,字母區(qū)分大小寫。
第一個字符必須是字母或下劃線,不能為數(shù)字。
C語言中標識符有以下3類
關(guān)鍵字。它們在程序中有固定的含義,不能另作他用。如int、for、switch等。
預(yù)定義標識符。預(yù)先定義并具有特定含義的標識符。如define、include等。
用戶標識符。用戶自定義標識符,符合命名規(guī)則且不能與關(guān)鍵字沖突。
2.2 常量與變量
常量是指在程序運行過程中,其值不能改變的量稱為常量,常見的常量有以下幾類:
整形常量
:如1000,12345,0,-345
實型常量
:兩種形式,小數(shù)和指數(shù)(123.456和12.34e3)
字符常量
:可以是一個普通的字符( 如x)、一個轉(zhuǎn)義序列(例 \t),或一個通用的字符(如 \u02C0)
字符串常量
:如"boy","123"等,用雙撇號把若干字符括起來,字符串常量是雙撇號里的全部字符
符號常量:用define指令,指定用一個符號名稱代表一個常量,如#define PI 3.14
結(jié)尾沒有分號
\ooo 是對用三位八進制數(shù)轉(zhuǎn)義表示任意字符的形象化描述。
例如 char ch = '1'; 等價于 char ch = 0111; (以0開頭的表示八進制)
int a = 3;
注意:變量必須先定義后使用,在變量取值時,實際上是通過變量名找到相應(yīng)的內(nèi)存地址,從該存儲單元中讀取數(shù)據(jù)
下列定義變量的語句中錯誤的是______。
A、int _int B、double int_
C、char For D、float US$
答案:D
以下不合法的用戶標識符是______。
A、j2_KEY B、Double
C、4d D、_8_
答案:C
2.3 數(shù)據(jù)類型
注意
:
int short int long int是根據(jù)編譯環(huán)境的不同,所取范圍不同
int的取值范圍在于他占用的字節(jié)數(shù) ,不同的編譯器,規(guī)定是不一樣。
浮點數(shù)據(jù)根據(jù)精度的不同分為3種
注意:C語言中不存在字符串變量,字符串只能存在字符數(shù)組中
自動轉(zhuǎn)換發(fā)生在不同數(shù)據(jù)類型運算時,在編譯的時候自動完成。
注意
:
只有字節(jié)小的可以向字節(jié)大的自動轉(zhuǎn)換,不可逆
#include
如上,自動的將c1轉(zhuǎn)化為ASCII碼再進行加法運算
強制類型轉(zhuǎn)換是通過定義類型轉(zhuǎn)換運算來實現(xiàn)的。其一般形式為:
//(轉(zhuǎn)化類型)值 (double) a // 將a轉(zhuǎn)化成double類型 (int) (x + y) //將x+y轉(zhuǎn)化成int類型
如%運算符要求其兩側(cè)均為整型量,若x為float型,則x % 3不合法,則這時候就需要強制類型轉(zhuǎn)化了,(int)x % 3,因為強制類型轉(zhuǎn)換運算符優(yōu)先于%運算,所以會先進行(int)x運算再進行取余運算
轉(zhuǎn)換類型和表達式都必須加括號, 如把(int)(x / 3 + y)寫成(int)x / 3 + y則成了把x轉(zhuǎn)換成int型之后再除3再與y相加了。
強制轉(zhuǎn)換不存在四舍五入
強制類型轉(zhuǎn)換時,得到一個所需類型的中間數(shù)據(jù),而原來變量的類型未發(fā)生變化
2.4 運算符和表達式
假定A = 10, B = 20
自加運算符++與自減運算符--是單目運算符,運算的對象是變量。自增自減運算有兩種一種前綴,一種后綴,兩種表達式的值是有區(qū)別的,前綴是:先運算再取值,后綴是:先取值后運算
如:
#include
又如:可以很清楚的理解!
#include
假設(shè)變量 A 的值為 1,變量 B 的值為 0
也就是說a并b有假則假,a或b有真則真
簡單賦值運算符為=
int a = 3;// 給a賦值為3
復(fù)合賦值運算符就是在簡單賦值符之前加上其它運算符構(gòu)成
例如+=、-=、*=、/=
a += 3;等價于 a = a + 3
注意
:復(fù)合運算符中運算符和等號之間不存在空格。
假設(shè)變量 A 的值為 10,變量 B 的值為 20
三目運算符的格式為:
表達式1 ? 表達式2 : 表達式3;
如果表達式1為真則值為表達式2,否則為表達式3
如:
#include
初等運算符的優(yōu)先級別最高,然后是單目運算符、算術(shù)運算符、關(guān)系運算符、邏輯運算符(除邏輯非!)、條件運算符、賦值運算符、逗號運算符。大多數(shù)都是自左向右結(jié)合,而單目運算符、條件運算符和賦值運算符自右向左結(jié)合
==運算符優(yōu)先級及結(jié)合性匯總==自上向下優(yōu)先級降低
~菜鳥教程中的運算符優(yōu)先級~
復(fù)習(xí)了這么多關(guān)于運算符的知識,來練幾道題吧
#include
這題要好好思考噢
int main() { int x = 12, n = 5; x %= (n % 2); printf("%d", x); } // 輸出: 0
n % 2余數(shù)是1,12對1取余為0
在C語言中,字符型數(shù)據(jù)在內(nèi)存中的存儲形式是
A)原碼 B)補碼 C)反碼 D)ASCII碼
答案: D
若執(zhí)下面程序時從鍵盤上輸入5,
#include
則輸出是______。
A、7 B、6 C、5 D、4
答案:B
做對這題才算真真掌握噢~
設(shè)有語句int a = 3;則執(zhí)行語句a += a -= a * a后,變量a的值是( )。
(A) 3 (B) 0 ? 9 (D) -12
答案:D
上面的語句可以轉(zhuǎn)換成:
int a = 3; a -= (a * a);//*優(yōu)先級高,先計算a*a為9,此時a -= 9;即 a = a - 9; a = -6 a += a // a = a + a; a = -6 + (-6),a = -12
2.5 C語句
if(表達式) { 執(zhí)行內(nèi)容 }
如果表達式為真,則執(zhí)行{}里的內(nèi)容,否則將跳過不執(zhí)行該code
if(表達式) { 代碼塊1; }else { 代碼塊2; }
如果表達式的值為真,則執(zhí)行代碼塊1,否則執(zhí)行代碼塊2
注意if和else后面都沒有分號噢~
switch (表達式) { case 情況1: 執(zhí)行體1; break; case 情況2: 執(zhí)行體2; break; default: 執(zhí)行體3; }
簡單解釋一下就是判斷表達式的幾種情況執(zhí)行不一樣的代碼
注意:
case后的情況不能相同
每個case都需要有一個break語句
switch表達式只能是整型或者字符類型
重點
:switch語句最大的好處是它能夠簡化if語句
while(表達式) { 循環(huán)體代碼 }
當(dāng)表達式為真時會執(zhí)行
循環(huán)體代碼
,執(zhí)行體代碼結(jié)束后,會再次判斷表達式是否為真,循環(huán)往復(fù),直至表達式為假
注意
:循環(huán)體代碼內(nèi)應(yīng)該改變循環(huán)變量的值,否則會出現(xiàn)死循環(huán)
do{ 循環(huán)體代碼 }while(循環(huán)條件);
它先執(zhí)行一次循環(huán)體代碼,然后判斷while中的循環(huán)條件是否為真,如果為真則繼續(xù)循環(huán);如果為假,則終止循環(huán)。所以很重要的一點就是,do-while循環(huán)至少會執(zhí)行一次循環(huán)體代碼。
注意
:while括號后必須有分號
for(表達式1;表達式2;表達式3) { 執(zhí)行體代碼; }
for循環(huán)是最最最最重要的一個內(nèi)容了,在考試中常常會要用到!
執(zhí)行表達式1,對變量進行初始化
判斷表達式2,若為真,則執(zhí)行for循環(huán)體中執(zhí)行體代碼,代碼執(zhí)行完畢
執(zhí)行表達式3,對循環(huán)變量進行操作
再進行第二步,直至判斷表達式為假
循環(huán)結(jié)束,程序繼續(xù)向下執(zhí)行。
#include
當(dāng) break 語句出現(xiàn)在一個循環(huán)內(nèi)時,循環(huán)會立即終止,且程序流將繼續(xù)執(zhí)行緊接著循環(huán)的下一條語句。
它可用于終止 switch 語句中的一個 case
#include
正如上面的代碼中當(dāng)a == 7時執(zhí)行了break語句跳出了while循環(huán),因此使得輸出語句只有兩條
continue會跳過當(dāng)前循環(huán)中的代碼,強迫開始下一次循環(huán)。
#include
從上面的代碼可以看出,在a==7時遇到了continue則后面的代碼就不會再執(zhí)行了,而是重新開始下一輪循環(huán)
區(qū)別:break會終止整個循環(huán),而continue只是提前結(jié)束本輪循環(huán)。
goto語句可以將代碼執(zhí)行跳轉(zhuǎn)到標記的位置,雖然這看起來很方便,但會使得程序得控制難以跟蹤,所以不推薦使用goto語句,僅作了解
goto here; ... here:
答案在習(xí)題結(jié)束噢~
第一題:
若i為整型變量,則以下循環(huán)的次數(shù)是
for (i = 2; i == 0;) {printf("%d", i–); }
A) 無限次 B) 0次 C) 1次 D) 2次
第二題:
下面這段程序運行后i的值是( )
A)11 B)13 C)12 D)14
#include
第三題:
C語句for(;;){…}是指( )。
(A)無意義 (B)無限循環(huán) ?循環(huán)執(zhí)行1次 (D)循環(huán)執(zhí)行0次
第四題:
#include
以上程序執(zhí)行后的輸出結(jié)果是
A、y=0 B、y=-1 C、y=1 D、while構(gòu)成無限循環(huán)
答案:B C B B
要點:第一題要注意for循環(huán)的過程,要先判斷是否滿足條件才會執(zhí)行循環(huán)體。第二題要理解++i和i++的區(qū)別,同時也要注意case后面沒有break的后果。
2.6 數(shù)據(jù)的輸入輸出
格式為:printf(格式控制,輸出列表)。輸出控制是用一對雙引號括起來的,包含格式聲明和普通字符。輸出列表是程序需要在輸出時原樣輸出的字符。
從鍵盤獲得用戶輸入,格式為:scanf(格式控制,地址表列)
#include
和printf非常相似,但注意點有很多
注意
:
scanf 的變量前要帶一個&符號。&叫做取地址符,也就是獲取變量在內(nèi)存中的地址。
如果除了格式聲明還寫了其他東西,則在輸入數(shù)據(jù)時在對應(yīng)位置上輸入與這些相同的字符,如:
scanf("a=%d,b=%d",&a,&b); //輸入格式:a=1,b=2
這個函數(shù)一次只會輸出一個單一的字符,但是可以在循環(huán)內(nèi)使用這個方法,以便輸出多個字符。
#include
注意
:一次只能輸出一個字符,putchar()括號中可以填寫字符以及在ASCII內(nèi)的整型
這個函數(shù)一次只會讀取一個單一的字符
#include
輸入jc 輸出jc
注意
:在鍵入信息時,字符會暫存在緩存區(qū)中,只有在按下回車時,才會將輸入的字符送往計算機,按順序賦值
用來輸出字符串并換行
#include
注意
:
只能輸出字符串,不能輸出數(shù)值或格式轉(zhuǎn)換。
會自動輸出一個回車符
將字符串結(jié)束符\0轉(zhuǎn)換成\n
gets() 也存在緩沖區(qū)概念,當(dāng)按下回車鍵時,就代表輸入結(jié)束了,gets() 開始從緩沖區(qū)中讀取內(nèi)容。gets() 和 scanf() 的==主要區(qū)別==是:
scanf() 讀取字符串時以空格為分隔,遇到空格就認為當(dāng)前字符串結(jié)束了,所以無法讀取含有空格的字符串。
gets()中空格也是字符串中的一部分,只有遇到回車鍵時才會認定字符串輸入結(jié)束,所以,不管輸入了多少空格,只要沒有回車,對 gets() 來說就是一個完整的字符串。
有以下程序
#include
當(dāng)運行時輸入:a <回車> 后,以下敘述正確的是______。
A、變量C1 被賦予字符a,c2被賦予回車符
B、程序?qū)⒌却脩糨斎氲?個字符
C、變量c1被賦予字符a,,c2中仍是原有字符2
D、變量c1 被賦予字符a,c2中將無確定值
==答案:A==
執(zhí)行下列程序時輸入:123<空格>456<空格>789<回車>,輸出結(jié)果是______。
#include
A、123,456,789 B、1,456,789
C、1,23,456,789 D、1,23,456
==答案:D==
2.7 格式字符
用來輸出一個有符號的十進制整數(shù)
注意
:可以在格式聲明中指定輸出數(shù)據(jù)的域?qū)挘?%5d",指定輸出數(shù)據(jù)占5列,輸出的數(shù)據(jù)顯示在此5列區(qū)域右側(cè)
printf("%5d\n%5d\n",12, -345);
輸出結(jié)果:
12(前3個空格) -345(前1格空格)
用來輸出一個字符
char ch = 'a'; printf("%c",ch);// 輸出a
同樣的可以指定域?qū)抪rintf("%5c",ch)輸出a前有4個空格
注意
:在0-127的整數(shù)也可以用%c輸出,在輸出之前會轉(zhuǎn)換成對應(yīng)的ASCII碼,如果整數(shù)比較大則輸出第一個字節(jié)的信息對應(yīng)的字符
short a = 121; printf("%c", a); // y
當(dāng)數(shù)比較大時
int a = 377; printf("%c", a); // y
因為以%c格式輸出,所以只考慮第一個字節(jié),a在內(nèi)存中的存放方式是這樣的,第一個字節(jié)所對應(yīng)的十進制為121,對應(yīng)y
用來輸出一個字符串
printf("%s","china");// 輸出: china
用來輸出實數(shù),以小數(shù)形式輸出
基本型,%f
不指定輸出數(shù)據(jù)長度,由系統(tǒng)來決定數(shù)據(jù)所占的列數(shù),一般是小數(shù)輸出6位
double a = 1.0; printf("%f",a/3);// 輸出: 0.333333
輸出了6個3
指定數(shù)據(jù)的寬度和小數(shù)位數(shù),用%m.nf
這里的意思是指定域?qū)挒閙,小數(shù)點后保留n位數(shù)字
double a = 1.0; printf("%7.2f",a/3);// 輸出: 0.33(前面有3個空格噢)
注意
:
如果n為0,則不僅不輸出小數(shù),也不輸出小數(shù)點
如果n的值過大,也不能保證全部輸出,原因之一是double類型數(shù)據(jù)只能保證15位有效數(shù)字
輸出的數(shù)據(jù)向左對齊,用%-m.nf
當(dāng)數(shù)據(jù)長度不超過m時,數(shù)據(jù)向左靠齊,右邊補空格
以指數(shù)形式輸出
printf("%e",123.456);// 輸出:1.234560e+002
如果不指定輸出的寬度和數(shù)字部分的小數(shù)位數(shù),將以小數(shù)部分6位,指數(shù)部分5位來定
以下程序的輸出結(jié)果是()
int a = 1234; printf("%2d",a)
A) 12 B) 34 C)1234 D) 提示錯誤,無結(jié)果
==答案:C==
已知字母A的ASCII碼為十進制的65,下面程序的輸出是______。
#include
A、67,D B、B,C C、C,D D、不確定的值
==答案:A==
2.8 程序設(shè)計題目
編寫打印如下圖形的程序(要求實現(xiàn)讀取用戶輸入,打印幾行圖形,用循環(huán)實現(xiàn)),示例:輸入4
輸入5
#include
經(jīng)典題目:輸入一個年份判斷是閏年還是平年
#include
編寫程序:計算20到30的每個整數(shù)立方根之和(保留小數(shù)點后兩位)
#include
C 語言 C++ 面向?qū)ο缶幊?/p>
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。