1. 程式人生 > 其它 >C語言 | 萬惡的期末考試的一點攻略 [1]

C語言 | 萬惡的期末考試的一點攻略 [1]

技術標籤:C語言初學菜雞c語言printf

這是我的第一篇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垂直製表符
\dddd代表一個0-7的數字,對應ASCII碼錶中ddd對應的八進位制數為序號的字元,下舉例說明
\xddd代表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對應的標頭檔案!!!