網(wǎng)站建設(shè)的方法學(xué)生網(wǎng)頁制作成品
? ? ? ? 許多大一新生在初學(xué)C語言是總會遇到各種各樣的問題與疑惑,我今天就在這里為大家進行充分的答疑與解惑,讓大家走出C語言的無誤區(qū),以及能夠少模仿與學(xué)習(xí)網(wǎng)絡(luò)上的各種錯誤代碼。
? ? ? ? 我們將講解C語言的基礎(chǔ)語法知識以及它們的一些簡單運用。(此文感謝李祥老師,文章持續(xù)更新中)
目錄
高級語言程序設(shè)計——C語言篇(基礎(chǔ)語法)
一、基礎(chǔ)知識
? ? ? ? 1.數(shù)值與轉(zhuǎn)換
????????????????(1)十進制
????????????????(2)二進制
????????????????(3)十六進制
????????????????(4)科學(xué)計數(shù)法
????????????????(5)小數(shù)與分數(shù)的轉(zhuǎn)換
????????????????(6)十進制轉(zhuǎn)換為二進制
? ? ? ? 2.程序設(shè)計語言
? ? ? ? ? ? ? ? (1)什么是程序?
? ? ? ? ? ? ? ? (2)什么是計算機程序?
? ? ? ? ? ? ? ? (3)程序設(shè)計與程序設(shè)計語言
? ? ? ? ? ? ? ? (4)低級語言與高級語言
? ? ? ? ? ? ? ? (5)什么是翻譯程序?
? ? ? ? ? ? ? ??(6)什么是解釋程序?
? ? ? ? ? ? ? ??(7)什么是編譯程序?
????????????????(8)什么是連接程序?
????????????????(9)程序開發(fā)的基本過程
? ? ? ? 3.C語言簡介
? ? ? ? ? ? ? ? (1)C語言的特點
? ? ? ? ? ? ? ??(2)C與C++的區(qū)別
????????????????(3)C語言的保留字
二、基本運算
? ? ? ? 1.整數(shù)及其運算
? ? ? ? 2.字符及其運算
? ? ? ? 3.實數(shù)及其運算
? ? ? ? 4.表達式
三、基本模塊
????????1.函數(shù)基礎(chǔ)
????????2.預(yù)處理命令
????????3.變量
????????4.指針初步
四、流程控制
? ? ? ? 1.流程圖
? ? ? ? 2.語句分類
? ? ? ? 3.項目組織
五、選擇結(jié)構(gòu)
? ? ? ? 1.選擇語句
? ? ? ? 2.判斷函數(shù)
? ? ? ? 3.遞歸函數(shù)
? ? ? ? 4.條件編譯命令
六、循環(huán)結(jié)構(gòu)
? ? ? ? 1.循環(huán)語句
? ? ? ? 2.窮舉法
? ? ? ? 3.迭代法
? ? ? ? 4.靜態(tài)變量
七、數(shù)組
? ? ? ? 1.一維數(shù)組
? ? ? ? 2.字符串
? ? ? ? 2.二維數(shù)組
高級語言程序設(shè)計——C語言篇(基礎(chǔ)語法)
一、基礎(chǔ)知識
? ? ? ? 1.數(shù)值與轉(zhuǎn)換
? ? ? ? ? ? ? ??我們學(xué)習(xí)C語言,必然對于計算機有或多或少的了解,也常常會聽到“二進制”之類的話語
? ? ? ? ,在這一節(jié)中,我們就來了解什么是數(shù)制以及他們之間的轉(zhuǎn)化。
? ? ? ? ? ? ? ? 我們常用的數(shù)值為:十進制、二進制、十六進制、二十進制、六十進制等等。
(1)十進制
? ? ? ? ? ? ? ? 數(shù)碼:0, 1, 2, 3, 4, 5, 6, 7, 8, 9
? ? ? ? ? ? ? ? 規(guī)則:逢十進一
??????????????????
??
??
??
??
? ? ? ? ? ? ? ? ?2? ? ? 4? ? ? 0? ? ? 5.? ? ? 8? ? ? ? 7
????????????????2405.87 = 2 *??+ 4 *?
?+ 0 *?
?+ 5 *?
?+ 8 *?
?+ 7 *?
(2)二進制
????????????????數(shù)碼:0, 1
? ? ? ? ? ? ? ? 規(guī)則:逢二進一
十進制 | 二進制 | 十進制 | 二進制 | 十進制 | 二進制 | 十進制 | 二進制 | |||
0 | 0 | 16 | 10000 | 32 | 100000 | 48 | 110000 | |||
1 | 1 | 17 | 10001 | 33 | 100001 | 49 | 110001 | |||
2 | 10 | 18 | 10010 | 34 | 100010 | 50 | 110010 | |||
3 | 11 | 19 | 10011 | 35 | 100011 | 51 | 110011 | |||
4 | 100 | 20 | 10100 | 36 | 100100 | 52 | 110100 | |||
5 | 101 | 21 | 10101 | 37 | 100101 | 53 | 110101 | |||
6 | 110 | 22 | 10110 | 38 | 100110 | 54 | 110110 | |||
7 | 111 | 23 | 10111 | 39 | 100111 | 55 | 110111 | |||
8 | 1000 | 24 | 11000 | 40 | 101000 | 56 | 111000 | |||
9 | 1001 | 25 | 11001 | 41 | 101001 | 57 | 111001 | |||
10 | 1010 | 26 | 11010 | 42 | 101010 | 58 | 111010 | |||
11 | 1011 | 27 | 11011 | 43 | 101011 | 59 | 111011 | |||
12 | 1100 | 28 | 11100 | 44 | 101100 | 60 | 111100 | |||
13 | 1101 | 29 | 11101 | 45 | 101101 | 61 | 111101 | |||
14 | 1110 | 30 | 11110 | 46 | 101110 | 62 | 111110 | |||
15 | 1111 | 31 | 11111 | 47 | 101111 | 63 | 111111 |
?????????? ? ?
???????????????????
??
??
??
??
?
? ? ? ? ? ? ? ? ?1? ? ?1? ? 0? ? 1.? ?1? ? ?1
? ? ? ? ? ? ? ??(1101.11)?= 1 *?
?+ 1 *?
?+ 0 *??
?+ 1 *?
?+ 1 *?
?+ 1 *??
(3)十六進制
? ? ? ? ? ? ? ? 數(shù)碼:0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F(或a, b, c, d, e, f)
? ? ? ? ? ? ? ? 規(guī)則:逢十六進一
??????????????????
??
??
??
? ? ? ? ? ? ? ? ?3? ? ? 0? ? ? E.? ? ? 5? ? ? ?8
? ? ? ? ? ? ? ? (30E.58)?= 3 *?
?+ 0 *?
?+ E *?
?+ 5 *?
?+ 8 *?
(4)科學(xué)計數(shù)法
? ? ? ? ? ? ? ? 十進制科學(xué)計數(shù)法:
? ? ? ? ? ? ? ? ? ? ? ? -12345.6 = -1.23456 *?
? ? ? ? ? ? ? ? ? ? ? ? 0.0003532 = 3.532 *?
? ? ? ? ? ? ? ? 二進制科學(xué)計數(shù)法:
? ? ? ? ? ? ? ? ? ? ? ? 11100.11 = 1.110011 *?
? ? ? ? ? ? ? ? ? ? ? ? -0.00001011 = -1.00 *?
? ? ? ? ? ? ? ? 注:有效數(shù)字、底數(shù)、指數(shù)均為相應(yīng)進制
(5)小數(shù)與分數(shù)的轉(zhuǎn)換
? ? ? ? ? ? ? ? 此處只舉二進制數(shù)的例子,其余進制數(shù)類似:
? ? ? ? ? ? ? ? ? ? ? ? 10.101 = 10 +?
? ? ? ? ? ? ? ? ? ? ? ???= 10 +?
?????????????????????????= 10 +?
?+?
(6)十進制轉(zhuǎn)換為二進制
? ? ? ? ? ? ? ??(4.357)?= (100.011)
? ? ? ? ? ? ? ? 將十進制數(shù)分為整數(shù)部分4和小數(shù)部分0.357
? ? ? ? ? ? ? ? 對于整數(shù)部分:
? ? ? ? ? ? ? ? ? ? ? ? 采用短除法(如圖示)
? ? ? ? ? ? ? ? 對于小數(shù)部分:
????????????????????????采用逐乘取整法(如圖示)
? ? ? ? 2.程序設(shè)計語言
? ? ? ? ? ? ? ? (1)什么是程序?
? ? ? ? ? ? ? ? ? ? ? ? 舉一個番茄炒雞蛋的例子:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 我們進行烹飪這道菜時,首先洗凈番茄,去皮、切塊,再打散雞蛋,然后平底
????????????????????????鍋中加入適量鹽,開火,將番茄炒至凝結(jié)后,調(diào)大火,加入番茄,至熟后,出鍋、
? ? ? ? ? ? ? ? ? ? ? ? 結(jié)束。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 這就是一個炒番茄的方法。
? ? ? ? ? ? ? ? ? ? ? ? 這種方法步驟,我們就叫它為程序。
? ? ? ? ? ? ? ? (2)什么是計算機程序?
? ? ? ? ? ? ? ? ? ? ? ? 簡單來講,就是在計算機內(nèi)部進行的一連串操作,通常在內(nèi)存中進行。
? ? ? ? ? ? ? ? (3)程序設(shè)計與程序設(shè)計語言
? ? ? ? ? ? ? ? ? ? ? ? 程序設(shè)計:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 是設(shè)計、編制和調(diào)試程序的過程。它是目標明確的智力活動。
? ? ? ? ? ? ? ? ? ? ? ? 程序設(shè)計語言:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 是用于計算機程序的語言。
????????????????????????????????語言的基礎(chǔ)是一組記號和一組規(guī)則。根據(jù)規(guī)則由記號構(gòu)成的記號串的總體就是
?????????????????????????語言。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 在程序設(shè)計語言中,這些記號串就是程序
? ? ? ? ? ? ? ? (4)低級語言與高級語言
? ? ? ? ? ? ? ? ? ? ? ? 低級語言:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 如匯編語言:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? MOV AX, x? ? ? ? ? ? ? ? ? ? ? ? ? ?A1 0178? ? ? ? ? ?[0178]的值取至AX中
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ADD AX, y? ? ? ??匯編后? ? ?0306 018C? ? ? ?[018C]的值加至AX中
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? MOV, z, AX? ? ? ? ? ? ? ? ? ? ? ? ? A3 019E? ? ? ? ? ? AX的值存至[019E]中
? ? ? ? ? ? ? ? ? ? ? ? 高級語言:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ???????????? ? ? ? ? ? ? ? ? ? ? ? ? ?A1 0178? ? ? ? ? ?[0178]的值取至AX中
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? z = x * y;? ? ? ? ??編譯后? ? ?0306 018C? ? ? ?[018C]的值加至AX中
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??? ? ? ? ? ? ? ? ? ? ? ? ? A3 019E? ? ? ? ? ? AX的值存至[019E]中
????????????????????????
? ? ? ? ? ? ? ? ? ? ? ? 于是相比較而言:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 低級語言:面向機器,與機器密切相關(guān)。功效高,但使用復(fù)雜、繁瑣、易錯。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 高級語言:面向問題,與具體機器無關(guān)。易學(xué)、易維護,但其功效往往較低。
? ? ? ? ? ? ? ? (5)什么是翻譯程序?
? ? ? ? ? ? ? ? ? ? ? ??把一種程序設(shè)計語言所寫的程序翻譯成與之等價的另一種程序設(shè)計語言所表示的程
? ? ? ? ? ? ? ? 序的軟件。被翻譯的程序稱為源程序,翻譯程序翻譯出的程序稱為目標程序。書寫源程
? ? ? ? ? ? ? ? 序所用的程序設(shè)計語言稱為源語言,用于構(gòu)成目標程序所用的語言稱為目標語言。
? ? ? ? ? ? ? ??(6)什么是解釋程序?
????????????????????????按照源程序的指令或語句的動態(tài)執(zhí)行順序,逐條或逐句翻譯,并立即執(zhí)行的翻譯程
????????????????序。解釋程序把源程序中的指令或語句翻譯成對應(yīng)的一條或一組機器指令,并立即執(zhí)行,
????????????????不生成目標程序。
? ? ? ? ? ? ? ??(7)什么是編譯程序?
????????????????????????把用高級程序設(shè)計語言書寫的源程序,翻譯成等價的計算機匯編語言或機器語言的目
????????????????標程序的翻譯程序。編譯程序的實現(xiàn)算法較為復(fù)雜,這是因為它所翻譯的語句與目標語言
????????????????的指令不是一一對應(yīng)關(guān)系,而是一多對應(yīng)關(guān)系;同時也因為它要處理遞歸調(diào)用、動態(tài)存
????????????????儲分配、多種數(shù)據(jù)類型,以及語句間的緊密依賴關(guān)系。
????????????????(8)什么是連接程序?
? ? ? ? ? ? ? ? ? ? ? ? 程序庫:一些經(jīng)常使用、經(jīng)過檢驗的規(guī)范化程序或子程序的集合(如:開方、三角函
????????????????數(shù)、指數(shù)和對數(shù)函數(shù)、代數(shù)方程、微分方程和積分方程的求解程序等)
? ? ? ? ? ? ? ? ? ? ? ? 連接裝配程序:把多個經(jīng)過編譯或匯編的目標模塊,以及系統(tǒng)的程序庫,連接裝配成
????????????????一一個完整的可執(zhí)行程序的軟件。
????????????????(9)程序開發(fā)的基本過程
? ? ? ? ? ? ? ? ? ? ? ? 以C語言為例子:
? ? ? ? ? ? ? ? ? ? ? ? 編譯:調(diào)用編輯軟件創(chuàng)建或修改源程序文件(.c)
? ? ? ? ? ? ? ? ? ? ? ? 編譯:調(diào)用編譯程序?qū)υ闯绦蜻M行編譯,生成目標文件(.o, .obj)
? ? ? ? ? ? ? ? ? ? ? ? 連接:調(diào)用連接程序?qū)⒛繕宋募拖到y(tǒng)庫進行連接,生成可執(zhí)行文件(.exe)
? ? ? ? ? ? ? ? ? ? ? ? 運行:運行可執(zhí)行文件,輸入所需要的數(shù)據(jù),得到相應(yīng)的輸出結(jié)果
? ? ? ? 3.C語言簡介
? ? ? ? ? ? ? ? (1)C語言的特點
? ? ? ? ? ? ? ? ? ? ? ??語言簡介、緊湊、使用方便、靈活(32個關(guān)鍵字,9種控制語句,程序形式自由)
? ? ? ? ? ? ? ? ? ? ? ? 運算符豐富(34種運算符)。
? ? ? ? ? ? ? ? ? ? ? ? 數(shù)據(jù)類型豐富(具有現(xiàn)代化語言的各種數(shù)據(jù)結(jié)構(gòu))。
? ? ? ? ? ? ? ? ? ? ? ? 完全模塊化和結(jié)構(gòu)化的語言(具有結(jié)構(gòu)化的控制語句)。
? ? ? ? ? ? ? ? ? ? ? ? 程序設(shè)計自由度大(語法限制不太嚴格)。
? ? ? ? ? ? ? ? ? ? ? ? 兼有高級語言和低級語言的特點(允許直接訪問物理地址,能進行位操作,能使實
????????????????現(xiàn)匯編語言的大部分功能,可直接對硬件進行操作)。
? ? ? ? ? ? ? ? ? ? ? ? 目標代碼質(zhì)量高,程序執(zhí)行效率高(只比匯編程序生成的目標代碼效率低
????????????????10%~20%)。
? ? ? ? ? ? ? ? ? ? ? ? 程序可移植性好。
? ? ? ? ? ? ? ? ? ? ? ? C語言是程序員的語言。
? ? ? ? ? ? ? ??(2)C與C++的區(qū)別
????????????????????????C是面向過程的語言。
? ? ? ? ? ? ? ? ? ? ? ? C++是C的超集,它的主要特點是面向?qū)ο蟆?/p>
????????????????(3)C語言的保留字
????????????????????????標準C語言的32個保留字:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 變量數(shù)據(jù)類型(14個):char? short? int? long? float? double? signed? unsigned?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??void? volatile? typedef? struct? enum? union
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 基本語句有關(guān)(12個):if? else? witch? case? break? default? for? do? while
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?continue? goto? return
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 存儲類型有關(guān)(5個):const? extren? static? register? auto
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 運算符(1個):sizeof
????????????????(4)簡單的C程序
? ? ? ? ? ? ? ? ? ? ? ? C語言是由函數(shù)組成的語言下文代碼中“int main()”就是一個函數(shù)首部,后面大括號
? ? ? ? ? ? ? ? 內(nèi)的就是函數(shù)體,“printf...”和“return 0”都是語句,其中后者的作用是返回函數(shù)值,并結(jié)
? ? ? ? ? ? ? ? 束這個函數(shù),其中名字為“main”的函數(shù)就是C語言的主要函數(shù),任何C語言的執(zhí)行都由這
? ? ? ? ? ? ? ? 個函數(shù)開始,從這個函數(shù)結(jié)束。
#include <stdio.h>int main()
{printf("Hello, world!");return 0;
}
二、基本運算
? ? ? ? 1.整數(shù)及其運算
? ? ? ? ? ? ? ? (1)基本原理
? ? ? ? ? ? ? ? ? ? ? ??無符號整數(shù)(以4位無符號整數(shù)舉例):
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 值域:0 ~ 15 (?~
)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 模數(shù):16 ()
1011 | 1110 | |||
+? ? ? 0010 | +? ? ? 0011 | |||
1101 | ? ? ?1?0001 | |||
(11+2) mod 16 | (14+3) mod 16 | |||
= | 13 mod 16 | = | 17 mod 16 | |
= | 13 | = | 1 |
類型名稱 | 字長 | 模數(shù) | 值域 |
unsigned char | 8位 | 256 ( | 0 ~ 256 |
unsigned short int | 16位 | 65,536 ( | 0 ~?65,536 |
unsigned long int? | 32位 | 4,294,967,296? ( | 0 ~?4,294,967,296 |
unsigned long long int | 64位 | 18446744073709500000 ( | 0 ~ 18446744073709500000 |
????????????????????????符號整數(shù)(以4位符號整數(shù)舉例):
????????????????????????????????符號的表示:
X | X | X | X |
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (符號位)
?????????????????????????????????????????????????????????????0 表示正,1 表示負
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??符號整數(shù)的編碼:原碼,反碼,補碼(現(xiàn)代計算機符號整數(shù)采用補碼表示)
? ? ? ? ? ? ? ? ? ? ? ? 原碼:
????????????????????????????????正整數(shù)的原碼:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 求相反數(shù)的方法:顛倒最高位(1111的相反數(shù)為0111)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 不能直接計算:
????????????????????????????????????????