本文目錄一覽:
- 1、c語言的詞法分析器
- 2、計算機c語言基礎知識
- 3、C語言知識總結
- 4、C語言介紹
- 5、b)&&(n=c>d),a=5,b=6,c=7,d=8,m=2,n=2,運算後m= ,n= ?’ title=’c語言(m=a>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= ?
- 6、求助,關於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-hk/n/254508.html