C語言學(xué)習(xí),這一篇就夠了!(一)

      網(wǎng)友投稿 873 2022-05-29

      根據(jù)C程序設(shè)計(第五版)以及相關(guān)題目復(fù)習(xí)!

      1. 程序設(shè)計和C語言

      1.1 Hello world

      #include //預(yù)處理指令 int main() { //定義主函數(shù) printf("這是一篇復(fù)習(xí)博客"); //輸出語句 return 0; //函數(shù)執(zhí)行完畢 }

      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 int main() { char c1, c2; c1 = 'A'; c2 = c1 + 32; printf("%c\n", c2); // a printf("%d\n", c2); // 97 }

      如上,自動的將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 int main() { int i = 3; printf("%d",++i); // 4 }

      又如:可以很清楚的理解!

      #include int main() { int i = 3; printf("%d",i++); // 3 }

      假設(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 int main() { int a = 10; int b; b = (a == 4) ? 1 : 2; printf("b 的值是 %d\n", b); // b 的值是 2 }

      初等運算符的優(yōu)先級別最高,然后是單目運算符、算術(shù)運算符、關(guān)系運算符、邏輯運算符(除邏輯非!)、條件運算符、賦值運算符、逗號運算符。大多數(shù)都是自左向右結(jié)合,而單目運算符、條件運算符和賦值運算符自右向左結(jié)合

      ==運算符優(yōu)先級及結(jié)合性匯總==自上向下優(yōu)先級降低

      ~菜鳥教程中的運算符優(yōu)先級~

      復(fù)習(xí)了這么多關(guān)于運算符的知識,來練幾道題吧

      #include int main() { int a = 1, b = 2, c = 4, d = 8; int e; e = (a + b) * c / d; printf("e的值是 %d\n", e); } //輸出 :e的值是 1

      這題要好好思考噢

      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 int main() { int x; scanf("%d",&x); if(x++ > 5) { printf("%d", x); }else { printf("%d", x--); } }

      則輸出是______。

      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 int main () { for( int a = 10; a < 20; a = a + 1 ) { printf("a 的值: %d\n", a); } return 0; } /*輸出: a 的值: 10 a 的值: 11 a 的值: 12 a 的值: 13 a 的值: 14 a 的值: 15 a 的值: 16 a 的值: 17 a 的值: 18 a 的值: 19 */

      當(dāng) break 語句出現(xiàn)在一個循環(huán)內(nèi)時,循環(huán)會立即終止,且程序流將繼續(xù)執(zhí)行緊接著循環(huán)的下一條語句。

      它可用于終止 switch 語句中的一個 case

      #include int main() { int a = 5; while (a < 10) { printf("a的值%d\n", a); a++; if (a == 7) { break; } } return 0; } /* a的值5 a的值6 */

      正如上面的代碼中當(dāng)a == 7時執(zhí)行了break語句跳出了while循環(huán),因此使得輸出語句只有兩條

      continue會跳過當(dāng)前循環(huán)中的代碼,強迫開始下一次循環(huán)。

      #include int main() { int a = 5; while (a < 10) { a++; if (a == 7) { continue; } printf("a的值%d\n", a); } return 0; } /* a的值6 a的值8 a的值9 a的值10 */

      從上面的代碼可以看出,在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 int main() { int i = 10; switch (i + 1) { case 10: i++; break; case 11: ++i; case 12: ++i; break; default: i = i + 1; } }

      第三題:

      C語句for(;;){…}是指(  )。

      (A)無意義    (B)無限循環(huán)    ?循環(huán)執(zhí)行1次   (D)循環(huán)執(zhí)行0次

      第四題:

      C語言學(xué)習(xí),這一篇就夠了!(一)

      #include int main() { int y = 10; while(y--); printf("y=%d",y); }

      以上程序執(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 int main() { int a; scanf("%d",&a); // 輸入:23 printf("%d",a); // 輸出:23 }

      和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 int main() { char a = 'B'; putchar(a); }

      注意

      :一次只能輸出一個字符,putchar()括號中可以填寫字符以及在ASCII內(nèi)的整型

      這個函數(shù)一次只會讀取一個單一的字符

      #include int main() { char a,b; a = getchar(); b = getchar(); putchar(a); putchar(b); }

      輸入jc 輸出jc

      注意

      :在鍵入信息時,字符會暫存在緩存區(qū)中,只有在按下回車時,才會將輸入的字符送往計算機,按順序賦值

      用來輸出字符串并換行

      #include int main(){ char str[]="i am ljc"; puts(str); // i am ljc return 0; }

      注意

      只能輸出字符串,不能輸出數(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 int main() { char c1 = '1', c2 = '2'; c1 = getchar(); c2 = getchar(); putchar(c1); putchar(c2); }

      當(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 int main() { char s[100]; int c, i; scanf("%c", &c); scanf("%d", &i); scanf("%s", s); printf("%c,%d,%s \n", c, i, s); }

      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 int main() { char ch1, ch2; ch1 = 'A' + '5' - '3'; ch2 = 'A' + '6' - '3'; printf("%d,%c\n", ch1, ch2); }

      A、67,D B、B,C C、C,D D、不確定的值

      ==答案:A==

      2.8 程序設(shè)計題目

      編寫打印如下圖形的程序(要求實現(xiàn)讀取用戶輸入,打印幾行圖形,用循環(huán)實現(xiàn)),示例:輸入4

      輸入5

      #include int main() { int n, i, j; scanf("%d", &n); for (i = 0; i < n; i++) { for (j = 0; j < n - 1 - i; j++) { printf(" "); } for (j = 0; j < i + 1; j++) { printf("*"); } printf("\n"); } }

      經(jīng)典題目:輸入一個年份判斷是閏年還是平年

      #include int main() { int i; printf("請輸入一個年份:"); scanf("%d", &i); if (i % 100 == 0) { if (i % 400 == 0) { printf("%d是閏年\n", i); } else { printf("%d是平年\n", i); } } else if (i % 4 == 0) { printf("%d是閏年\n", i); } else { printf("%d年是平年", i); } return 0; }

      編寫程序:計算20到30的每個整數(shù)立方根之和(保留小數(shù)點后兩位)

      #include #include int main() { int i; double s = 0; for (i = 20; i <= 30; i++) { s = s + pow(i, 1.0 / 3); //如果平方根改為s=s+sqrt(i); } printf("%.2f\n", s); return 0; }

      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)容。

      上一篇:Python四六級考試,快來測試一下自己的編程水平吧
      下一篇:基于Redis實現(xiàn)DelayQueue延遲隊列設(shè)計方案
      相關(guān)文章
      99人中文字幕亚洲区| 亚洲黄色片免费看| 久久综合九九亚洲一区| 亚洲午夜精品久久久久久app| 亚洲精品综合一二三区在线| 亚洲精品无码永久中文字幕| 曰韩亚洲av人人夜夜澡人人爽| 亚洲 无码 在线 专区| 亚洲AV永久无码精品一福利| 亚洲日韩av无码中文| 国产精品亚洲综合久久| 亚洲av成人综合网| 亚洲国产成人精品激情| 国产精品亚洲精品青青青| 亚洲AV成人无码天堂| 日韩亚洲产在线观看| 亚洲色偷偷色噜噜狠狠99网| 亚洲乱码一区二区三区国产精品| 亚洲成人福利在线| 亚洲一本之道高清乱码| 色偷偷亚洲女人天堂观看欧| 亚洲国产日韩精品| 亚洲精品无码专区在线播放| 国产精品久久久久久亚洲影视 | 亚洲精品无码永久中文字幕| 亚洲另类激情综合偷自拍图| 久久精品国产亚洲沈樵| 国产AV无码专区亚洲A∨毛片| 亚洲爆乳精品无码一区二区三区 | 亚洲自偷自偷偷色无码中文| 亚洲日韩中文字幕在线播放| 在线播放亚洲第一字幕| 亚洲国产精品一区二区成人片国内| 亚洲av永久无码精品古装片| 亚洲av无码乱码国产精品fc2 | 亚洲av纯肉无码精品动漫| 亚洲M码 欧洲S码SSS222| 综合久久久久久中文字幕亚洲国产国产综合一区首 | 77777_亚洲午夜久久多人| 亚洲福利秒拍一区二区| 色偷偷亚洲女人天堂观看欧|