天天看點

C語言基本知識

軟體是将一組程式組織起來

每個程式由一組指令組成

資料結構+算法

資料結構

          在程式中要指定資料的類型和資料的組織形式。

算法(程式的靈魂)

    就是為了解決實際問題而提出的具體方法與步驟.

算法的特點

有窮性:         一個算法一定是有限的步驟.

确定性:        每一個步驟都是确定的,不是含糊的.

有零個或多個輸入:    指在執行算法時需要從外界取得必要的資訊.

有一個或多個輸出:    目的是為了求解,”解”就是輸出

有效性:         每一步都應當有效的執行,并得到确定的結果.

算發-解決問題

1.為了解決一個問題

2.清楚地了解這個問題

3.收集相關資訊

4.處理這些資訊

5.得出解決方案 

C 語言的應用領域

C 語言最初用于系統程式設計

    系統程式是計算機作業系統或作業系統支援的實用程式的組成部分

    作業系統、解釋器、編輯器以及彙編器通常稱為系統程式

UNIX 作業系統是用 C 語言開發的

有許多種 C 編譯器,可以滿足幾乎所有類型 PC 的需要

C語言的特點

C語言同時具有彙編語言和進階語言的優勢。

(1)語言簡潔、緊湊,使用友善、靈活。

(2)運算符極其豐富。

(3)生成的目标代碼品質高,程式執行效率高。

(4)可移植性好(較之彙編語言)。

(5)可以直接操縱硬體。

C語言規則

C語言有32個關鍵字

這些關鍵字結合慣用文法構成了 C程式設計語言

所有用C語言編寫的程式必須遵守的規則

所有關鍵字使用小寫形式

   C語言是區分大小寫的,int 和 INT 不同

 關鍵字不能用作變量名或函數名

 程式執行總是先調用main()函數

每個程式必須有一個而且隻能有一個稱作主函數的main()函數; main()函數後面必須跟有圓括号。括号内可以有參數可以沒有參數。

  所有函數名後必須跟一個左大括号{ 表示代碼塊開始。同樣,右大括号 }表示代碼塊的結束。

    大括号之間寫處理問題的代碼。除了在函數中,在循環語句、判斷語句等其他語句情況下也必須使用大括号{}。

  代碼語句的結束用分号;表示。編譯器無法識别回車、空格,每條語句隻能以分号結束,同一行中可以有多條語句。

注釋是用于描述指令、函數或整個程式。

它有兩種形式“多行注釋”和“單行注釋”。

多行注釋部分包含在“/*”和“*/”之間, 在編譯時它被 C編譯器忽略。

單行注釋則在 // 後面,在編譯時它被C編譯器忽略。

每個C程式的最上面必須倒入頭檔案

   #include<stdio.h>,也可以倒入其他頭檔案#include<*.h>根據實際需要。

#include <stdio.h>

void main()

{

   printf("Hello World\n");

}

常量

常量就是一個保持不變的值,而且不可能被改變

示例

5    數字/整型常量

5.3  數字/實型常量

''Black''   字元串常量

'C'         字元常量

什麼是變量?

變量是儲存資訊的地方.

變量是記憶體中的一個位址

在位址中可以進行資料的存儲和讀取

示例:變量

BEGIN

DISPLAY ‘Enter 2 numbers’

INPUT A,B

C=A+B

DISPLAY C

END

A 、B和C是僞代碼中的變量

*變量類型(如整型)告訴編譯器給變量配置設定

多大的記憶體

作業系統負責記住變量在記憶體中的位址

要引用記憶體空間中的值,隻需指定變量名

辨別符

用來辨別變量名、符号常量名、函數名、數組名、類型名、檔案名和其他各種使用者定義的對象的名稱都稱為辨別符

辨別符的長度可以是任何合适的數值,但是各種編譯器能夠識别的變量中的字元數目有所不同,見意不要超過8個字元(VC環境)

C 語言中的辨別符區分大小寫

辨別符的命名規則

變量名應該以字母或下劃線開頭

第一個字元後面可以跟字母、數字或

應該避免使用專有名詞來命名變量

應該避免使用可能引起混淆的字母

變量名區分大小寫

編寫程式時應該遵循一些标準的變量命名約定

變量名應該是有意義的而且是描述性的

辨別符命名的良好習慣──見名知意:

通過變量名就知道變量值的含義。通常應選擇能表示資料含義的英文單詞(或縮寫)作變量名,或漢語拼音字頭作變量名。

 例如, name/xm(姓名)

   sex/xb(性别)

   age/nl(年齡)

辨別符舉例:

[合法的]  如:

  areana、 _count、mark40、class_one

[不合法的]

12sttes、 oh!god、start…end

關鍵字

在一個特定語言的上下文中有特殊意義的單詞

所有的資料類型都是保留的關鍵字

在指定變量名的同時還要指定将要存儲在其中的資料類型-變量聲明

C語言關鍵字

auto  break  case  char  const

continue default  do  double  else

enum  extern  float  for  goto

if  int  long  register return

short  signed  sizeof  static  struct

switch  typedef  union  unsigned void

volatile while   

基本資料類型

int

float

double

char

void

int 類型

存儲數字資料

聲明方式:int num;

不能存儲類似于“Alan” 或“abc”等任何其他類型的資料

*配置設定16 位(2 個位元組)的記憶體空間,整數的範圍是從 - 32768 到 32767

(注意:在我們目前環境裡,int占用4個位元組)

 示例:12322、0、-232

      如: int num = 12332;

float 類型

存儲整數或包含小數位的值

聲明方式:float num;

最高精度是 6 位

*配置設定32 位(4 個位元組)的記憶體空間

 示例:23.05、56.5、32

如: float num = 23.05;

double 類型

存儲超出float類型大小的限制的值

聲明方式: double num;

最高精度是 10 位

*配置設定64 位(8 個位元組)的記憶體空間

  示例:23.34232324

如: double num = 23.34232324;

char 類型

存儲一個字元資訊

聲明方式: char gender;

                          gender='M';

*配置設定8位(1 個位元組)的記憶體空間

  示例:'a'、'm'、'$'、'%'、'1'、'5'

如: char gender = ‘A’;

[注意] 給字元型變量指派必須加上一對單引号‘’

字元型變量 C

char 與 int的聯系

字元在計算機中是以ASCII來存儲的,

字元變量在記憶體中的值是ASCII表中對應的整數

void 類型

告訴編譯器沒有任何類型的值

聲名方式:void num 

不傳回任何值

派生資料類型

通過修改四種基本資料類型以适應不同的

情況而産生的資料類型叫做派生資料類型

signed 和 unsigned 類型

signed最重要的是修改char資料類型(預設為signed )

    (0-127)有符号的, 有正負之分的

unsigned 類型指定變量隻能接受正值

 unsigned int varNum;

 varNum=63123;

加上unsigned字首,正數的取值範圍是原來的兩倍

修飾符可以與 int 和 float 資料類型一起使用

unsigned int 支援的範圍是從 0 到 65535

long 和 short 類型

要求某個整數的長度比正常長度更長或更短時,使用long 和short

* short int 占 8 位(1 個位元組)的記憶體空間

允許的數字範圍是從 -128 到 127

* long int 占 32 位(4 個位元組)的記憶體空間

 -2,147,483,648 到 2,147,483,647

* long double 占 128 位(16 個位元組)的記憶體空間

資料類型範圍 2-1

類型  *近似大小(位)  最小範圍

char   8  -128 到 127

unsigned char  8  0 到 255

signed char  8  -128 到 127

int   16  -32,768 到 32,767

unsigned int  16  0 到 65,535

signed int  16  與 int 相同

short int  8 

unsigned short int 8  0 到 65, 535

signed short int 8  與 short int 相同

long int  32  -2,147,483,648 到 2,147,483,647

signed long int  32  0 到 4,294,967,295

unsigned long int 32  0 到 4,294,967,295

float   32  六位精度

double   64  十位精度

long double  128  十位精度

聲明示例

main ()

 char abc;    /*聲明abc */

 int xyz;    /*聲明xyz */

 float length;   /*聲明length */

 double area; /*聲明area */

 long int liteyrs;   /*聲明liteyrs */

 short int arm;    /*聲明arm */

 }

運算符

算術     一進制、二進制運算符都是算術運算符

邏輯    用于對包含關系運算符的表達式進行合并或取非

關系    測試兩個變量或一個變量和一個常量之間的關系

位        将數字按位進行計算

算術運算符

一進制運算符            操作            二進制運算符              操作

-                              一進制減             +                               加

++                                遞增             -                               減

--                                 遞減             *                               乘

                                                         %  模                       計算一個整數除法的餘數

                                                        /                                 除(整除)

++和--運算符前置和後置有很大差別

用于各類數值運算

包括加(+)、減(-)、乘(*)、除(/)、求餘(或稱模運算,%)、自增(++)、自減(--)共七種。

++在前 如  “++a” 先加後加入運算。

++在後 如  “a++” 先加入運算後加。

“--”也是同樣道理

x++ 和 ++x 可以寫成 x= x + 1

x-- 和 --x 可以寫成 x = x - 1

[舉例] 算術運算符.c  先加後加.c

關系運算符

用于測試兩個變量或一個變量和一個常量之間的關系

運算符 關系運算

> 大于

>= 大于等于

< 小于

<= 小于等于

== 等于

!= 不等于

邏輯運算符

邏輯運算符用于對包含關系運算符的表達式進行合并或取非

運算符 邏輯運算

&& 與

|| 或

! 非

示例:if ((a>10) && (a<20))

使用邏輯運算符的表達式,傳回 0 表示假,傳回 1 表示真

位運算符

将數字轉換成等價的二進制形式後再處理資料(按位表示法)

運算符  描述

按位與 

( x & y)  如果兩個操作數的相應位均為 1,則該位的結果值為 1

按位或  

( x | y)   如果兩個操作數的相應位有一個為 1,則該位的結果值為 1

按位取反( ~x)   将操作數按位取反 (0 到 1 和 1 到 0) 

按位異或( x^y) 如果參加運算的兩個操作數的相應位同号,則結果為 0,異号則為 1

操作數  位操作  位表達式  數字

10 & 15     1010 & 1111 1010  10

10 | 15  1010 | 1111 1111  15 

10 ^ 15  1010 ^ 1111 0101   5

~ 10  ~1010  0101  5

位運算符将數字視為二進制值,并按位進行相

應運算,運算完成後再重新轉換為數字

指派運算符

用于指派運算

分為簡單指派(=)

複合算術指派(+=,-=,*=,/=,%=)

複合位運算指派(&=,|=,^=,>>=,<<=)

三類共十一種

變量指派

指派語句是由指派表達式再加上分号構成的表達式語句。

其一般形式為:

變量=表達式

可以用在任何有效的 C 表達式中

通用的形式:變量名=表達式

将同一個值賦給多個變量的操作叫做多重指派

a=b=c=10

但是,不能像下面的語句中那樣指派:

int a=int b=int c=10

表達式

運算符和操作數的有效組合

在程式執行的過程中,變量

  的實際值和表達式中出現的

  常量一起使用

運算符優先級

優先級建立了計算算術表達式時,一組運算符相對于另一組的層次關系

優先級指 C 計算運算符的順序

可通過将表達式括在括号中 來改變運算符的優先級

運算符類型 運算符  結合律

一進制  - ++ --    從右向左

二進制      ^    從左向右     

二進制      * / %    從左向右     

二進制      + -    從左向右     

二進制      =    從右向左

當一個表達式中的運算符具有相同優先級時,

結合律還指出C語言計算這些運算符的順序

示例:-8*4%2-3

計算順序如下:

完成的操作                         結果

-8(一進制減法)                       -8

-8*4                                -32

-32%4                               0

0-3                                -3

比較運算符之間的優先級

不存在相對于其他算術運算符有較高的優先級

始終按從左向右順序進行計算

優先級 運算符

1     非

2     與 

3    或  

當條件中有多個邏輯運算符時,計算将從右向左進行

運算符之間的優先級

當公式中含有多種類型的運算符時,必須确立不同類型運算符之間的優先級順序。一般來說,算術、比較、邏輯運算符的優先級符合下表

優先級 運算符類型

1     算術 

2     比較

3    邏輯

修改優先級

括号 ( ) 的優先級最高。

使用括号 ( ) 可修改運算符的優先級。

在括号嵌套 ( ( ( ) ) )  的情況下,最裡層的最先執行。

包含多個括号的表達式從左向右進行計算。

資料類型轉換

變量的資料類型是可以轉換的。

轉換的方法有兩種:

一種是自動轉換

一種是強制轉換。

類型轉換

運算符的操作數屬于不同的資料類型,運算時通常會将這些操作數轉換為同一類型

自動轉換遵循以下規則

若參與運算量的類型不同,則先轉換成同一類型,然後進行運算。

轉換按資料長度增加的方向進行,以保證精度不降低。

所有的浮點運算都是以雙精度進行的

char型和short型參與運算時,必須先轉換成int型。

強制類型轉換

通過類型轉換運算來實作的

(類型說明符)  (表達式)

例如:

(float) a      把a轉換為實型

(int)(x+y)     把x+y的結果轉換為整型

繼續閱讀