第一章 程序設計概述
1.1基本概念
所謂程序就是事情發展先後的順序。N.wirth認為程序=算法+數據結構(以功能為中心的設計思想)
但是根據用戶習慣發現程序應該是以數據為中心 程序=數據結構+算法 簡單對調之後不改變實際意義,只是中心思想發生了轉變。
調試 是指通過一定的方法對程序改錯。
程序錯誤分為 編譯期錯誤(語法錯誤)連接期錯誤(連接對象不存在) 運行期錯誤(邏輯錯誤)
測試 除了驗證程序錯誤還有測試功能能否達到規定要求。
程序設計應該遵守的編碼規則
1採用規範化的原始碼書寫格式
2不吝使用注釋
3選用顧名思義的標示符
4用簡明的方法表達算法
5提供友好的UI界面
1.2C語言概述
C語言起源於BCPL和B語言,
具有高級語言的表達能力,又具有低級語言的與硬體相關的機器處理能力。
結構化程序設計語言(順序,選擇,循環)
函數是構成C的基本構件(不允許嵌套定義函數,允許嵌套與遞歸調用函數,允許在分程序和符合語句中聲明,初始化數據對象[S1] )
C語言的優點有三個:
代碼量小。
運行速度快。
功能強大。(指針)
C語言的缺點有三個:
危險性高。(包容性強,只要你錯的不是很離譜,我就認為你有特殊含義)
開發周期長。(因為是面向過程的語言,寫大項目容易崩潰)
可移植性不強。(主要是針對JAVA說的,JAVA太強了。JAVA在哪個機器都可以運行,而且結果一模一樣,C語言不一定在哪個機器都能運行,即使運行結果不一定一樣)
C程序的編碼默認編碼風格
1關鍵字小寫
2#define定義的宏名用大寫
3每個語句占一行
4用縮進對齊的方式反應程序的不同結構層次
5編譯預處理命令行,外部數據定義,函數定義之間,函數體內的數據聲明和語句序列空一行書寫。
6括住函數體的括號,獨自占一行。相互對齊.
7具有獨立意義的對象里不能查入空格
8不能拆分具有獨立意義的語句。(拆分位置/)
1.3TC2.0的介紹和使用
沒有安裝,先跳過
第二章 數據的表示,運算與基本語句
2.1基本數據類型
C語言預定義符號
1標識數據類型及語句關鍵字
2運算符
3保留字(下劃線)
C語言標識符(由數字 字母 下劃線)
1首字母必須是字母或下劃線
2不能使用關鍵字作為標識符
3避免使用2個下劃線作為開始標識符(保留字有特殊用途,誤用保留字會導致誤判)
4不能使用函數名做標識符(導致意義覆蓋)
5見名知義提高有可讀性
6使用相對短的標識符(便於移植)
7區分大小寫(C語言對大小寫字母敏感)
常量 運行過程中其值已知且不能改變量
程序設計中提倡多用符號常量,少用直接常量
定義一種常量的方式
整型數據和整型變量另附表格
整型變量 (程序中使用的變量必須先聲明後使用,且在函數體或代碼塊中變量的聲明都必須集中在函數體或代碼塊開始的部分,在他們之前不允許有非聲明性語句)
聲明 (是c語言當中的一種非計算功能的語句。不能前綴語句標號。)
C 語言程序可以在函數體內和函數之外聲明變量。
之外聲明的變量叫做外部變量或者是全局變量。這種變量在編譯階段分配儲存空間,程序運行期間一直有效,為程序中函數公用
程序中所有的外部標識符都不可以同名(函數名也是外部標識符),但在編譯階段不能發現同名錯誤,只能在連接裝配階段發現
在函數體內聲明的變量是局部變量,只在函數內有效,對其他函數不可見。只有在該函數被調用的時候才會分配存儲空間,退出函數時取消定義(static靜態變量具有全局生命期)
變量初始化 首次向變量中儲存數值,稱為變量初始化
數據類型 變量名=初始化值
需注意 外部變量和static型變量的初始值必須為常量或者是常量表達式
局部變量的初始化值可以是常量,符號常量,變量名,函數調用及由他們組成的表達式,如果含有變量名,必須是在這之前已經指定了初始化值得變量名
無定義 有些變量不帶初始化值,系統也不會自動置初值,此時稱變量的值無定義
浮點型數據
浮點數是帶小數的十進位類型數據(浮點數在計算機中總是近似的表示,數據近似必然會導致數據的精度,計算誤差和溢出問題,浮點數時有符號書=數,在計算機中以二進位指數表示)
浮點數的效率很低,如果只是整數計算,那麼就避免使用浮點數
浮點數直接量的書寫
十進位小數形式
1整數前書寫+
2整數部分為0或小數部分為0可以省略不寫(兩者都為0時不可省略)
3必須有小數點
4數字中間不能夾有空格
十進位指數形式
±I.F*10^±C
1 I,F分別為指數的小數部分和整數部分,遵循小數規則
2書寫時用E/e,代表底數10
3C是階碼,必須為整型直接量不能省略
4階碼不能缺少,不能為浮點數
字符型數據
定義:字符型數據是c語言中表示字母,數字,標點符號,特殊符號,控制等可顯示與不可顯示字符的數據類型。
字符集:ASCII碼(128)
字符直接量:可顯示字符的直接量表示,用單引號分割
不可顯示字符的直接量(轉義序列)
有符號整形數(-128——127)
無符號整形數(0——255)
字符型變量
用來儲存一個一個字符型數據,聲明使用Char類型關鍵字
初始化值可以是字符型數據,也可以是任意類型的整形數據
Char c 定義一個Char變量
Char 『c』 定義一個Char常量
字符串數據
字符串直接量:用雙引號括起來的0個或多個任何可以表示的字符
(雙引號和反斜槓有特殊作用,在字符串直接量中使用他們的轉義序列。)
字符串直接量的存儲
程序中出現的字符串直接量即使是完全相同都是不同的字符串。(在計算字符串長度時,不計入字符串結束標誌『\0』,但計算字符串占用的儲存空間大小要包括『\0』字符。因此空字符串的長度為0,但是占用存儲空間為1.)
當鍵盤上輸入一個字符串時,只需要直接輸入字符串包含的字符,不要輸入引號(否則作為字符串中的一個字符),不能通過輸入字符的轉義序列替代其字符的輸入。
『\0』 字符串輸出結束標誌
字符型數據和字符串數據的區別
1書寫形式 字符型數據是單引號,字符串數據是雙引號
2字符型數據是整型量,字符串數據是指針型
3字符型數據需要一個字節。字符串數據需要2個字節。
4字符型數據有對應的字符型變量,字符串數據沒有對應的字符串變量。
枚舉型數據
定義:將某問題所有可能的取值都以枚舉常量的方式列舉出來而自行定義(該變量只能只能存儲該枚舉數據類型定義時所列舉的枚舉符號常量值。)
枚舉類型一般形式
enum 枚舉類型名{枚舉符號常量列表};
一些C編譯系統允許將整型數直接賦給枚舉型變量,而大多數C編譯系統都要求先把整形數據強制轉換成枚舉型後再賦給枚舉型變量,但不要求賦給枚舉型變量的值是枚舉符號常量表中列出的值。
2.2運算符和表達式
C99運算符的優先級與結合性
運算符 |
運算功能 |
優先級 |
結合方向 |
( ) |
圓括號 |
1 |
← |
[ ] |
下標運算 |
||
->、. |
結構成員運算 |
||
! |
邏輯非運算 |
2 |
← |
~ |
位非運算 |
||
++ |
增1運算 |
||
-- |
減1運算 |
||
- |
反號運算 |
||
(類型) |
強制類型轉換 |
||
* |
間接引用運算 |
||
& |
求地址運算 |
||
sizeof |
求存儲空間大小 |
||
* |
乘法運算 |
3 |
→ |
/ |
除法運算 |
||
% |
求余運算 |
||
+ |
加法運算 |
4 |
→ |
- |
減法運算 |
||
<< |
左移運算 |
5 |
→ |
>> |
右移運算 |
||
< |
小於比較 |
6 |
→ |
<= |
小於等於比較 |
||
> |
大於比較 |
||
>= |
大於等於比較 |
||
== |
等於比較 |
7 |
→ |
!= |
不等於比較 |
||
& |
按位與運算 |
8 |
→ |
^ |
按位異或運算 |
9 |
→ |
| |
按位或運算 |
10 |
→ |
&& |
邏輯與運算 |
11 |
→ |
|| |
邏輯或運算 |
12 |
→ |
? : |
條件運算 |
13 |
← |
= +=、-=、*=、/=、%= >>=、<<= &=、^= 、|= |
賦值運算、 組合賦值運算 |
14 |
← |
, |
順序求值/逗號運算 |
15 |
→ |
1在進行四則算術運算的時候,不能受代數書寫的影響。加減乘除符號不能省略。
2反號運算 計算無符號數的相反數用2的N次方減去他的值。(N是內存中儲存無符號數的比特數)
3取余運算(操作數必須是整數,非整數求余是非法運算,可以用強制轉換在計算)
4算數表達式(乘除不可省,只能用圓括號來改變運算順序)
5算數表達式中的數據類型提升
○表達式中的short char型操作數總被提升為 int
○float提升依賴於編譯系統
○類型提升是將參與運算的兩個操作數中較低類型直接提升到較高類型不是逐級進行
○數據類型提升是由系統自動進行,只是產生了一個臨時的數參與運算,不改變操作數本身
○任何一個混合型數值表達式的類型除強制轉換運算結果的類型外,通常是該表達式中具有最高數據級別操作數的類型。
按c語言中的算數規則來看,一些簡單的運算可能無法得到正確的結果。由於運算結果類型,數據的表示範圍,有效數字位數等問題需要自行解決
基本語句
1表達式語句(在任何一個表達式後面加上分號,構成的語句)
2複合語句({}括起來的代碼塊)
3空語句(只有一個分號的語句)
雖然空語句什麼都不做,但在語法上是合法的,並且在某些場合必用,比如用空語句實現死循環。
常用數值運算庫函數
數值庫函數(頭文件包含math.h)
求絕對值函數(abs,fabs)
abs該函數只需要一個參數,可以是整型也可以是浮點型。其值總被自動轉換為Int型再求絕對值, abs型函數的返回值是Int
fabs該函數只需要一個參數,可以是整型也可以是浮點型。其值總被自動轉換為double型再求絕對值fabs型函數的返回值是double型。
計算XY 的函數pow
調用形式為pow(x,y),需要給出2個參數,可以是整型或者是浮點型,自動轉換為double型參與運算, 函數的返回值是double型。
當X為負數時,y必須為整數,或者小數點是0的浮點數
計算ex 函數exp
調用形式為exp(X)需要給出1個參數,可以是整型或者是浮點型,自動轉換為double型參與運算,函數的返回值是double型。
平方根函數sqrt
調用形式為sqrt(x)可以是整型或者是浮點型,但是其值必須大於等於0,自動轉換為double型參與運算,函數的返回值是double型。
三角函數的調用形式為函數本身表達式
常見的輸出形式
%d整型輸出,
%ld長整型輸出,
%o以八進位數形式輸出整數,
%x以十六進位數形式輸出整數,
%u以十進位數輸出unsigned型數據(無符號數)。
%c用來輸出一個字符,
%s用來輸出一個字符串,
%f用來輸出實數,以小數形式輸出,(備註:浮點數是不能定義如的精度的,所以「%6.2f」這種寫法是「錯誤的」!!!)
%e以指數形式輸出實數。
%g根據大小自動選f格式或e格式,且不輸出無意義的零。