c語言學習筆記(二)
八進位制
把二進位制所有數字從右向左的每三個數字分成一組,每組用乙個數字替代,替換後的結果叫八進位制
0110 1010 01 101 010
1 5 2 (八進位制) %o->佔位符 0152 八進位制開頭數字必須用0開頭
十六進製制
把二進位制所有數字從右向左的每四個數字分成一組,沒組用乙個數字替換,替換後的結果叫十六進製制
1100 1010
c b (十六進製制) %x/%x->佔位符 0xcb 八進位制開頭數字必須用0x開頭
%x--> 小寫做站位符時顯示結果所有字元都為小寫的
%x--> 大寫做站位符時顯示結果所有字元都為大寫的
操作符
單目操作符,雙目操作符,三目操作符
printf("如果需要顯示%符號需要用兩個 %% 不能使用\%");
=賦值操作符從右向左計算
* 復合賦值操作符的優先順序和賦值操作符的優先順序一樣低
* num *= 2+3; *號和=好乙個優先順序先算 2+3 再 *=
* ++與 -- 單目操作符,只能與儲存區使用,不能和數配合使用
* 不要在一條語句裡對同一變數進行多次自增或自減計算
** num=num+++ ++num;不要在程式裡面同一變數進行兩次自增自減操作
邏輯操作符——結果一定是布林值
!相反數
位操作符
按位取反 ~是乙個單目位操作符,把二進位制內容按位求反
按位與 & 兩個數只要乙個位是0,當前位結果就是0
數與0與都為0,和1與數不變
按位或 | 兩個數只要乙個位是1,當前位結果就是1
按位異或 ^ 兩個數字上的數字一樣為 0 ,否則為 1
位移操作 >> / <<
無符號位型別數字右移動時左邊空出來的位置填充0
有符號位型別數字右移動時左邊空出來的位置填充符號位
一般情況下向左移動n位相當於乘以2的n次方
…… 向右…… 除以 ……
所有的位操作符不會修改儲存區的值
三目運算符號
* 如果表示式裡包含的數字型別不同,計算機必須首先把它們轉換成同乙個型別而後進行處理
* 這個轉換過程叫隱式型別轉換,完全由計算機完成
* 隱式型別轉換中一定是把占地小的型別轉換成占地大的型別
* sizeof(1?1:0.9)(sizeof輸出的值是多少)
* 如果多個數字的型別不同但占地大小一樣,就把有符號型別轉換成無符號型別,把整數型別轉換成浮點型別
* -7+ 3u > 0 (真)
強制型別轉換有可能導致資料丟失
intnum = (char)300; num == 44;
佔位符型別字元用於控制輸出項
%d 十進位制輸出
%o 八進位制輸出023(八進位制顯示)
%xx 十六進製制輸出0xffff,大寫%x是以大寫輸出0xffff
%u 十進位制無符號輸出23u無符號
%f/%g 單精度輸出 12.2000f 表示/%g顯示時忽略小數點後的零
%lf/%lg 雙精度輸出小數點預設雙精度輸出/%lg同上
%c 單字元輸出
%s 字串輸出
格式輸出
- 左對齊,右邊填空格
+ 符號位輸出
流程控制語句
if……else
switch……case……default……
for
goto
巢狀迴圈
while
break;
continue;
隨機數
#include //獲取系統時間從而讓隨機數隨時更新
#include
srand() ——設定隨機數種子
rand() ——獲取偽隨機數
任何函式之需要設定一次隨機數種子
緩衝區
輸入緩衝區
scanf();
使用了輸入緩衝區,使用者在鍵盤上輸入的數字首先進入輸入緩衝區,而後才進入程式儲存區
先進入輸入緩衝區的資料首先被處理,如果先輸入的數字沒被處理,則後輸入的數字不會被處理
如果使用者輸入的資料格式和程式要求的格式不一致就可能導致以後輸入的資料都無法的到處理
scanf("%*[^\n]");
scanf("%*c"); --清空輸入緩衝區
輸出緩衝區
printf();
在以下四種情況輸出快取區里的東西會顯示在螢幕上
1、'\n' \n前面的內容會顯示在螢幕上
2、程式結束了,輸出緩衝區的內容會顯示在螢幕上
4、緩衝區填滿了也會顯示在螢幕上
3、fflush(stdout); 強制把輸出緩衝的內容輸出在螢幕上
scanf("%d",&num);//此語句類似fflush(stdout);機制強制刷緩衝區
陣列
陣列一旦存在則裡面包含的儲存區個數不可改變
陣列宣告的時候應該初始化
1.int arr[4] = ;
陣列名稱不可以代表儲存區,所以不能放在賦值操作符的左邊
int a[5]=;
a= 0; //錯誤
a代表儲存區呢第乙個元素的位址
sizeof(a)關鍵字小括號裡可以使用陣列名稱,這樣計算出來的是整個陣列包含的位元組個數
變長陣列
c99規範裡允許使用邊長陣列
在程式一次執行過程中變長陣列裡的儲存區個數是不能改變的
如果程式多次執行則每次陣列裡包含的儲存區個數可以不同
邊長陣列不可以初始化
二維陣列
它可以表示儲存區的一次分組情況
多函式程式的執行模式
所有時間段必須連續的並且任何倆個時間段不能重疊
volatile可以用來宣告變數,如果變數對應的儲存區同時被多個程式使用就應該用這個關鍵字
+宣告這個變數
不論那個方向的資料傳遞都需要使用被呼叫函式提供的一組儲存區
陣列形式引數
c語言裡函式引數個數可以不固定這個引數叫做變長引數
編寫變長引數函式時不能給引數命名,在被呼叫函式裡需要使用特殊方法獲得形式引數的內容
除了主函式以外的所有函式都應該顯示宣告,已防止函式與隱式宣告產生衝突
exit(0); #include 退出整個程式
遞迴函式
如果乙個問題很複雜,難以直接解決,它可以分解成幾個小問題,其中至少有乙個小問題和
+原來的問題本質上一樣,只不過稍微簡單一點,這種問題可以採用遞迴函式解決
遞迴函式編寫的步驟:
1、編寫語句描述問題的分解方式(假設遞迴函式已經完成)
2、在遞迴函式開頭別寫分支處理不能分解的情況(這個分支要保證能讓遞迴函式結束)
採用迴圈解決問題的思路叫遞推
採用遞迴函式解決同樣問題的思路叫遞迴
《續 : c語言學習筆記(三)>
C語言學習筆記(二)
11 structure 結構體可以用或者來進行初始化 例如 但是 本身不是expression,不能對struct進行賦值!以下用法是錯誤的 c99增加了對一種語法如下,但是vc9中不支援這種語法,因此應該盡量避免採用。結構體的成員名和變數名不在同一命名空間中,因此兩者不會出現明明衝突。另外,結構...
C語言學習筆記(二)
1.題目 編寫程式,列印菱形星號組合 1 include 2 int main 3 2.a 10 逆序輸出陣列 1 include 2 int main 3 4 int n,i 5 for i 0 i 5 i 6 11 for i 0 i 9 i 12 15 return 0 16 173.氣泡排序...
c語言學習筆記二
函式 注 linux下執行.c執行以下命令 gcc filename.c lm 由於數學函式位於libm.so中 a.out c標準庫和glibc c標準庫 描述c的語法 描述c標準庫 glibc 是linux平台上最廣泛的c函式庫 包括標準庫和所有系統庫 數學函式 示例 include inclu...