c語言算術表達式的語法分析,c語言表達式計算

本文目錄一覽:

c語言的詞法分析器

任務1:識別小型語言所有單詞的詞法分析程序設計

源程序設計語言

G[程序]

程序→變數說明BEGIN

語句表

END.

變數說明→VAR變數表:類型;|空

變數表→變數表,變數|變數

類型→INTEGER

語句表→語句

|

語句;語句表

語句→賦值語句|條件語句|WHILE語句|複合語句

賦值語句→變數:=算術表達式

條件語句→IF關係表達式THEN語句ELSE語句

WHILE語句→WHILE關係表達式DO語句

複合語句→BEGIN語句表END

算術表達式→項|算術表達式+項|算術表達式-項

項→因式|項*因式|項/因式

因式→變數|整數|(算術表達式)

關係表達式→算術表達式關係符算術表達式

變數→標識符

標識符→標識符字母|標識符數字|字母

整數→0|非零數字泛整數

泛整數→數字|數字泛整數|ε

關係符→|=|==||=|

字母

→A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z

非零數字→1|2|3|4|5|6|7|8|9

數字→非零數字|0

空→

要求和提示:

詞法分析階段,可以打開任意位置和名稱的源文件進行詞法分析,可以進行非法字元和數字後邊跟字母的錯誤判斷,如果沒有錯誤則提示「詞法分析正確完成!」,並且可以選擇輸出token.txt(token文件)string.txt(符號表)兩個文件;

1.詞法分析程序的主要任務如下:

組織源程序的輸入,識別出源程序中的各個基本語法單位(也稱為單詞或語法符號),按規則轉換成二元式的形式;

刪除無用的空白字元、回車符、及其它非實質性符號;

刪除註解行;

為後面的語法和語義分析提供二元式鏈表;

單詞

編碼

單詞

編碼

標識符

1

15

正整數

2

=

16

BEGIN

3

17

END

4

=

18

IF

5

19

THEN

6

==

20

ELSE

7

21

WHILE

8

22

DO

9

:=

23

INTEGER

10

24

+

11

(

25

12

26

*

13

/

14

1)

對標識符的長度控制在8個字元(包括8個)以內,超過的做截斷處理;

2)

數字不大於65535,否則報錯;

3)

能跳過源程序中的空白格:兩個單詞之間的任何空格,製表符,回車,換行都是白空格,除了用來分隔單詞以外,沒有意義;

4)

能跳過注釋:

a)

接連出現的/*到下一次接連出現的*/之間的任何文字都是注釋(多行);

b)

從某行接連出現的//到該行的結尾的任何文字都是注釋(單行)。

3.怎樣編寫詞法分析程序:

1)

預處理:把源文件一個字元一個字元的讀入詞法分析程序設置的輸入字元結構體數組中(輸入緩衝區),讀入過程要刪除注釋,刪除多餘的白空格;

2)

從源程序字元數組中獲得單詞,

編碼為二元式.:

二元式採用結構體數組存儲,

把單詞類型和詞元記錄下來。

分解單詞的方法:

1)

Case多路轉換語句根據單詞的特點直接編寫;

2)

通過描述單詞的正規文法得到相應的有窮自動機,通過case多路轉換語句完成有窮自動機的處理流程。

3.編寫詞法分析程序要注意的問題:

1)

檢查詞法是否有錯誤

檢查是否有非法字元:如

@,

,

!

檢查標誌符和數字是否滿足限制條件

檢查注釋符號是否配對

2)

符分隔單詞

能夠區分兩個單詞的符號為界符

有些界符不是單詞:如白空格

有些界符僅僅用來分隔:如;

有些界符本身還是源程序不可缺少的單詞,如(,

),

+,

/,

等等

有些界符包含兩個字元:如,

=等等

3)

輸出詞法錯誤

如果有錯誤,需要報告詞法錯誤的原因。並且要能夠越過錯誤,分解下一個單詞,直到源程序結束。

4)

輸出的二元式流保存在二元式結構體數組中。

計算機c語言基礎知識

   計算機c語言的特性

C語言是世界上最流行、使用最廣泛的高級程序設計語言之一。在操作系統和系統使用程序以及需要對硬體進行操作的場合,用C語言明顯優於其它高級語言,許多大型應用軟體都是用C語言編寫的。C語言的主要特性有以下幾種:

1、C是高級語言:它把高級語言的基本結構和語句與低級語言的實用性結合起來。

2、C是結構式語言:結構式語言的顯著特點是代碼及數據的分隔化,即程序的各個部分除了必要的信息交流外彼此獨立。

3、C語言功能齊全:具有各種各樣的數據類型,並引入了指針概念,可使程序效率更高。而且計算功能、邏輯判斷功能也比較強大,可以實現決策目的的遊戲。

4、C語言適用範圍大:適合於多種操作系統,如Windows、DOS、UNIX等等;也適用於多種機型。

5、C語言應用指針:可以直接進行靠近硬體的操作,但是C的指針操作不做保護,也給它帶來了很多不安全的因素。C++在這方面做了改進,在保留了指針操作的同時又增強了安全性。

6、C語言創始人D.M.Ritchie6、C語言文件由數據序列組成:可以構成二進位文件或文本文件常用的C語言IDE有Microsoft Visual C++,Dev-C++,Code::Blocks,Borland C++,Watcom C++,Borland C++ Builder,GNU DJGPP C++,Lccwin32 C Compiler 3.1,High C,Turbo C,C-Free,win-tc,xcode等。

   計算機c語言的語法結構

1.順序結構

順序結構的程序設計是最簡單的,只要按照解決問題的順序寫出相應的語句就行,它的執行順序是自上而下,依次執行。順序結構可以獨立使用構成一個簡單的完整程序,常見的輸入、計算,輸出三步曲的程序就是順序結構。

2.選擇結構

選擇結構的執行是依據一定的條件選擇執行路徑,而不是嚴格按照語句出現的物理順序。選擇結構的程序設計方法的關鍵在於構造合適的分支條件和分析程序流程,根據不同的程序流程選擇適當的選擇語句。

3.循環結構

循環結構可以減少源程序重複書寫的工作量,用來描述重複執行某段演算法的問題,這是程序設計中最能發揮計算機特長的程序結構,C語言中提供四種循環,即goto循環、while循環、do while循環和for循環。

4.模塊化程序結構

C語言的模塊化程序結構用函數來實現,即將複雜的C程序分為若干模塊,每個模塊都編寫成一個C函數,然後通過主函數調用函數及函數調用函數來實現一大型問題的C程序編寫,因此常說:C程序=主函數+子函數。因此,對函數的定義、調用、值的返回等中要尤其注重理解和應用,並通過上機調試加以鞏固。

   計算機c語言基礎知識

【知識點1】C程序

C語言程序結構有三種: 順序結構 , 循環結構(三個循環結構), 選擇結構(if 和 switch)

【知識點2】main函數

每個C語言程序中main 函數是有且只有一個。讀程序都要從main()入口, 然後從最上面順序往下讀(碰到循環做循環,碰到選擇做選擇)。

【知識點3】存儲形式

計算機的數據在電腦中是以二進位的形式保存。最低的存儲單元是bit(位),位是由為 0 或者1構成。 byte 是指位元組, 一個位元組 = 八個位。數據存放的位置就是它的地址。

【知識點4】注釋

是對程序的說明,可出現在程序中任意合適的地方,注釋從「/*」開始到最近一個「*/」結束,其間任何內容都不會被計算機執行,注釋不可以嵌套。

【知識點5】書寫格式

每條語句的後面必須有一個分號,分號是語句的一部分。一行內可寫多條語句,一個語句可寫在多行上。

【知識點6】標識符

合法的用戶標識符考查:

合法的要求是由字母,數字,下劃線組成。有其它元素就錯了。

並且第一個必須為字母或則是下劃線。第一個為數字就錯了。

C語言標識符分如下3類

(1)關鍵字。它們在程序中有固定的含義,不能另作他用。如int、for、switch等。

(2)預定義標識符。預先定義並具有特定含義的標識符。如define、include等。

(3)用戶標識符。用戶根據需要定義的標識符,符合命名規則且不與關鍵字相同。

關鍵字不可以作為用戶標識符號。main define scanf printf 都不是關鍵字。迷惑你的地方If 是可以做為用戶標識符。因為If 中的’第一個字母大寫了,所以不是關鍵字。

【知識點7】實型數據

實型數據的合法形式:小數形式和指數形式。掌握判定指數形式合法性。

2.333e-1 就是合法的,且數據是2.333×10-1。

考試口訣:e 前e 後必有數,e 後必為整數。

【知識點8】字元

字元數據的合法形式::

‘1’ 是字元佔一個位元組,”1″是字元串佔兩個位元組(含有一個結束符號)。

‘0’ 的ASCII 數值表示為48,’a’ 的ASCII 數值是97,’A’的ASCII 數值是65。

字元型和整數是近親:

char a = 65 ;

printf(「%c」, a); 得到的輸出結果:a

printf(「%d」, a); 得到的輸出結果:65

一般考試表示單個字元錯誤的形式:’65’ “1”

字元是可以進行算術運算的,記住: ‘0’-0=48

大寫字母和小寫字母轉換的方法: ‘A’+32=’a’ 相互之間一般是相差32。

【知識點9】整型數據

整型一般是兩個位元組, 字元型是一個位元組,雙精度一般是4 個位元組:

考試時候一般會說,在16 位編譯系統,或者是32 位系統。碰到這種情況,不要去管,

一樣做題。掌握整型一般是兩個位元組, 字元型是一個位元組,雙精度一般是4 個位元組就可以了。

【知識點10】轉義字元

轉義字元的考查:

在程序中 int a = 0x6d,是把一個十六進位的數給變數a 注意這裡的0x 必須存在。

在程序中 int a = 06d, 是一個八進位的形式。

在轉義字元中, 』x6d』 才是合法的,0 不能寫,並且x 是小寫。

『141』 是合法的, 0 是不能寫的。

『108』是非法的,因為不可以出現8。

【知識點11】算術運算

算術運算符一共有+、—、*、/、%這五個。%符號兩邊要求是整數。不是整數就錯了。

三種取整丟小數的情況:不是四捨五入是舍掉小數部分。

1、int a =1.6;

2、(int)a;

3、1/2; 3/2;

【知識點12】強制類型轉換

將一個運算對象轉換成指定類型,格式為(類型名)表達式

一定是 (int)a 不是 int(a),注意類型上一定有括弧的。

注意(int)(a+b) 和(int)a+b 的區別。前是把a+b 轉型,後是把a 轉型再加b。

【知識點13】賦值

是表達式就一定有數值。

賦值表達式:表達式數值是最左邊的數值,a=b=5;該表達式為5,常量不可以賦值。

複合賦值運算符:注意:a*=m+2 是 a=a*(m+2)

自加、自減表達式:假設a=5,++a(表達式的值為6), a++(表達式的值為5);

j=a++;等價於j=a;a=a+1; 而j=++a;等價於a=a+1;j=a;。

考試口訣:++在前先加後用,++在後先用後加。

【知識點14】逗號運算

逗號表達式:優先順序別最低; 表達式的數值逗號最右邊的那個表達式的數值。

(2,3,4)的表達式的數值就是4。

【知識點15】數制轉換

一定要記住二進位 如何轉換成十進位。

八進位是沒有8 的,逢8 進1,018 的數值是非法的。

【知識點16】位運算

會有一到二題考試題目。

C語言提供6種位運算符:按位求反~,按位左移,按位右移,按位與,按位異或|,按位或^。

總的處理方法:幾乎所有的位運算的題目都要按這個流程來處理(先把十進位變成二進位再變成十進位)。

異或運算的規則:0異或1得到1,0異或0得到0,1異或1得到0。可記為「相同為0,不同為1」。

在沒有捨去數據的時候,左移一位表示乘以2;右移一位表示除以2。

C語言知識總結

c語言概要

第一章、 概述

1、 c語言的基本知識

1.1、 c語言的執行步驟

編輯-程序代碼的錄入,生成源程序*.c

編譯-語法分析查錯,翻譯生成目標程序*.obj

(語法或邏輯錯誤,從第一個開始改,變數定義,語句格式,表達式格式等)

鏈接-與其他目標程序或庫鏈接裝配,生成可執行程序*.exe

執行

1.2、 main函數的基本知識

main()函數的位置

c程序總是從main( )函數開始執行

一個c程序可以包含一個主函數,即main()函數;也可以包含一個main()函數和若干其它函數

1.3、 c程序的結構

函數與主函數

程序由一個或多個函數組成

必須有一個且只能有一個主函數main()

程序執行從main開始,在main中結束,其他函數通過嵌套調用得以執行

程序語句

C程序由語句組成

用「;」作為語句終止符

注釋

//

/* */ 為注釋,不能嵌套

不產生編譯代碼

1.4、c 程序書寫的規則

習慣用小寫字母,大小寫敏感

不使用行號,無程序行概念:通常一個語句佔一行

可使用空行和空格

常用鋸齒形的書寫格式;同一層次結構的語句上下對齊。

第二章、基本數據類型與運算

2.1、c程序的數據類型

注意類型和變數含義的不同(類型是固定好的名字,變數是自己起的名字)

變數佔用的存儲空間

數據類型

基本類型:整型、字元型、浮點型(單精度型,雙精度型)

構造類型:數組類型、結構體類型

指針類型

空類型

注意基本類型賦初值的方式

基本數據類型的表示形式

整形數據

十進位:以非0數字開頭,如:123,-9,0

八進位;以0數字開頭,如:0123,067

十六進位:以0x開頭,如:0x123,0xff

實型數據

十進位:必須帶小數點,如:123.0,-9.0

指數形式;如:1.23E3,0.9e-2,5e2

字元型數據

普通字元:如:』a』,』2』,』H』,』#』

轉義字元:如:』\n』,』\167』,』\xlf,』\\』

(實現幾列的對齊:指定寬度。如%100\ 『\t』製表位)

(字元串長度。「abc\n\t\\」 strlen 6; sizeof 7)

基本數據類型的存儲長度

整型

Int 位元組數 2 位數 16 數的表示範圍 -32768—32767

Short 2 16 -32768—32767

Long 4 32 -2147483648—2147483647

實型

Float 4 32 3.4e-38—3.4e38

Double 8 64 1.7e-308—1.7e308

字元型

Char 1 8 -128—-127

2.2、標識符命名規則

C語言標誌符命名規則

標識符有數字,字母,下劃線組成

標識符的首字元必須為字母和下劃線

標識符不能為c語言的保留字(關鍵字)

如:auto extern sizeof float static case for struct char goto switch continue in typedef const if union default long unsigned do register void double return else short while enum signed

算術運算符 + – * / %

關係運算符 == = = !=

邏輯運算符 ! ||

位運算符 ~ | ^

賦值運算符 = 及其擴展賦值運算符

條件運算符 ? :

逗號運算符 ,

指針運算符 *

求位元組數運算符 sizeof

強制類型轉換運算符 (類型)

分量運算符 . –

下標運算符 [ ]

其他 如函數調用運算符()

運算符的優先順序

由高到低:單目運算符,算數運算符,關係運算符,賦值運算符

說明:單目運算符:自增運算符,自減運算符,類型裝換運算符。結合方向:自右至左

如:++–I 先—i.。

算術運算 結合方向自左至右

2.3基本運算和表達式

關係表達式和邏輯表達式

(ab)(xy) (a==b)||(x==y) !=a||(ab)

Ab.a為0.不執行b

A||b a為1.不執行b

在 c 中邏輯運算結果:1代表「真」,0代表「假」;

判斷一個表達式是否真:0代表「假」,非0代表「真」

條件表達式 逗號表達式

如:k=5,k++

逗號值為5;k為6.

表達式1?表達式2 :表達式3

K=56 ? 1 : 0

2.4、混合運算的數據類型轉換

2/3+0.5 雙精度浮點型

第三章、順序結構程序設計

3.1、c語句的分類

簡單語句

表達式語句 表達式+分號

空語句 只有分號的語句

複合語句 用花括弧將若干語句括起來

流程式控制制語句

選擇語句 if ,switch

循環語句 while, do while , for

轉移語句 break ,continue ,return goto

3.2、格式輸入函數scanf

一般形式:scanf(「格式控制字元串「,地址列表);

使用scanf函數時,需要注意:

格式字元的個數必須與輸入項的個數相同,數據類型必須一一對應,非格式字元串(說明性的)要原封不動的輸入。

輸入實行數據時,可以不帶小數點,即按整型數據輸入

數值型數據與字元或字元串混合輸入時,需要注意輸入方式。

3.3、格式輸出函數printf

Printf(「格式控制字元串「,輸出列表);

指定輸出格式,由格式字元串和非格式字元串兩種組成,非格式字元串照原樣輸出。

%[標誌][輸出最小寬度][.精度][長度]類型

標誌:- 左對齊;+ 右對齊;

%f, %d, %c, %s

3.4、其他輸入輸出函數

Putchar getchar puts gets

第四章、選擇結構程序設計

If選擇結構

單分支

If(表達式)

語句

雙分支

If(表達式)

語句1

Else

語句2

多分支

If (表達式1)

語句1

Else if(表達式2)

語句2

。。。

Else if(表達式m)

語句m

Else

語句n

Switch(表達式)

{

Case 常量表達式1:語句1;break;

Case 常量表達式2:語句2;break;

。。。

Case 常量表達式m:語句m;break;

Default:語句n;break;

}

注意break的使用

第五章、循環結構程序設計

循環三要素

初始條件 ;終止條件 ;在初始條件和終止條件間反覆做某件事情(循環體)

While(表達式)

語句

Do

語句

While(表達式);

For(循環體變數賦初值;循環條件;循環變數增量)

( for( ) ; // ; 進行時間延遲。在信息交換等時用。如for(i=0,i100) ; 互相通訊的時間延遲。 Delay )

Break語句 :不能用於循環語句和switch語句之外的任何其他語句;跳出循環。

Continue語句 :跳過循環體中剩餘的語句而強行執行下一次循環;跳出本次循環。

第六章、函數與編譯預處理

6.1、函數的定義和調用

類型標識符 函數名 (形式參數列表)

{ 聲明部分

語句

}

例:

Int max (int x,int y)

{int z;brZ=xy?x:y;brReturn(z);}

6.2、局部變數和全局變數

注意函數中靜態變數的定義和使用

6.3、變數的存儲類型

局部變數的存儲類型

自動變數(auto) 動態存儲

局部靜態變數(static) 靜態存儲

寄存器變數(register) 靜態存儲

全局變數的存儲類型

自動變數(auto) 動態存儲

外部變數 (extern) 靜態存儲

全局靜態變數(static )靜態存儲

Extern 外部引用

Static 不能用extern 引用。

第七章、數組

7.1、一維數組的定義和使用

特別需要注意循環體的初值,終止條件

例:

Main()

{

Int I,a[10];

For(i=0;i=9;i++)

A=I;

For(i=9;i=0;i–)

Printf(「%d」,a);

}

注意下標問題

7.2、二維數組的定義和使用

二維數組的初始化

例如:

Int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};

Int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};

Int a[ ][4]={1,2,3,4,5,6,7,8,9,10,11,12};

Int a[ ][4]={{1,2,3,4},{5},{9,10,11,12}};

例如:int a[3][3]={{1},{2},{3}};

是對每一行的第一列元素賦值,未賦值的元素取0

7.3、字元數組和 字元串

字元串用字元數組來處理,結束標誌符 『\0』

如:char c[ ]={「I am happy」};

用字元串常量使字元數組初值化

Char c[ ]={『I』,』 『,』a』,』m』,』 『,』h』,』a』,』p』,』p』,』y』,』\0』};

第八章、指針

8.1、地址和指針的概念

Int I;

Int *i_point;

8.2、指針變數和變數的地址

操作符:*

8.3、指針和一維數組

若有定義

Int a[10];

Int *p=a;

分析下面表達式的含義:

A, a,

*(a+i), a+I,

*(p+i), p+i

A=*(a+i)=*(P+i)

a=a+i=p+i

8.4、指針與字元串

Main()

{

Char string[ ]=」I love china!」;

Printf(「%s\n」,string);

}

Main()

{ char *string=」I love china!」;

Printf(「%s\n」,string);

}

8.5、指針變數作為函數參數

形參的定義方式;實參的形式;參數的傳遞方式。

第九章、結構體

9.1、結構體類型和變數的定義

Struct 結構體名

{成員列表};

Struct student

{char stuNO[8];brChar name[20];brChar sex;brInt age;brFloat score;brChar addr[30];br};

Stuct student

{char stuNO[8];brChar name[20];brChar sex;brInt age;brFloat score;brChar addr[30];br};

Struct student stu1, stu2;

9.2、結構體變數的引用

一般形式為:

結構體變數名.成員名

9.3、結構體數組

結構體數組 結構體數組元素.成員名

指向結構體的指針變數

(*p).成員名

p-成員名

其他

Strcpy(字元數組1,字元串2)

Strcat(字元數組1,字元數組2)

Strcmp(字元串1,字元串2)

Strlen(字元數組)

C語言介紹

C語言的發展過程

C語言是在70年代初問世的。一九七八年由美國電話電報公司(ATT)貝爾實驗室正式發表了C語言。同時由B.W.Kernighan和D.M.Ritchit合著了著名的「THE C PROGRAMMING LANGUAGE」一書。通常簡稱為《KR》,也有人稱之為《KR》標準。但是,在《KR》中並沒有定義一個完整的標準C語言,後來由美國國家標準學會在此基礎上制定了一個C 語言標準,於一九八三年發表。通常稱之為ANSI C。

當代最優秀的程序設計語言

早期的C語言主要是用於UNIX系統。由於C語言的強大功能和各方面的優點逐漸為人們認識,到了八十年代,C開始進入其它操作系統,並很快在各類大、中、小和微型計算機上得到了廣泛的使用。成為當代最優秀的程序設計語言之一。

C語言的特點

C語言是一種結構化語言。它層次清晰,便於按模塊化方式組織程序,易於調試和維護。C語言的表現能力和處理能力極強。它不僅具有豐富的運算符和數據類型,便於實現各類複雜的數據結構。它還可以直接訪問內存的物理地址,進行位(bit)一級的操作。由於C語言實現了對硬體的編程操作,因此C語言集高級語言和低級語言的功能於一體。既可用於系統軟體的開發,也適合於應用軟體的開發。此外,C語言還具有效率高,可移植性強等特點。因此廣泛地移植到了各類各型計算機上,從而形成了多種版本的C語言。

C語言版本

目前最流行的C語言有以下幾種:

·Microsoft C 或稱 MS C

·Borland Turbo C 或稱 Turbo C

·ATT C

這些C語言版本不僅實現了ANSI C標準,而且在此基礎上各自作了一些擴充,使之更加方便、完美。

面向對象的程序設計語言

在C的基礎上,一九八三年又由貝爾實驗室的Bjarne Strou-strup推出了C++。 C++進一步擴充和完善了C語言,成為一種面向 對象的程序設計語言。C++目前流行的最新版本是Borland C++4.5,Symantec C++6.1,和Microsoft VisualC++ 2.0。C++提出了一些更為深入的概念,它所支持的這些面向對象的概念容易將問題空間直接地映射到程序空間,為程序員提供了一種與傳統結構程序設計不同的思維方式和編程方法。因而也增加了整個語言的複雜性,掌握起來有一定難度。

C和C++

但是,C是C++的基礎,C++語言和C語言在很多方面是兼容的。因此,掌握了C語言,再進一步學習C++就能以一種熟悉的語法來學習面向對象的語言,從而達到事半功倍的目的。

C源程序的結構特點

為了說明C語言源程序結構的特點,先看以下幾個程序。這幾個程 序由簡到難,表現了C語言源程序在組成結構上的特點。雖然有關內容還未介紹,但可從這些例子中了解到組成一個C源程序的基本部分和書寫格式。

main()

{

printf(“C語言世界,您好!\n”);

}

main是主函數的函數名,表示這是一個主函數。每一個C源程序都必須有,且只能有一個主函數(main函數)。函數調用語句,printf函數的功能是把要輸出的內容送到顯示器去顯示。printf函數是一個由系統定義的標準函數,可在程序中直接調用。

b)&&(n=c>d),a=5,b=6,c=7,d=8,m=2,n=2,運算後m= ,n= ?’>c語言(m=a>b)&&(n=c>d),a=5,b=6,c=7,d=8,m=2,n=2,運算後m= ,n= ?

首先你應該明白運算的優先順序,包括邏輯運算與算術運算。注意,在c語言中是非0即1的思路,這裡根據C語言語法分析:

ab = 0, 後面是與運算,到此程序應該結束,表達式為0。最後結果:m=0, n=2

求助,關於c語言的。

C語言基礎(01-引言及預備知識): C語言是一門功能強大的編程語言,它也是C++語言的基礎。C語言屬於中級語言。這裡所說的中級是相對於計算機的底層硬體而言的。彙編語言是最低級的語言,它可以直接與硬體打交道。高級語言有Pascal、Basic、Fortran等等。高級語言的一條語句對應低級語言的很多條語句,任何高級語言編寫的程序都要經過編譯程序的編譯、連接才能成為可以運行的程序。編譯連接的過程也就是把高級語言翻譯成機器語言(二進位機器碼)的過程,而彙編語言是基本上與機器語言一 一對應的一種語言。這個翻譯過程是由編譯程序自動完成的。把C語言定為中級語言是有它的道理的,因為C語言既有彙編語言的存取底層硬體的能力,又具有高級語言的許多特點。熟練掌握了C語言,學習其它的各種編程語言應該是很輕鬆的了。

C語言的書寫格式:

1) 一個C語言編寫的源程序,必定有一個主程序(稱為main()函數,在C語言中子程序稱為「函數」(當然,不要理解成為數學裡面的「函數」)。但是決不能有一個以上的main函數(即只能有一個)。

2) 函數語句塊用『{』括弧開始, 以『}』反括弧結束。這樣的花括弧必須成對出現。

3) 表達式寫在小括弧裡面,以『(』括弧開始,以『)』反括弧結束。

4) 函數不能嵌套,即函數裡面不能再套函數。(每一個函數是完成一個特定功能的函數模塊)

C語言的組成:

C語言是由許多函數組成的。其中只有一個主函數(main()函數)。C程序執行時總是從main函數的『{』處開始,至main函數的反大括弧’}’處結束。當然還有其它一些規則,這將在以後的學習中去熟悉它。

C語言的書寫規則:

C語言在書寫時有它自身的特點:書寫格式比較自由,在一行里可以寫多條語句,一個語句也可以分寫在多行上。雖然如此,在書寫源程序時還是要注意哪些可以自由書寫,而哪些必須要按照書寫規則來書寫。

幾條規則寫在下面:

1) 一行內可以寫幾個語句,建議一行不超過兩條語句;

2) 一條語句可以寫在多行上;

3) C語句不需要寫行標號;

4) 每條語句及數據定義的後面要寫上分號以表示該語句結束;

5) C語言中注釋用 /* */來表示;

6) 建議書寫時採用縮進格式;

7) 花括弧、小括弧都是成對出現的。

一個最簡單的C程序的編寫:

/* 程序代碼*/ /* 注釋部分*/

main() /*main是主函數名。緊跟在main後面的括弧是放參數的。

括弧裡面為空說明main函數不需要參數*/

{ /*正寫的大花括弧表示main函數從這裡開始*/

} /*反寫的大花括弧表示main函數到這裡結束*/

說明:由於是一個演示程序,在函數體內並沒有任何可以執行的語句,也就是這個程序什麼事也不做。

這個程序就是這麼簡單: 寫在一行上就是 main() { }

你在TC的編輯環境下把這段代碼輸入進去,按F9鍵編譯連接,按CTRL_F5運行,一定很正常。但是什麼結果也不會有,因為在main函數裡面什麼代碼也沒有。

下面再舉一個可以向屏幕上輸出一條信息的例子:

main()

{

printf(“這就是C語言編寫的程序!”); /*這一條語句的作用是向屏幕輸出一條信息

」這就是C語言編寫的程序!”*/

}

在這個程序中,main函數只有一條語句:printf(“這就是C語言編寫的程序!”);這個語句的作用是向屏幕輸出一個字元串。有關這個語句的知識以後再講。現在要注意的是一個C語言程序的框架是怎樣組成的。

C語言程序的幾種文件格式:

1、 源程序—在TC集成環境中輸入的程序文本稱為源程序。源程序是一種文本文件。它是我們看得見並認識的一種文件。其擴展名為.C。例如你把文件保存為TEST,那麼在磁碟上應看得到TEST.C這個文件。這樣的文件可以用記事本打開。

2、二進位文件—寫完了源程序後接著要做的是編譯這個文件。在TC集成環境里是按ALT_F9鍵,編譯後生成了一個二進位文件,這個二進位文件名為TEST.OBJ,也就是擴展名為OBJ的目標文件。

3、運行文件—最後一步是make(或Link),在TC集成環境里是按F9鍵Make之後生成了一個可以在DOS下運行的文件,其擴展名為EXE。如TEST.EXE。這個EXE文件是由第2步中的OBJ文件生成的。OBJ文件雖然是二進位文件,而電腦又是可以運行二進位文件的,為什麼還要把OBJ文件Link為EXE文件才能運行?這裡的知識就比較多了,這裡不能多講。但是要明白一點,在DOS下僅僅有了一個二進位文件還不能運行,因為操作系統要把這些二進位文件加以規劃,把相應的數據、程序代碼放到應該放的內存位置,這樣的經過嚴密規劃和組織好了的二進位文件才能運行。而這些只有在生成的EXE文件裡面才做完了這些工作。

—————————————

作業題:

1、下列程序中格式錯在( )處。

A. main() B. int a,b,z;

C. a=2:b=3; D. z=a+b;

分析:A,B,D 沒有錯誤。 C 中在a=2後面應該是分號而不應是”:”號

答: C

2、C語言允許將一條語句寫在兩行上,下列語句不正確的是

A. int a,

B;

B. int a

,b;

C. int

a,b

D. int a,b

;

分析:C語言規定可以在語句中的任何一個分隔符或空格處換行。上面4個選項中D.有問題因為在D.中第一行的最後沒有分隔符,而第二行只有一個分號,可以看做一個語句。所以D中的錯誤為:第一行是一個獨立的語句,但是少了一個分號。

答: D

3. C語言的一行寫不下時,可以

A. 用逗號換行 B. 用分號換行

C. 在任意一空格處換行 D. 用回車符換行

分析:C語言可以在任何一個分隔符或空格處換行,所以此題的正確答案是 C

答: C

4. 下列程序段中,哪一個是錯誤的注釋方法?

A. #in/*包含*/cludestdio.h

void main()

{

}

B. #includestdio.h

void main/* */(/*主函數*/)

{

}

C. #includestdio.h

void main()

{ int x/*初始化*/=10;

/*列印*/printf(“%d”,x);

}

D. #includestdio.h

void main()

{

int x=10;

printf(“%d”,x);

/*列印x的值*」*=10*/

}

分析:根據C語言的規定:注釋不能插在標識符的中間,在其它有分隔符的地方都可以插入注釋,上面四個程序段中只有A是將注釋插入在標識符的中間了。所以A是錯誤的。

答: A

5. C語言程序是由( )組成的?

答:C程序是由函數組成的。

6. C程序運行時,運行的是什麼文件?

數據的類型:

在程序中要處理大量的數據,把這些數據按其特點分為幾種基本的數據類型,它們分別是:

1 、整型 2 、字元型 3 、實型

還有其它的一些擴展的數據類型,但是開始學習時要先熟悉這三種基本數據類型。

在 C 語言中這幾種數據類型用符號表示如下:

整型數據類型 int /* 一般指可以運算的數,如自然數就是整型數據類型 */

字元數據類型 char /* 一般指文字,如英文字母;字元類型的 ‘1”2”3”4’ 等 */

實型 float /* 也稱作浮點型,記住 float 類型的數都是有小數位的,如 425.23*/

常量和變數:

常量――程序運行過程中其值不變的量,如一個整數 134, 一個字元 『a’

變數――程序運行過程中其值可以變化的量,如 int a; char b; 那麼 a 和 b 都是變數。

符號常量 ――用一個「符號」來表示的一個「常量」稱為「符號常量」。

符號常量有什麼好處 ――在給符號常量命名的時候,按習慣取的名字與實際上的含義相符,可以「見名識意」;另外在需要修改常量的值的時候,只需要修改符號常量的定義部分即可,非常方便。

符號常量的定義方法 ―― #define 符號 常量

例: #define NUMBER 30 /* 定義了一個符號常量,在這裡是用符號 NUMBER 表示整數 30 ,以後在程序里就可以

用符號 NUMBER 代替整數 30 進行運算 */

main()

{

int a=20; /* 把常量 20 賦給整型變數 a*/

int c; /* 定義了整型變數 c*/

c=NUMBER+a; /* 變數 c 的值此時為 50 ,符號常量 NUMBER 參與了運算 */

}

變數的定義方法 ――在變數的名字前面加上一個變數的數據類型,以說明已定義的變數可以用來存放什麼樣類型的數據。

例: int a; /* 定義了一個整型變數,以後這個變數只能存放整型類型的數 */

char b; /* 定義了一個字元型變數,以後這個變數只能存放符字元型數據 */

怎樣把常量值賦給已定義了的變數 ――用一個 = 號賦值。

例: int a; /* 定義一個整型孌量 a*/

char b; /* 定義了一個字元型變數 b*/

a=20; /* 用 = 號完成賦值,賦值後變數 a 的值此時為 20*/

b=’d’ /* 把常量字元 ‘d’ 賦給變數 b ,此時變數 b 的值是字元 ‘d’*/

變數賦值時一種更靈活的方法 ――可以在一行上給多個相同數據類型的變數賦值,變數之間用逗號分隔。

例: int a,b,c,d; /* 定義了 4 個整型變數 */

char e,f,g; /* 定義了 3 個字元型變數 */

深入理解變數 ―― 1 ) 1 個變數必須有一個變數名。 2 )變數必須有其指定的數據類型

3 )變數一旦被定義,它就在內存中佔有一個位置,這個位置稱做該 變數的地址 。

4 )每一個變數都有其對應的值。

l 一定要牢記變數的這 4 個特性。

變數使用時的注意事項 ―― 1 )變數在使用之前一定要先定義,使用一個沒有定義的變數是錯誤的。

2 )變數必須在一個函數的開始部分定義。(這個限制在 C++ 中不存在)

例題:寫一個 2 個整數相加的程序。

/* 解題思路:求 2 個整數相加,必定要先定義 2 個變數來存放這 2 個數,另外還需要 1 個變數用來存放

相加的和,所以共需要定義 3 個整型變數 */

/* 注意每次在寫 C 程序的時候一定要注意書寫格式 */

main()

{

int a,b,c;

a=20,b=30; /* 在這裡指定變數的值,因為還沒有講輸入輸出函數,只能這樣了。 */

c=a+b;

}

想一想,這樣簡單的一個題,需要知道的知識面卻不少。 用到了上面所講的哪些知識?

C語言中的庫函數――我們編寫C語言程序時要寫許多代碼,這些代碼是用基本程序語句如運算符、表達式、幾種語句結構來組成。這些語句組成了多個不同的函數,由多個函數組成一個完整的程序。實際上如果程序中的語句都要由自己來寫的話,那麼工作量是很大的了。並且有一些完成基本任務的函數如輸入輸出函數是經常需要使用的。這樣的一些常用的完成基本任務的函數有許多已經由提供編譯程序的公司為我們寫好了。這些已經寫好的函數放在TC或者BC編譯器的文件中。所謂「庫函數」,就是存放「函數」的「倉庫」。在TC中,函數的「倉庫」在哪裡呢?在TC的.\LIB目錄中。編寫程序的時候,如果我們需要使用某個庫函數,就要在這個程序開頭指明這庫函數存放在哪裡,以便讓編譯程序到這個地方去找。這個指明庫函數路徑的語句稱為「包含」語句,寫做#include。完整的寫法是:

#include stdio.h

#include 是包含的意思,stdio.h 是指明要使用的庫函數在 stdio.h這個文件裡面有說明。尖括弧是必須要寫的。而實際上,編譯程序在stdio.h之個文件里根據庫函數名可以在.\LIB目錄下的LIB文件里找到相關的代碼,寫進程序裡面去。使用不同的庫函數時要用不同的包含,關於怎樣使用#include,可以查看庫函數的幫助。

有了眾多的庫函數,給編寫程序帶來了很大的方便。就象做房子要用磚和瓦一樣。如果沒有磚和瓦,做房子自己要挖土燒磚,可想而知,那樣做房子的難度有多大。寫程序也是這樣,有了庫函數,在需要完成某些任務時,找到相應的庫函數調用一下就可以了,不需要自己一點一點的寫代碼。在學習編程的同時要多多了解一些庫函數的特點及用法,對編寫程序是有很大的好處的。

(在Windows下編寫程序,需要了解的「庫函數」就更多了,可以說不了解庫函數就不會編程。VC中用的是MFC,Win32中用的是API,它們都是函數庫)

先了解二個庫函數――1、scanf函數 /*格式化控制台輸入函數*/

函數原型:int scanf(control_string….); /*看上去很複雜。沒關係,以後自然會明白的*/

使用例:

void main()

{

int a,b,c; /*定義了三個整型變數*/

scanf(“%d%d”,a,b); /*從鍵盤輸入二個整數到孌量a和b中*/

c=a+b; /*把變數a與b相加的和送給變數c*/

}

下面仔細講一下scanf函數各參數的用法:

可以看到在小括弧里有二個%d,後面有二個變數a和b。二個%d的寫法為”%d%d”,注意凡是這樣的符號都要寫在雙引號裡面,而變數則寫在雙引號的外面並用逗號分隔。這個%d我們稱為格式化說明符,第一個%d用於說明第一個變數a,第二個%d用於說明第二個變數b,這樣的順序是一一對應的。%d格式符說明了後面輸入的變數值是整型數。

另外注意的是二個%d是靠在一起的 %d%d,凡是這樣的寫法,在輸入數時,對於二個數之間的分隔是用「空隔鍵」來實現的。如輸入30和50這二個數形式為 30 50 如果二個%d寫成%d,%d中間有一個逗號,那麼在輸入數據時也一定要在輸入的數之間加上逗號,如 30,50。

再來看一下變數的寫法,可以看到在每一個變數名的前面都有一個號,這個號是取變數地址的意思,那麼a寫在一起就是變數a的地址,b寫在一起就是變數b的地址。

上面的scanf函數的作用就是把從鍵盤上輸入的二個整數分別送到變數a和變數b的地址裡面去。這個號是非常重要,不要寫漏了。

scanf函數的格式說明符(格式說明符說明了下一步將讀的是什麼類型的數據)

格式碼 含義

%c 讀一單字元

%d 讀一整數

%i 讀一個浮點數

%e 讀一個浮點數

%f 讀一個浮點數

%g 讀一個浮點數

%o 讀一個八進位數

%s 讀一字元串

%x 讀一十六進位數

%p 讀一指針

%n 讀一個指針收一個等於到目前為止輸入的字元數止的整數

%u 讀一無符號整數

%[] 掃描一字符集

例:從鍵盤輸入二個字元,一個大寫,一個小寫,然後把這個小寫字元轉換成大寫,大寫字元轉換成小寫。

#includestdio.h /*因為在程序里用到了庫函數scanf,所以要使用包含#includestdio.h*/

void main()

{

char ch,chh; /*定義了二個字元型變數*/

scanf(“%c%c”,ch,chh); /*從鍵盤輸入二個字元,一個大寫,另一個小寫*/

ch=ch+32; /*大寫轉成小寫*/

chh=chh-32; /*小寫轉成大寫*/

}

2、printf函數 /*格式化輸出函數*/

函數原型:int printf(const char *control_string….);

說明:printf把變數的值或常量字元串輸出到控制台(一般是顯示屏)

使用例:

#includestdio.h

void main()

{

int a,b,c;

scanf(“%d%d”,a,b);

c=a+b;

printf(“輸出二個整數相加的和”); /*輸出字元串常量,這裡沒有用到格式化說明符*/

printf(“%d”,c); /*把變數c的值用整型格式輸出,這裡%d是整型格式說明符*/

}

如果有幾個變數的值要輸出,用這樣的形式:printf(“%d %d %d”,a,b,c);

從這個printf輸出的格式中看出,每一個格式符對應一個變數,其對應順序也是一一對應的,第一個%d對應第一個變數a,以此類推。注意在printf函數中,變數前面就不要加符號了。

注意printf函數中幾個%d之間留了一些空格,這裡的用法與scanf相比有一點不同。在printf函數中格式符之間留多少空隔,輸出的時候每一個輸出的值之間就有多少空隔。如printf(“%d %d %d”,a,b,c);輸出則為:20 30 50 (這裡的數是假設的)。如果寫為printf(“%d,%d,%d”,a,b,c);則輸出形式為 20,30,50

printf函數的格式符:

格式碼 格式

%c 單個字元

%d 十進位數

%i 十進位數

%e 科學法表示

%E 科學法表示

%f 十進位浮點數

%g 用%e或%f中較短的的一個(如果是%e,用小寫e)

%G 用%e或%f中較短的的一個(如果是%E,用大寫E)

%o 以八進位形式輸出

%s 字元串

%u 無符號十進位數

%x 十六進位數(小寫)

%X 十六進位數(大寫)

%p 顯示一個指針

%n 相關變數是整型指針,它所指處存放至今要寫入字元的總數

%% 列印一個%號

printf函數使用例:

1)char ss=”abcdefghijk”; printf(“%s”,ss); /*輸出一個字元串,屏幕上顯示”abcdefghijk”*/

2)unsigned int a=65535; printf(“%u”,a); /*以十六進位形式輸出一個無符號數,顯示為ffff*/

3)int a=123,b=456,c=687; printf(“%d\t%d\n%d”,a,b,c);

輸出形式為:

123 456 /*’\t’是一個製表符,所以要移動一個製表位這麼多空格數*/

687 /*’\n’是換行轉義符,在前面字元常量里講過。所以要換一行再輸出687*/

C語言基礎(05-運算符和表達式):運算符(也叫操作符)--運算符是一個表示特定的數學或邏輯操作的符號。如’+’號,表示了一個相加運算;”號表示了一個邏輯『與』的運算。由運算符把需要進行運算的各個量(常量或變數)連接起來組成一個表達式。

下面要講的是標準的運算符,在C++中還有另外的一些運算符。運算符 進行的運算 所屬類別 備註

[ ] 間隔符 標點符號

( ) 間隔符 標點符號

· 直接分量選擇 雙目操作符

– 間接分量選擇 雙目操作符

++ 前增量、後增量 單目操作符

— 前減量、後減量 單目操作符

+ 加 雙目操作符、單目操作符

– 減 雙目操作符、單目操作符

* 1)乘 2)間接引用 雙目操作符、單目操作符

/ 除 雙目操作符

% 求余 雙目操作符

1)位『與』2)取地址 雙目操作符、單目操作符

! 邏輯『非』 單目操作符

邏輯『與』 雙目操作符

|| 邏輯『或』 雙目操作符

左移位 雙目操作符

右移位 雙目操作符

小於 雙目操作符

大於 雙目操作符

== 等於 雙目操作符

!= 不等於 雙目操作符

^ 位『異或』 雙目操作符

+= 和賦值 雙目操作符

-= 差賦值 雙目操作符

*= 乘賦值 雙目操作符

/= 商賦值 雙目操作符

= 左移賦值 雙目操作符

= 右移賦值 雙目操作符

= 按位『與』賦值 雙目操作符

^= 按位異或賦值 雙目操作符

|= 按位或賦值 雙目操作符

%= 模賦值 雙目操作符

= 賦值 雙目操作符

?: 按條件取值 雙目操作符

, 間隔符 標點符號

# 預處理符號 標點符號

## 預處理符號 標點符號

sizeof 求位元組數

~ 按位求反

| 位『或』

: 間隔符

; 間隔符

… 間隔符

要把表中的運算符仔細的分類是不容易的,因為同一個運算符,在不同的地方其含義是不同的。如*運算符,當作為乘運算時是雙目操作符(所謂雙目操作符,即運算時需要二個操作數),如3*6,那麼3與6總共是二個操作數。當作為取值運算時就是單目操作符(所謂單目操作符是只需要一個操作數)如對一個數求反:!a,這裡只有一個操作數a。

要記住運算符的二個特點,一個是運算符的操作對象,另一個就是運算符的優先順序別。其中運算符的優先順序別是最不容易搞清楚和最容易出錯的地方。

在講運算符之前講一下「表達式」的概念:所謂表達式,就是用運算符把各個操作數連接成符合C語法規則的進行運算的式子。這裡說的「符合C語法的規則」也很重要。如 a+b+5就是一個用算術運算符連接起來的表達式。

1、算術運算符:+、-、*、/、%

1)+、-、*、/ 分別是相加、相減、相乘、相除

2)% 求二個數運算的模。所謂求模就是求二個數相除後的餘數。例:25/3的餘數是1,可以說25%3的模是1。要注意的是求模運算時二個操作數必須是整數。如果求25.3/3.1這樣是不能運算的。

下面寫一個例子:

#includestdio.h /*程序中要用到輸入輸出庫函數,所以包含了stdio.h*/

void main()

{

int a=10,b=20,c=30; /*定義了3個整型變數,並同時進行了初始化賦值*/

a=a*b+c; /*a*b+c組成了一個算術表達式,運算後的結果為230並把值*/

/*賦給變數a*/

printf(“%d”,a); /*以整型格式輸出變數a的值。這裡輸出230*/

a=a%b; /*進行求模運算。因為沒有餘數,最後的模為0*/

printf(“%d”,a); /*輸出變數a的值。這裡輸出0*/

}

下面是一個要考慮運算符優先順序的例子:

#includestdio.h

void main()

{

int a=10,b=20,c=30;

a=c-a*b; /*這裡就要考慮運算符優先順序,*運算符的優先順序比-運算符*/

/*的高,所以先進行乘運算。這裡最後結果為-170*/

}

由上面這個例子看到,在一個有多個運算符連接起來的表達式中需要考慮運算符的優先順序,這個例子很簡單。關於運算符優先順序的概念其實在小學生的算術運算中就有這樣的概念了,只不過這裡的運算符多了一些,要考慮的情況也就複雜了。

如果這個式子改寫一下,寫成:a=(c-a)*b;在運算時就以括弧中的運算優先。

幾個簡化的運算表達式:

在C語言的程序中,經常看到這樣的運算,如:i++;或者k–;這是運算符號的簡化寫法。

1、加1運算的簡寫

當一個變數進行加1運算時,如a=a+1;這是變數自身加1,簡寫為a++;

2、減1運算的簡寫

當一個變數進行減1運算時,如a=a-1;這是變數自身減1,簡寫為a–;

3、加1個常量運算的簡寫

當一個變數與一個常量相加時,如a=a+5;這是變數自身加5,簡寫為a+=5;

4、減一個常量運算的簡寫

當一個變數與一個常量相減時,如a=a-5;這是變數自身減5,簡寫為a-=5;

5、乘一個常量運算的簡寫

當一個變數與一個常量相乘時,如a=a*5,這是變數自身乘5,簡寫為a*=5;

6、除一個常量運算的簡寫

當一個變數與一個常量相除時,如a=a/5;這是變數自身除5,簡寫為a/=5;

運算符的結合性(或稱作關聯性)

在一個複雜的表達式中,常常有許多運算符和變數,這時就要判斷優先順序和結合性這二個因素。

例:-5+7; 這樣的一個表達式用結合性來判斷,因為運算符’-‘和’+’相對於運算的數來說是『左』結合的,所以就有’-5’和’+7’所以運算的結果為 2。

通過這個例子要知道什麼是「左結合性」和「右結合性」

左結合性--變數(或常量)與左邊的運算符結合

右結合性--變數(或常量)與右邊的運算符結合

運算符的優先順序和結合性表

優先順序 運算符(高 ------→低) 結合率 運算符類型

高 ( ) [ ] – . 從左至右 雙目運算符

! ~ ++ — (類型) sizeof + – * 從右至左 單目運算符

* / % 從左至右 雙目運算符

+ – 從左至右 雙目運算符

從左至右 雙目運算符

= = 從左至右 雙目運算符

== != 從左至右 雙目運算符

從左至右 雙目運算符

^ 從左至右 雙目運算符

| 從左至右 雙目運算符

從左至右 雙目運算符

|| 從左至右 雙目運算符

?: 從右至左 三目運算符

低 = += -= *= /= %= = ^= |= = = 從左至右 雙目運算符

高 -------------→ 低

從表中可以看出一個規律,凡是單目運算符都是「右結合」的,凡是雙目運算符都是「左結合」的。其中有一個?:運算符是三目運算符是右結合的,記住了這個規律,運算符的結合性也就掌握了。

如果代碼行中的運算符比較多,用括弧確定表達式的操作順序,避免使用默認的優先順序。

由於將表熟記是比較困難的,為了防止產生歧義並提高可讀性,應當用括弧確定表達式的操作順序。例如:

d = (high 8) | low /*用括弧把需要先運算的括起來*/

if ((a | b) (a c)) /*用括弧把需要先運算的括起來*/

例:

下列程序輸出的結果是

#includestdio.h

void main()

{

int a=2;

a%=4-1;

printf(“%d”,a);

a+=a*=a-=a*=3;

printf(“\n%d”,a);

}

A. 2,0 B. 1,0

C. -1,12 D. 2,12

分析:由於%=運算符的優先順序別低於-運算,a%=4-1即是a%=3,等價於a=a%3即a=2%3=2,所以選項B和C是錯誤的。表達式a+=a*=a-=a*=3,計算時注意賦值類表達式的值和變數的值隨時被更新,計算表達式的值,開始時a=2,表達式賦值是從左至右進行的,表達a*=3使得a=6,此表達式的值也為6,於是表達式a-=a*=3相當於a-=6=6-6=0,a的值為0,後面的計算就不用做了,所以a的值最終為0。

答:A

下列語句中錯誤的是

A.x=sizeof int;

B.x=sizeof 3.14

C.printf(“%d”,a=a+1,b–,c+1);

D.printf(“%d”,++x,x++);

分析:此題的選項A的作用是測試int類型所佔內存的位元組數,因為類型符要用括弧括起來,這時缺少括弧是錯誤的。

選項B是正確的。

選項C從表面上看似乎複雜一些,但其中的a=a+1,b–,c+1是一個逗號表達式,C語言允許使用這種表達式所以D也是正確的。

答案:A

下面的語句中,符合C語言語法的賦值語句是

A.a=7+b+c=a+7; B.a=7+b++=a+7;

C.a=7+b,b++,a+7; D.a=7+b;c=a+7;

分析:一般情況下,表達式不能放在賦值號的左邊,所

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/254508.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-14 17:42
下一篇 2024-12-14 17:42

相關推薦

  • AES加密解密演算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密演算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES演算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演著非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • Python語法大全解析

    本文旨在全面闡述Python語法,並提供相關代碼示例,幫助讀者更好地理解Python語言。 一、基礎語法 1、Python的注釋方式 # 這是單行注釋 “”” 這是多行注釋,可以注…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29
  • Python按位運算符和C語言

    本文將從多個方面詳細闡述Python按位運算符和C語言的相關內容,並給出相應的代碼示例。 一、概述 Python是一種動態的、面向對象的編程語言,其按位運算符是用於按位操作的運算符…

    編程 2025-04-29
  • Python中複數的語法

    本文將從多個方面對Python中複數的語法進行詳細的闡述。Python中的複數是指具有實部和虛部的數,其中實部和虛部都是浮點數。它們可以用「實數+虛數j」的形式表示。例如,3 + …

    編程 2025-04-29
  • Python語言由荷蘭人為中心的全能編程開發工程師

    Python語言是一種高級語言,很多編程開發工程師都喜歡使用Python語言進行開發。Python語言的創始人是荷蘭人Guido van Rossum,他在1989年聖誕節期間開始…

    編程 2025-04-28
  • Python語言設計基礎第2版PDF

    Python語言設計基礎第2版PDF是一本介紹Python編程語言的經典教材。本篇文章將從多個方面對該教材進行詳細的闡述和介紹。 一、基礎知識 本教材中介紹了Python編程語言的…

    編程 2025-04-28
  • parent.$.dialog是什麼技術的語法

    parent.$.dialog是一種基於jQuery插件的彈出式對話框技術,它提供了一個方便快捷的方式來創建各種類型和樣式的彈出式對話框。它是對於在網站開發中常見的彈窗、提示框等交…

    編程 2025-04-28

發表回復

登錄後才能評論