C語言 | 萬惡的期末考試的一點攻略 [1]
阿新 • • 發佈:2021-01-12
這是我的第一篇CSDN 部落格!
0x00 期末考試正在接近…
嗯,轉眼就年底了,馬上期末考試就要來了。作為一個大一新生,馬上要迎來大一的第一次期末考,未免還是有點小緊張。而且,不知其他高校如何,我的學校C語言期末考安排的是紙質試卷。意味著除了填空題,選擇題,讀程式碼,還有十分魔幻的手寫程式碼。作為像我這樣的的初初初初級萌新,不編譯是看不出錯的(哭
整理了一些C語言常見的考點,寫成總結性的文章,方便看,也方便儲存。
廢話不說了,正片開始。
0x01 各種型別變數在記憶體所佔的大小
總是記不住...
char | 字元型別 | 1個位元組 |
short | 短整型 | 2個位元組 |
int | 整形 | 4個位元組 |
long | 長整型 | 4個位元組 |
long long | 更長整型 | 8個位元組 |
float | 單精度浮點數 | 4個位元組 |
double | 雙精度浮點數 | 8個位元組 |
在指標中,指標型別決定了指標跨一步走了多遠,所以這個位元組數,除了考試,在日常用指標是還是很重要的。雖然我基本不用指標
0x02 有關轉義符
有些題出的真的噁心。
轉義符 | 解釋 |
---|---|
\? | 在書寫連續多個問號時使用,防止他們被解析成三字母詞 |
\’ | 用於表示單引號 |
\“ | 用於表示一個字串內部的雙引號 |
\\ | 用於表示一個反斜槓,防止它被解釋為一個轉義序列符。 |
\a | 警告字元,蜂鳴 |
\b | 退格符 |
\f | 進紙符 |
\n | 換行 |
\r | 回車(回到這一行的開頭) |
\t | 水平製表符(四個空格 |
\v | 垂直製表符 |
\ddd | d代表一個0-7的數字,對應ASCII碼錶中ddd對應的八進位制數為序號的字元,下舉例說明 |
\xdd | d代表0-9,a-f的數字,對應ASCII碼錶中ddd對應的十六進位制數為序號的字元,下舉例說明 |
比如:\012
012對應的十進位制數是10,查ASCII碼錶,發現對應的是\n ,那麼在輸出的時候,就會被替換成換行符,比如下面的程式碼:
#include<stdio.h>
int main ()
{
printf("###\012###");
return 0;
}
十六進位制同理。
注意 八進位制時,\後邊有1-3個數字均可。假如出現了/019這樣的情況,會當作/01 和 9 處理。
以上所有的轉義符均只算做一個字元。在計算字元長度時候,無論是\n,\012還是\a這種蜂鳴,都只算做一個字元。
0x03 有關一些特別的運算子
Very special...
- 模運算 %操作符的兩個運算元必須為整數。返回的是整除之後的餘數。
- sizeof()是操作符,不是函式!
- 式子1, 式子2, 式子3, …, 式子N 這種寫法為逗號表示式(用逗號隔開的多個表示式),從左往右依次執行。整個表示式的結果為最後一個表示式的結果。
0x04 有關函式中變數的應用
函式,yyds!
- 首先,在函式中宣告的變數,在函式呼叫結束後,會被清空。這個是區域性變數。
- 在函式外定義的變數,在函式呼叫後也不會被清除。呼叫函式所佔的記憶體清空時,不影響主函式。
- 函式外定義的叫全域性變數。
- 假如在函式內宣告時,在型別前加上一個static,那麼即便是函式呼叫結束,這個變數也不會被清空。相當於全域性變數。
- 當指標作為變數傳入函式時,*取內容運算子會根據地址找到地址所對應的內容,即便是這個函式外的主函式中。所以可以修改主函式中的值。
- 假如給指標加上一個const,那就只讀了。
- 指標可以指向函式。
0x05 一個可愛的函式
來自翁愷老師的C語言課程
#include <stdio.h>
#include <time.h>
#include <iostream>
int main()
{
srand(time(0));
int result = rand() % 100 + 1;//x%n[0,n-1]
int a = 0, count = 0;
printf("有一個0到100的隨機數,你來猜猜唄。\n");
do {
printf("請輸入:");
scanf_s("%d", &a);
count++;
if (a < result) printf("小了。\n");
if (a > result) printf("大了。\n");
} while (a != result);
printf("好膩害,只用了%d次就猜對了!\n", count);
printf("按ENTER鍵退出。");
getchar();
getchar();
return 0;
}
- ** srand (time (NULL))或者srand(time (0))**
- 用來撒一個隨機數的種子,我稱之為“撒種子”
- 其中用到了time()函式,用來獲取當前時間。
- 計算機中的隨機數都是偽隨機數,rand函式是依據一個多項式計算出來的。srand就是要獲取一個初值。
- 為了保證初值每次呼叫時都不同,就利用一直向前,時時刻刻都不同的時間來作為初始值。
為什麼讓我想起了草史萊姆
- ** int result = rand() % 100 + 1;**
- 獲取一個區間內的隨機數。
-
區間 表示式 [a,b) (rand() % (b-a))+ a [a,b] (rand() % (b-a+1))+ a (a,b] (rand() % (b-a))+ a + 1
- 另外
- 要取得a到b之間的隨機整數,另一種表示:a + (int)b * rand() / (RAND_MAX + 1)。
- 要取得0~1之間的浮點數,可以使用rand() / double(RAND_MAX)。
- RAND_MAX 指的是C語言標準庫 <stdlib.h> 中定義的一個巨集。經預編譯階段處理後,它展開為一個整數型別的常量表達式。
- RAND_MAX 是 <stdlib.h> 中偽隨機數生成函式 rand 所能返回的最大數值。
不要忘了include對應的標頭檔案!!!