概論: '/*'註釋內容的開始,'*/'註釋內容的結束 預處理指令 # include "studio.h" “studio.h”文件定義了很多輸入輸出功能 *.h 頭文件 *.c c源程式文件 main 函數 void mian() void代表函數不需要返回值,不需要將結果遞交給上一級程式 每個 ...
概論:
- '/*'註釋內容的開始,'*/'註釋內容的結束
- 預處理指令
- “studio.h”文件定義了很多輸入輸出功能
- *.h 頭文件
- *.c c源程式文件
- main 函數
- 每個C語言程式中必須只能有一個命名為main的函數,這是唯一的起點,是所有函數的上級函數
- C語言中規定每條語句都必須以“;”作為結束標誌
- “\n”換行
- C語言編譯過程: 編譯預處理,編譯,優化,彙編,鏈接並生成可執行的機器語言程式文件
- 運行和調試:1, 程式文檔讀入記憶體,分配記憶體空間
- 一般錯誤;
- 語法錯誤
- 邏輯錯誤
- 運行錯誤
- 基本數據類型:
- 整形
- 有無符號
- 無符號整數(保存形式:二進位原碼)
- 有符號整數(保存形似:最高位為符號位,0+,1-, 正數以原碼保存,負數以補碼保存)
- 範圍大小
- 字元型 (1位元組 )
- 短整型 (2位元組)
- 標準整型
- 長整型 (4位元組)
- 浮點型
- 有無符號
- 有符號浮點數
- 無符號浮點數
- 精度
- 單精度浮點型 float
- 雙精度浮點型 double
- 高精度浮點型 long double
- 指針型
- 常量
- 字面常量
- 整型常量
- 十進位
- 八進位 (整數開頭假0)
- 十六進位 (整數開頭加0x或0X)
- 實型常量
- 十進位小數
- 指數形式 0.5e3
- 字元常量(單引號 char型)
- 普通字元常量 ‘a’ 'b'
- 轉義字元常量 ‘\’
- 字元串常量 (雙引號) remark: C語言中存儲的字元串常量都以'\0'作為字元串的結束標誌: ‘A’占一個位元組“A”占兩個位元組
- 符號常量 用符號對常量命名:
\n | 換行 |
\t | 水平製表,跳到下一個tab |
\v | 垂直製表 |
\b | 退格,當前位置移到前一列 |
\r | 回車,將當前位置移到本行開頭 |
\f | 換頁,將當前位置移到下一頁開頭 |
\a | 響鈴報警 |
\0 | 空字元,字元串結束符 |
\\ | 代表反斜杠 |
\' | 字元''' |
\" | 字元“ |
\ddd | 1~3位八進位數字 |
\xhh | ‘hh’1~2位十六進位數字 |
- 變數
- 標誌符(字母,數字下劃線組成,並且第一個字母不能由數字組成,大小寫有別,不建議長度超過8個字元)
- 關鍵字(if...)
- 預定義標誌符:define
- 用戶標識符:day..
- 規則:類型名 變數1,變數2;
void main() { int a,b; char ch1,ch2; }
- 變數的初始化
- int a=12,b-3;
- char *p=0; 將指針變數初始化為0是一個好習慣?
- 變數的引用
- & 對應存儲單元的地址
- 賦值運算
- 輸入輸出
- 需要有預編譯命令:
- 基本輸出
- 單個字元輸出 putchar()
- 格式化輸出函數 printf() printf(格式控制,輸出表列)
- c 字元
- d 整數
- u 無符號十進位
- x 無符號十六進位
- f 小數
- e 指數
- s 字元串
- % %
- 附加修飾符
- - 左對齊標誌,預設為右對齊
- + 正數輸出帶有正號
- 數字 輸出寬度
- .數字 小數位數
- H 短整數
- l 或者L 長整數或者浮點數
- 基本輸入
- 單個字元輸入getchar() getchar();
- 格式化輸入scanf();
- 單雙目運算
- 優先順序與結合性
- 數據類型轉換
- 強制類型轉換
- 自增,自減運算: ++a: 變數先自增,然後將值傳給表達式
- 關係運算:
- 優先順序較高: >, >=,<=,<
- 優先順序較低:==,!=
- 邏輯運算
- !非
- &&與
- || 或
- 位運算
- 按位邏輯運算
- 移位運算
- x = x>>2
- 左移一位相當於乘以2,右移一位相當於除以2
- 指針運算
- 取地址計算
- 通過指針變數或地址常量獲得地址
- 通過標準函數獲得地址值
- 不允許給一個指針變數直接賦給一個整數值 int *p p=2009 (錯) int *p p= NULL, p為空指針
- (NULL是stdio.h頭文件中定義的符號常量,值為0)
- 操作指針變數
- 指針變數的使用必須是先賦值後使用
- “&”和“*”優先順序相同,右結合
- 移動指針
- 比較指針
- 其他運算
- sizeof運算
- 代表長度,右結合,結果是一個無符號的整形
- 指針型占空間為4位元組
- 逗號運算
- 左結合,自左向右
- 條件運算
- 三目運算:max=(x>y)?x:y;
- 表達式一?表達式二:表達式三;
- 表達式為非0,則結果為表達式二,如果,表達式一為0,則結果是表達式三
# include <stdio.h> #include <string.h> void main() { int a,b,c,t; printf("please input 3 numbers:"); scanf("%d%d%d",&a,&b,&c); t=(a>b)?a:b; t=(t>c)?t:c; printf("%d",t); }
- 賦值運算
- = 右側賦值給左側
- 複合賦值運算
- a+=b a=a+b
- a-=b a=a-b
- a*=b a=a*b
- a/=b a=a/b
- a%=b a=a%b。。。
- 註意,運算時需要將運算符右側的表達式用括弧括起來如x*=y-3 應該等於X=x*(y-3)
- 順序結構(正常結構)
- 選擇結構
- if語句
- if (a>100) printf("hello");
- if條件語句後面不跟隨;, 在之後的語句後面跟隨;
- if (表達式) 語句一; else 語句二;
# include <stdio.h> #include <string.h> void main() { int a,b,c; printf("please input 3 numbers:"); scanf("%d%d%d",&a,&b,&c); if (a>b) printf("a is begger than b"); else printf("a is small than b"); } switch語句 switch(grade) ( case 'A': printf("1");break; case 'B': printf("2");break; default: printf("error");break; )
# include <stdio.h> void main() { float data1,data2,result; char op; scanf("inpurt 2 numbers %f and %f",&data1,&data2); scanf("inpurt operation %c", &op); switch(op) ( case'+': result = data1 + data2; break; case'-': result = data1 - data2; break; case'*': result = data1 * data2; break; case'/': result = data1 / data2; break; ) printf("result is %f", result); }
- 迴圈結構
- while 迴圈
- while 和if 的唯一區別就是if在在執行完語句後直接結束,而while 在執行完後需要再進行一次判定
# include <stdio.h> void main() { int i=1,total=0; while (i<100) { total = total +i; i++; } printf("total is %d",total); }
- do while 迴圈, 當進行到哪一步的時候自動退出
do { fact = fact +i; i++; } while(i<=10); printf("nnn")
- for迴圈
- 語法: for(i=1;i<=100;i++)
- for(表達式1;表達式2;表達式3) 計算表達式1,計算表達式二,如果非0,則執行迴圈語句,然後執行表達式三; 如果表達式二的結果為0,則直接跳出迴圈
- 其他控制語句
- break語句
- break; 只能用於switch和迴圈語句中,終止迴圈
- continue語句
- 一般用於滿足特定條件後跳出本次迴圈。
- if (1%5!=0) continue; 相當於: if(1%5==0) ...
- goto語句:結構化程式
- 迴圈的嵌套
# include <stdio.h> void main() { int i,j,n; printf("pls enter th n value"); scanf("%d", &n); for (i=1;i<=n;i++) { for (j=1;j<=n-i;j++) { printf(" "); } for (j=1;j<=2*i-1;j++) { printf("*"); } printf("\n"); } }數組
- 一維數組 int a[10];
- 數組裡面必須是常量,數組是一個指針型常量
- 一個整形占用四個位元組
- C語言編譯器不會檢查數組元素下標是否越界
- 下標法引用一維數組
- 指針法引用數組元素
- 一維數組的初始化
# include <stdio.h> # define N 10 void main() { int i,max,a[N]; printf("pls key in 10 numbers"); for(i=0;i<N;i++) scanf("%d",&a[i]); max=0; for(i=1;i<N;i++) if(a[i]>a[max]) max = i; printf("%d",a[max]); }冒泡排序:
# include <stdio.h> # define N 10 void main() { int i,a[N],j,k,t; printf("pls key in 10 numbers"); for (i=0;i<N;i++) scanf("%d",&a[i]); for (i=0;i<N-1;i++) for (j=0;j<N-i-1;j++) if (a[j]>a[j+1]) { t=a[j]; a[j] =a[j+1]; a[j+1]=t; } for(i=0;i<N;i++) printf("%d ",a[i]); } Z