嵌入式開發-lesson9-順序結構程式設計

weixin_33842304發表於2016-02-16

Lesson9-順序程式設計

一、常量與變數

1、常量

在程式執行過程中,其值不能改變的量,叫做常量。

f(x) = 2x + 1

常用的常量有以下幾種型別:

1)整型常量, 100 0 -234

2)實型常量, 123.456 123456e-3  123e+3

3)字元型常量

 普通字元, ‘a’ ‘#

 轉義字元, ‘\n’ ‘\t '\b'

4)字串常量, “123  "weijie"

5)符號常量  #define  ABC   3.14   ABC就是一個符號常量

2、變數

在執行過程中值可以改變的量,叫做變數。變數必須先定義後使用,例如:int a;定義一個整數型別的變數

識別符號:在高階語言中用來對變數、符號常量、函式等等起名字的有效字元,叫做識別符號。

識別符號的要求:只能包含字母、數字、下劃線,並且只能以字母和下劃線開頭

int   2a   錯

int   a#b    

二、進位制轉換

十進位制(d):

101,十進位制的演算法123 = 1x100 + 2x10 + 3x1,十進位制中每一位都不超過10

二進位制(binary):

21,二進位制的演算法(101)B = 1x4 + 0x2 + 1x1,二進位制中每一位都不超過2

10010011b = 1*1+1*2+0+0+1*16+1*64

八進位制(o):

81,八進位制的演算法(765)O = 7x64 + 6x8 + 5x1,八進位制中每一位都不超過8

十六進位制(hex):

161,十六進位制的演算法(765H = 7x256 + 6x16 + 5x1,十六進位制中每一位都不超過16

十六進位制中有超過10的數該怎麼表示?用字母a,b,c,d,e,f


位:一個位裡面只能放一個1位的二進位制數

一個位元組byte等於8位,一個字等於2個位元組


十進位制數num轉為n進位制的方法:

step1: n/(n+1) = 0....1

step2: num÷n = ......餘數1

step3: 如果商為0,跳轉finish

step4: 商 ÷n = ......餘數2

step3: 如果商為0,跳轉finish

step4: 商 ÷n = ......餘數3

step3: 如果商為0,跳轉finish

step4: 商 ÷n = ......餘數4

。。。。。。

finish:將餘數1到餘數n從右到左寫下來,這就是你的結果

n進位制轉十進位制的方法:

給一個8進位制4123,那麼對應的十進位制是:

3x8的0次方 + 2x81次方 + 1x82次方 + 4x83次方



二進位制的技巧

任何一個正整數都可以表示為2N次方相加,你不信也得信。。。

10 = 8 + 2

100 = 64 + 32 + 4

1000 = 512 + 256 + 128 + 64 + 32 + 8

當然你需要熟練掌握210次方以內的所有結果,這是一個程式猿的要求。

789 = 512+256+16+4+1 =   1100010101

二進位制轉十六進位制:四個一組,每一組都是20次方到23次方

(1011 1100)B = (bc)H


三、基本資料型別

C語言基本資料型別:整型、浮點型

整型:基本整型、長整型、短整型、雙長整型、字元型

浮點型:單精度浮點、雙精度浮點

1、    整型

整型:integer

基本整型(int):佔4個位元組或者2個位元組(分作業系統)

短整型(short int):佔2個位元組

長整型(long):佔4個位元組

雙長整型(long long):佔8個位元組


在實際應用中有些資料只有正數,不能為負數,因此資料又可以分為有符號資料和無符號資料,所以c語言把整型變數又仔細劃分為

unsigned int

[signed] int

unsigned short [int]

[signed] short [int]

unsigned long [int]

[signed] long [int]

unsigned long long [int]

[signed] long long [int]


1111 1111 = 255(無符號)

二進位制的最高位是符號位,0代表+ 1代表-

1111 1111 = -127


定義一個整型變數:

int a; //定義變數

a = 100;//給變數賦值

也可以在定義變數的時候順便給變數賦值,這叫變數的初始化

int a=100;

int a,b;

int a=10, b=100;

2、    字元型

字元型(char):佔1個位元組

字元型也可以分為有符號和無符號:

[signed] char

unsigned char

定義一個整型變數:

char a;  //定義變數

a = ‘#';//給變數賦值

char a='$';

字元其實也是以整數的形式存在,因為計算機只認識01。你可以檢視ASCII碼錶,裡面對每一個字元都進行的編碼。需要記住‘a== 97

A==65   0== 48(不是整數0)

注意:並不是所有的字元都能被c語言識別。


3、    浮點型

浮點型:

單精度浮點(float):佔4個位元組

雙精度浮點(double):佔8個位元組

其實浮點型就是我們說的小數,只不過floatdouble的精確度不一樣

float  a=1.0;


4、    列印變數

列印常量

printf("hello\n");

列印變數

int a;

a = 10;

printf("num is %d", a); //num is 10

%d代表int %f代表float型別資料 %lf代表double型別資料

%ld代表long型別, %c列印char型別資料


如何列印多個變數:

int a,b,c;

a = 10;

b = 11;

c = 12;

printf("three num is %d %d %d\n", a,b,c);

 

四、運算子與表示式

1、四則運算

 + 加法

 - 減法

 * 乘法,因為沒有×

 / 除法,因為沒有÷

 % 取餘數(取模)  10%6 = 4


2、自增自減

int i = 10;

 ++i 使用之前i的值加1 ,而且會改變i的值

 i++ 使用之後i的值加1

 --i 使用之前i的值減1

 i-- 使用之後i的值減1


3、表示式

 用c語法寫的式子就是c算術表示式,例如a+b*2-3+8/2c算術表示式的計算方法和數學是一樣的


4、混合運算

 在實際運算的過程中,難免有不同型別的資料同時參加運算,鑑於此種情況,C語言有以下規則

 1)+-*/中有一個是float另一個是double,那麼系統會將float轉為double,因此結果是double

 2)intfloat或者double運算時,先將int轉為float或者double

 3)字元資料與整型計算時,先將字元轉為對應的ASCII碼,然後計算;字元與float或者double運算時,將字元的ASCII碼轉為float或者double


5、強制轉換

 c語言可以把一個數強制轉換成其他型別,例如:

 (inta a強轉為int型別

 (floatb b強制轉換為float型別

 注意:當一個小數轉為整數的時候,只保留整數部分(不是四捨五入)


6、其他運算子

 1)賦值運算 =,將"="右邊的數值給等號左邊

 2)複合運算 += a+=3 ---> a=a+3

 3)比較運算 > >=

 4)條件運算 a = b>c?1:2


五、c語句

一個c程式就是由不同的c語言句子組成的,c語句可以分為5

1、控制語句,控制程式的執行過程

  1)if()...else...     條件判斷

  2)for()...           迴圈

  3)while()...         迴圈

  4)do...while()...    迴圈

  5)continue...        結束本次迴圈

  6)break...           中止迴圈或者switch

  7)switch             分支

  8)return             返回

2、函式呼叫語句,由一個函式呼叫加一個分號組成

  printf(“hello”);  

3、賦值語句,由一個複製表示式和分號組成

  a = 6;

4、空語句,由一個分號構成

  ;

5、複合語句,可以用{ }把許多語句括起來,構成複合語句

{

  int a=10,b=20;

  int c=a+b;

  printf("%d\", c);

}


六、資料輸出

c語言有很多輸入輸出的語句,所謂輸入就是從外部獲取資訊到cpu,輸出就是將cpu的資訊給外部


1printf

c語言最常用的輸出語句是printf,這個一個格式輸出的語句,使用者必須指定資料的格式,printf(格式控制, 輸出列表)例如

printf("sum = %d + %d", a, b);

%d就是指定資料的格式為int ab就是輸出列表, 有兩個%d,因此要有兩個資料


2、格式控制

1)%d

 用來輸出一個有符號的十進位制整數,若是長整型用%ldlong long則使用%lld

2)%c

用來輸出一個字元,如果對應的輸出列表是一個整型,那麼會轉為字元型。例如

 int a = 65;

 printf(“%c”, a); 螢幕會輸出一個字母A,因為AASCII碼是65

同樣的,如果使用%d的時候,對應的輸出列表是一個char,那麼會將char轉為整數,例如:

 char a = ‘A’;

 printf(“%d”, a); 螢幕會輸出一個字母A,因為AASCII碼是65

3)%f

 輸出float型別,如果是double型別的,可以用%lf,預設6位小數。

 使用%m.nf,指定輸出的float格式m代表整數部分的位數,如果不夠則左端補空格,如果整數部分超出指定範圍,那麼按實際操作,不可以影響它的大小;n指定小數部分的位數,如果不夠右邊補0,如果超出,四捨五入。

 float num=11.234;

 printf("%f", num);     11.234000

 printf("%1.5f", num);  11.23400

 printf("%3.1f", num); _11.2

4)其他格式

%e 以指數形式輸出實數,例如:

  int num=1234;

  printf("%e", num);     1.234000e+003   

  int num=0.00123;

  printf("%e", num);     1.23000e-003

%x 以十六進位制輸出整數

%o 以八進位制輸出整數

%u 輸出無符號整數

%a 輸出地址


七、資料輸入

c語言的輸入也有很多種方法,常見的是scanf函式。scanf函式的使用方法基本和printf差不多,我們來找找不一樣的地方

scanf("a=%d,b=%d,c=%d", &a,&b,&c); 後面的列表多了個&

當然你需要在鍵盤上輸入:a=1,b=1,c=3 或者其他的

scanf要注意:

1)格式控制的後面不是一個變數,而是變數的地址

2)如果使用%c,那麼空格和轉義字元都被認為是有效的字元

 scanf("%c%c%c", &a,&b,&c)

 輸入abc三個字母,中間不能有空格

3)如果是輸入數值,那麼空格、tab、回車、等非法字元都被認為是資料結束,例如:

 scanf("%d%d%d", &a,&b,&c)

 輸入10 12 13,或者10,12,13都可以

字元的輸入與輸出:

對於字元的輸入和輸出,可以使用其他函式putchargetchar

1)輸出字元

 char a='m';

 putchar(a);

2) 字元出入

 char a;

 a=getchar();

 putchar(a);

相關文章