版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言基礎(chǔ)知識(shí)第2章學(xué)習(xí)目標(biāo)掌握C語(yǔ)言的基本數(shù)據(jù)類(lèi)型及表示2了解C語(yǔ)言的程序結(jié)構(gòu)和基本組成1掌握C語(yǔ)言常見(jiàn)運(yùn)算符優(yōu)先級(jí)順序和表達(dá)式4了解C語(yǔ)言各種數(shù)據(jù)類(lèi)型之間的轉(zhuǎn)換過(guò)程5掌握常量的分類(lèi)和變量的定義及賦值3能綜合運(yùn)用數(shù)據(jù)類(lèi)型、運(yùn)算符及表達(dá)式解決簡(jiǎn)單的實(shí)際問(wèn)題6#include<stdio.h> //編譯預(yù)處理指令voidmain( ) //定義主函數(shù){ //函數(shù)開(kāi)始printf("ThisisaCprogram!\n");//輸出指定信息} //函數(shù)結(jié)束【例2-1】請(qǐng)?jiān)谄聊伙@示“ThisisaCprogram!”信息2.1C語(yǔ)言程序結(jié)構(gòu)運(yùn)行結(jié)果:ThisisaCprogram!Pressanykeytocontinue.C程序的框架結(jié)構(gòu)如下:void
main( )
{ ……
}【例2-2】
在屏幕上輸出兩個(gè)整數(shù)的和。#include<stdio.h>
/*編譯預(yù)處理指令*/intmain()
/*主函數(shù)*/{
int
m,n,s;
/*變量定義*/ m=100;
n=200;
/*為變量m
和n
賦值
*/ s=m+n;
/*m、n之和賦給s*/ printf("sumis
%d\n",s);
/*輸出s
的*/}2.1C語(yǔ)言程序結(jié)構(gòu)運(yùn)行結(jié)果:sumis300【分析】本程序的功能是將兩數(shù)相加并輸出。①變量定義:int表示整型,定義了三個(gè)整型變量m、n、s。C程序中所有用到的變量都必須先定義再使用。②變量賦值:兩個(gè)賦值語(yǔ)句,把100賦值給m,把200賦值給n。③賦值計(jì)算:將m和n的和賦值給s。④格式輸出:“%d”是輸入輸出格式字符串,用來(lái)指定數(shù)據(jù)的類(lèi)型?!?d”表示以十進(jìn)制整數(shù)類(lèi)型輸出,在執(zhí)行輸出時(shí),此位置上代以一個(gè)十進(jìn)制整數(shù)數(shù)值(其他的格式字符串有%c,%s,%f…)。printf函數(shù)中雙引號(hào)中普通字符原樣輸出,而格式字符串“%d”會(huì)被s變量的值代替,因此會(huì)輸出“sumis300”的結(jié)果。C程序特點(diǎn)2.1C語(yǔ)言程序結(jié)構(gòu)01C語(yǔ)言是一種函數(shù)式語(yǔ)言,程序基本組成(單位)是函數(shù)。03不管主函數(shù)main在程序中的位置如何,程序執(zhí)行總是從主函數(shù)main開(kāi)始。05C語(yǔ)言本身沒(méi)有輸入/輸出語(yǔ)句,其輸入/輸出功能須通過(guò)調(diào)用標(biāo)準(zhǔn)函數(shù)來(lái)實(shí)現(xiàn)。02每個(gè)C程序必須有且只有一個(gè)主函數(shù)main。04在C程序中,語(yǔ)句和數(shù)據(jù)定義的最后必須有一個(gè)分號(hào)。但是預(yù)處理命令、函數(shù)頭和函數(shù)體的定界符“{}”之后不能加分號(hào)。例如,#indude<stdio.h>采用預(yù)處理命令包含需要使用的文件,后面不能加分號(hào)。06可以用“/*”和“*/”
或是“//”對(duì)C程序中的任何部分進(jìn)行注釋。2.2C語(yǔ)言基本組成基本字符集大小寫(xiě)各26個(gè)共52個(gè);英文字母主要指運(yùn)算符其他符號(hào)0到9共10個(gè);阿拉伯?dāng)?shù)字_;下劃線標(biāo)識(shí)符就是一個(gè)名稱(chēng),用來(lái)表示變量、常量、函數(shù)、類(lèi)型及文件等的名字。標(biāo)識(shí)符只能由字母、數(shù)字或下劃線組成,并且第一個(gè)字符不能是數(shù)字。給標(biāo)識(shí)符取名時(shí),最好能實(shí)現(xiàn)“見(jiàn)名知意”。C語(yǔ)言中大小寫(xiě)字母是敏感的,即在標(biāo)識(shí)符中,大寫(xiě)字母和小寫(xiě)字母代表不同的意義。標(biāo)識(shí)符的有效長(zhǎng)度是1~32個(gè)字符。標(biāo)識(shí)符不能使用系統(tǒng)關(guān)鍵字,因?yàn)殛P(guān)鍵字是系統(tǒng)的保留字,它們已有特定的含義。例如:_12,max,min_a_9是合法的標(biāo)識(shí)符,而n-12,2a是不合法的標(biāo)識(shí)符。標(biāo)識(shí)符就是一個(gè)名稱(chēng),用來(lái)表示變量、常量、函數(shù)、類(lèi)型及文件等的名字。標(biāo)識(shí)符只能由字母、數(shù)字或下劃線組成,并且第一個(gè)字符不能是數(shù)字。給標(biāo)識(shí)符取名時(shí),最好能實(shí)現(xiàn)“見(jiàn)名知意”。C語(yǔ)言中大小寫(xiě)字母是敏感的,即在標(biāo)識(shí)符中,大寫(xiě)字母和小寫(xiě)字母代表不同的意義。標(biāo)識(shí)符的有效長(zhǎng)度是1~32個(gè)字符。標(biāo)識(shí)符不能使用系統(tǒng)關(guān)鍵字,因?yàn)殛P(guān)鍵字是系統(tǒng)的保留字,它們已有特定的含義。例如:_12,max,min_a_9是合法的標(biāo)識(shí)符,而n-12,2a是不合法的標(biāo)識(shí)符?;咀址⑽淖帜复笮?xiě)各26個(gè)共52個(gè);阿拉伯?dāng)?shù)字0到9共10個(gè);下劃線_;其他符號(hào)主要指運(yùn)算符2.2C語(yǔ)言基本組成標(biāo)識(shí)符2.2C語(yǔ)言基本組成語(yǔ)句是組成程序的基本單位,它能完成特定的操作。語(yǔ)句的有機(jī)組合能實(shí)現(xiàn)指定的計(jì)算處理功能。所有程序設(shè)計(jì)語(yǔ)言都提供了滿足編寫(xiě)程序要求的一系列語(yǔ)句,它們都有確定的形式和功能。按語(yǔ)句功能或構(gòu)成的不同,C語(yǔ)言的語(yǔ)句可分為控制語(yǔ)句、函數(shù)調(diào)用語(yǔ)句、表達(dá)式語(yǔ)句、空語(yǔ)句和復(fù)合語(yǔ)句。控制語(yǔ)句又可分為選擇控制語(yǔ)句、循環(huán)控制語(yǔ)句、其他控制語(yǔ)句。2.2C語(yǔ)言基本組成函數(shù)庫(kù):函數(shù)庫(kù)是由系統(tǒng)建立的,具有一定功能的函數(shù)的集合。函數(shù)庫(kù)中存放函數(shù)的名稱(chēng)和對(duì)應(yīng)的目標(biāo)代碼,以及鏈接過(guò)程中所需的重定位信息。用戶也可以根據(jù)自己的需要建立自己的用戶函數(shù)庫(kù)。庫(kù)函數(shù):存放在函數(shù)庫(kù)中的函數(shù)。庫(kù)函數(shù)具有明確的功能、入口調(diào)用參數(shù)和返回值。庫(kù)函數(shù)是語(yǔ)言處理系統(tǒng)中一種重要的軟件資源,在編寫(xiě)C語(yǔ)言程序時(shí),應(yīng)當(dāng)盡可能多地使用庫(kù)函數(shù)。這樣既可以提高程序的運(yùn)行效率,又可以提高編程的質(zhì)量,常常會(huì)收到事半功倍的效果。鏈接程序:將編譯程序生成的目標(biāo)文件鏈接在一起,生成一個(gè)可執(zhí)行文件。頭文件:有時(shí)也稱(chēng)為包含文件。C語(yǔ)言庫(kù)函數(shù)與用戶程序之間進(jìn)行信息通信時(shí)要使用的數(shù)據(jù)和變量。在使用某一庫(kù)函數(shù)時(shí),只要把頭文件包含在用戶程序中,就可以直接調(diào)用相應(yīng)的庫(kù)函數(shù),即在程序開(kāi)始部分用如下形式:#include<頭文件名>或#include"頭文件名"2.3C語(yǔ)言基本數(shù)據(jù)類(lèi)型及表示C語(yǔ)言提供的基本數(shù)據(jù)類(lèi)型比較豐富,它不僅能表達(dá)基本數(shù)據(jù)類(lèi)型(如整型、實(shí)型、字符型等),還能提供數(shù)組、結(jié)構(gòu)體、共用體和指針等數(shù)據(jù)類(lèi)型,人們可以利用這些數(shù)據(jù)類(lèi)型組織一些復(fù)雜的數(shù)據(jù)結(jié)構(gòu)(如鏈表、樹(shù)等)。2.3C語(yǔ)言的基本數(shù)據(jù)類(lèi)型及表示整型數(shù)據(jù)可分為基本型、短整型、長(zhǎng)整型和無(wú)符號(hào)型4種。數(shù)據(jù)類(lèi)型占用字節(jié)數(shù)取值范圍int(基本整型)2-32768~327674-2147483648~2147483647unsignedint(無(wú)符號(hào)整型)20~6553540~4294967295short(短整型)2-32768~32767unsignedshort(無(wú)符號(hào)短整型)20~65535long(長(zhǎng)整型)4-2147483648~2147483647unsignedlong(無(wú)符號(hào)長(zhǎng)整型)40~4294967295整型數(shù)據(jù)可以用十進(jìn)制、八進(jìn)制和十六進(jìn)制3種形式來(lái)表示。長(zhǎng)整型long
int或long無(wú)符號(hào)型unsigned短整型short
int或short基本整型int十六進(jìn)制整數(shù)以0x或0X開(kāi)頭,數(shù)碼取值為0~9,A~F或a~f。八進(jìn)制整數(shù)必須以數(shù)字0開(kāi)頭,數(shù)碼取值為0~7。十進(jìn)制整數(shù)無(wú)前綴,其數(shù)碼為0~9,用+、-號(hào)表示數(shù)值的正負(fù)。2.3C語(yǔ)言的基本數(shù)據(jù)類(lèi)型及表示C語(yǔ)言中實(shí)型數(shù)據(jù)又稱(chēng)浮點(diǎn)型數(shù)據(jù),與數(shù)學(xué)中的實(shí)數(shù)概念相同,這種數(shù)據(jù)由整數(shù)和小數(shù)兩個(gè)部分組成。在C語(yǔ)言中,實(shí)型數(shù)據(jù)只能采用十進(jìn)制,有兩種表達(dá)形式.單精度型--類(lèi)型說(shuō)明符為float。float型占4個(gè)字節(jié)(32位)內(nèi)存空間,其數(shù)值范圍為-3.4E-38~3.4E+38,能得到6位有效數(shù)字。雙精度型--類(lèi)型說(shuō)明符為double。double型占8個(gè)字節(jié)(64位)內(nèi)存空間,其數(shù)值范圍為-1.7E-308~1.7E+308,可提供15位有效數(shù)字。長(zhǎng)雙精度型--類(lèi)型說(shuō)明符為long
double。不同的編譯系統(tǒng)對(duì)long
double型的處理方法不同,TurboC2.0為每個(gè)longdouble型數(shù)據(jù)分配16個(gè)字節(jié),而VisualC++6.0則對(duì)long
double型和double型一樣處理,分配8個(gè)字節(jié)。數(shù)據(jù)類(lèi)型分配字節(jié)數(shù)取值范圍有效精度(位)float4-3.4×10-38~3.4×10386~7double8-1.7×10-308~1.7×1030815~16longdouble16-1.2×10-4932~1.2×10493218~19
01
02十進(jìn)制小數(shù)形式。由+或-號(hào)、數(shù)字0~9和小數(shù)點(diǎn)組成(注意必須有小數(shù)點(diǎn))。指數(shù)形式(科學(xué)計(jì)數(shù)法)。用大寫(xiě)字母E或小寫(xiě)字母e均可表示以10為底的指數(shù)。一般形式為:aE±n或ae±n,代表a×10±n(其中,a為十進(jìn)制數(shù),n為十進(jìn)制整數(shù)),字母E(或e)后面的“+”號(hào)可以省略,E(或e)之前必須有數(shù)字,E(或e)后面的指數(shù)必須為整數(shù)。2.3C語(yǔ)言的基本數(shù)據(jù)類(lèi)型及表示字符型的類(lèi)型說(shuō)明符為char,在內(nèi)存中只占一個(gè)字節(jié)。字符型數(shù)據(jù)分為有符號(hào)型和無(wú)符號(hào)型。常用轉(zhuǎn)義字符表轉(zhuǎn)義字符ASCII碼值轉(zhuǎn)義字符的意義\n10回車(chē)換行\(zhòng)t9橫向跳到下一制表位置\b8退格\r13回車(chē)\f12走紙換頁(yè)\\92反斜線杠\'39單引號(hào)符\”34雙引號(hào)符\ddd
1~3位八進(jìn)制數(shù)所代表的字符\xhh
1~2位十六進(jìn)制數(shù)所代表的字符轉(zhuǎn)義字符:以反斜杠'\'開(kāi)頭的特殊字符。轉(zhuǎn)義字符的作用就是表明反斜杠后面的字符不取原來(lái)意義。用一對(duì)單引號(hào)括起來(lái)的單個(gè)(不能是多個(gè))字符。例如:'A'、'n'、'*'、'6'?!纠?-3】
字符及轉(zhuǎn)義字符的輸出。#include<stdio.h>voidmain(){ printf("we\tare\tchine\163\x65!\rW\n");printf("I\tlove\tChina?\b!\n");}【分析】'\t'是制表符,使用多個(gè)'\t'字符時(shí),各個(gè)制表位置之間間隔8格。'\163'表示字符s,'\x65'表示字符e。'\r'表示將當(dāng)前輸出位置回到本行的開(kāi)頭,然后,該行最前面的小寫(xiě)w字符會(huì)被后面輸出的大寫(xiě)W字符代替。'\b'表示退格,其作用效果是將已輸出字符?用后面的!代替。運(yùn)行結(jié)果:we
are
chinese!I
love
China!2.4常量與變量常量是指在程序運(yùn)行過(guò)程中其值不能被改變的量。常量包括整型常量、實(shí)型常量、字符型常量、字符串常量和符號(hào)常量?!纠?-4】已知圓半徑為3,求圓的面積和周長(zhǎng)。程序代碼:#definePI3.14voidmain(){ intr;floats,l; r=3; s=PI*r*r; l=2*r*PI; printf(“s=%fl=%f”,s,l);}【分析】程序中用define命令行定義PI代表常量3.14,此后凡是在本文件中出現(xiàn)的PI都代表3.14,可以和常量一樣進(jìn)行運(yùn)算。運(yùn)行結(jié)果:s=28.260000l=18.840000符號(hào)常量定義的一般格式如下:#define
符號(hào)常量名
常量值2.4常量與變量在程序中,其值可以改變的量稱(chēng)為變量。變量名變量類(lèi)型說(shuō)明:(1)數(shù)據(jù)類(lèi)型與變量列表之間至少用一個(gè)空格隔開(kāi)。(2)數(shù)據(jù)類(lèi)型決定了變量的屬性,即變量的取值范圍、變量所占存儲(chǔ)單元的字節(jié)數(shù)、所能施加于該變量的操作類(lèi)型。(3)變量列表可以是一個(gè)或多個(gè)變量,多個(gè)變量之間要用逗號(hào)間隔。(4)變量名必須符合標(biāo)識(shí)符的命名規(guī)則,習(xí)慣上變量名中的英文字母用小寫(xiě)。在C語(yǔ)言中,變量一定要先定義,后使用。變量的定義一般形式如下:數(shù)據(jù)類(lèi)型
變量名表;例如:int
i,j,n:
/*定義
i、j、n為整型變量*/float
m,n:
/*定義m、n為實(shí)型變量*/char
a,b;
/*定義a、b為字符型變量*/C語(yǔ)言中變量的定義變量賦初值2.4
常量與變量NO.3NO.2NO.1先定義后賦值int
a,b,c;a=2;b=5;c=10;對(duì)幾個(gè)變量同時(shí)賦一個(gè)初值正確方法:int
a=2,b=2,c=2;錯(cuò)誤方法:int
a=b=c=2;在定義的同時(shí)賦值,也成為變量的初始化:int
a=5;算數(shù)運(yùn)算符和算數(shù)表達(dá)式2.5運(yùn)算符和表達(dá)式加法和減法運(yùn)算符求余運(yùn)算符(%)乘法和除法運(yùn)算符自增運(yùn)算符(++)和自減運(yùn)算符(--)【例2-6】
運(yùn)算符“/”和“%”的用法。#include<stdio.h>voidmain(){ intm,n; floatc; m=5/3; c=5/3.0;
//取余數(shù)運(yùn)算符%,操作數(shù)必須為整型
n=5%3; printf(“m=%d,c=%f,n=%d”,m,c,b);}運(yùn)行結(jié)果:a=1,c=1.666667,b=2【例2-5】
自增、自減運(yùn)算符的用法與運(yùn)算規(guī)則示例。#include<stdio.h>voidmain(){ inti=5; printf("%d",++i);
printf("%d",--i);
printf("%d",i++);
printf("%d",i--);
printf("%d",-i++);
printf("%d",-i--);
} 運(yùn)行結(jié)果:6556-5-6賦值運(yùn)算符和賦值表達(dá)式2.5運(yùn)算符和表達(dá)式1、簡(jiǎn)單賦值運(yùn)算符與表達(dá)式變量=表達(dá)式賦值運(yùn)算符具有右結(jié)合性一般形式簡(jiǎn)單賦值運(yùn)算符記為“=”。由“=”連接的式子稱(chēng)為賦值表達(dá)式。定義功能賦值表達(dá)式的功能:先計(jì)算表達(dá)式的值,再將值賦予左邊的變量。賦值運(yùn)算符和賦值表達(dá)式2.5
運(yùn)算符和表達(dá)式【例2-7】賦值運(yùn)算中類(lèi)型轉(zhuǎn)換的規(guī)則示例。程序代碼:#include<stdio.h>voidmain(){ intx,y=322,z; floata,b=5.5; charc1='A',c2; x=b; a=y; z=c1; c2=y; printf("%d,%.2f,%d,%c\n",x,a,z,c2);}類(lèi)型轉(zhuǎn)換如果賦值運(yùn)算符兩邊的數(shù)據(jù)類(lèi)型不相同,系統(tǒng)將自動(dòng)進(jìn)行類(lèi)型轉(zhuǎn)換,即把賦值號(hào)右邊的類(lèi)型換成左邊的類(lèi)型。具體規(guī)定如下:(1)實(shí)型賦予整型,舍去小數(shù)部分。(2)整型賦予實(shí)型,數(shù)值不變,但將以浮點(diǎn)形式存放,即增加小數(shù)部分(小數(shù)部分的值為0)。(3)字符型賦予整型。由于字符型為1個(gè)字節(jié),而整型為2個(gè)字節(jié),故將字符的ASCII碼放到整型量的低8位,高8位為0。若將整型賦予字符型,則只對(duì)低8位賦予字符量。運(yùn)行結(jié)果:編譯的時(shí)候出現(xiàn)兩個(gè)警告:conversionfrom'float'to'int',possiblelossofdataconversionfrom'int'to'float',possiblelossofdata輸出:5,322.00,65,B賦值運(yùn)算符和賦值表達(dá)式2.5
運(yùn)算符和表達(dá)式在賦值符“=”前加上其他二目運(yùn)算符,可構(gòu)成復(fù)合賦值符。例如,+=、-=、*=、/=、%=、<<=、>>=、&=、^=、|=。構(gòu)成復(fù)合賦值表達(dá)式的一般形式:變量雙目運(yùn)算符表達(dá)式等效于:變量=變量運(yùn)算符表達(dá)式例如:a+=5等價(jià)于a=a+5x*=y+7等價(jià)于x=x*(y+7)r%=p等價(jià)于r=r%p復(fù)合賦值運(yùn)算符關(guān)系運(yùn)算符和關(guān)系表達(dá)式2.5
運(yùn)算符和表達(dá)式關(guān)系運(yùn)算實(shí)際上就是比較運(yùn)算,即將兩個(gè)數(shù)據(jù)進(jìn)行比較,判定兩個(gè)數(shù)據(jù)是否符合給定的關(guān)系。C語(yǔ)言提供6種關(guān)系運(yùn)算符:<(小于)、<=(小于等于)、>(大于)、>=(大于等于)、==(等于)、!=(不等于)。所有的關(guān)系運(yùn)算符都是雙目運(yùn)算符。關(guān)系運(yùn)算符的優(yōu)先級(jí):前4種關(guān)系運(yùn)算符(<,<=,>,>=)的優(yōu)先級(jí)相同,后2種關(guān)系運(yùn)算符(==,!=)的優(yōu)先級(jí)相同。關(guān)系運(yùn)算符算術(shù)運(yùn)算符
關(guān)系運(yùn)算符
賦值運(yùn)算符
(低)
(高)
用關(guān)系運(yùn)算符將兩個(gè)數(shù)值或數(shù)值表達(dá)式連接起來(lái)的序列,稱(chēng)為關(guān)系表達(dá)式。例如,下面幾個(gè)都是合法的關(guān)系表達(dá)式:a>b,a+b>b+c,(a=3)>(b=5),(a>b)>(b>c)。關(guān)系表達(dá)式的一般形式為:表達(dá)式關(guān)系運(yùn)算符表達(dá)式;關(guān)系表達(dá)式關(guān)系運(yùn)算符和關(guān)系表達(dá)式2.5
運(yùn)算符和表達(dá)式【例2-8】關(guān)系表達(dá)式示例。程序代碼:#include<stdio.h>voidmain(){charc='k';inti=1,j=2,k=3;floatx=3e5,y=0.85;printf("%d,%d\n",'a'+5<c,-i-2*j>=-k-2);printf("%d,%d\n",1<j<5,x-5.25<=x+y);printf("%d,%d\n",i+j+k==-2*j,k==j==i+5);}運(yùn)行結(jié)果:1,11,10,0【分析】本例中求出了各種關(guān)系運(yùn)算符的值。字符變量是以它對(duì)應(yīng)的ASCII碼參與運(yùn)算的。對(duì)于含多個(gè)關(guān)系運(yùn)算符的表達(dá)式,如k==j==i+5,根據(jù)運(yùn)算符的左結(jié)合性,先計(jì)算k==j,該式不成立,其值為0,再計(jì)算0==i+5,也不成立,故表達(dá)式值為0?!?=”和“=”的區(qū)別:在C語(yǔ)言中,“==”是關(guān)系運(yùn)算符,而“=”則是賦值運(yùn)算符。關(guān)系運(yùn)算的結(jié)果是一個(gè)邏輯值,只有兩種可能:要么關(guān)系成立,為“真”;要么關(guān)系不成立,為“假”。由于C語(yǔ)言沒(méi)有邏輯型數(shù)據(jù)類(lèi)型,所以用1代表“真”,用0代表“假”。因而,C語(yǔ)言關(guān)系表達(dá)式的運(yùn)算結(jié)果實(shí)質(zhì)上都是數(shù)值型(1或者0)。邏輯運(yùn)算符和邏輯表達(dá)式2.5
運(yùn)算符和表達(dá)式C語(yǔ)言提供以下3種邏輯運(yùn)算符:(1)&&(邏輯與):雙目運(yùn)算符。表示“并且”,只有兩個(gè)條件同時(shí)滿足時(shí),表達(dá)式的結(jié)果才為真。(2)||(邏輯或):雙目運(yùn)算符。表示“或者”,只需滿足其中任意一個(gè)條件,表達(dá)式結(jié)果就為真。(3)!(邏輯非):單目運(yùn)算符。表示“否定”,意思是對(duì)操作數(shù)的邏輯值進(jìn)行取反。邏輯運(yùn)算符的優(yōu)先級(jí):“!”最高,“&&”次之,“||”最低。邏輯運(yùn)算符邏輯運(yùn)算符和邏輯表達(dá)式2.5
運(yùn)算符和表達(dá)式關(guān)系表達(dá)式只能描述單一條件。例如,x表示是一個(gè)非負(fù)數(shù),可用關(guān)系表達(dá)式x>=0來(lái)描述。如果需要表示x的數(shù)值范圍是[0,100],即x>=0且x<=100,也就是說(shuō),當(dāng)需要描述的條件有2個(gè)或更多時(shí),就要借助邏輯表達(dá)式了。用邏輯運(yùn)算符將關(guān)系表達(dá)式或邏輯量連接起來(lái)的式子,就是邏輯表達(dá)式。其中,邏輯量就是值為“真”或“假”的數(shù)據(jù)。C語(yǔ)言規(guī)定,所有的“非0”數(shù)據(jù)判定為“真”,只有“0”判定為“假”即所有邏輯表達(dá)式的運(yùn)算結(jié)果實(shí)質(zhì)上也是數(shù)值型(1或者0)。邏輯表達(dá)式的一般形式為:表達(dá)式邏輯運(yùn)算符表達(dá)式;邏輯表達(dá)式由于&&和||運(yùn)算符的左結(jié)合性及運(yùn)算特點(diǎn),若&&運(yùn)算符左邊的表達(dá)式的值為“假”(為0),則其右邊的表達(dá)式將不再運(yùn)算,整個(gè)表達(dá)式的值必然為“假”。同理,若||運(yùn)算符左邊的表達(dá)式的值為“真”(非0),則其右邊的表達(dá)式將不再運(yùn)算,整個(gè)表達(dá)式的值必然為“真”。例如:a&&b=b-1當(dāng)a=0時(shí),表達(dá)式的運(yùn)算結(jié)果為0,&&運(yùn)算符右邊的式子將不再運(yùn)算,b的值不變。a||b=b-1當(dāng)a=1時(shí),表達(dá)式的運(yùn)算結(jié)果為1,||運(yùn)算符右邊的式子將不再運(yùn)算,b的值不變。邏輯運(yùn)算符的短路現(xiàn)象邏輯運(yùn)算符和邏輯表達(dá)式2.5
運(yùn)算符和表達(dá)式【例2-9】邏輯表達(dá)式實(shí)例。程序代碼:main(){charc='k';inti=1,j=2,k=3;floatx=3e+5,y=0.85;printf("%d,%d\n",!x*!y,!!!x);printf("%d,%d\n",x||i&&j-3,i<j&&x<y);printf("%d,%d\n",i==5&&c&&(j=8),x+y||i+j+k);}【分析】本例中!x和!y均為0,!x*!y也為0,故其輸出值為0。由于x為非0,故!!!x的邏輯值為0。對(duì)x||i&&j-3式,先計(jì)算j-3的值為非0,再求i&&j-3的邏輯值為1,故x||i&&j-3的邏輯值為1。對(duì)i<j&&x<y式,由于i<j的值為1,而x<y為0,故表達(dá)式的值為0。對(duì)i==5&&c&&(j=8)式,由于i==5為假,即值為0,該表達(dá)式由兩個(gè)與運(yùn)算組成,所以整個(gè)表達(dá)式的值為0。對(duì)于式x+y||i+j+k,由于x+y的值為非0,故整個(gè)或表達(dá)式的值為1。運(yùn)行結(jié)果:0,01,00,1條件運(yùn)算符和條件表達(dá)式2.5
運(yùn)算符和表達(dá)式條件運(yùn)算符是C語(yǔ)言中唯一的三目運(yùn)算符。條件運(yùn)算符的形式是“?:”,由它構(gòu)成的表達(dá)式稱(chēng)為條件表達(dá)式。其形式為表達(dá)式1?表達(dá)式2:表達(dá)式3如果表達(dá)式1成立,則表達(dá)式2的值是整個(gè)表達(dá)式的值,否則表達(dá)式3的值是整個(gè)表達(dá)式的值條件運(yùn)算符例如,將a、b兩個(gè)變量中的較大值賦值給變量max,我們可以利用條件運(yùn)算來(lái)完成此操作。max=a>b?a:b。條件表達(dá)式的優(yōu)先級(jí)高于賦值運(yùn)算,但低于所有關(guān)系運(yùn)算、邏輯運(yùn)算和算術(shù)運(yùn)算。其結(jié)合性是自右至左的,當(dāng)多個(gè)條件表達(dá)式嵌套使用時(shí),每個(gè)后續(xù)的冒號(hào)(:)總與前面最近的、沒(méi)有配對(duì)的問(wèn)號(hào)(?)相聯(lián)系。例如:a>b?a:b>c?b:c等價(jià)于a>b?a:(b>c?b:c)。條件表達(dá)式逗號(hào)運(yùn)算符和逗號(hào)表達(dá)式2.5
運(yùn)算符和表達(dá)式C語(yǔ)言提供一種特殊的運(yùn)算符———逗號(hào)運(yùn)算符。逗號(hào)運(yùn)算符為“,”。用逗號(hào)運(yùn)算符可以將兩個(gè)表達(dá)式連接起來(lái)。例如:2+3,2+5逗號(hào)運(yùn)算符逗號(hào)表達(dá)式就是用逗號(hào)運(yùn)算符將兩個(gè)表達(dá)式連接起來(lái)所形成的表達(dá)式。其一般形式為表達(dá)式1,表達(dá)式2,…,表達(dá)式n求值過(guò)程:從左至右,分別求表達(dá)式的值,并以表達(dá)式n的值作為整個(gè)逗號(hào)表達(dá)式的值。條件表達(dá)式【例2-10】逗號(hào)運(yùn)算符的規(guī)則示例。程序代碼:#include<stdio.h>voidmain(){inti=1,j=2,k=3,x,y;y=((x=1+j),j+k);printf("y=%d,x=%d\n",y,x);}運(yùn)行結(jié)果:y=5,x=3并不是所有出現(xiàn)逗號(hào)的語(yǔ)句都組成逗號(hào)表達(dá)式。例如,在變量說(shuō)明中,函數(shù)參數(shù)表中的逗號(hào)只用作各變量之間的間隔。優(yōu)先級(jí):逗號(hào)運(yùn)算符是所有運(yùn)算符中級(jí)別最低的。例如,逗號(hào)表達(dá)式:x=2,4*5運(yùn)算時(shí),先算第一個(gè)賦值表達(dá)式x=2,再算算術(shù)表達(dá)式4*5,最后算整個(gè)逗號(hào)表達(dá)式的值。逗號(hào)表達(dá)式的值為算術(shù)表達(dá)式的值20。結(jié)合性:逗號(hào)表達(dá)式的結(jié)合性為自左至右結(jié)合。當(dāng)多個(gè)逗號(hào)表達(dá)式串聯(lián)在一起時(shí),自左至右運(yùn)算,依次求出每個(gè)表達(dá)式的值,整個(gè)逗號(hào)表達(dá)式的值為最后一個(gè)表達(dá)式的值。2.5
運(yùn)算符和表達(dá)式sizeof是求字節(jié)數(shù)運(yùn)算符,用于確定變量或數(shù)據(jù)類(lèi)型在計(jì)算機(jī)系統(tǒng)中所占的字節(jié)數(shù)。變量或數(shù)據(jù)類(lèi)型在不同的計(jì)算機(jī)系統(tǒng)中可能占用不同長(zhǎng)度的內(nèi)存空間。若想了解在自己所使用的計(jì)算機(jī)系統(tǒng)中,這些變量或數(shù)據(jù)類(lèi)型所占用的內(nèi)存空間大小,可以使用求字節(jié)數(shù)運(yùn)算符sizeof。其一般應(yīng)用形式為:sizeof(opr)其中,opr表示sizeof運(yùn)算符所要運(yùn)算的對(duì)象,opr可以是表達(dá)式或數(shù)據(jù)類(lèi)型名,當(dāng)opr是表達(dá)式時(shí)括號(hào)可省略。例如:sizeof(char)/*求字符型數(shù)據(jù)在內(nèi)存中所占用的字節(jié)數(shù),結(jié)果為1*/sizeof(int)(a*b)/*求整型數(shù)據(jù)在內(nèi)存中所占用的字節(jié)數(shù),結(jié)果為2*/sizeof運(yùn)算符2.6混合運(yùn)算及數(shù)據(jù)類(lèi)型轉(zhuǎn)換混合運(yùn)算是指在一個(gè)表達(dá)式中參與運(yùn)算的對(duì)象不是相同的數(shù)據(jù)類(lèi)型。例如:2*3.1416*r,3.1416*r*r,3.6*a%5/(*b)+f。如果r為整型變量,a為浮點(diǎn)型變量,b為雙精度浮點(diǎn)型變量,則以上三個(gè)表達(dá)式中涉及的數(shù)據(jù)類(lèi)型有整型和浮點(diǎn)型,種表達(dá)式稱(chēng)為混合類(lèi)型表達(dá)式。對(duì)于混合運(yùn)算,首要的任務(wù)是對(duì)參與運(yùn)算的數(shù)據(jù)進(jìn)行類(lèi)型轉(zhuǎn)換?;旌线\(yùn)算自動(dòng)轉(zhuǎn)換強(qiáng)制轉(zhuǎn)換數(shù)據(jù)類(lèi)型轉(zhuǎn)換2.6混合運(yùn)算及數(shù)據(jù)類(lèi)型轉(zhuǎn)換自動(dòng)轉(zhuǎn)換發(fā)生在不同數(shù)據(jù)類(lèi)型的量混合運(yùn)算時(shí),由編譯系統(tǒng)自動(dòng)完成。自動(dòng)轉(zhuǎn)換【例2-11】自動(dòng)轉(zhuǎn)換的用法與運(yùn)算規(guī)則示例。程序代碼:#include<stdio.h>voidmain(){floatpi=3.14159;ints,r=5;s=r*r*pi;printf("s=%d\n",s);}運(yùn)行結(jié)果:編譯時(shí)出現(xiàn)警告;'initializing':truncationfrom'constdouble'to'float'conversionfrom'float'to'int',possiblelossofdata說(shuō)明系統(tǒng)提示數(shù)據(jù)類(lèi)型不匹配,但系統(tǒng)會(huì)自動(dòng)轉(zhuǎn)換。運(yùn)行結(jié)果:s=78若參與運(yùn)算量的類(lèi)型不同,則先轉(zhuǎn)換成同一類(lèi)型,然后進(jìn)行運(yùn)算。1轉(zhuǎn)換按數(shù)據(jù)長(zhǎng)度增加的方向進(jìn)行,以保證精度不降低。例如,int型量和long型量運(yùn)算時(shí),通常先把int型量轉(zhuǎn)換成long型量,再進(jìn)行運(yùn)算。2浮點(diǎn)運(yùn)算通常以雙精度進(jìn)行,即使僅含float型量運(yùn)算的表達(dá)式,也要先轉(zhuǎn)換成double型量,再進(jìn)行運(yùn)算。3char型量和short型量參與運(yùn)算時(shí),必須先轉(zhuǎn)換成int型量。4在賦值運(yùn)算中,如果賦值號(hào)兩邊量的數(shù)據(jù)類(lèi)型不同,賦值號(hào)右邊量的類(lèi)型將轉(zhuǎn)換為左邊量的類(lèi)型。如果右邊量的數(shù)據(jù)類(lèi)型長(zhǎng)度比左邊長(zhǎng),可能丟失一部分?jǐn)?shù)據(jù),這樣會(huì)降低精度。52.6混合運(yùn)算及數(shù)據(jù)類(lèi)型轉(zhuǎn)換強(qiáng)制轉(zhuǎn)換是通過(guò)類(lèi)型轉(zhuǎn)換運(yùn)算來(lái)實(shí)現(xiàn)的,其功能是把表達(dá)式的運(yùn)算結(jié)果強(qiáng)制轉(zhuǎn)換成類(lèi)型說(shuō)明符所表示的類(lèi)型。其一般形式:(類(lèi)型說(shuō)明符)(表達(dá)式)例如:(float)a,(int)(x+y)強(qiáng)制轉(zhuǎn)換【例2-12】
強(qiáng)制轉(zhuǎn)換的用法與運(yùn)算規(guī)則示例。程序代碼:#include<stdio.h>voidmain(){inta=1;floatx=2.5,y=3;printf("(float)a=%f,a=%d\n",(float)a,a);printf("(int)(x+y)=%d,x+y=%f\n",(int)(x+y),x+y);}運(yùn)行結(jié)果:(float)a=1.000000,a=1(int)(x+y)=5,x+y=5.500000【分析】a和x+y雖然被強(qiáng)制轉(zhuǎn)換,但只在運(yùn)算中起作用,是臨時(shí)的類(lèi)型轉(zhuǎn)換,其本身的類(lèi)型并不改變。因此,(int)(x+y)的值為5(舍去了小數(shù)部分),(float)a增加了小數(shù)部分的輸出。無(wú)論是強(qiáng)制轉(zhuǎn)換還是自動(dòng)轉(zhuǎn)換,都是為了滿足本次運(yùn)算的需要而對(duì)變量的類(lèi)型進(jìn)行臨時(shí)轉(zhuǎn)換,而不會(huì)改變數(shù)據(jù)說(shuō)明時(shí)對(duì)該變量定義的類(lèi)型。類(lèi)型說(shuō)明符和表達(dá)式都必須加括號(hào)(單個(gè)變量可以不加括號(hào))。若把(int)(x+y)寫(xiě)成(int)x+y,則先把x轉(zhuǎn)換成int型,再與y相加。2.7程序舉例【例2-13】
寫(xiě)出下列程序的運(yùn)行結(jié)果。#includ
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 信宜市2026年公開(kāi)選聘市外教師備考題庫(kù)及答案詳解1套
- 2026年重慶市林業(yè)局森林火險(xiǎn)協(xié)防專(zhuān)班人員招聘6人備考題庫(kù)含答案詳解
- 安全生產(chǎn)培訓(xùn)課件總結(jié)
- 消防安全管理制度與操作指南
- 2025年農(nóng)業(yè)資源管理與生態(tài)環(huán)境保護(hù)指南
- 高中生運(yùn)用歷史文獻(xiàn)分析宋代海外貿(mào)易路線科技發(fā)展課題報(bào)告教學(xué)研究課題報(bào)告
- 2026年蓮花縣坊樓學(xué)校招聘臨聘日語(yǔ)教師備考題庫(kù)及參考答案詳解
- 智能精準(zhǔn)教研在教師課堂管理中的應(yīng)用與效果評(píng)估教學(xué)研究課題報(bào)告
- 抑郁癥患者家庭支持計(jì)劃
- 高中生物多媒體素材情感化設(shè)計(jì)對(duì)生物學(xué)學(xué)習(xí)的促進(jìn)作用教學(xué)研究課題報(bào)告
- 養(yǎng)豬企業(yè)新員工職業(yè)規(guī)劃
- 施工機(jī)械設(shè)備施工技術(shù)方案
- 人教版六年級(jí)上冊(cè)數(shù)學(xué)解方程練習(xí)100道及答案
- DL∕T 2447-2021 水電站防水淹廠房安全檢查技術(shù)規(guī)程
- 必修一實(shí)驗(yàn)復(fù)習(xí)+期末復(fù)習(xí) 高一上學(xué)期物理人教版(2019)必修第一冊(cè)
- 人工費(fèi)合同簡(jiǎn)易版
- JT∕T 795-2023 事故汽車(chē)修復(fù)技術(shù)規(guī)范
- 九年級(jí)上冊(cè)英語(yǔ)英語(yǔ)閱讀理解匯編含解析
- 機(jī)房搬遷服務(wù)搬遷實(shí)施方案
- 2023-2024年人教版八年級(jí)上冊(cè)數(shù)學(xué)期末模擬試卷(含答案)
- 市政工程交通導(dǎo)行施工方案
評(píng)論
0/150
提交評(píng)論