c語(yǔ)言全套課件_第1頁(yè)
c語(yǔ)言全套課件_第2頁(yè)
c語(yǔ)言全套課件_第3頁(yè)
c語(yǔ)言全套課件_第4頁(yè)
c語(yǔ)言全套課件_第5頁(yè)
已閱讀5頁(yè),還剩718頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

基本類型數(shù)據(jù)及其運(yùn)算C的數(shù)據(jù)類型數(shù)據(jù)類型基本類型整型字符型實(shí)型(浮點(diǎn)型)單精度型雙精度型枚舉類型構(gòu)造類型數(shù)組類型結(jié)構(gòu)體類型共用體類型指針類型空類型2.1C語(yǔ)言的數(shù)據(jù)類型

數(shù)據(jù)的值有兩種不同的表現(xiàn)形式:常量和變量。

C語(yǔ)言提供了豐富的運(yùn)算符和表達(dá)式,以完成各種數(shù)值計(jì)算和非數(shù)值計(jì)算。

2.1C語(yǔ)言的數(shù)據(jù)類型

本章將著重介紹基本數(shù)據(jù)類型中的整型、實(shí)型和字符型數(shù)據(jù),數(shù)據(jù)的運(yùn)算及輸入輸出。

2.1C語(yǔ)言的數(shù)據(jù)類型

2.2常量與變量

2.3整型數(shù)據(jù)

2.4實(shí)型數(shù)據(jù)

2.5字符型數(shù)據(jù)

2.2.1標(biāo)識(shí)符

在C語(yǔ)言中,標(biāo)識(shí)符就是常量、變量、數(shù)組、函數(shù)、類型和語(yǔ)句的名稱,分為關(guān)鍵字、預(yù)定義標(biāo)識(shí)符和用戶標(biāo)識(shí)符3種類型。2.2.1標(biāo)識(shí)符

1.關(guān)鍵字ANSIC標(biāo)準(zhǔn)C共有32個(gè)關(guān)鍵字,1999年ISO推出的C99標(biāo)準(zhǔn)新增了5個(gè)關(guān)鍵字(見附錄C)。

根據(jù)關(guān)鍵字的作用,可以將關(guān)鍵字分為數(shù)據(jù)類型關(guān)鍵字和流程控制關(guān)鍵字兩大類。1).數(shù)據(jù)類型關(guān)鍵字

(1)基本數(shù)據(jù)類型(5個(gè))

void char int

float

double

(2)類型修飾關(guān)鍵字(4個(gè))

short

long

signed

unsigned2.2.1標(biāo)識(shí)符

(3)復(fù)雜類型關(guān)鍵字(5個(gè))

struct

union

enum

typedef

sizeof

(4)存儲(chǔ)級(jí)別關(guān)鍵字(6個(gè))

auto

static

register

externconst

volatile2).流程控制關(guān)鍵字

(1)跳轉(zhuǎn)結(jié)構(gòu)(4個(gè))

return

continue

break

goto

(2)分支結(jié)構(gòu)(5個(gè))

if

else

switch

case

default

(3)循環(huán)結(jié)構(gòu)(3個(gè))

for

do

while

C99新增5個(gè)關(guān)鍵字:

inline,restrict,_bool,_Complex,_Imaginary2.2.1標(biāo)識(shí)符2.預(yù)定義標(biāo)識(shí)符

預(yù)定義標(biāo)識(shí)符通常包括C編譯系統(tǒng)提供的標(biāo)準(zhǔn)庫(kù)函數(shù)名(如printf、scanf等)和編譯預(yù)處理命令名(如define、include等)。2.2.1標(biāo)識(shí)符

在C語(yǔ)言中,預(yù)定義標(biāo)識(shí)符也有特定的含義。雖然預(yù)定義標(biāo)識(shí)符也可以作為用戶標(biāo)識(shí)符使用,但這樣會(huì)失去系統(tǒng)規(guī)定的原意。3.用戶標(biāo)識(shí)符

C程序中用于標(biāo)識(shí)變量、符號(hào)常量、數(shù)組、函數(shù)和數(shù)據(jù)類型等對(duì)象的一個(gè)字符序列,統(tǒng)稱為用戶定義標(biāo)識(shí)符。

C語(yǔ)言規(guī)定用戶標(biāo)識(shí)符只能由字母、數(shù)字和下劃線組成,且以字母或下劃線開頭。2.2.1標(biāo)識(shí)符

2.2.1標(biāo)識(shí)符

說明:

(1)C語(yǔ)言中同一字母的大小寫,被認(rèn)為是兩個(gè)不同的字符。例如:

total、TOTAL、ToTaL、tOtAl不同的用戶標(biāo)識(shí)符。

(2)C語(yǔ)言的關(guān)鍵字不能用作用戶標(biāo)識(shí)符。例如:

int不合法

Int、INT、iNt合法(3)用戶標(biāo)識(shí)符的命名要見名知意。

例如:

name/xm(姓名)、sex/xb(性別)、

age/nl(年齡)。2.2.1標(biāo)識(shí)符

(4)避免使用易混字符。

例如:

1、l、i;0、o、O;p、P;x、X;2、z、Z等。file6、stu_name、DeFault、_9、xandy正確6file、stu-name、default、-9、x&y不正確

在程序運(yùn)行過程中,其值不能被改變的量稱為常量。

常量分為直接常量和符號(hào)常量。2.2.2常量

直接常量的類型從字面上就能夠區(qū)分出來,如:

125為整型常量,12.56為實(shí)型常量,

'a'為字符常量,"china"為字符串常量。1.直接常量

直接常量即常數(shù),分為整型常量、實(shí)型常量、字符常量和字符串常量。

#include<stdio.h>#definePRICE100//定義符號(hào)常量voidmain(){ intsum; sum=PRICE*20; printf("%d\n",sum);}2.符號(hào)常量

#defineNUMBER10main(){ inttotal; NUMBER=20; total=0; total=total+number; printf(“%d,%d”,number,total);}有關(guān)常量的用法:習(xí)慣上,符號(hào)常量名用大寫,變量名用小寫。2.2.3變量

變量代表內(nèi)存中具有特定屬性的一個(gè)存儲(chǔ)空間來放數(shù)據(jù),其中的數(shù)據(jù)稱為變量的值。在程序運(yùn)行期間,變量值是可以改變的。

編譯系統(tǒng)將對(duì)每一個(gè)變量根據(jù)它的類型分配相應(yīng)字節(jié)的連續(xù)內(nèi)存單元,稱為變量存儲(chǔ)空間。

每個(gè)變量都必須有一個(gè)名字,變量名實(shí)際上是以一個(gè)名字代表一個(gè)內(nèi)存地址。

把這幾個(gè)內(nèi)存單元地址中較低的地址稱為變量地址。變量地址可用“&變量名”求得。有關(guān)變量的用法:main(){ intx; y=‘a(chǎn)’; printf(“%d”,x);}在c語(yǔ)言中,要求對(duì)所用到的變量作強(qiáng)制定義,即“先定義,后使用”undeclaredidentifier2.2.3變量

變量名、變量地址、變量存儲(chǔ)空間和變量值之間的關(guān)系:2.2.3變量

1.變量定義

在C語(yǔ)言中,要求對(duì)所有用到的變量必須先定義、后使用。

變量定義的一般格式如下:

類型說明符變量名1[,變量名2,…,變量名n];

例如:

inti,j,k;

floatx,y,z;2.2.3變量

2.變量賦值

變量賦值有如下幾種方式。

(1)變量賦初值。定義變量時(shí)直接賦值,也稱為變量的初始化。例如:

inta=10,b=9,c=6;

floatx=3.0,y=1.0,z=2.0;

注:不能將同初值的變量賦初值時(shí)寫成以下形式:

inta=b=c=6;

只能寫成:

inta=6,b=6,c=62.2.3變量

2.變量賦值

變量賦值有如下幾種方式。

(2)用賦值語(yǔ)句賦值。例如:

floatx;

x=10.0;2.2.3變量

2.變量賦值

變量賦值有如下幾種方式。

(3)從鍵盤輸入數(shù)據(jù)給變量賦值。例如:

inta;

scanf("%d",&a);

2.2.3變量

2.變量賦值

變量賦值有如下幾種方式。

(4)從磁盤文件讀數(shù)據(jù)給變量賦值。2.1C語(yǔ)言的數(shù)據(jù)類型

2.2常量與變量

2.3整型數(shù)據(jù)

2.4實(shí)型數(shù)據(jù)

2.5字符型數(shù)據(jù)

整型數(shù)據(jù)整型常量整型變量2.3整型數(shù)據(jù)

2.3.1整型常量整型常量即整數(shù),整型數(shù)據(jù)在C語(yǔ)言中可用三種形式表示:

(1)十進(jìn)制。例如10、36。

(2)八進(jìn)制(以數(shù)字0開頭)。例如012,

0478則是非法的。

(3)十六進(jìn)制(以數(shù)字0+字母x(X)開

頭)。

例如0x36、-0X8aC。編碼正數(shù)表示方法負(fù)數(shù)表示方法原碼最高位為符號(hào)位(0-正數(shù),1-負(fù)數(shù))。其他位為此數(shù)絕對(duì)值的二進(jìn)制表示。反碼同原碼最高位為符號(hào)位(1),其他位為原碼表示的各位取反。補(bǔ)碼同原碼最高位為符號(hào)位(1),其他位為原碼表示的各位取反再末位加1。2.3.2整型變量

1.整型數(shù)據(jù)存放形式

整型數(shù)據(jù)在內(nèi)存中以二進(jìn)制補(bǔ)碼形式存放。

例如:求-10的補(bǔ)碼表示(按16位存儲(chǔ))。-10的原碼1000000000001010絕對(duì)值各位取反1111111111110101末位加11111111111110110則得到-10的二進(jìn)制補(bǔ)碼的表示。有關(guān)整型數(shù)據(jù)的用法:inti;i=5;inti;i=-5;0000000010100000原補(bǔ)碼相同11111111110111112.3整型數(shù)據(jù)

2.整型變量的分類

根據(jù)占用內(nèi)存字節(jié)數(shù)的不同,整型變量分為:

(1)基本整型(類型關(guān)鍵字為int)。

(2)短整型(類型關(guān)鍵字為short[int])。

(3)長(zhǎng)整型(類型關(guān)鍵字為long[int])。

TurboC2.0和TurboC++3.0為short和int分配2個(gè)字節(jié),為long分配4個(gè)字節(jié);

VC++6.0為short分配2個(gè)字節(jié),為int和long分配4個(gè)字節(jié)。

2.3整型數(shù)據(jù)

3.整型變量的符號(hào)屬性

(1)有符號(hào)整型數(shù)據(jù)。

有符號(hào)整型數(shù)據(jù)的最高位為符號(hào)位,符號(hào)位為0表示正數(shù),符號(hào)位為1表示負(fù)數(shù)。

有符號(hào)型又分為:

有符號(hào)基本整型([signed]int)

有符號(hào)短整型([signed]short[int])

有符號(hào)長(zhǎng)整型([signed]long[int])

2.3整型數(shù)據(jù)

(2)無符號(hào)整型數(shù)據(jù)。

無符號(hào)整型數(shù)據(jù)表示的都是正數(shù),其最高位不是符號(hào)位而是數(shù)值位。

無符號(hào)型又分為:

無符號(hào)基本整型(unsigned[int])

無符號(hào)短整型(unsignedshort[int])

無符號(hào)長(zhǎng)整型(unsignedlong[int])

2.3整型數(shù)據(jù)

4.整型數(shù)據(jù)值域

整型數(shù)據(jù)所占字節(jié)數(shù)和數(shù)值范圍:2.3整型數(shù)據(jù)

有符號(hào)和無符號(hào)整型數(shù)據(jù)在2個(gè)字節(jié)中存放形式#include<stdio.h>voidmain(){ inta,b; a=32767; b=a+1; printf("%d\n%d",a,b);}3278732768運(yùn)行結(jié)果改為21474836472147483647-2147483648運(yùn)行結(jié)果2.1C語(yǔ)言的數(shù)據(jù)類型

2.2常量與變量

2.3整型數(shù)據(jù)

2.4實(shí)型數(shù)據(jù)

2.5字符型數(shù)據(jù)

實(shí)型數(shù)據(jù)實(shí)型數(shù)據(jù)實(shí)型常量實(shí)型變量單精度浮點(diǎn)型雙精度浮點(diǎn)型復(fù)數(shù)浮點(diǎn)型2.4實(shí)型數(shù)據(jù)

2.4.1實(shí)型常量

有兩種表示形式:

1.小數(shù)形式

實(shí)型常量的小數(shù)形式由數(shù)字序列和小數(shù)點(diǎn)組成,小數(shù)點(diǎn)不能省略。

例如:

3.1415926、-0.15、0.15、.15、2.0、2.

2.4實(shí)型數(shù)據(jù)

2.指數(shù)形式實(shí)型常量的指數(shù)形式如:

123.456e2或123.456E2,相當(dāng)于123.456×102

e或E前面必須有數(shù)字,后面的指數(shù)必須為整數(shù)。

0.235e4、24458.6e-4、5.7854e7合法125e4.5、e4、.e4、e不合法2.4實(shí)型數(shù)據(jù)

123.456可以寫成:

123.456e0、12.3456e1、1.23456e2、

0.123456e3、1234.56e-1等。其中:

1.23456e2規(guī)范化的指數(shù)形式2.4實(shí)型數(shù)據(jù)

2.4.2實(shí)型變量1.實(shí)型數(shù)據(jù)的存放形式實(shí)數(shù)可以寫成:N=±M×2E

其中:M稱為N的尾數(shù),E稱為N的階碼,

M前面的正、負(fù)號(hào)稱為數(shù)符。

系統(tǒng)把實(shí)型數(shù)據(jù)的數(shù)符、尾數(shù)和階碼分別存放。以float型為例,實(shí)型數(shù)據(jù)在其中存放形式:2.4實(shí)型數(shù)據(jù)

2.實(shí)型變量分類

C語(yǔ)言中實(shí)型變量有3種類型:

(1)單精度型。類型關(guān)鍵字為float。

(2)雙精度型。類型關(guān)鍵字為double。

(3)長(zhǎng)雙精度型。類型關(guān)鍵字為longdouble。

實(shí)型數(shù)據(jù)所占字節(jié)數(shù)及數(shù)值范圍:

實(shí)型數(shù)據(jù)的舍入誤差2.1C語(yǔ)言的數(shù)據(jù)類型

2.2常量與變量

2.3整型數(shù)據(jù)

2.4實(shí)型數(shù)據(jù)

2.5字符型數(shù)據(jù)

2.5字符型數(shù)據(jù)1.普通字符能在屏幕上顯示的字符稱為普通字符,可直接將這類字符用單引號(hào)擴(kuò)起來,例如:

'A'、'8'、'+'2.轉(zhuǎn)義字符

以反斜杠“\”開頭后跟規(guī)定的單個(gè)字符或數(shù)字的轉(zhuǎn)義字符。注意:如果反斜杠、雙引號(hào)或單引號(hào)本身作為字符常量,必須使用轉(zhuǎn)義字符,即:

'\\'、'\"'、'\''

。2.5字符型數(shù)據(jù)

常用轉(zhuǎn)義字符表:‘\40’表示空格字符,‘\101'表示字符‘A'‘\x20’表示空格字符,‘\x41'表示字符‘A'printf("\"A\102\x43\"");

輸出結(jié)果:"ABC"2.5.2字符類型——變量變量值的存儲(chǔ)以ASCII碼存儲(chǔ),占一個(gè)字節(jié)charc1,c2;unsignedcharc1,c2;舉例字符變量ch中存放字符'a',其ASCII碼為97,在內(nèi)存中以二進(jìn)制形式存放,其格式如下:01100001ch字符型變量特性

字符數(shù)據(jù)在內(nèi)存中存儲(chǔ)的是字符的ASCII碼──一個(gè)無符號(hào)整數(shù),其形式與整數(shù)的存儲(chǔ)形式一樣,所以C語(yǔ)言允許字符型數(shù)據(jù)與整型數(shù)據(jù)之間通用。注意:字符型數(shù)據(jù)與整型數(shù)據(jù)在存儲(chǔ)方式上的相似性使得兩者之間可以通用。但字符型數(shù)據(jù)的表示范圍是:0~255。(1)一個(gè)字符型數(shù)據(jù),既可以字符形式輸出,也可以整數(shù)形式輸出。

main()

{charch1;intch2;ch1='a';ch2=98;printf(“ch1=%c,ch2=%c\n”,ch1,ch2);

printf(“ch1=%d,ch2=%d\n”,ch1,ch2);

}

(2)允許對(duì)字符數(shù)據(jù)進(jìn)行算術(shù)運(yùn)算,此時(shí)就是對(duì)它們的ASCII碼值進(jìn)行算術(shù)運(yùn)算。#include<stdio.h>voidmain()

{charch1,ch2;

ch1='a';ch2='B';

printf("ch1=%c,ch2=%c\n",ch1-32,ch2+32);

/*用字符形式輸出一個(gè)大于256的數(shù)值*/ printf("ch1+256=%d\n",ch1+256);

printf("ch1+256=%c\n",ch1+256);

}

ch1=A,ch2=bch1+256=353ch1+256=a字符型數(shù)據(jù)和整型數(shù)據(jù)進(jìn)行運(yùn)算時(shí),是其ASCII碼值參與運(yùn)算。‘A’+3//值為68,對(duì)應(yīng)字符'D'‘5’-‘0’//值為55+‘0'//值為53,對(duì)應(yīng)字符'5'2.5.3字符串常量字符串常量的概念和字符串長(zhǎng)度

字符串常量是用一對(duì)雙引號(hào)括起來的若干字符序列。 字符串中字符的個(gè)數(shù)稱為字符串長(zhǎng)度。長(zhǎng)度為0的字符串(即一個(gè)字符都沒有的字符串)稱為空串,表示為“”(一對(duì)緊連的雙引號(hào))。字符串的存儲(chǔ)

C語(yǔ)言規(guī)定:在存儲(chǔ)字符串常量時(shí),由系統(tǒng)在字符串的末尾自動(dòng)加一個(gè)‘\0’作為字符串的結(jié)束標(biāo)志。

不要將字符常量與字符串常量混淆。charc;c='a';c="a";字符串"CHINA",在內(nèi)存中是:CHINA\0占用6字節(jié)而非5字節(jié)內(nèi)存空間思考?1、字符串常量"Howdoyoudo."的長(zhǎng)度是多少?2、字符串C:\msdos\v6.22和Isay:"Goodbye!"在C語(yǔ)言中的字符串常量形式如何表示?14"C:\\msdos\\v6.22"和"Isay:\"Goodbye!\""2.9順序結(jié)構(gòu)程序設(shè)計(jì)

2.6運(yùn)算符與表達(dá)式

2.7數(shù)據(jù)的類型轉(zhuǎn)換

2.8數(shù)據(jù)的輸入與輸出

2.6運(yùn)算符與表達(dá)式

2.6.1運(yùn)算符概述

理解和掌握以下C語(yǔ)言運(yùn)算符的概念:

(1)運(yùn)算符功能。

(2)運(yùn)算符與運(yùn)算對(duì)象(即操作數(shù))的關(guān)系。①運(yùn)算對(duì)象個(gè)數(shù)。

單目運(yùn)算符、雙目運(yùn)算符和三目運(yùn)算符。②運(yùn)算對(duì)象類型。2.6運(yùn)算符與表達(dá)式

所謂結(jié)合性是指當(dāng)一個(gè)運(yùn)算對(duì)象兩側(cè)的運(yùn)算符具有相同的優(yōu)先級(jí)時(shí),該運(yùn)算對(duì)象是先與左邊的運(yùn)算符結(jié)合,還是先與右邊的運(yùn)算符結(jié)合。自左至右的結(jié)合方向,稱為左結(jié)合性,反之,稱為右結(jié)合性。(3)運(yùn)算符優(yōu)先級(jí)

運(yùn)算符優(yōu)先級(jí)分為15個(gè)級(jí)別,從1-15

(4)運(yùn)算符結(jié)合性

2.6運(yùn)算符與表達(dá)式

2.6.2 表達(dá)式概述用運(yùn)算符和括號(hào)將運(yùn)算對(duì)象(常量、變量和函數(shù)等)連接起來并符合C語(yǔ)言語(yǔ)法規(guī)則的式子,稱為表達(dá)式。

求表達(dá)式值時(shí),從左往右逐步執(zhí)行。如果一個(gè)運(yùn)算對(duì)象兩側(cè)的運(yùn)算符優(yōu)先級(jí)不同,則按運(yùn)算符的優(yōu)先級(jí)高低次序執(zhí)行。如果一個(gè)運(yùn)算對(duì)象兩側(cè)的運(yùn)算符優(yōu)先級(jí)相同,則按結(jié)合性進(jìn)行。2.6運(yùn)算符與表達(dá)式

結(jié)合性是C語(yǔ)言的獨(dú)有概念。除單目運(yùn)算符、賦值運(yùn)算符和條件運(yùn)算符是右結(jié)合性外,其它運(yùn)算符都是左結(jié)合性。a–b*ca–b+c1、算術(shù)運(yùn)算符+-*/%2、關(guān)系運(yùn)算符><==>=<=!=

3、邏輯運(yùn)算符!&&||4、位運(yùn)算符<<>>~|^&5、賦值運(yùn)算符=及其擴(kuò)展賦值運(yùn)算符6、條件運(yùn)算符?:7、逗號(hào)運(yùn)算符,8、指針運(yùn)算符*&9、求字節(jié)數(shù)運(yùn)算符sizeof10、強(qiáng)制類型轉(zhuǎn)換運(yùn)算符(類型)11、分量運(yùn)算符.

12、下標(biāo)運(yùn)算符[]13、其他如函數(shù)調(diào)用運(yùn)算符()分類運(yùn)算符2.6.3算術(shù)運(yùn)算符與算術(shù)表達(dá)式

1.算術(shù)運(yùn)算符2.6.3算術(shù)運(yùn)算符與算術(shù)表達(dá)式

除法運(yùn)算符/

:當(dāng)兩個(gè)操作數(shù)均為整數(shù)時(shí),運(yùn)算結(jié)果為整數(shù)(即小數(shù)部分被舍棄),否則結(jié)果為實(shí)數(shù)。例如:5/2=2而5.0/2=2.5。求余數(shù)運(yùn)算符%:求兩個(gè)數(shù)相除的余數(shù),要求兩側(cè)的運(yùn)算對(duì)象必須為整型數(shù)據(jù)。例如:5%2=15%-2=1-5%2=-1-5%-2=-12.6.3算術(shù)運(yùn)算符與算術(shù)表達(dá)式

2.算術(shù)表達(dá)式用算術(shù)運(yùn)算符將運(yùn)算對(duì)象連接起來的合法式子稱為算術(shù)表達(dá)式。例如:3+6*9、(x+y)/3-1注意:

x2+3x+5寫成C語(yǔ)言表達(dá)式為:

x*x+3*x+5。

2.6.3算術(shù)運(yùn)算符與算術(shù)表達(dá)式

3.算術(shù)運(yùn)算類型轉(zhuǎn)換

如果一個(gè)運(yùn)算符兩側(cè)的運(yùn)算對(duì)象的數(shù)據(jù)類型不同,則系統(tǒng)首先將兩側(cè)數(shù)據(jù)自動(dòng)轉(zhuǎn)換成同一類型,然后在同一類型數(shù)據(jù)間進(jìn)行運(yùn)算。intunsignedlongdouble低高char,shortfloat必定的轉(zhuǎn)換2.6.3算術(shù)運(yùn)算符與算術(shù)表達(dá)式

例如:charch;inti;shorts;floatf;doubled;ch/s+f*i-dintintintintintdoubledoubledoubledoubledouble2.6.4賦值運(yùn)算符和賦值表達(dá)式

1.賦值運(yùn)算符(1)簡(jiǎn)單賦值運(yùn)算符“=”

一般形式為:變量=表達(dá)式功能:先求“=”號(hào)右側(cè)表達(dá)式的值,然后將這個(gè)值存入左側(cè)變量所占的存儲(chǔ)單元中,即給變量賦值。例如:

x=5//將常量5賦值給變量x。2.6.4賦值運(yùn)算符和賦值表達(dá)式

(2)復(fù)合賦值運(yùn)算符

C語(yǔ)言有10種復(fù)合賦值運(yùn)算符:+=、-=、*=、/=、%=;//復(fù)合算術(shù)運(yùn)算符&=、^=、|=、<<=、>>=、 //復(fù)合位運(yùn)算符2.6.4賦值運(yùn)算符和賦值表達(dá)式

一般形式為:

變量雙目運(yùn)算符=表達(dá)式└──┬──┘復(fù)合賦值運(yùn)算符等價(jià)于:變量=變量雙目運(yùn)算符(表達(dá)式)例如:x+=3 //等價(jià)于x=x+3y*=x+6 //等價(jià)于y=y*(x+6)而不是:y=y*x+62.6.4賦值運(yùn)算符和賦值表達(dá)式

例如:

a=5//a的值5就是賦值表達(dá)式a=5的值。賦值運(yùn)算符的優(yōu)先級(jí)為14,結(jié)合方向?yàn)樽杂抑磷蟆?/p>

a=b=8%3//表達(dá)式的值為2

2.賦值表達(dá)式由賦值運(yùn)算符將一個(gè)變量和一個(gè)表達(dá)式連接起來的式子,稱為賦值表達(dá)式。

被賦值變量的值就是賦值表達(dá)式的值。2.6.4賦值運(yùn)算符和賦值表達(dá)式

inta=6a-=a*=a+4//等價(jià)于:a=a-(a=a*(a+4))其求解過程為:

(1)先運(yùn)算a+4的值為10,a的值不變?nèi)詾?;

(2)再運(yùn)算a=a*10,因此a=6*10,a的值為60;

(3)最后運(yùn)算a=a-60,因此a=60-60,a的值為0注意:左值問題賦值運(yùn)算符左側(cè)的標(biāo)識(shí)符稱為“左值”。表達(dá)式和常量不能作為左值。凡是左值都可以做右值。a=3*5=4*32.6.4賦值運(yùn)算符和賦值表達(dá)式

3.賦值類型的轉(zhuǎn)換

轉(zhuǎn)換規(guī)則如下:(1)整型數(shù)據(jù)與實(shí)型數(shù)據(jù)之間類型轉(zhuǎn)換①整型數(shù)據(jù)賦給實(shí)型變量時(shí),數(shù)值上不發(fā)生任何變化,但以浮點(diǎn)型數(shù)據(jù)存儲(chǔ)到變量中。例如:

floatf=100;結(jié)果:100.0,再以指數(shù)形式存到f所占存儲(chǔ)單元中。②實(shí)型數(shù)據(jù)賦給整型變量時(shí),小數(shù)部分將被舍棄。例如:

inta=3.6415;結(jié)果:3。(2)實(shí)型數(shù)據(jù)之間類型轉(zhuǎn)換①float數(shù)據(jù)賦給double變量時(shí),數(shù)值不變,有效數(shù)據(jù)擴(kuò)展到16位。②double數(shù)據(jù)賦給float變量時(shí),截取前面7位有效數(shù)據(jù)。2.6.4賦值運(yùn)算符和賦值表達(dá)式

(3)整型數(shù)據(jù)之間、整型數(shù)據(jù)與字符型數(shù)據(jù)之間類型轉(zhuǎn)換①短的→長(zhǎng)的變量需要進(jìn)行符號(hào)位擴(kuò)展。

將數(shù)據(jù)賦給變量的低字節(jié),如果數(shù)據(jù)的符號(hào)位為0,則變量的高字節(jié)補(bǔ)0;反之,變量的高字節(jié)補(bǔ)1,以保持?jǐn)?shù)值不改變。如圖2-12所示。2.6.4賦值運(yùn)算符和賦值表達(dá)式

2.6.4賦值運(yùn)算符和賦值表達(dá)式

短的無符號(hào)→長(zhǎng)的變量將數(shù)據(jù)賦給變量的低字節(jié),高字節(jié)補(bǔ)0。2.6.4賦值運(yùn)算符和賦值表達(dá)式

②長(zhǎng)的→短的變量截取低字節(jié)數(shù)據(jù)。2.6.4賦值運(yùn)算符和賦值表達(dá)式

③長(zhǎng)度相同的變量,原樣賦值。2.6.5自增、自減運(yùn)算符

++、--是單目運(yùn)算符,運(yùn)算對(duì)象只能是變量,優(yōu)先級(jí)為2,結(jié)合方向?yàn)樽杂抑磷蟆W栽?、自減運(yùn)算符有兩個(gè)功能:

(1)取由該運(yùn)算符構(gòu)成表達(dá)式的值

(2)實(shí)現(xiàn)變量(運(yùn)算對(duì)象)自身的加1或減1運(yùn)算2.6.5自增、自減運(yùn)算符

自增、自減運(yùn)算符都有兩種用法:(1)前置運(yùn)算──例如:++i、--i先加減、后求值。(2)后置運(yùn)算──例如:i++、i--先求值、后加減。2.6.5自增、自減運(yùn)算符

i=2;j=i++;//相當(dāng)于:j=i;i=i+1;j=++i;//相當(dāng)于:i=i+1;j=i;2.6.5自增、自減運(yùn)算符

自增、自減運(yùn)算符的用法#include<stdio.h>intmain(){intx=6,y;printf("x=%d\n",x); y=++x; printf("y=++x:x=%d,y=%d\n",x,y);y=x--; printf("y=x--:x=%d,y=%d\n",x,y); return0;}運(yùn)行結(jié)果:x=6y=++x:x=7,y=7y=x--:x=6,y=72.6.5自增、自減運(yùn)算符

說明:(1)C編譯系統(tǒng)在處理表達(dá)式時(shí),盡可能多地(自左而右)將若干個(gè)字符組成一個(gè)運(yùn)算符

i+++j

(i++)+j(2)自增、自減運(yùn)算符不能用于常量和表達(dá)式,例如:

5++、--(a+b)等都是非法的表達(dá)式。(3)最好避免這種用法,例如:(i++)+(i++)+(i++)

#include<stdio.h>intmain(){inti,j,k,a,b;i=j=k=0;a=(i++)+(++j);b=a+i+j-(k++);printf(“%d%d%d\n”,i,j,k);printf(“a=%db=%d\n”,a,b);return0;}2.6.6逗號(hào)運(yùn)算符、逗號(hào)表達(dá)式

用逗號(hào)運(yùn)算符“,”連接起來的式子,稱為逗號(hào)表達(dá)式,一般形式為:

表達(dá)式1,表達(dá)式2,……,表達(dá)式n

逗號(hào)運(yùn)算符的優(yōu)先級(jí)為15,結(jié)合方向?yàn)樽宰笾劣摇?/p>

逗號(hào)表達(dá)式求解過程為:自左至右,依次計(jì)算各表達(dá)式的值,“表達(dá)式n”的值作為整個(gè)逗號(hào)表達(dá)式的值。2.6.6逗號(hào)運(yùn)算符、逗號(hào)表達(dá)式

a=3*5,a*4a=3,a*4,a++//逗號(hào)表達(dá)式的值為60。//逗號(hào)表達(dá)式的值為3。注意:并不是任何地方出現(xiàn)的逗號(hào),都是逗號(hào)運(yùn)算符。很多情況下,逗號(hào)僅用作分隔符,例如:printf("%d%d%d",a,b,c);

2.9順序結(jié)構(gòu)程序設(shè)計(jì)

2.6運(yùn)算符與表達(dá)式

2.7數(shù)據(jù)的類型轉(zhuǎn)換

2.8數(shù)據(jù)的輸入與輸出

2.7數(shù)據(jù)的類型轉(zhuǎn)換

數(shù)據(jù)的類型轉(zhuǎn)換有隱式類型轉(zhuǎn)換和強(qiáng)制類型轉(zhuǎn)換兩種。

當(dāng)出現(xiàn)下述情況時(shí)將進(jìn)行隱式類型轉(zhuǎn)換:

運(yùn)算轉(zhuǎn)換--不同類型數(shù)據(jù)混合運(yùn)算時(shí)進(jìn)行轉(zhuǎn)換;

賦值轉(zhuǎn)換--把一個(gè)值賦給與其類型不同的變量時(shí)進(jìn)行轉(zhuǎn)換;

輸出轉(zhuǎn)換--輸出時(shí)轉(zhuǎn)換成指定的輸出格式2.7數(shù)據(jù)的類型轉(zhuǎn)換

數(shù)據(jù)類型強(qiáng)制轉(zhuǎn)換的一般格式為:

(數(shù)據(jù)類型)(表達(dá)式)例如:(double)a(float)5/2(float)(5/2)//將變量a的值轉(zhuǎn)換成double型//將5轉(zhuǎn)換成5.0,再除以2(=2.5)//將5整除2的結(jié)果(2)轉(zhuǎn)換成浮點(diǎn)型(2.0)2.7數(shù)據(jù)的類型轉(zhuǎn)換

注意:(1)強(qiáng)制轉(zhuǎn)換類型得到的是一個(gè)所需類型的中間量,原表達(dá)式類型并不發(fā)生變化,例如:inta=3;(double)a;

(2)如果被轉(zhuǎn)換表達(dá)式不是簡(jiǎn)單表達(dá)式時(shí),外邊的一對(duì)圓括號(hào)不能省,例如:

(int)(5.8+3.4)2.9順序結(jié)構(gòu)程序設(shè)計(jì)

2.6運(yùn)算符與表達(dá)式

2.7數(shù)據(jù)的類型轉(zhuǎn)換

2.8數(shù)據(jù)的輸入與輸出

2.8數(shù)據(jù)的輸入/輸出

輸入是由輸入設(shè)備向計(jì)算機(jī)主機(jī)輸入數(shù)據(jù)。

輸出是指由計(jì)算機(jī)主機(jī)向輸出設(shè)備輸出數(shù)據(jù)。

通常輸入設(shè)備為鍵盤,輸出設(shè)備為顯示器。磁盤文件即是輸入設(shè)備又是輸出設(shè)備。2.8數(shù)據(jù)的輸入/輸出

在C語(yǔ)言中,沒有專門的輸入輸出語(yǔ)句,所有的輸入輸出操作都是通過調(diào)用標(biāo)準(zhǔn)輸入、輸出庫(kù)函數(shù)來完成的。在調(diào)用標(biāo)準(zhǔn)輸入輸出函數(shù)時(shí)需要用到頭文件“stdio.h”,因此在程序開頭應(yīng)該有以下的預(yù)編譯命令:

#include"stdio.h"或#include<stdio.h>//標(biāo)準(zhǔn)方式2.8.1格式化輸出函數(shù)printf

printf一般格式為:

printf(格式控制,輸出項(xiàng)列表)

例如:printf(”i=%d,c=%c\n”,i,c);格式聲明2.8.1格式化輸出函數(shù)printf

printf一般格式為:

printf(格式控制,輸出項(xiàng)列表)

例如:printf(”i=%d,c=%c\n”,i,c);普通字符2.8.1格式化輸出函數(shù)printf

printf一般格式為:

printf(格式控制,輸出項(xiàng)列表)

例如:printf(”i=%d,c=%c\n”,i,c);可以是常量、變量或表達(dá)式2.8.1格式化輸出函數(shù)printf

輸出項(xiàng)與前面的“輸出格式說明”必須由左至右一一對(duì)應(yīng),例如:2.8.1格式化輸出函數(shù)printf

1.輸出格式說明輸出格式說明一般形式為:

%[<修飾符>]<格式字符>

格式控制是用雙引號(hào)括起來的字符串,它包括兩部分內(nèi)容:

1.普通字符與轉(zhuǎn)義字符

printf(”i=%d,c=%c\n”,i,c);2.輸出格式說明,以“%”開始,后跟格式字符,(1)格式字符用于指定輸出數(shù)據(jù)按何種形式輸出。格式字符及其作用如表所示

2.8.1格式化輸出函數(shù)printf

(2)修飾符。修飾符用于指定輸出數(shù)據(jù)所占的寬度、對(duì)齊方式以及保留小數(shù)位數(shù)等,修飾符可以省略。2.8.1格式化輸出函數(shù)printf

2.整型數(shù)據(jù)輸出

1)d──以帶符號(hào)的十進(jìn)制整數(shù)形式輸出。%d,按整型數(shù)據(jù)實(shí)際長(zhǎng)度輸出%mdm為指定的輸出字段的寬度,如果數(shù)據(jù)的位數(shù)小于m,則左端補(bǔ)以空格,若大于m,則按實(shí)際位數(shù)輸出%-md

同上,但右端補(bǔ)空格。%ld:長(zhǎng)整型數(shù)據(jù)%lld:雙長(zhǎng)整型#include<stdio.h>int

main(){intn1=123;

printf("n1=%d,n1=%5d,n1=%-5d,n1=%2d\n",

n1,n1,n1,n1);return0;}

程序運(yùn)行結(jié)果如下:num1=123,num1=□□123,num1=123□□,num1=123 2.8.1格式化輸出函數(shù)printf

整型數(shù)據(jù)可以用格式符d、u、o、x輸出,例如:inta=-1;printf(“%d%u%o%x\n",a,a,a,a);運(yùn)行結(jié)果:-1429496729537777777777ffffffff2.8.1格式化輸出函數(shù)printf

說明:在VC++6.0中,給a分配4個(gè)字節(jié),將-1的補(bǔ)碼存儲(chǔ)到a所占的存儲(chǔ)單元中,存放形式如圖所示。2.8.1格式化輸出函數(shù)printf

3.字符型數(shù)據(jù)輸出字符型數(shù)據(jù)即可按字符形式輸出,也可按整數(shù)形式輸出,例如:charc='A';printf("字符=%cASCII=%d",c,c);運(yùn)行結(jié)果:字符=AASCII=652.8.1格式化輸出函數(shù)printf

4.實(shí)型數(shù)據(jù)輸出實(shí)型數(shù)據(jù)(float型和double型)即可用格式符f以小數(shù)形式輸出,也可用格式符e以指數(shù)形式輸出,例如:

floatf=12.3456789;printf("f=%f,f=%e\n",f,f);運(yùn)行結(jié)果:

f=12.345679,f=1.234568e+001例如:類型轉(zhuǎn)換字符f的使用。#include<stdio.h>intmain(){floatf=123.456;doubled1,d2;d1=1111111111111.111111111;d2=2222222222222.222222222;printf("%f,%12f,%12.2f,%-12.2f,%.2f\n",f,f,f,f,f);printf("d1+d2=%f\n",d1+d2);return0;}

程序運(yùn)行結(jié)果如下:

123.456001,□□123.456001,□□□□□□123.46,

123.46□□□□□□,123.46d1+d2=3333333333333.3330102.8.1格式化輸出函數(shù)printf

2.8.1格式化輸出函數(shù)printf

2.8.1格式化輸出函數(shù)printf

8.輸出轉(zhuǎn)換注意:(1)較長(zhǎng)型數(shù)據(jù)→短型數(shù)據(jù),輸出時(shí)其值不能超出短型數(shù)據(jù)允許的值范圍。例如:

inta=65536;printf("%hd",a);在VC++6.0中,輸出結(jié)果為0。2.8.1格式化輸出函數(shù)printf

(2)輸出的數(shù)據(jù)類型與輸出格式不符時(shí)會(huì)產(chǎn)生錯(cuò)誤的結(jié)果。例如,下面兩例均輸出錯(cuò)誤的結(jié)果。

intd=9;printf("%f",d);或

floatc=3.2;printf("%d",c);

切記整型數(shù)據(jù)不能按實(shí)型數(shù)據(jù)輸出,實(shí)型數(shù)據(jù)也不能按整型數(shù)據(jù)輸出。2.8.2格式化輸入函數(shù)scanf

函數(shù)scanf一般格式為:

scanf(格式控制,地址列表);

地址列表是若干輸入項(xiàng)的地址,各地址之間用逗號(hào)“,”分隔。在變量名前加取地址運(yùn)算符“&”表示該變量地址。2.8.2格式化輸入函數(shù)scanf例如:

intm;floatx;scanf("%d%f",&m,&x);不能寫成:

scanf("%d%f",m,x);2.8.2格式化輸入函數(shù)scanf

格式控制用于指定數(shù)據(jù)的輸入格式,是用雙引號(hào)括起來的一個(gè)字符串,由格式說明和普通字符兩部分組成。(1)格式說明格式說明規(guī)定了數(shù)據(jù)以何種類型的數(shù)據(jù)格式被輸入。一般形式是:

%[<修飾符>]<格式字符>scanf中格式字符與printf中的格式字符相同。scanf中修飾符有:m、h、l2.8.2格式化輸入函數(shù)scanf(2)普通字符格式控制字符串中的普通字符在輸入數(shù)據(jù)時(shí)要照原樣輸入。例如:

inta,b;scanf("a=%d,b=%d",&a,&b);則輸入應(yīng)為:a=5,b=6↙輸入數(shù)據(jù)時(shí)不能規(guī)定精度例如,scanf("%7.2f",&a)是不合法的。2.8.2格式化輸入函數(shù)scanf1.輸入數(shù)據(jù)的結(jié)束標(biāo)志(1)空白字符:空格鍵、Enter鍵和Tab鍵例如:

intyear,month,day;scanf("%d%d%d",&year,&month,&day);可以輸入為:

2012910↙也可以輸入為:

2012↙910↙不能輸入為:2012,9,102.8.2格式化輸入函數(shù)scanf(2)指定數(shù)據(jù)寬度例如:

intyear,month,day;scanf("%4d%2d%2d",&year,&month,&day);可以輸入為:

20121221↙則將2012→year,12→month,21→day。注意:也可以用空格、Enter鍵或Tab鍵作為分隔,即可以輸入為:

20121221↙2.8.2格式化輸入函數(shù)scanf(3)指定數(shù)據(jù)分隔符用普通字符作為輸入數(shù)據(jù)的分隔符,例如:

scanf("%d-%d-%d",&year,&month,&day);

輸入應(yīng)為:

2012-12-12↙如果輸入為:

2012,12,12則2012→year由于沒有遇到“-”,scanf函數(shù)就結(jié)束執(zhí)行,month和day的值不變。2.8.2格式化輸入函數(shù)scanf(4)遇到非法字符,例如:

scanf("%d",&m);若輸入:12o9↙由于12之后遇到字符'o',第1個(gè)數(shù)據(jù)到此結(jié)束,所以把12賦給m。2.8.2格式化輸入函數(shù)scanf2.格式說明%c

格式說明%c用于輸入單個(gè)字符,從鍵盤上輸入的空白字符將作為有效字符讀入,例如:

charch1,ch2,ch3;scanf("%c%c%c",&ch1,&ch2,&ch3);如果輸入:

abc↙則將'a'賦給ch1,'b'賦給ch2,'c'賦給ch3。如果輸入:

a↙bc↙則將'a'賦給ch1,'↙'賦給ch2,'b'賦給ch3。2.8.2格式化輸入函數(shù)scanf3.格式說明的類型與輸入項(xiàng)的類型必須匹配在scanf函數(shù)中,格式說明的類型必須與輸入項(xiàng)的類型由左至右一一對(duì)應(yīng)匹配,如果不匹配,輸入項(xiàng)將不能得到正確的值.例如:

inta; floatm; scanf("%d%d",&a,&m);在程序中有3個(gè)scanf函數(shù)調(diào)用語(yǔ)句,要使a=5,b=10,m=4.5,n=-7.6,ch1='A',ch2='a'。#include<stdio.h>intmain(){ inta,b; floatm,n; charch1,ch2; scanf("%d%d",&a,&b);

scanf("m=%f,n=%f",&m,&n);

scanf("%c%c",&ch1,&ch2);

printf("a=%d,b=%d\n",a,b); printf("m=%f,n=%f\n",m,n);

printf("ch1=%c,ch2=%c\n",ch1,ch2); return0;}如果輸入:510↙m=4.5,n=-7.6↙運(yùn)行結(jié)果:a=5,b=10m=-107374176.000000,n=-107374176.000000ch1=,ch2=m2.8.2格式化輸入函數(shù)scanf

若在程序中連續(xù)調(diào)用多個(gè)scanf函數(shù),應(yīng)消除前一行輸入的“回車”符,解決辦法是在下一個(gè)scanf函數(shù)的格式字符串中開始加一個(gè)空格符來抵消上一行輸入的“回車”,即改為:scanf("m=%f,n=%f",&m,&n);

scanf("%c%c",&ch1,&ch2);注意:執(zhí)行該程序時(shí),也可以輸入為:510m=4.5,n=-7.6Aa↙2.8.3字符輸出函數(shù)putchar

功能:向屏幕上輸出一個(gè)字符。其調(diào)用格式為:

putchar(ch)ch為輸出項(xiàng),可以是字符型表達(dá)式或整型表達(dá)式。例如:putchar('a');putchar(65);putchar('a'-32);putchar('\101');

2.8.4字符輸入函數(shù)getchar

功能:從鍵盤輸入一個(gè)字符。其調(diào)用格式為:

getchar();執(zhí)行g(shù)etchar()函數(shù)時(shí),等待輸入字符,直到按Enter鍵才結(jié)束。輸入的第一個(gè)字符被getchar()函數(shù)接收,并作為該函數(shù)的返回值。輸入一個(gè)字符,并將該字符輸出#include"stdio.h" voidmain(){charch;printf("Pleaseinputtwocharacter:");ch=getchar(); //輸入1個(gè)字符并賦給ch

putchar(ch);putchar('\n');putchar(getchar());//輸入一個(gè)字符并輸出

putchar('\n');} 輸入:abc↙運(yùn)行結(jié)果:ab

思考如果輸入數(shù)據(jù)如下:a↙b↙會(huì)如何?程序運(yùn)行情況如下:

Pleaseinputtwocharacters:a↙a↙↙2.9順序結(jié)構(gòu)程序設(shè)計(jì)

2.6運(yùn)算符與表達(dá)式

2.7數(shù)據(jù)的類型轉(zhuǎn)換

2.8數(shù)據(jù)的輸入與輸出

2.9簡(jiǎn)單程序設(shè)計(jì)——順序結(jié)構(gòu)程序設(shè)計(jì)

2.9.1C語(yǔ)句

C語(yǔ)句可以分為5類:控制語(yǔ)句、函數(shù)調(diào)用語(yǔ)句、表達(dá)式語(yǔ)句、空語(yǔ)句、復(fù)合語(yǔ)句。2.9簡(jiǎn)單程序設(shè)計(jì)——順序結(jié)構(gòu)程序設(shè)計(jì)

(1)控制語(yǔ)句。控制語(yǔ)句用于控制程序的執(zhí)行流程,共有9種語(yǔ)句,可分為3類:選擇語(yǔ)句,循環(huán)語(yǔ)句,輔助語(yǔ)句。

選擇語(yǔ)句:if...else...、switch

循環(huán)語(yǔ)句:for...、while...、do...while

輔助語(yǔ)句:continue、break、goto、return例如:

if(x>y)z=x;elsez=y;2.9簡(jiǎn)單程序設(shè)計(jì)——順序結(jié)構(gòu)程序設(shè)計(jì)

(2)函數(shù)調(diào)用語(yǔ)句:由一個(gè)函數(shù)調(diào)用加一個(gè)分號(hào)構(gòu)成,格式為:

函數(shù)名(參數(shù)表);例如:

printf("ThisisaCstaement.");2.9簡(jiǎn)單程序設(shè)計(jì)——順序結(jié)構(gòu)程序設(shè)計(jì)

(3)表達(dá)式語(yǔ)句:表達(dá)式后加一分號(hào)“;”,就構(gòu)成表達(dá)式語(yǔ)句例如:

a=3和i=i+1是賦值表達(dá)式,但不是語(yǔ)句,而

a=3;和i=i+1;則是賦值語(yǔ)句。2.9簡(jiǎn)單程序設(shè)計(jì)——順序結(jié)構(gòu)程序設(shè)計(jì)

(4)空語(yǔ)句。只有一個(gè)分號(hào)的語(yǔ)句:

;常用在循環(huán)語(yǔ)句或函數(shù)體中。(5)復(fù)合語(yǔ)句。將多個(gè)語(yǔ)句用花括號(hào)括起來的語(yǔ)句,語(yǔ)法上作為一個(gè)語(yǔ)句,例如:if(a>b){t=a;a=b;b=t;}2.9.2順序結(jié)構(gòu)程序設(shè)計(jì)

一個(gè)C語(yǔ)言程序可由順序、選擇、循環(huán)三種基本控制結(jié)構(gòu)組成。

順序結(jié)構(gòu)表示程序中的各個(gè)操作是按照它們出現(xiàn)的先后順序執(zhí)行的。2.9.2順序結(jié)構(gòu)程序設(shè)計(jì)

選擇結(jié)構(gòu)表示程序的處理步驟出現(xiàn)了分支,需要根據(jù)某一特定的條件選擇其中的一個(gè)分支執(zhí)行。

循環(huán)結(jié)構(gòu)表示程序反復(fù)執(zhí)行某個(gè)或某些操作,直到某條件為假(或?yàn)檎妫r(shí)才可終止循環(huán)。選擇結(jié)構(gòu)(分支結(jié)構(gòu))的處理過程為:先判斷一個(gè)條件,然后根據(jù)條件是否成立,執(zhí)行不同的代碼。

選擇結(jié)構(gòu)程序設(shè)計(jì)C語(yǔ)言提供了作為判斷條件的關(guān)系表達(dá)式和邏輯表達(dá)式,還有實(shí)現(xiàn)分支結(jié)構(gòu)的if語(yǔ)句和switch語(yǔ)句。3.1關(guān)系運(yùn)算符和關(guān)系表達(dá)式關(guān)系運(yùn)算符:比較兩個(gè)量的運(yùn)算符關(guān)系表達(dá)式:用關(guān)系運(yùn)算符將運(yùn)算對(duì)象 連接起來的式子在C語(yǔ)言中,關(guān)系運(yùn)算符有六種3.1.1關(guān)系運(yùn)算符優(yōu)先級(jí)相同

(高)①<

(小于)②<=(小于或等于)③>

(大于)④>=(大于或等于)⑤==(等于)⑥!=(不等于)優(yōu)先級(jí)相同

(低)運(yùn)算符優(yōu)先級(jí)的高低次序3.1.1關(guān)系運(yùn)算符結(jié)合性為自左至右關(guān)系表達(dá)式是用關(guān)系運(yùn)算符將運(yùn)算對(duì)象連接起來的式子。

運(yùn)算對(duì)象可以是常量、變量或表達(dá)式。3.1.2關(guān)系表達(dá)式例如:

3>7a<=ba%2==0a+b>=c-d關(guān)系表達(dá)式求解的結(jié)果:成立或不成立,即“真(true)”或“假(flase)”。

在C語(yǔ)言中,用“1”代表“真”,用“0”代表“假”。3.1.2關(guān)系表達(dá)式例如:

inta=7,b=4,c=1,d;a%2==0a%2==0的值為0a%b<a/ba%b<a/b的值為03.1.2關(guān)系表達(dá)式例如:

inta=7,b=4,c=1,d;d=a>bd=a>b的值為1(d=a)>b(d=a)>b的值為1d=a>b>cd=a>b>c的值為0注意:在C語(yǔ)言中要判斷a大于b且b大于c時(shí),寫成邏輯表達(dá)式a>b&&b>c,其中&&是邏輯與運(yùn)算符。3.2.1邏輯運(yùn)算符

在C語(yǔ)言中,邏輯運(yùn)算符有三種

3.2邏輯運(yùn)算符和邏輯表達(dá)式運(yùn)算符優(yōu)先級(jí)的高低次序3.1.1關(guān)系運(yùn)算符結(jié)合性為自右至左結(jié)合性為自左至右邏輯表達(dá)式:用邏輯運(yùn)算符將關(guān)系表達(dá)式或邏輯量連接起來的式子。

邏輯表達(dá)式的值是一個(gè)邏輯值,即“真”或“假”。

C語(yǔ)言中,以1表示“真”,以0表示“假”。3.2.2邏輯表達(dá)式邏輯運(yùn)算的真值表3.2.2邏輯表達(dá)式

運(yùn)算對(duì)象,可以是任意類型的數(shù)據(jù),以非0表示真,以0表示假

運(yùn)算結(jié)果,以1表示“真”,以0表示“假”邏輯量的真假判定──0和非0C語(yǔ)言用整數(shù)“1”表示“邏輯真”、用“0”表示“邏輯假”。但在判斷一個(gè)數(shù)據(jù)的“真”或“假”時(shí),卻以0和非0為根據(jù):如果為0,則判定為“邏輯假”;如果為非0,則判定為“邏輯真”。例如,假設(shè)num=12,則:!num的值,num>=1&&num<=31的值,num||num>31的值。011

注意!3.2.2邏輯表達(dá)式對(duì)于&&,如果其左側(cè)表達(dá)式的值為假,則右側(cè)表達(dá)式不進(jìn)行求解(即不執(zhí)行)。

對(duì)于||,如果其左側(cè)表達(dá)式的值為真,則右側(cè)表達(dá)式不進(jìn)行求解。例如,假設(shè)n1、n2、n3、n4、x、y的值分別為1、2、3、4、1、1,則求解表達(dá)式“(x=n1>n2)&&(y=n3>n4)”后,x的值變?yōu)椋鴜的值等于!01C99所增加的一種數(shù)據(jù)類型類型標(biāo)識(shí)符:_Boolstdbool.h頭文件中,把bool定義為該類型的別名

#definebool

_Bool同時(shí)定義:#definetrue

1

#definefalse

0

【注】在不支持c99標(biāo)準(zhǔn)的編譯器上(如VC++6.0)不能使用。#include<stdio.h>intmain(){

_Boolb; b=2000; printf("%d\n",b); return0;}13.3.1if語(yǔ)句的形式3.3if語(yǔ)句C語(yǔ)言中的if語(yǔ)句有三種基本形式。1.單分支if語(yǔ)句一般形式: if(表達(dá)式)

語(yǔ)句例如: if(x>y) printf("%d",x);表達(dá)式語(yǔ)句假真【例3-1】求x的絕對(duì)值。3.3.1if語(yǔ)句的形式思路:先求解表達(dá)式x<0的值,判斷x是否為負(fù)數(shù),如果結(jié)果為真,則執(zhí)行內(nèi)嵌的語(yǔ)句x=-x;,否則不執(zhí)行該語(yǔ)句。掌握if語(yǔ)句的一般形式與求解過程。3.3.1if語(yǔ)句的形式【例3-1】求x的絕對(duì)值。#include<stdio.h>

intmain()

{ intx; scanf("%d",&x); if(x<0) x=-x;//if的內(nèi)嵌語(yǔ)句 printf("|x|=%d\n",x); return0;}

運(yùn)行一次,輸入:-10運(yùn)行結(jié)果:|x|=10再運(yùn)行一次,輸入:-10運(yùn)行結(jié)果:|x|=10【例3-2】輸入兩個(gè)整數(shù),按由小到大的順序輸出這兩個(gè)數(shù)。3.3.1if語(yǔ)句的形式本題要點(diǎn): 1.交換變量?jī)?nèi)容的方法 2.復(fù)合語(yǔ)句使用3.3.1if語(yǔ)句的形式【例3-2】輸入兩個(gè)整數(shù),按由小到大的順序輸出這兩個(gè)數(shù)。#include<stdio.h>

intmain()

{ intx,y,t; scanf("%d,%d",&x,&y); if(x>y) {t=x;x=y;y=t;}//復(fù)合語(yǔ)句 printf("%d,%d\n",x,y); return0;}

運(yùn)行一次,輸入:10,5運(yùn)行結(jié)果:5,10思考:

去掉{},程序結(jié)果?xyt87878voidmain(){inta,b,c,temp;printf("Pleaseinputthreenumbers:");scanf("%d,%d,%d",&a,&b,&c);if(a>b){temp=a;a=b;b=temp;}if(b>c){temp=b;b=c;c=temp;}if(a>b){temp=a;a=b;b=temp;}printf("%d,%d,%d\n",a,b,c);} 輸入任意三個(gè)數(shù)a、b、c,按從小到大的順序排序輸出。2.雙分支if語(yǔ)句3.3.1if語(yǔ)句的形式一般形式: if(表達(dá)式)

語(yǔ)句1 else

語(yǔ)句2例如: if(x>0) printf("%d",x); else printf("%d",-x);表達(dá)式語(yǔ)句1語(yǔ)句2真假【例3-3】求兩個(gè)數(shù)中較大者。3.3.1if語(yǔ)句的形式

使用雙分支if語(yǔ)句實(shí)現(xiàn)。3.3.1if語(yǔ)句的形式【例3-3】求兩個(gè)數(shù)中較大者。#include<stdio.h>

intmain()

{ intx,y,max; scanf("%d,%d",&x,&y); if(x>y) max=x;//if的內(nèi)嵌語(yǔ)句 else max=y;//else的內(nèi)嵌語(yǔ)句 printf("max=%d\n",max); return0;}

運(yùn)行一次,輸入:5,10運(yùn)行結(jié)果:Max=10

注意!3.2.2邏輯表達(dá)式

else不能作為語(yǔ)句單獨(dú)使用,它必須是if語(yǔ)句的一部分,與if配對(duì)使用。例如: if(x>y) {x=y;y++;} else {y=x;x--;}如果寫成: if(x>y) x=y;y++; else {y=x;x--;}語(yǔ)法錯(cuò)誤3.多分支if語(yǔ)句3.3.1if語(yǔ)句的形式多分支if語(yǔ)句可以看成雙分支if語(yǔ)句的擴(kuò)展形式,即在雙分支if語(yǔ)句中,else的內(nèi)嵌語(yǔ)句是另一個(gè)雙分支的if語(yǔ)句。一般形式: if(表達(dá)式1)語(yǔ)句1 elseif(表達(dá)式2)語(yǔ)句2 elseif(表達(dá)式3)語(yǔ)句3 …… else語(yǔ)句n多分支if語(yǔ)句的執(zhí)行過程:3.3.1if語(yǔ)句的形式如果表達(dá)式1的值為真,則執(zhí)行語(yǔ)句1,否則判斷表達(dá)式2。如果表達(dá)式2的值為真,則執(zhí)行語(yǔ)句2,否則判斷表達(dá)式3,依次類推。如果所有表達(dá)式的值都為假,則執(zhí)行語(yǔ)句n?!纠?-4】輸入一個(gè)百分制的分?jǐn)?shù),輸出相應(yīng)的等級(jí)。3.3.1if語(yǔ)句的形式要求如下:

成績(jī)>=90,輸出A 89>=成績(jī)>=80,輸出B 79>=成績(jī)>=70,輸出C 69>=成績(jī)>=60,輸出D

成績(jī)<60,輸出E本題要求使用多分枝if語(yǔ)句實(shí)現(xiàn)。3.3.1if語(yǔ)句的形式【例3-4】輸入一個(gè)百分制的分?jǐn)?shù),輸出相應(yīng)的等級(jí)。#include<stdio.h>

intmain()

{ intscore; scanf("%d",&score); if(score>=90)printf("scoregradeisA\n");elseif(score>=80)printf("scoregradeisB\n");elseif(score>=70)printf("scoregradeisC\n");elseif(score>=60)printf("scoregradeisD\n");elseprintf("scoregradeisE\n");return0;}

運(yùn)行一次,輸入:85運(yùn)行結(jié)果:scoregradeisB再運(yùn)行一次,輸入:55運(yùn)行結(jié)果:scoregradeisE在if語(yǔ)句中,if和else的內(nèi)嵌語(yǔ)句可以是任何語(yǔ)句,如果又是if語(yǔ)句,則稱為if語(yǔ)句的嵌套。3.3.2if語(yǔ)句的嵌套3.3.2if語(yǔ)句的嵌套例如:if(a>b) if(b>c) printf("%disbiggest\n",a);elseprintf("%disnotbiggest\n",a);以上代碼中else與哪個(gè)if配對(duì)?3.3.2if語(yǔ)句的嵌套C語(yǔ)言規(guī)定:else總是與它上面最近的未曾配對(duì)的if配對(duì)。即:if(a>b) if(b>c) printf("%disbiggest\n",a); else printf("%disnotbiggest\n",a);else與這個(gè)if配對(duì)if(a>b){ if(b>c) printf("%disbiggest\n",a);} else printf("%disnotbiggest\n",a);else與這個(gè)if配對(duì)3.3.2if語(yǔ)句的嵌套【例3-5】求三個(gè)數(shù)中最大者。本題使用嵌套if語(yǔ)句實(shí)現(xiàn)。3.3.1if語(yǔ)句的嵌套【例3-5】求三個(gè)數(shù)中最大者。#include<stdio.h>

intmain()

{ intx=4,y=5,z=2,max; max=x; if(z>y) {if(z>x) max=z; } else if(y>x) max=y; printf("max=%d",max); return0;}運(yùn)行結(jié)果:max=5或者寫為:……if(num1>num2)

max=num1;

else

max=num2;if(num3>max)

max=num3;……或者max=num1;if(num2>max)max=num2;3.4switch語(yǔ)句switch語(yǔ)句是專門用于處理多分支結(jié)構(gòu)的條件選擇語(yǔ)句,又稱開關(guān)語(yǔ)句。一般形式為: switch(表達(dá)式) { case常量表達(dá)式1:語(yǔ)句1;[break;] case常量表達(dá)式2:語(yǔ)句2;[break;] ……. case常量表達(dá)式n:語(yǔ)句n;[break;] [default:語(yǔ)句n+1;[break;]] }3.4switch語(yǔ)句switch語(yǔ)句的執(zhí)行過程:首先求解switch后面括號(hào)中表達(dá)式的值,然后用此值依次與各個(gè)case后面的常量表達(dá)式的值進(jìn)行比較。

若括號(hào)中表達(dá)式的值與某個(gè)case后面的常量表達(dá)式的值相等,則執(zhí)行此case后面的語(yǔ)句。語(yǔ)句執(zhí)行后若遇到break語(yǔ)句或switch的結(jié)束符“}”就終止switch語(yǔ)句,否則就繼續(xù)執(zhí)行下一個(gè)case后面的語(yǔ)句,依次類推。

若括號(hào)中表達(dá)式的值與所有case后面的常量表達(dá)式都不相等,則執(zhí)行default后面的語(yǔ)句n+1,然后終止switch語(yǔ)句,程序流程轉(zhuǎn)向開關(guān)語(yǔ)句的下一條語(yǔ)句。3.4switch語(yǔ)句例如:執(zhí)行以下程序代碼intno;scanf("%d",&no);switch(no){case1:printf("first\n");break;case2:printf("second\n");case3:printf("third\n");}運(yùn)行一次:輸入:1運(yùn)行結(jié)果:first再運(yùn)行一次:輸入:2運(yùn)行結(jié)果:secondthird3.4switch語(yǔ)句說明:(1)case和常量表達(dá)式之間要有空格,常量表達(dá)式只起語(yǔ)句標(biāo)號(hào)作用,跳出switch必須用break語(yǔ)句。如果每個(gè)case和default后面都有break語(yǔ)句,則它們出現(xiàn)的次序不影響執(zhí)行結(jié)果。例如:switch(no){ default:printf("last\n");break; case2:printf("second\n");break; case1:printf("first\n");break; case3:printf("third\n");break;}3.4switch語(yǔ)句說明: (2)case后面常量表達(dá)式的值必須互不相同。(3)多個(gè)case可共用一組執(zhí)行語(yǔ)句,case后可包含多個(gè)可執(zhí)行語(yǔ)句,且不必加“{}”,進(jìn)入某個(gè)case后,會(huì)順序執(zhí)行本case后面的所有語(yǔ)句。(4)default部分可以省略。如果省略,當(dāng)switch后面括號(hào)中表達(dá)式的值與所有case后面的常量表達(dá)式的值都不相等時(shí),則不執(zhí)行任何一個(gè)分支直接退出switch語(yǔ)句。(5)switch語(yǔ)句可以嵌套。3.4switch語(yǔ)句【例3-6】將例3-4進(jìn)行修改,用switch語(yǔ)句實(shí)現(xiàn)。輸入一個(gè)百分制的分?jǐn)?shù),輸出相應(yīng)的等級(jí)。

比較switch語(yǔ)句與嵌套if語(yǔ)句

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論