第2章 數(shù)據(jù)類型、運算符與表達式05_第1頁
第2章 數(shù)據(jù)類型、運算符與表達式05_第2頁
第2章 數(shù)據(jù)類型、運算符與表達式05_第3頁
第2章 數(shù)據(jù)類型、運算符與表達式05_第4頁
第2章 數(shù)據(jù)類型、運算符與表達式05_第5頁
已閱讀5頁,還剩118頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

12.1數(shù)據(jù)類型2.2常量與變量2.3運算符與表達式2.4標準輸入/輸出2.5數(shù)學函數(shù)2.6隨機數(shù)發(fā)生器函數(shù)2.7案例應用第2章數(shù)據(jù)類型、運算符與表達式2數(shù)據(jù)在計算機中的存儲計算機內部的信息都是用二進制表示計算機存儲器是用半導體集成電路構成的有兩種穩(wěn)定的工作狀態(tài):“導”與“截止”,即電脈沖的“有”與“無”分別用“1”和“0”表示一、數(shù)據(jù)在計算機中是以二進制形式存儲的3數(shù)據(jù)在計算機中的存儲若相鄰的8個二極管元件中第1,3,5,7個元件處于“導通”狀態(tài),第2,4,6,8個元件處于“截止”狀態(tài),用“10101010”表示。導通截止導通截止導通截止導通截止101010104數(shù)據(jù)在計算機中的存儲十進制數(shù)二進制數(shù)001121031141005101十進制數(shù)二進制數(shù)6110711181000910011010105數(shù)據(jù)在計算機中的存儲位(bit),又稱“比特”。每一個二極管元件稱為一個“二進制位”,是存儲信息的最小單位。它的值是“1”或“0”。字節(jié)(byte),又稱“拜特”。一般將8個“二進制位”組織成一組,稱為“字節(jié)”。這是人們最常用的存儲單位。二、位、字節(jié)和地址6數(shù)據(jù)在計算機中的存儲二、位、字節(jié)和地址200120022003200420052006

地址:計算機的存儲器包含許多存儲單元,操作系統(tǒng)把所有存儲單元以字節(jié)為單位編號。345789┆71.1數(shù)據(jù)類型枚舉類型(enum)基本類型數(shù)據(jù)類型構造類型指針類型空類型(void)整型(int)實型(浮點型)字符型(char)結構體(struct)共用體(union)單精度實型(float)雙精度實型(double)數(shù)組8一、整型類型名稱類型說明符所占字節(jié)數(shù)取值范圍有符號基本整型[signed]int4-2147483648~2147483647-232-1~232-1-1有符號短整型[signed]short[int]2-32768~32767-216-1~216-1-1有符號長整型[signed]long[int]4-2147483648~2147483647-232-1~232-1-1無符號基本整型unsigned[int]40~42949672950~232-1無符號短整型unsignedshort[int]20~655350~216-1-1無符號長整型unsignedlong[int]40~42949672950~232-19一、整型

數(shù)據(jù)存儲時在內存中所占字節(jié)數(shù)與具體的機器及系統(tǒng)有關。如int類型,在32位系統(tǒng)中VisualC++下所占4個字節(jié),但是在TurboC下int只占2個字節(jié),表示范圍就是:-32768~32767。

編程時,可以用運算符sizeof()求出所使用環(huán)境中int類型究竟占用幾個字節(jié)。1016位系統(tǒng):long是4字節(jié),int是2字節(jié)

32位系統(tǒng):long是4字節(jié),int是4字節(jié)

64位系統(tǒng):long是8字節(jié),int是4字節(jié)C語言又規(guī)定,無論什么平臺,都要保證long型占用的字節(jié)數(shù)不小于int型程序的開發(fā)又不只是一個平臺,在多平臺的情況是不同的,所以程序還要注重可移植性,11一、整型

整數(shù)類型是以二進制數(shù)據(jù)形式存儲的,確切地說是以二進制補碼形式。12一、整型整數(shù)的存儲方式一個十進制整數(shù),先轉換為二進制形式如整數(shù)15,以二進制形式表示是1111000011110000000000001111用一個字節(jié)存放用兩字節(jié)存放負數(shù)按補碼形式存放請問:-15又是如何存儲的呢?符號位。0表示正符號位。0表示正13負數(shù)以其補碼形式存在:補碼=原碼取反+1

一個字節(jié)有8位可以表示的數(shù)值范圍在-128到+127

二進制表示:10000000-01111111(注意:最高位表示符號)

最高位是1的都是負數(shù)最高位是0的都是正數(shù)如-7

原碼:10000111

取反:11111000(最高位是符號不用取反)加一:11111001

即-7的二進制數(shù)就是11111001

-10

原碼:10001010取反:11110101加一:11110110-10的二進制數(shù)就是11110110

14二、實型C語言中實型也稱為浮點型,包括單精度實型和雙精度實型。實型與整型的區(qū)別在于是否包含小數(shù)部分,比如6是整數(shù)類型,6.00是實數(shù)類型。類型名稱類型說明符所占字節(jié)數(shù)有效數(shù)字取值范圍(絕對值)單精度實型float4約6~7位3.4×10-38~3.4×1038雙精度實型double8約15~16位1.7×10-308~1.7×1030815二、實型實數(shù)的存儲形式實型數(shù)據(jù)按指數(shù)形式存儲,分為小數(shù)部分(尾數(shù))和指數(shù)部分(階碼)分別存放。123.456標準化指數(shù)形式為0.123456103+.12345+3數(shù)符

數(shù)值部分指數(shù)符號指數(shù)float數(shù)據(jù)機器內是2進制數(shù),

1位符號位;8位指數(shù)位;23位“尾數(shù)”位;共32位2進制數(shù)。平時講有效數(shù)字是6~7位,指10進制。

通常程序輸入的數(shù)是10進制,進入機器后要化成2進制,計算完又轉十進制輸出。

10進制到2進制,2進制到10進制轉換,有的數(shù)化不凈,有的數(shù)化得凈。

如同10進制分數(shù)化10進制小數(shù),有的化得凈(例如4分之1,變0.25),有的化不凈(例如3分之1,變0.33333....)。

10進制到2進制,2進制到10進制轉換,化得凈的效數(shù)字7位,化不凈的效數(shù)字6位,因為最后一位有舍入誤差。

例如:

floatx,y;

x=0.51;//化不凈

y=0.5;//化得凈

printf("x=%.8fy=%.8f",x,y);//輸出0.509999990.5000000017三、字符型類型說明符為char。字符型數(shù)據(jù)只占1個字節(jié),只能存放1個字符。為了處理字符,計算機使用一種數(shù)字編碼,用特定的整數(shù)表示特定的字符。應用最廣泛的是編碼是ASCII碼(AmericaStandardCodeforInformationInterchange,美國信息交換標準碼)

大寫字母A的ASCII碼為65,小寫字母a的ASCII碼為97,字符‘0’為48。18三、字符型字符的存儲方式對于字符,按ASCII代碼存放A的ASCII代碼是65(1000001)01000001用一個字節(jié)存放

由于這種與整型數(shù)據(jù)類似的存儲方式,在1個字節(jié)(0~255)范圍內,字符型數(shù)據(jù)和整形數(shù)據(jù)可以通用。19四、枚舉型

如果一個數(shù)據(jù)對象只有幾種可能的取值,可以將這些值一一列舉出來,即定義為枚舉類型。定義的格式為:

enum

枚舉類型名

{枚舉常量1,枚舉常量2,...,枚舉常量n};20五、構造數(shù)據(jù)類型C語言的基本數(shù)據(jù)類型并不能滿足實際應用中的所有需求,用戶可以利用整型、實型、字符型這些基本數(shù)據(jù)類型構造滿足需要的數(shù)據(jù)類型,即構造類型。數(shù)組類型構造類型結構體類型共用體類型21六、其他數(shù)據(jù)類型指針類型。

指針是一種特殊的數(shù)據(jù)類型,也是很重要的一種數(shù)據(jù)類型,指針的值指的是內存中的地址值??疹愋?/p>

C語言中空類型用void表示,一般用于描述指針以及作為不返回值的函數(shù)的返回值類型。222.2常量與變量

在程序所處理的各種數(shù)據(jù)中,有些數(shù)據(jù)的值在程序使用前可以預先設定并在程序運行過程中不會發(fā)生變化,稱為常量。有的數(shù)據(jù)在程序運行過程中可能會變化,稱為變量。

兩者的區(qū)別在于數(shù)據(jù)在程序運行過程中其值是否變化。232.2.1常量在程序運行過程中,其值不變的量稱為常量。常量區(qū)分為不同的類型:整型常量100,125,-100,0實型常量3.14,0.125,-3.789字符型常量‘a(chǎn)’,‘b’,‘2’字符串常量‘a(chǎn)’,‘a(chǎn)b’,‘1232’以上四種稱為字面常量。還有一種叫符號常量。24一、整型常量

整型常量即整常數(shù)。在C語言中,整常數(shù)可用以下三種形式表示:十進制整數(shù):用10個數(shù)字0~9表示,如369,9652。八進制整數(shù):以數(shù)字0開頭,用8個數(shù)字0~7表示。如:0123表示八進制數(shù)123,等于十進制數(shù)83,-011表示八進制數(shù)-11,即十進制數(shù)-9。十六進制整數(shù):以0X或0x開頭(注意是數(shù)字0加字母X或x),用10個數(shù)字0~9和6個字母A~F(或a~f)表示。如:0x123,代表16進制數(shù)123,等于十進制數(shù)

291。

-0x12等于十進制數(shù)-18。注意:正整數(shù)前面的“+”號可以省略。25一、整型常量常量的后綴表示列舉如下:常量類型

十進制數(shù)

八進制

十六進制

十進制的值長整型

12L 014L0XCL 12無符號整型

15u 017u 0xfu15注意:C把大多數(shù)整數(shù)常量識別為int類型,如果整數(shù)特別大,將會有不同的處理。比如,在程序中使用254時,通常會識別為int類型。當使用的整數(shù)超出了int類型的范圍時,則識別為long類型,或unsignedlong類型。26二、實型常量實型常量的表示形式:十進制形式:由數(shù)字0~9和小數(shù)點組成(必須有小數(shù)點)。

如:0.123

指數(shù)形式:由尾數(shù)、E(或e)和整數(shù)指數(shù)(階碼)組成。

如:3e-3注意:整數(shù)或小數(shù)部分的數(shù)字可以省略,但二者不能同時省略并且小數(shù)點不能省略。字母e(或E)之前必須有數(shù)字,可以是整數(shù)或實數(shù),且e后面的指數(shù)必須為整數(shù)。27二、實型常量在實型常量中不能有空格。默認狀態(tài)下,實型常量被識別為雙精度(double)類型。可以使用后綴F或f表示單精度(float)類型,后綴L或l表示長雙精度(longdouble)類型。比如123.56是double類型,123.56f是float類型,1.2356E2L是longdouble類型。1.2、7.、.36、1e3、1.8e-3、-.1e-30、1.23、e3、2.1e3.5、.e3、e

28三、字符常量(1)用單引號括起來的一個字符是字符型常量。(2)只能包含一個字符。注意:使用字符常量時要注意數(shù)字字符和數(shù)字的區(qū)別,例如,寫法'5'表示符號5,而不是數(shù)值5,字符5的ASCII碼值是53。例‘a(chǎn)’,’A’,‘1’‘a(chǎn)bc’、“a”29三、字符常量

有些以“\”開頭的特殊字符稱為轉義字符。\n換行\(zhòng)t橫向跳格\r回車\\反斜杠\ddd

ddd表示1到3位八進制的ASCII代碼\xhh

hh表示1到2位十六進制的ASCII代碼例:字母A有3種表示,’A’,’\101’,’\x41’‘\0’

與‘0’是有區(qū)別的字符類型的數(shù)據(jù)也可參與四則運算30四、字符串常量字符串常量是一對雙撇號括起來的字符序列.合法的字符串常量:

"Howdoyoudo.","CHINA","a",

"$123.45"可以輸出一個字符串,如

printf("Howdoyoudo.");注意:"a"表示的是一個字符串常量

'a'表示的是一個字符常量31四、字符串常量字符串常量與字符常量的區(qū)別:(1)字符常量是由單引號括起來,而字符串常量則是由雙引號括起來。(2)字符常量只能表示一個字符,而字符串常量則可以包含1個或多個字符。(3)可以將1個字符常量賦值給一個字符變量,但不能將1個字符串常量賦予一個字符變量。(4)字符常量在存儲中只占一個字節(jié),字符串常量占用的存儲空間的字節(jié)數(shù)等于雙引號中所包含字符個數(shù)加1(結束符‘\0’)。32四、字符串常量(5)字符串中可以有轉義字符。(6)單引號和雙引號只是字符和字符串的定界符,如果字符常量本身是單引號,則要用轉義字符,如‘\’’

。空字符作為字符串常量的結束'a'是一個字符常量"a"是一個字符串常量aa\033五、符號常量

用一個標識符來代表一個常量,稱為符號常量。符號常量在使用前必須先定義,用宏定義的形式,其一般定義格式為:

#define

標識符常量例:

#definea20定義符號常量名時應盡量做到“見名知意”,

#definePRICE2034五、符號常量#include<stdio.h>#definePRICE10//定義價格符號常量PRICE為10voidmain(){

int

num,total;

scanf(“%d”,&num); //輸入購買數(shù)量

total=num*PRICE; //計算總金額

printf(“total=%d”,total);}35五、符號常量符號常量的性質和使用方法:1、#define不是C語句,該行的末尾沒有分號。它是一個“預編譯命令”。2、不要把符號常量與變量混淆,符號常量只是一個符號,不占存儲單元。它只是簡單地進行字符置換(如把字符PRICE置換為字符10)。不論置換的字符是否有含義都進行置換。3、習慣上,符號常量名用大寫,變量名用小寫,以示區(qū)別。4、使用符號常量的好處

含義清楚在需要改變一個常量時能做到“一改全改”。

#include<stdio.h>#definePI3.14intmain(){doubles,c,r=10;s=PI*r*r;c=2*PI*r;

printf(“s=%f“,s);

printf(“c=%f“,c);return0;}36變量是指在程序運行過程中其值可以變化的量。C語言要求在使用變量之前必須先進行聲明。給變量指定一個標識符,這個標識符稱為變量名;變量名(標識符)的命名規(guī)則:只能由字母、數(shù)字或下劃線組成;第一個字符必須是字母或下劃線。2.2.2變量37聲明一個變量包括:指定該變量的數(shù)據(jù)類型,該類型決定了變量值的類型、表現(xiàn)形式和占用內存空間,以及對該變量能執(zhí)行的運算;指定變量的存儲類型和變量的作用域。1、變量的聲明變量聲明的一般形式:

[存儲類型說明符]數(shù)據(jù)類型說明符變量名1[,變量名2,變量名3,…]381、變量的聲明☆變量名必須是一個合法的標識符,還應考慮“見名知意”的原則?!铑愋驼f明符后聲明多個相同類型的變量,各變量之間用逗號分隔?!钭兞柯暶鞅仨毞旁谧兞渴褂弥埃聪嚷暶?,后使用。//變量聲明示例#include<stdio.h>voidmain(){

int

a,b;

//聲明兩個整型變量a和bcharc;

//聲明一個字符變量c

floatf1,f2;

//聲明兩個浮點型變量f1,f2}數(shù)據(jù)類型說明符39聲明變量,只是給變量分配內存空間,存儲空間中存放的值是隨機的,變量值不確定的。C語言允許在聲明變量的同時給變量賦值即初始化變量,這個值為變量的初值。2、變量的初始化在變量聲明中初始化賦值的一般格式為:

[存儲類型說明符]數(shù)據(jù)類型說明符變量名1=值1[,變量名2=值2,…];☆多個變量初始化賦值必須將其分別賦值,即使所賦的值相同也是如此。

inti=j=20;(錯誤)應寫成:

inti=20,j=20;402、變量的初始化//變量聲明及初始化#include<stdio.h>voidmain(){charc1=‘a(chǎn)’,c2=‘b’;/*聲明c1和c2為字符類型變量,

c1初始化值分別為字符'a'、'b‘*/

inti=20,j=20,k;/*聲明i,j和k為基本整型變量,

i和j初始化值為20*/ floatf1=3.6,f2;/*聲明f1和f2為單精度類型變量,

f1初始化值為3.6*/} 412、變量的初始化要注意區(qū)別變量名和變量值:

intk=26;26k3000存儲單元變量名變量地址變量值42(1)整型變量

有基本整型、短整型、長整型、無符號基本整型、無符號短整型、無符號長整型6種。3、變量的使用

☆在程序中使用變量,要考慮程序運行的環(huán)境和變量的取值范圍,當變量的取值超出變量類型所規(guī)定的范圍時,會出現(xiàn)錯誤的運算結果。//整型變量的定義與使用#include<stdio.h>voidmain(){

inta=-10,b=20,c;

//聲明基本整型變量a、b、c,

//并對a,b初始化

unsignedk;

//聲明無符號基本整型變量k

scanf(“%u”,&k);

//用scanf()函數(shù)給k輸入一個值(無符號整數(shù))

c=a+b;

//將a、b的和賦值給c

printf("c=%d,k=%u\n",c,k);

//用printf()函數(shù)輸出c、k的值

} 43

☆使用整型變量時要注意它獲取的值不要超過變量的取值范圍,否則會發(fā)生“溢出”。3、變量的使用//整型數(shù)據(jù)的溢出#include<stdio.h>voidmain(){shortx=32767,y;y=x+1;

printf("x=%d,y=%d\n",x,y);}

☆因為一個短整型變量所能表示數(shù)的范圍是-32768-32767,將無法表示大于32767的數(shù),這種情況叫溢出。而程序在運行過程中并沒有報錯。44(1)實型變量

分為單精度實型和雙精度實型,兩者的區(qū)別在于精度即有效數(shù)字位數(shù)。//實型變量的有效位數(shù)#include<stdio.h>voidmain(){

float a=33.3333333333;doubleb=12.123456789012345678;

printf("a=%21.18f\n",a);

//格式符%21.18f,輸出a時總長度21位,小數(shù)位數(shù)占18位

printf("b=%21.18f\n",b);

} 3、變量的使用float類型的數(shù)據(jù)只接收7位有效數(shù)字

double類型的數(shù)據(jù)接收16位有效數(shù)字

45在使用實型變量時應該注意以下兩種情況:①實型常量沒有加后綴F(或f)時,系統(tǒng)默認為double類型進行處理,具有較高精度,把該實型常量賦值給一個float類型的變量時,系統(tǒng)會截取相應的有效位數(shù)進行賦值。②應避免將很大的數(shù)和一個很小的數(shù)進行加減運算,否則會丟失“較小”的數(shù)。//實型數(shù)據(jù)的舍入誤差。#include<stdio.h>voidmain(){floata=123456789.0,b;b=a+1;

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

3、變量的使用只能保證前7位是準確的,后面幾位是無效數(shù)字,把1加在無效數(shù)字上,是無意義的。

46(1)字符型變量每個字符變量占一個字節(jié)的內存空間,存放一個字符,即字符變量的取值是一個字符常量??梢园炎址蛿?shù)據(jù)作為整型數(shù)據(jù)進行處理。允許對整型變量賦以字符值,也允許對字符變量賦以整型值。在輸出時,允許把字符變量按整型形式輸出,也允許把整型數(shù)據(jù)按字符形式輸出。注意,整型為4個字節(jié),字符為1個字節(jié),當整型按字符型量處理時,只有低八位參與處理。//字符型變量示例#include<stdio.h>voidmain(){

chara,b;a='x';b='y';a=a-32;b=b-32;

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

}

3、變量的使用472.3運算符與表達式2.3.1運算符2.3.2表達式2.3.3類型轉換48C語言的運算符有以下幾類:

⑴算術運算符(+-*/%)⑵關系運算符(><==>=<=?。剑沁壿嬤\算符(?。Γ|)⑷位運算符(<<>>~|∧&)⑸賦值運算符(=及其擴展賦值運算符)⑹條件運算符(?:)⑺逗號運算符(,)(8)指針運算符(*和&)(9)求字節(jié)數(shù)運算符(sizeof)(10)強制類型轉換運算符((類型))(11)分量運算符(.->)(12)下標運算符([])(13)其他(如函數(shù)調用運算符())2.3.1運算符492.3.1運算符使用運算符需要注意以下幾點:

⑴運算符的功能⑵對操作數(shù)(即運算對象)的要求操作數(shù)的個數(shù);操作數(shù)的數(shù)據(jù)類型。⑶運算符的優(yōu)先級別⑷運算符的結合方向⑸運算結果參見附錄B501、算術運算符+

(加法運算符,或正值運算符。如:3+5、+3)-(減法運算符,或負值運算符。如:5-2、-3)*(乘法運算符。如:3*5)/(除法運算符。兩個整數(shù)相除的結果為整數(shù),如:5/3結果為1)%(模運算符,或稱求余運算符,%兩側均應為整型數(shù)據(jù),如:7%4的值為3)。注:1、/:如果兩個整數(shù)相除,結果為整數(shù)(整除),結果“向零取整”。例:8/5=1,8/-5=-1,-8/5=-1,8.0/5=1.6。

2、%:結果的符號與被除數(shù)符號相同。例:8%5=3,-8%5=-3,8%-5=3。51//算術運算符#include<stdio.h>intmain(){inta=3,b=5;printf("%d\n",a+b);printf("%d\n",a-b);printf("%d\n",a*b);printf("%d\n",a/b);printf("%d\n",a%b);return0;} 54不能寫為ab52(4.0/3)*x*x*x(4/3)x3sin(x)+exp(x)sinx+exsqrt(a*a+b*b)(x+y)/(x-y)3*a+4*b3a+4bC表達式數(shù)學表達式110532、自增、自減運算符作用是使變量的值增1或減1++i,--i:在使用i之前,先使i的值加(減)1i++,i--:在使用i之后,使i的值加(減)1

注:由于自增和自減可以改變操作數(shù)自身的值,因此其運算對象只能是一個變量。整型、實型、字符型、指針類型變量均可作為其運算對象。變量x初值表達式運算后x的值運算后表達式的值2++x332x++322--x112x--12542、自增、自減運算符//自增自減綜合應用#include<stdio.h>voidmain(){

inti=8;

printf(“%d\n”,++i);

printf("%d\n",--i);

printf(“%d\n”,i++);

printf(“%d\n”,i--);

printf("%d\n",-i++);

printf(“%d\n”,-i--);

printf("%d\n",i);}

//輸出9//輸出8//輸出8,但i的值為9//輸出9,但i的值為8//輸出-8,但i的值為9//輸出-9,相當于-(i--)//此時輸出多少呢?55例:設inti=3,j=4;作j=(i++)+j

運算后,j的值為▁▁▁,i的值為▁▁▁。設inti=3,j=4;作j=(++i)+j

運算后,j的值為▁▁▁,i的值為▁▁▁。563、賦值運算符

“=”是賦值運算符作用是將一個數(shù)據(jù)賦給一個變量也可以將一個表達式的值賦給一個變量例:a=20;的作用是“將值20賦給變量a”。

賦值表達式一般形式為:

變量

賦值運算符

表達式對賦值表達式求解的過程:求賦值運算符右側的“表達式”的值賦給賦值運算符左側的變量573、賦值運算符賦值運算符左側的標識符稱為“左值”

出現(xiàn)在賦值運算符右側的表達式稱為“右值”

注意:并不是任何對象都可以作為左值的,表達式和常變量就不能作為左值。任何左值都可做右值。賦值表達式“a=3*5”

對表達式求解后,將表達式的值15賦值給變量a“a=(b=5)”和“a=b=5”等價583、賦值運算符注意:并不是任何對象都可以作為左值的,表達式和常變量就不能作為左值。任何左值都可做右值。(a=b)=c=5

a+b=x+b

5=a+b#definePI3.14PI=3.1415926;593、賦值運算符兩側類型一致時,直接賦值兩側類型不一致,但都是數(shù)值型或字符型,自動將右側的類型轉換為左側類型后賦值定義變量時要防止數(shù)據(jù)溢出實型→整型:直接取整,舍棄小數(shù)部分。整型→實型:數(shù)值不變,但要補足相應的有效位數(shù)。字符型→整型:將ASCII碼值賦給最低的8位。整型→字符型:只截取最低的8位賦給字符型變量。

60說明:2.賦值與數(shù)學中的“等于”完全不同。例:intx=10;x=x+1在數(shù)學里x=x+1是矛盾的

。但在C語言中則合法(常用)。3.C語言中a=b和b=a含義不同。4.當賦值運算符左右類型不一致時,需要進行類型轉換。通常由系統(tǒng)自動將右側的類型轉換為左側類型后再賦值。例:inta;a=1.2;執(zhí)行后,變量x的取值為11double類型執(zhí)行后,變量a的取值為1613、賦值運算符復合的賦值運算符

在賦值符“=”之前加上其他運算符,如+=,-=,*=,/=,%=等??梢詷嫵蓮秃系倪\算符.

復合賦值運算符具有右結合性。

a+=3

等價于

a=a+3復合賦值運算符使用一般形式為:

<變量><雙目運算符>=<表達式>等價于:

<變量>=<變量><雙目運算符><表達式>//例如:n+=1 等價于n=n+1x*=y+1 等價于x=x*(y+1)k%=i+k 等價于k=k%(i+k)要加括號623、賦值運算符賦值表達式也可以包含復合的賦值運算符。

例:

a+=a-=a*a

求解步驟如下:(設置a的初值為12)①先進行“a-=a*a”的運算,它相當于:

a=a-a*a,a的值為12-144=-132。②再進行“a+=-132”的運算,相當于:

a=a+(-132),a的值為-132-132=-264。如果變成:

a+=a-=a*=a

結果又如何呢?634、關系運算符關系運算符及其優(yōu)先次序<(小于)<=(小于或等于)>(大于)>=(大于或等于)==(等于)!=(不等于)優(yōu)先級相同(6)優(yōu)先級相同(7)說明:關系運算符的優(yōu)先級低于算術運算符關系運算符的優(yōu)先級高于賦值運算符644、關系運算符關系表達式用關系運算符將兩個表達式起來的式子,稱關系表達式。例:a>b,a+b>b+c,(a=3)>(b=5),’a’<‘b’,(a>b)>(b<c)關系表達式的值是一個邏輯值,即“真”或“假”。例:關系表達式”a>b”的值為“真”,表達式的值為1。C語言中沒有專用的邏輯值,1代表真,0代表假654、關系運算符#include<stdio.h>voidmain(){

inta=1,b=2,c=3,d=4;/*聲明變量a,b,c,d并初始化*/

printf("%d\n",a+b>c+d);

printf("%d\n",a<=2*b);

printf("%d\n",'a'<'d');

printf("%d\n",a!=(c==d));} //結果為假,輸出0//結果為真,輸出1//結果為真,輸出1//結果為真,輸出1Printf(“%d\n”,a<b<c);

輸出什么?有時判斷的條件是一個復合的條件,如:是中國公民,且在18歲以上從左至右665、邏輯運算符邏輯運算符及其優(yōu)先次序1、&&(邏輯與)相當于其他語言中的AND2、||(邏輯或)相當于其他語言中的OR3、!(邏輯非)相當于其他語言中的NOT例:a&&b

若a,b為真,則a&&b為真。

a||b

若a,b之一為真,則a||b為真。!a若a為真,則!a為假。優(yōu)先次序:!(非)->&&(與)->||(或)邏輯運算符中的“&&”和“||”低于關系運算符,“!”高于算術運算符67PQP&&QP||Q!P00001010111001011110邏輯運算真值表685、邏輯運算符//邏輯運算示例#include<stdio.h>voidmain(){

charch;

printf(“inputaletter:”);

scanf(“%c”,&ch); /*輸入一個字母*/

if(!(ch>=’A’&&ch<=’Z’||ch>=’a’&&ch<=’z’))

printf(“inputerror!\n”);

/*如果輸入的不是字母則提示錯誤*/}

不能改成:’A’<=ch<=’Z’

695、邏輯運算符邏輯表達式用邏輯運算符將關系表達式或邏輯量連接起來的式子就是邏輯表達式邏輯表達式的值應該是一個邏輯量“真”或“假”。例:設a=4,b=5:

!a的值為0a&&b的值為1

a||b的值為1!a||b的值為14&&0||2的值為1任何非零的數(shù)值被認作“真”,非零即為真70判斷一個數(shù)x能否同時被2,3,7整除

x%2==0x%3==0x%7==0C表達式數(shù)學表達式(x≥5)且(y≠8)(x>=5)&&(y!=8)2<x<4或x>10

(x>2&&x<4)||(x>10)2<x<4需要同時滿足只需要滿足其中之一?進行%運算看余數(shù)是否為0(x%2==0)&&(x%3==0)&&(x%7==0)715、邏輯運算符例:5>3&&8<4-!0

自左向右運算

1&&0邏輯值為08<3邏輯值為04-1值為3!0邏輯值為15>3邏輯值為1表達式值為0725、邏輯運算符邏輯運算的“短路”特性:(1)a&&b&&c

只有a為真時,才需要判斷b的值,只有a和b都為真時,才需要判斷c的值。(2)a||b||c

只要a為真,就不必判斷b和c的值,只有a為假,才判斷b。a和b都為假才判斷c。73注意:&&和||在表達式中運算時有著特殊規(guī)定(“短路”特性)。例:設有inta=1,b=2,c=3,d=4,m=2,n=2;執(zhí)行

(m=a>b)&&(n=c>d)后m的值為

,n的值為

。例:設intx=0,y=1,z;

執(zhí)行

z=!x||--y;后z的值為

,x的值為

,y的值為

。

不計算不計算01嚴格按照結合性從左向右計算嚴格按照結合性從左向右計算02101746、逗號運算符逗號運算符:將兩個表達式連接起來,又稱為“順序求值運算符”。

如:3+5,6+8

一般形式:

表達式1,表達式2…,表達式n求解過程:先求解表達式1,再求解表達式2,依次。整個逗號表達式的值是表達式n的值。756.逗號運算符表達式1,表達式2,…,表達式n整個逗號表達式的值從左至右依次計算每個子表達式逗號運算符優(yōu)先級是最低的。結合方向從左至右。766、逗號運算符例:逗號表達式x=a=2*3,a*4,a+5;

分析:賦值運算符優(yōu)先級高于逗號運算符,先計算子表達式x=a=2*3,a和x被賦值為6,再計算子表達式a*4,值為24,最后計算子表達式a+5,值為11,整個表達式的結果取子表達式a+5的值,即11。例:逗號表達式x=(a=2*3,a*4,a+5);

分析:先計算括號中的逗號表達式a=2*3,a*4,a+5,其中先計算子表達式a=2*3,a被賦值為6,再計算子表達式a*4,值為24,最后計算子表達式a+5,值為11,整個逗號表達式的結果取子表達式a+5的值11,再賦給x。77逗號運算示例#include<stdio.h>intmain(){

int

x,a;x=(a=2*3,a*4,a+5);

printf(“x=%d,a=%d\n”,x,a);return0;}程序運行結果為:x=11,a=6787、條件運算符條件運算符是三目運算符,由兩個符號“?:”組成,需要3個運算對象。

一般形式:表達式1?表達式2:表達式3求解過程:若表達式1的值為真(非0),則執(zhí)行表達式2,其結果作為整個條件表達式的值,否則執(zhí)行表達式3,其結果作為整個條件表達式的值。797、條件運算符說明:(1).3個操作數(shù)可以是任意類型表達式。

(2).條件運算符優(yōu)先級高于賦值運算符,低于關系運算符和算術運算符,位于第13優(yōu)先級。

(3).條件運算符的結合方向為“自右至左”。

(4).“表達式2”和“表達式3”不僅可以是數(shù)值表達式,還可以是賦值表達式或函數(shù)表達式。(5).如果表達式1為真,只計算表達式2,否則只計算表達式3。80條件運算符舉例#include<stdio.h>intmain(){

inta=2,b=1,m=6,n=6,x;x=a>b?(m=0):(n=0);

printf("x=%d,m=%d,n=%d\n",x,m,n);return0;}817、條件運算符//輸入兩個數(shù),求其中較大的數(shù)和較小的數(shù)。#include<stdio.h>voidmain(){int

a,b,max,min;

printf(“inputa=”);

scanf(“%d”,&a);/*輸入變量a*/

printf(“inputb=”);

scanf(“%d”,&b);/*輸入變量b*/max=a>b?a:b;min=a<b?a:b;

printf(“max=%d,min=%d\n”,max,min);

}

求a,b,c三個數(shù)的最大數(shù)m:

m=a>b?a:b>c?b:c;

()m=a>(b>c?b:c)?a:(b>c?b:c);828、位運算符

由于C語言可直接對硬件編程,在系統(tǒng)軟件設計中要求能對位進行運算,因此,C語言提供了6種位運算符,支持位運算等匯編操作。運算符功能運算對象個數(shù)優(yōu)先級結合方向~按位取反單目2從右至左<<左移位雙目5從左至右>>右移位雙目5從左至右&按位與雙目8從左至右^按位異或雙目9從左至右|按位或雙目10從左至右838、位運算符

位邏輯運算符是以數(shù)據(jù)的二進制數(shù)位進行運算,位移動運算是按二進制位數(shù)進行左移和右移。(1)位邏輯運算ab~

a(按位取反)a&b(按位與)a|b(按位或)a^b(按位異或)110110100011011011001000848、位運算符1)按位取反按位取反,運算符為“~”。把該運算對象的每個二進制位取反。例如,~5,運算如下(只列出了最低的8個二進制位):~0000010111111010858、位運算符2)按位與按位與,運算符為“&”。常用來對某些二進制位清0或保留某些二進制位。在需要清0的位置上,將與它進行與運算的運算對象的對應的二進制位置0,需要保留原值的位置,則將對應的二進制位置1。例如,要保留155的最低3位不變,其余置0,可用155&7來實現(xiàn),運算如下(只列出了最低的8個二進制位):10011011(155的二進制形式)&00000111(7的二進制形式)00000011(結果為3)868、位運算符3)按位或運算符為“|”。通常用來對某些二進制位置1或保留某些二進制位。在需要置1的位置上,將與它進行或運算的運算對象的對應的二進制位置1,需要保留原值的位置,則將對應的二進制位置0。例如,要保留129的最低3位不變,其余置1,可用129|248來實現(xiàn),運算如下(只列出了最低的8個二進制位):10000001(129的二進制形式)|11111000(248的二進制形式)11111001(結果為249)878、位運算符4)按位異或按位異或,運算符為“^”。兩個運算對象中對應的二進制位相同(都是1或都是0),則該位結果為0;不相同則結果為1。例如,155^129,運算如下(只列出了最低的8個二進制位):10011011(155的二進制形式)^10000001(129的二進制形式)00011010(結果為26)888、位運算符(2)位移動運算語法格式:運算數(shù)據(jù)位移動運算符移動位數(shù)①左移位,運算符為“<<”。把左邊的運算數(shù)據(jù)的全部向左移指定的位數(shù),高位丟棄,低位補0。例如,a的值為5,a<<2

把a的二進制位全部向左移動2位,

即00000101左移2位后為00010100(

相當于a乘以22。898、位運算符(2)位移動運算②右移位,運算符為“>>”。把左邊的運算數(shù)據(jù)的全部向右移指定的位數(shù),低位丟棄,對于正數(shù),高位補0,負數(shù)的符號位為1,最高位補1還是補0取決于編譯器,多數(shù)情況是補1。例如,a的值為15,a>>2

是把a的二進制位全部向右移動2位,即15的二進制00001111右移2位后為00000011(十進制數(shù)為3),相當于a除以22取整。909、其他運算符

sizeof()運算符,單目運算,第2優(yōu)先級,結合方向是從右至左。一般形式:

sizeof(變量名|數(shù)據(jù)類型標識符|表達式)功能:計算該數(shù)據(jù)類型變量所占的字節(jié)數(shù)。例:

inta=5;floatx=3.2,y=6.4;

sizeof(a)

值為:4(在TURBOC中為2)

sizeof(char)

值為:1

sizeof(x+y)

值為:4

sizeof(double)

值為:8 912.3.2表達式表達式:用運算符和括號將運算對象(也稱操作數(shù))連接起來的、符合C語法規(guī)則的式子,稱為C表達式。運算對象包括常量、變量、函數(shù)等。其中,單個的常量、變量、函數(shù)也稱為表達式。表達式運算后只會產(chǎn)生一個結果,該結果是具有某種數(shù)據(jù)類型的數(shù)值。C語言中,運算是自左向右的,運算符執(zhí)行順序通常由運算符的優(yōu)先級和結合方向控制。優(yōu)先級較高的運算符先于優(yōu)先級較低的執(zhí)行,如生活中常說的先乘除后加減。結合方向則控制具有相同優(yōu)先級的多個運算符的執(zhí)行順序。922.3.3類型轉換C語言提供了3種類型轉換方式:自動轉換、強制轉換賦值轉換。93說明:這種類型轉換是由系統(tǒng)自動進行的。必定的轉換轉換的方向例如:3.27+201用double類型的加法運算1、自動轉換(也稱隱式類型轉換)94例如:

inti=1;charch=‘A’;floatx=3.5f;doubley=7.8;表達式(i*ch)+(x/y)-(y-ch)的數(shù)據(jù)類型。intdoubledoubledoubledouble952.3.3類型轉換例如,設folatx=7.5;則x%3顯然不符合要求,因為只能對整型數(shù)據(jù)進行取余運算,所以需要用到強制類型轉換,(int)x%3即7%3。2、強制類型轉換(也稱顯式轉換)

是用強制類型轉換運算符將運算對象轉換為需要的數(shù)據(jù)類型。

一般形式:

(目標類型說明符)(表達式)說明:表達式應該用括號括起來。在強制類型轉換時,得到一個所需類型的中間變量,原來變量的類型未發(fā)生變化。962.3.3類型轉換3、賦值時的類型轉換當左右類型不一致時,需要進行類型轉換,將右邊的類型轉換為左邊的類型,這種轉換系統(tǒng)自動進行。實型數(shù)據(jù)→整型:直接取整,舍棄小數(shù)部分。字符型或整型數(shù)據(jù)→實型:數(shù)值不變,補足相應的有效位數(shù)。單精度實型→雙精度實型:數(shù)值不變,有效位數(shù)擴展到16位,以8個字節(jié)存儲;雙精度實型賦值給單精度實型時,只截取前面7位有效數(shù)字,以4個字節(jié)存儲。字符型→整型:將ASCII碼值賦給最低的8位。整型→字符型:只截取最低的8位賦給字符型變量。972.3.3類型轉換3、賦值時的類型轉換

int或long類型數(shù)據(jù)→short類型變量:只截取最低的16位賦給short類型變量;short類型數(shù)據(jù)→

int或long類型變量:將數(shù)據(jù)直接賦給最低的16位,其余位按原short類型的最高位擴展,全部補0或全部補1。unsigned類型數(shù)據(jù)→長度相同的非unsigned類型變量時,直接傳送數(shù)據(jù);非unsigned類型數(shù)據(jù)→長度相同的unsigned類型變量時,連符號位一起作為數(shù)值進行數(shù)據(jù)賦值。982.4標準輸入/輸出(一)所謂輸入輸出是以計算機主機為主體而言的。輸出:從計算機向外部輸出設備(顯示器,打印機)輸出數(shù)據(jù)。輸入:從輸入設備(鍵盤,鼠標,掃描儀)向計算機輸入數(shù)據(jù)。(二)C語言本身不提供輸入輸出語句,輸入和輸出操作是由C函數(shù)庫中的函數(shù)來實現(xiàn)的。(三)在使用系統(tǒng)庫函數(shù)時,要用預編譯命令#include將有關的“頭文件”包括到用戶源文件中。

#include<stdio.h>或#include“stdio.h”992.4.1printf()函數(shù)

printf()函數(shù)稱為格式化輸出函數(shù),它能夠按用戶指定的格式輸出多種類型的數(shù)據(jù)。

一般格式為:

printf(“格式控制字符串”,輸出列表);

例如:printf(”i=%d,c=%c\n”,i,c);普通字符可以是常量、變量或表達式1002.4.1printf()函數(shù)printf函數(shù)的參數(shù)包括兩部分:(1)“格式控制”是用雙撇號括起來的字符串,也稱

“轉換控制字符串”。(2)“輸出表列”是需要輸出的一些數(shù)據(jù),可以是

常量、變量或表達式。1012.4.1printf()函數(shù)

(1)“格式控制”是用雙撇號括起來的字符串,也稱“轉換控制字符串”,它包括三種信息。①格式說明。格式說明由“%”和格式字符組成,如%d、%f等。它的作用是將輸出的數(shù)據(jù)轉換為指定的格式輸出。格式說明總是由“%”字符開始的。

②普通字符。普通字符即需要原樣輸出的字符。例如上面printf函數(shù)中雙撇號內的逗號、空格。

③轉義字符:無法用單個字符描述的一些特定操作,如\n(換行)、\t(跳到下一個水平制表位)等。1022.4.1printf()函數(shù)格式字符含義d以十進制形式輸出帶符號整數(shù)(默認正數(shù)不輸出符號)o以八進制形式輸出無符號整數(shù)(默認不輸出前綴0)x或X以十六進制形式輸出無符號整數(shù)(默認不輸出前綴0x)u以十進制形式輸出無符號整數(shù)f以小數(shù)形式輸出單、雙精度實數(shù)e或E以指數(shù)形式輸出單、雙精度實數(shù)g或G以%f或%e中輸出寬度較短的形式輸出單、雙精度實數(shù)c輸出單個字符s輸出字符串1032.4.1printf()函數(shù)//printf()函數(shù)的使用示例。#include<stdio.h>voidmain(){charch=’a’;

printf("ch=%d,thecapital:%c\n",ch,ch-32);

}

運行結果:ch=97,thecapital:A1042.4.1printf()函數(shù)基本的格式字符有以下幾種:⑴d格式符。按十進制整型數(shù)據(jù)的實際長度輸出。

⑵i格式符。作用與d格式符相同,按十進制整型數(shù)據(jù)的實際長度輸出。一般習慣用%d而少用%i。⑶c格式符。用來輸出一個字符。

一個值在0~255范圍內的整數(shù),也可以用“%c”使之按字符形式輸出。

1052.4.1printf()函數(shù)⑷s格式符,用來輸出一個字符串。

例:

printf

(″%s″,″CHINA″);

輸出字符串“CHINA”(不包括雙引號)⑸f格式符。用來輸出實數(shù)(包括單、雙精度),以小數(shù)形式輸出,不指定整個字段的長度,由系統(tǒng)自動指定。一般的處理方法是:整數(shù)部分全部輸出,并輸出6位小數(shù)。注意:在輸出的數(shù)字中并非全部數(shù)字都是有效數(shù)字。單精度實數(shù)的有效位數(shù)一般為6-7位,雙精度實數(shù)的有效位數(shù)一般為15-16位。1062.4.1printf()函數(shù)(6)e格式符,用格式說明%e指定以指數(shù)形式輸出實數(shù)。例:printf(″%e″,123.456);輸出如下

1.234560

e+0026列5列C編譯系統(tǒng)自動指定給出數(shù)字部分的小數(shù)位數(shù)為6位,指數(shù)部分占5位。1072.4.1printf()函數(shù)完整的格式說明部分還可以加入一些修飾符,形式為:

%[標志][域寬][.精度][長度]格式字符(1)標志:可使用-、+、空格、#和0共5種標志字符

標志字符含義-結果左對齊,數(shù)據(jù)長度小于域寬時右邊補充空格+輸出符號(正號或負號)空格輸出值為正數(shù)且沒有輸出正號時冠以空格#只對部分類型格式字符有影響;對o類,在輸出時加前綴0;對x類,在輸出時加前綴0x;對e,g,f

類當結果有小數(shù)時才顯示出小數(shù)點0數(shù)據(jù)長度小于域寬時,不足位數(shù)用0補充1082.4.1printf()函數(shù)(2)域寬:指定數(shù)據(jù)顯示在輸出設備上所占的總寬度。若數(shù)據(jù)的實際位數(shù)多于指定寬度,則按實際位數(shù)輸出;若實際位數(shù)少于指定寬度,則數(shù)據(jù)通常會在指定寬度內右對齊,不足部分以空格補齊。(3)精度:以“.”開頭,其意義是:如果輸出值為整數(shù),則輸出數(shù)字的最少個數(shù),若位數(shù)少于指定精度,就在整數(shù)前面加0,補齊指定的最小數(shù)字個數(shù);如果輸出值為實數(shù),則表示小數(shù)的位數(shù),默認為6位;如果輸出的是字符串,則只取字符串中左端n個字符。注意,若實際位數(shù)大于所定義的精度數(shù),則截去超過的部分,對小數(shù)部分四舍五入。(4)長度:長度格式符為h,l兩種,h表示按短整型輸出,l表示按長整型輸出。1092.4.1printf()函數(shù)//格式輸出示例。{

inta=123;floatb=123.1234567;doublec=12345678.1234567;charch='f';

printf("a=%d,%8.5d,%08d,%o,%#x\n",a,a,a,a,a,a);printf("b=%f,%-10.3f,%e,%g\n",b,b,b,b);printf("c=%f,%8.4f,%g\n",c,c,c);

printf("ch=%c,%8c\n",ch,ch);printf("%s,%.4s\n","abcdef","abcdef");}

1102.4.1printf()函數(shù)注意:使用printf()函數(shù)時輸出順序是從左到右,但是輸出列表中的各輸出項的求值順序,不同的編譯器不一定相同,VisualC++是按從右到左進行的。printf()函數(shù)還可以只有格式控制字符串而沒有輸出項。

//輸出項求值順序示例{

inta=5;printf("a=%d,a=%d\n",a=a+1,a=a+2);}

運行結果:a=8,a=71112.4.2scanf()函數(shù)

scanf()函數(shù)稱為格式化輸入函數(shù),即按用戶指定的格式從鍵盤上把數(shù)據(jù)輸入到指定的變量中。一般格式為:

scanf(“格式控制字符串”,地址列表);

含義同printf函數(shù)可以是變量的地址,或字符串的首地址int

a,b,c;scanf(“%d%d%d”,&a,&b,&c);printf("a=%d,b=%d,c=%d\n",a,b,c);345↙a=3,b=4,c=51122.4.2scanf()函數(shù)格式字符串由%和格式字符組成,還可以加入一些可選項。一般形式為:

%[*][輸入數(shù)據(jù)寬度][長度]格式字符(1)格式字符:指定輸入數(shù)據(jù)的類型。格式字符含義(輸入類型)d輸入十進制整數(shù)o輸入八進制整數(shù)(可以以0開頭,也可以不以0開頭)u輸入無符號十進制整數(shù)x輸入十六進制整數(shù)(可以以0x或0X開頭,也可以不以此開頭)f、e、g輸入實數(shù)(用小數(shù)形式或指數(shù)形式,符號和小數(shù)部分可選)c輸入單個字符(輸入時不加單引號)s輸入字符串(輸入時不加雙引號)1132.4.2scanf()函數(shù)(2)*:表示該輸入項,讀入后不賦予相應的變量,即跳過該輸入值。例如:scanf("%d%*d%d",&a,&b);

當輸入為:123時,把1賦予a,2被跳過,3賦予b。(3)輸入寬度:用十進制整數(shù)指定輸入的寬度(即字符數(shù))。例如:scanf("%5d",&a);

輸入:12345678只截取前5位12345賦予變量a。又如:scanf("%4d%4d",&a,&b);

輸入:12345678將把1234賦予a,而5678賦予b。(4)長度:長度格式符為l和h,l表示輸入長整型數(shù)據(jù)(如%ld)和雙精度實型數(shù)(如%lf)。h表示輸入短整型數(shù)據(jù)。1142.4.2scanf()函數(shù)使用scanf()函數(shù)容易與printf()函數(shù)混淆,注意

溫馨提示

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

評論

0/150

提交評論