一、C語言基礎
1. 學習方法
多看+多敲+多思考總結
2. C語言歷史
機器碼: 01二進制去寫代碼,困難很大 10+11運算
+ ---》 01001
匯編語言:用助記符替換掉機器碼中的序列
+ ---》add
B語言
1972年: 設計unix系統而發明了C語言
3. C語言中變數型別及其使用
變數:用來存放各種型別的資料 商品的價格---》小數表示 4.0 3.5
商品的數量---》整數
商品的名稱---》中文字串或者英文字串
變數型別:int(整型) float(單精度浮點型) double(雙精度浮點型) short(短整型) long(長整型)long long int(長長整型) char(字符型別) bool(型別) struct(結構體) union(聯合體) enum(列舉) unsigned(無符號數)
變數的使用:
語法規則: 型別 變數名字;
int ab123;
float price; //英文單詞,或者縮寫
float jiage; //最惡心的
C語言命名規范:
第一個:變數的名字中只能有字母,數字和下劃線組成,并且首字母不能是數字 ab Ab ab78 a79 _abc 7mn(非法) a#b(非法) h@c(非法)
第二個:命名的時候盡量通俗易懂,不要用漢語拼音,用英文單詞縮寫
(1)整型

大小: 4個位元組,32位二進制,知道大小是為了防止使用的時候資料溢位了(超出取值范圍了)
存盤:
原碼:一個整數原本的二進制編碼
比如: 8的二進制原碼 1000(短除法求)
反碼:把原碼依次取反
原碼:1101 --》反碼0010
補碼:反碼加1
原碼:1101 --》補碼0010+1 --》0011
正數在計算機中采用原碼存放,并且最高位是符號位,0表示正數,1表示負數
1010
負數在計算機中采用補碼存放 -88

練習: 熟悉一下短除法,求各種進制
-1的二進制是多少

(2)浮點型
float占4個位元組
double占8個位元組
小數在計算機中是無法精準存盤的
比如: 12.5
12.6


(3)short
2個位元組
long 32位系統4位元組 64位系統8位元組
long long int 12位元組
(4)char
存放單個字符的ASCII碼值 占1個位元組
@ # $ % 'a' 'b' 'c' '1' '6' 8 9 0
美國人制定了ASCII碼表,把字符編碼成整數
man ASCII命令可以查看ASCII碼表
'A' -->65
'a' -->97
'0' -->48
char a='@'; //C語言規定字符必須用單引號括起來
(5)布爾型別
bool--》判斷真偽的,跟C語言的條件判斷相配合
注意: 添加#include <stdbool.h>
只有兩個值: true 真 false 假
定義: bool a=true; //等價于 bool a=1;
bool b=false; //等價于 bool b=0;
(6)無符號數
unsigned int a; //無符號數a,不區分正負,當成純粹的數字來計算,最高位不是符號位了
unsigned float b;
unsigned char c;
練習:
第一題:
char b='b';
char c=b+5; //請問c是多少
#include <stdio.h> int main() { char b = 'b'; char c = b+5; printf("C的ASCII值為:%d\n",c); printf("C的符號為:%c\n",c); return 0; }
結果如下:

第二題:
char a=389; 請問列印a的值是多少?? 為什么??
考察資料溢位之后計算機是如何處理的
#include <stdio.h> int main() { char b = 400; char c =300; printf("b的值為:%d\n",b); printf("C的值為:%d\n",c); return 0; }
結果如下:
b的值為:-112 C的值為:44
原理:從結果來看,char型別的變數a存放的值溢位了,系統將溢位的值舍去,取得小于256的數值,判斷是否大于127,大于的話先取反碼,再補碼即+1,
小于127的數即本身,
eg:389-256=133;取反碼就是122,再補碼即為-123;
eg:300-256=44;即為44,
第三題:
字符跟整數之間的換算
#include <stdio.h> int main() { char a = '9'; char b = '5'; char c = 7; printf("The a is %d\n",a-'0'); printf("The b is %d\n",b-48); printf("The c is %c\n",c+'0'); return 0; }
結果如下:
The a is 9 The b is 5 The c is 7
'9' -->轉換成整數 9
'9'-'0' 或者 '9'-48 結果就是整數9
整數9 -->轉換成字符'9'
9+'0' 或者9+48 結果是57
二、C語言程式的結構
1. 最簡單的C語言程式
#include <stdio.h> //頭檔案 int main() //C語言程式的入口,main函式 { printf("hello world!\n"); //幫助我們在螢屏上列印一句話 return 0; //結束整個main函式 }
2. linux中編譯C語言程式
gcc hello.c -o hello
gcc --》linux中編譯器的名字
-o --》 output 輸出
3. linux中執行C語言程式
./程式的名字
三、C語言的格式控制符號以及輸入和輸出
1. 格式控制符號
作用:由于C語言區分不同的資料型別,在輸入輸出這些資料的時候需要使用不同的格式控制符號來跟變數型別對應
八進制數的標準寫法:
int a=10; 二進制10 --》2
八進制10 --》8
十六進制10 --》16
// int a=b10; //二進制
int a=010; //八進制10
int a=0x10; //十六進制10
int a=10; //十進制的
對應關系:
%d --> int
%f -->float 默認保留6位有效數字
%lf -->double
%hu -->short
%ld -->long
%lld -->long long int
%c -->char 輸出的是字符本身
%d -->char 輸出是字符的ASCII碼值
%x -->十六進制,字符小寫列印
%X -->十六進制,字符大寫列印
%#x -->標準形式列印十六進制,前面加上0x
%o -->八進制
%#o -->標準形式列印八進制,前面加上0
%10.2f -->前面10表示位寬不夠左邊補空格 后面的2表示保留2個小數位
%-10.2f -->前面10表示位寬 后面的2表示保留2個小數位
%.9f --》指定了保留9個小數位,位寬沒有指定,默認位寬
%10d -->10是位寬,靠右對齊,左邊補空格
%-10d --> 靠左對齊,右邊補空格
%s -->字串
%5s
%p -->變數地址
例如:
#include <stdio.h> #include <stdbool.h> int main() { int a=199; float b=96.5; double c=89.3; short d=45; long e=125; long long int f=8934; char g='@'; bool h=true; printf("a is:%d\n",a); printf("a is:%x\n",a); printf("a is:%X\n",a); printf("a is:%#x\n",a); printf("b is:%f\n",b); printf("c is:%lf\n",c); printf("d is:%hu\n",d); printf("e is:%ld\n",e); printf("f is:%lld\n",f); printf("g is:%c\n",g); printf("g is:%d\n",g); return 0; }
結果如下:
a is:199 a is:c7 a is:C7 a is:0xc7 b is:96.500000 c is:89.300000 d is:45 e is:125 f is:8934 g is:@ g is:64
例如:
#include <stdio.h> /* 這是一個例子程式,講解代碼書寫規范 這個例子很重要,大家 養成好的習慣 //塊注釋中不能嵌套塊注釋,但是可以嵌套單行注釋 */ int main() { int a=0b1010; //定義了整型變數,給它賦值一個二進制數 float b=15.6; double c=8933.3; char d='o'; printf("a is:%10d\n",a); printf("a is:%-10d\n",a);//-10d表示位寬,靠左對齊! printf("b is:%f\n",b); //b is:15.600000 //小數點前面數字表示位寬(整個數字占用多少位置) printf("b is:%10.7f\n",b); //b is:15.6000004 printf("b is:%18.7f\n",b); //b is: 15.6000004 printf("b is:%18.3f\n",b); printf("b is:%3.7f\n",b); //位寬不能小于這個資料本身的位寬 }
結果如下:
a is: 10 a is:10 b is:15.600000 b is:15.6000004 b is: 15.6000004 b is: 15.600 b is:15.6000004
作業:
2 8 10 16進制之間的相互轉換
二進制--》轉換八進制
二進制--》轉換16進制
進制之間的轉換規則
二進制--》八進制
二進制--》十六進制
每三個二進制為一組換算成對應的八進制即可
每四個二進制為一組換算成對應的十六進制即可
八進制取值范圍:0---7 最大的數字7換成二進制111 (421碼)
十六進制取值范圍:0---F 最大的數字15換成二進制1111 (8421碼)
八進制--》二進制
每個八進制位換算成三個二進制即可
八進制 071 ---》 7 --》二進制111
1 --》二進制001 //不夠三位的補零對齊
071--》二進制111 001
十六進制--》二進制
每個十六進制位換算成四個二進制即可
十六進制 0A3---》 A --》二進制1010
3 --》二進制0011 //不夠四位的補零對齊
0A3--》二進制1010 0011
八進制--》十六進制
思路:先把八進制轉成2進制,然后再把2進制轉成16進制即可
八進制 0745 --》二進制111 100 101 --》16進制0001 1110 0101
1 E 5
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/47164.html
標籤:C
下一篇:C語言學習(2)
