一、C語言基礎
1 代碼結構刨析
1.1 標準庫、頭文件
??printf() 是在標準庫的頭文件 stdio.h 中定義的。要想在程序中使用這個函數,必須在源文件頭部引入這個頭文件。即:
#include <stdio.h>
1.1.1 何為標準庫
??程序需要用到的功能,不一定需要自己編寫,C 語言可能已經自帶了。程序員只要去調用這些自帶的功能就可以了。C 語言自帶的所有這些功能,統稱為“標準庫”(standard library),包含C 內置函數、常量和頭文件。
??因為它們是寫入標準的,到底包括哪些功能,應該怎么使用,都是規定好的,我們直接調用即可。
1.1.2 何為頭文件
??不同的功能定義在不同的文件里,這些文件統稱為“頭文件”(header file)。如果系統自帶某一個功能,就一定會自帶描述這個功能的頭文件,比如 printf() 的頭文件就是系統自帶的 stdio.h 。頭文件的后綴通常是 .h 。
1.1.2 預處理命令:#include 命令
??如果要使用某個功能,就必須先加載其對應的頭文件,加載使用的是 #include 命令,聲明在各文件模塊的開頭。C語言中以 # 號開頭的命令稱為預處理命令。顧名思義,在編譯器對當前C程序進行編譯前執行預處理操作。
格式:
#include <頭文件名>
舉例:
#include <stdio.h>
注意,加載頭文件的 #include 語句不需要分號結尾
對比寫法:
#include <stdio.h>: //編譯系統在系統頭文件所在目錄搜索
#include "stdio.h": //編譯系統首先在當前的源文件目錄中查找 stdio.h,找不到的話,再轉向系統頭文件所在目錄搜索。
stdio.h是系統提供的一個文件名,stdio是standard input & output的縮寫。
結論:
- 引用系統頭文件,兩種形式都會可以,
#include <>效率高。
- 引用用戶頭文件,只能使用
#include ""。
1.1.3 常用的C頭文件
stdio.h——定義核心輸入和輸出函數- printf()、scanf()、getchar()、putchar()
stdlib.h——定義數值轉換函數、偽隨機網絡生成器和內存分配string.h——定義字符串處理函數stdint.h——定義精確寬度的整數類型math.h——定義常用的數學函數- sin()、sqrt()
stddef.h——定義了幾個有用的類型和宏
— 練習:
以下敘述中正確的是( )。
A.C程序中的注釋只能出現在程序的開始位置和語句的后面
B.C程序書寫格式嚴格,要求一行內只能寫一個語句
C.C程序書寫格式自由,一個語句可以寫在多行上
D.用C語言編寫的程序只能放在一個程序文件中【答案】C
【解析】C程序的注釋可以出現在C程序的任何位置,注釋符號:“//”或“/…/”,選項A錯誤。C程序中,一行內可寫多個語句,每條語句用分號“;”結束,選項B錯誤,選項C正確。用C語言編寫的程序可以放在多個程序文件中,用#include命令行實現文件包含功能,選項D錯誤。答案選擇C選項。
【中央財經大學2018研】以下敘述錯誤的是( )。
A.在程序中凡是以“#”開始的語句行都是預處理命令行
B.預處理命令行的最后不能以分號表示結束
C.#include MAX是合法的宏定義命令行
D.C程序對預處理命令行的處理是在程序執行的過程中進行的【答案】D
【解析】在C語言中,凡是以“#”開頭的行都稱為編譯預處理命令行,為了區別C語句,后面是不加分號的。編譯預處理是在編譯程序對C源程序進行編譯前執行的,而不是在程序執行過程中進行的。
注意:
學習編程最容易犯的錯是
語法錯誤。C語言要求必須按照語法規則編寫代碼。如果你的程序違反了語法規則,例如:忘記了分號、大括號、引號 或者拼錯了單詞等,C編譯器都會報語法錯誤。嘗試著去看懂編譯器會報告的錯誤信息。
2 關于輸出
2.1 printf()標準格式
printf(格式控制字符串,輸出列表);

其中,
-
"格式控制字符串"是用雙引號括起來的一個字符串。包括:- 普通字符:普通字符即需要在輸出時原樣輸出的字符。
- 占位符:由“%”和格式字符組成。這個位置可以用其它值代入。
-
"輸出列表"是程序需要輸出的一些數據,可以是常量、變量或表達式。用于替換占位符的位置。
注意:printf() 參數與占位符是一一對應關系。如果參數個數少于對應的占位符, printf() 可能會輸出內存中的任意值。
2.2 占位符
占位符的第一個字符是 % ,第二個字符表示占位符的類型。
printf() 的占位符有許多種類,與 C 語言的數據類型相對應。
下面按照字母順序,列出占位符如下,方便查閱(紅色為常用的):
%a :浮點數(僅C99有效)
%A :浮點數(僅C99有效)
%c :char型數據
%d :十進制整數(int)
%e :使用科學計數法的浮點數,指數部分的 e 為小寫
%E :使用科學計數法的浮點數,指數部分的 E 為大寫
%i :整數,基本等同于 %d
%f :浮點數(float)
%g :6個有效數字的浮點數。整數部分一旦超過6位,就會自動轉為科學計數法,指數部分的 e 為小寫
%G :等同于 %g ,唯一的區別是指數部分的 E 為大寫
%hd :十進制 short int 類型
%ho :八進制 short int 類型
%hx :十六進制 short int 類型
%hu :unsigned short int 類型
%ld :十進制整數(long)
%lo :八進制 long int 類型
%lx :十六進制 long int 類型
%lu :unsigned long int 類型
%lld :十進制 long long int 類型
%llo :八進制 long long int 類型
%llx :十六進制 long long int 類型
%llu :unsigned long long int 類型
%le :科學計數法表示的 long double 類型浮點數
%lf :十進制浮點數(double)
%n :已輸出的字符串數量。該占位符本身不輸出,只將值存儲在指定變量之中
%o :八進制整數
%p :指針
%s :字符串
%u :十進制無符號整數(unsigned int)
%x :十六進制整數
%zd : size_t 類型
%% :輸出一個百分號
2.3 舉例
舉例1:%d
int num = 10;
printf("count is %d\n",num); //輸出:count is 10
printf("There are %i students\n", 5); //輸出:There are 5 students
舉例2:%lf 和 %f
float f = 3.1415926535f; // 單精度浮點數
double d = 3.1415926535; // 雙精度浮點數
// 使用 %f 輸出單精度浮點數
printf("Float: %f\n", f); //Float: 3.141593
// 使用 %lf 輸出雙精度浮點數
printf("Double: %lf\n", d); //Double: 3.141593
// 使用 %f 輸出單精度浮點數
printf("Float: %.8f\n", f); //Float: 3.14159274
// 使用 %lf 輸出雙精度浮點數
printf("Double: %.8lf\n", d); //Double: 3.14159265
舉例3:%c
char level = 'A';
printf("this score level is:%c\n",level); //輸出:this score level is:A
舉例4:%s
printf("%s是我最喜歡的冷門歌手.\n","孫燕姿"); //輸出:孫燕姿是我最喜歡的冷門歌手.
舉例5:多個占位符
輸出文本里面可以使用多個占位符。
printf("%s有%d部手機\n", "老板", 2); //輸出:老板有2部手機
2.4 輸出格式
printf() 可以定制占位符的輸出格式。
格式1:限定寬度
printf() 允許限定占位符的最小寬度。
printf("%5d\n", 123); // 輸出為 " 123"
說明:%5d 表示這個占位符的寬度至少為5位。如果不滿5位,對應的值的前面會添加空格。
輸出的值默認是右對齊,即輸出內容前面會有空格;如果希望改成左對齊,在輸出內容后面添加空格,可以在占位符的 % 的后面插入一個 - 號。
printf("%-5d\n", 123); // 輸出為 "123 "
對于小數,這個限定符會限制所有數字的最小顯示寬度
printf("%12f\n", 123.45); // 輸出 " 123.450000"
%12f 表示輸出的浮點數最少要占據12位。由于小數的默認顯示精度是小數點后6位,所以123.45 輸出結果的頭部會添加2個空格。
格式2:總是顯示正負號
默認情況下, printf() 不對正數顯示 + 號,只對負數顯示 - 號。如果想讓正數也輸出 + 號,可以在占位符的 % 后面加一個 + 。
printf("%+d\n", 11); // 輸出 +11
printf("%+d\n", -11); // 輸出 -11
格式3:限定小數位數
輸出小數時,有時希望限定小數的位數。舉例來說,希望小數點后面只保留兩位,占位符可以寫成 %.2f 。
printf("Number is %.2f\n", 0.8); // 輸出 Number is 0.80
這種寫法可以與限定寬度占位符,結合使用。
printf("%6.2f\n", 0.8); // 輸出為 " 0.80"
說明:%6.2f 表示輸出字符串最小寬度為6,小數位數為2。整體長度不足 6 位時,右對齊顯示。
最小寬度和小數位數這兩個限定值,都可以用 * 代替,通過 printf() 的參數傳入。
printf("%*.*f\n", 6, 2, 0.8);
//等同于
printf("%6.2f\n", 0.8);
【華南理工大學2018研】十六進制形式輸出整數的格式說明符是( )。
A.%u
B.%ld
C.%x
D.%o【答案】C
【解析】A表示輸出的是無符號整型;B表示輸出的是有符號長整型;D表示輸出的是八進制。
練習
練習1:開發一個 ILoveC.c 程序,可以輸出 "某某 is studying c!"
#include<stdio.h>
int main(){
//printf("谷小妹 is studying C!\n");
//printf("%s is studying C!\n","谷小妹");
return 0;
}
練習2:控制臺打印:5 + 3 = 8
#include <stdio.h>
int main() {
printf("%d + %d = %d\n", 5, 3, (5 + 3));
return 0;
} //函數結束
附錄:C/C++ Single File Execution插件的安裝
1、為何安裝C/C++ Single File Execution插件?
前面已經創建了一個demo1工程,項目文件夾內存在一個代碼文件,名為main.c。如果再創建一個C源文件,內部如果也包含main()函數,則會報錯!因為默認C工程下只能有一個main()函數。如何解決此問題呢?
2、安裝并測試
1)在 File - Settings - Plugins 中搜索 C/C++ Single File Execution 插件并安裝

2)在需要運行的代碼中右鍵,點擊 Add executable for single c/cpp file

3)此時可以在 Cmakelists.text 文件中看到多出的這一行代碼,這就是插件幫我們完成的事情

4)右鍵項目文件夾,點擊 Reload CMake Project 進行刷新

5)此時右上角標簽處已經增加了我們的文件選項,選擇需要的標簽

6)點擊小三角,或右鍵代碼處點擊 Run 選項,即可運行代碼。

7)在該工程下創建main2.c文件,文件中的代碼如下所示,執行上面相同的步驟。
#include <stdio.h>
int main() {
printf("Hello, World2!\n");
return 0;
}
可以發現一個工程中允許存在多個main方法了,而且可以獨立允許。

浙公網安備 33010602011771號