版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第3章最簡(jiǎn)單的C程序設(shè)計(jì)3.1順序程序設(shè)計(jì)舉例3.2數(shù)據(jù)的表現(xiàn)形式及其運(yùn)算3.3C語(yǔ)句3.4數(shù)據(jù)的輸入輸出3.1順序程序設(shè)計(jì)舉例
例3.1有人用溫度計(jì)測(cè)量出用華氏法表示的溫度(如F,今要求把它轉(zhuǎn)換為以攝氏法表示的溫度(如C)。解題思路:找到二者間的轉(zhuǎn)換公式f代表華氏溫度,c代表攝氏溫度算法:輸入f的值輸出c的值
例3.1有人用溫度計(jì)測(cè)量出用華氏法表示的溫度(如F,今要求把它轉(zhuǎn)換為以攝氏法表示的溫度(如C)。N-S圖#include<stdio.h>intmain(){floatf,c;f=64.0;c=(5.0/9)*(f-32);printf("f=%f\nc=%f\n",f,c);return0;}定義f和c為單精度浮點(diǎn)型變量指定f的值計(jì)算c的值輸出f和c的值
例3.2計(jì)算存款利息。有1000元,想存一年。有三種方法可選:(1)活期,年利率為r1(2)一年期定期,年利率為r2(3)存兩次半年定期,年利率為r3
請(qǐng)分別計(jì)算出一年后按三種方法所得到的本息和。解題思路:確定計(jì)算本息和的公式。從數(shù)學(xué)知識(shí)可知:若存款額為p0,則:活期存款一年后本息和為:
p1=p0(1+r1)一年期定期存款,一年后本息和為:
p2=p0(1+r2)兩次半年定期存款,一年后本息和為:
算法:輸入p0,r1,r2,r3的值計(jì)算p1=p0(1+r1)計(jì)算p2=p0(1+r2)計(jì)算p3=p0(1+)(1+)輸出p1,p2,p3#include<stdio.h>intmain(){floatp0=1000,r1=0.0036,r2=0.0225,r3=0.0198,p1,p2,p3;p1=p0*(1+r1);p2=p0*(1+r2);p3=p0*(1+r3/2)*(1+r3/2);printf(”%f\n%f\n%f\n”,p1,p2,p3);return0;}定義變量同時(shí)賦予初值3.2數(shù)據(jù)的表現(xiàn)形式及其運(yùn)算3.2.1常量和變量3.2.2數(shù)據(jù)類型3.2.3整型數(shù)據(jù)3.2.4字符型數(shù)據(jù)3.2.5浮點(diǎn)型數(shù)據(jù)3.2.6怎樣確定常量的類型3.2.7運(yùn)算符和表達(dá)式3.2.1常量和變量1.常量:在程序運(yùn)行過(guò)程中,其值不能被改變的量整型常量:如1000,12345,0,-345實(shí)型常量十進(jìn)制小數(shù)形式:如0.34-56.790.0指數(shù)形式:如12.34e3(代表12.34103)字符常量:如’?’轉(zhuǎn)義字符:如’\n’字符串常量:如”boy”定義格式:#definePI3.1416例:符號(hào)常量的使用
#definePRICE30
#include<stdio.h>
voidmain()
{
intnum,total;
num=10;
total=num*PRICE;
printf(″total=%d\n″,total);
}符號(hào)常量:用一個(gè)標(biāo)識(shí)符代表一個(gè)常量。符號(hào)常量的值在其作用域內(nèi)不能改變,也不能再被賦值。運(yùn)行結(jié)果:
total=300說(shuō)明:
程序中用#define命令行定義PRICE代表常量30,此后凡在本文件中出現(xiàn)的PRICE都代表30,可以和常量一樣進(jìn)行運(yùn)算。說(shuō)明:如再用賦值語(yǔ)句給PRICE賦值是錯(cuò)的
PRICE=40;/*錯(cuò)誤,不能給符號(hào)常量賦值*/表示在程序運(yùn)行過(guò)程中可改變的量,C語(yǔ)言表現(xiàn)為存儲(chǔ)器中的一個(gè)存儲(chǔ)單元地址。2、變量:變量編譯程序根據(jù)變量定義為其分配指定字節(jié)的內(nèi)存單元…...地址inta=1,b=-3,c;abc2字節(jié)2字節(jié)2字節(jié)地址地址…...內(nèi)存1-3隨機(jī)數(shù)變量概念:其值可以改變的量變量名與變量值變量定義的一般格式:
數(shù)據(jù)類型變量1[,變量2,…,變量n];<>變量初始化:定義時(shí)賦初值例:inta,b,c;floatdata;決定分配字節(jié)數(shù)和數(shù)的表示范圍合法標(biāo)識(shí)符例:inta=2,b,c=4;floatdata=3.67;charch=‘A’;intx=1,y=1,z=1;
intx=y=z=1;變量的使用:先定義,后使用例1intstudent;stadent=19;//Undefinedsymbol‘statent’infunctionmain
例2floata,b,c;c=a%b;//Illegaluseoffloatingpointinfunctionmain
變量定義位置:一般放在函數(shù)開頭voidmain(){inta,b=2;floatdata;a=1;data=(a+b)*1.2;printf(“data=%f\n”,data);}變量定義可執(zhí)行語(yǔ)句voidmain(){inta,b=2;a=1;floatdata;data=(a+b)*1.2;printf(“data=%f\n”,data);}變量名
變量值3存儲(chǔ)單元
a3.常變量:constinta=3;#definePRICE30//定義符號(hào)常量constinta=3;//定義常變量符號(hào)常量:是預(yù)編譯指令,含義清楚,一改全改,不占內(nèi)存常變量:有類型,占存儲(chǔ)單元,使用更方便4.標(biāo)識(shí)符定義:用來(lái)標(biāo)識(shí)變量、常量、函數(shù)等的字符序列組成:只能由字母、數(shù)字、下劃線組成,且第一個(gè)字母必須是字母或下劃線大小寫敏感(A跟a不同)不能使用關(guān)鍵字(37個(gè)關(guān)鍵字)長(zhǎng)度:取8個(gè)字符(TurboC允許32個(gè)字符)命名原則:見(jiàn)名知意不宜混淆如o與0;例:判斷下列標(biāo)識(shí)符號(hào)合法性sumSumM.D.JohndayDate3daysstudent_name#33lotus_1_2_3chara>b_above$123M.D.John3days#33char$123a>b大小寫字母是不同的字符3.2.2數(shù)據(jù)類型所謂類型,就是對(duì)數(shù)據(jù)分配存儲(chǔ)單元的安排,包括存儲(chǔ)單元的長(zhǎng)度(占多少字節(jié))以及數(shù)據(jù)的存儲(chǔ)形式不同的類型分配不同的長(zhǎng)度和存儲(chǔ)形式C語(yǔ)言允許使用的數(shù)據(jù)類型:基本類型整型類型基本整型短整型長(zhǎng)整型雙長(zhǎng)整型字符型布爾型浮點(diǎn)類型單精度浮點(diǎn)型雙精度浮點(diǎn)型復(fù)數(shù)浮點(diǎn)型C語(yǔ)言允許使用的數(shù)據(jù)類型:基本類型枚舉類型空類型派生類型指針類型數(shù)組類型結(jié)構(gòu)體類型共用體類型函數(shù)類型算術(shù)類型純量類型:值可以以數(shù)字來(lái)表示3.2.3整型數(shù)據(jù)1.整型數(shù)據(jù)的分類最基本的整型類型基本整型(int型):占2個(gè)或4個(gè)字節(jié)短整型(shortint):VC++6.0中占2個(gè)字節(jié)長(zhǎng)整型(longint):VC++6.0中占4個(gè)字節(jié)雙長(zhǎng)整型(longlongint):C99新增的,占8個(gè)字節(jié)3.2.3整型數(shù)據(jù)1.整型數(shù)據(jù)的分類2.整型變量的符號(hào)屬性整型變量的值的范圍包括負(fù)數(shù)到正數(shù)可以將變量定義為“無(wú)符號(hào)”類型擴(kuò)充的整形類型:擴(kuò)充的整型類型:有符號(hào)基本整型[signed]int;無(wú)符號(hào)基本整型unsignedint;有符號(hào)短整型[signed]short[int];無(wú)符號(hào)短整型unsignedshort[int];有符號(hào)長(zhǎng)整型[signed]long[int];無(wú)符號(hào)長(zhǎng)整型unsignedlong[int]有符號(hào)雙長(zhǎng)整型[signed]longlong[int];無(wú)符號(hào)雙長(zhǎng)整型unsignedlonglong[int]表:整數(shù)類型的有關(guān)數(shù)據(jù)的存儲(chǔ)空間和值的范圍類型類型說(shuō)明符長(zhǎng)度數(shù)的范圍基本型int
2字節(jié)-32768~32767
短整型short2字節(jié)-215~215-1
長(zhǎng)整型long4字節(jié)-231~231-1
無(wú)符號(hào)整型unsigned2字節(jié)0~65535
無(wú)符號(hào)短整型unsignedshort2字節(jié)0~65535
無(wú)符號(hào)長(zhǎng)整型unsignedlong4字節(jié)0~(232-1)雙長(zhǎng)整型longlong8字節(jié)-263~263-1無(wú)符號(hào)雙長(zhǎng)整型unsignedlonglong8字節(jié)0~264-11、整型常量的表示方法
整型常量即整常數(shù)。在C語(yǔ)言中,整型常數(shù)可用以下三種形式表示:(1)十進(jìn)制整數(shù)。
如:123,-456,4(2)八進(jìn)制整數(shù)。以0頭的數(shù)是八進(jìn)制數(shù)。
如:0123表示八進(jìn)制數(shù)123,等于十進(jìn)制數(shù)83,-011表示八進(jìn)制數(shù)-11,即十進(jìn)制數(shù)-9。(3)十六進(jìn)制整數(shù)。以0x開頭的數(shù)是16進(jìn)制數(shù)。
如:0x123,代表16進(jìn)制數(shù)123,等于十進(jìn)制數(shù)291。-0x12等于十進(jìn)制數(shù)-10。
3.2.3整型數(shù)據(jù)2、整型變量整型數(shù)據(jù)在內(nèi)存中的存放形式:以整數(shù)的補(bǔ)碼形式存放的。正數(shù)的補(bǔ)碼:跟該數(shù)的原碼(該數(shù)的二進(jìn)制形式)相同負(fù)數(shù)的補(bǔ)碼:將該數(shù)的絕對(duì)值的二進(jìn)制形式,按位取反再加1。
<>例如:inti;/*定義為整型變量*/i=10;/*給i賦以整數(shù)10*/<>i10(a)i0000000000001010(b)圖數(shù)據(jù)在內(nèi)存中的存放<>
例如求-10的補(bǔ)碼的方法是:①取-10的絕對(duì)值10;②10的二進(jìn)制形式為1010;③對(duì)1010取反得1111111111110101;④再加1得1111111111110110;注意:十進(jìn)制數(shù)10的二進(jìn)制形式為1010,TurboC2.0和TurboC++3.0為一個(gè)整型變量在內(nèi)存中分配2個(gè)字節(jié)的存儲(chǔ)單元(不同的編譯系統(tǒng)為整型數(shù)據(jù)分配的字節(jié)數(shù)是不相同的,VC++6.0則分配4個(gè)字節(jié))。
3.3整型數(shù)據(jù)(2)整型變量的分類共六種有符號(hào)基本整型有符號(hào)短整型有符號(hào)長(zhǎng)整型無(wú)符號(hào)基本整型無(wú)符號(hào)短整型無(wú)符號(hào)長(zhǎng)整型(signed)int(signed)short(int)(signed)long(int)unsignedintunsignedshort(int)unsignedlong(int)
注意:括號(hào)表示其中的內(nèi)容是可選的.例如:整數(shù)13在內(nèi)存中實(shí)際存放的情況:(3)整型變量的定義:
C規(guī)定在程序中所有用到的變量都必須在程序中定義,即“強(qiáng)制類型定義”。
例如:
inta,b(指定變量a、b為整型)
unsignedshortc,d;(指定變量c、d為無(wú)符號(hào)短整型)
longe,f;(指定變量e、f為長(zhǎng)整型)例:整型變量的定義與使用
#include<stdio.h>
voidmain()
{inta,b,c,d;/*指定a、b、c、d為整型變量*/
unsignedu;/*指定u為無(wú)符號(hào)整型變量*/
a=12;b=-24;u=10;
c=a+u;d=b+u;
printf(″a+u=%d,b+u=%d\n″,c,d);
}說(shuō)明:
可以看到不同種類的整型數(shù)據(jù)可以進(jìn)行算術(shù)運(yùn)算運(yùn)行結(jié)果:a+u=22,b+u=-14
#include<stdio.h>
voidmain()
{inta,b;
a=32767;
b=a+1;
printf(“%d,%d\n”,a,b);
}
運(yùn)行結(jié)果:32767,-32768-32768327670111111111111111說(shuō)明:數(shù)值是以補(bǔ)碼表示的。一個(gè)整型變量只能容納-32768~32767范圍內(nèi)的數(shù),無(wú)法表示大于32767或小于-32768的數(shù)。遇此情況就發(fā)生“溢出”。溢出不報(bào)錯(cuò)a:b:1000000000000000例:整型數(shù)據(jù)的溢出#include<stdio.h>
#include<math.h>
voidmain()
{
inta,b,c,d;
a=32767;
c=pow(2,31)-1;
b=a+1;
d=c+1;
printf("%d\n%d\n",a,b);
printf("%d\n%d\n",c,d);
}
整型常量的類型
(1)一個(gè)整數(shù),如果其值在-32768~+32767范圍內(nèi),認(rèn)為它是int型,它可以賦值給int型和longint型變量,longlongint型變量。
(2)一個(gè)整數(shù),如果其值超過(guò)了上述范圍,而在-2147483637~+2147483647范圍內(nèi),則認(rèn)為它是長(zhǎng)整型,分配4個(gè)字節(jié)??梢詫⑺x值給一個(gè)longint型變量。
定義夠用為好,不要都寫為long型,會(huì)降低運(yùn)算速度(4)一個(gè)整常量后面加一個(gè)字母u或U,認(rèn)為是unsignedint型,如果寫成-12345u,則先將-12345轉(zhuǎn)換成其補(bǔ)碼53191,然后按無(wú)符號(hào)數(shù)存儲(chǔ)。(3)在一個(gè)整常量后面加一個(gè)字母l或L,則認(rèn)為是longint型常量。
例如:123l、432L、0L
用于函數(shù)調(diào)用中。如果函數(shù)的形參為longint型,則要求實(shí)參也為longint型。3.2.4字符型數(shù)據(jù)字符是按其代碼(整數(shù))形式存儲(chǔ)的C99把字符型數(shù)據(jù)作為整數(shù)類型的一種字符型數(shù)據(jù)在使用上有自己的特點(diǎn)3.2.4字符型數(shù)據(jù)1.字符與字符代碼大多數(shù)系統(tǒng)采用ASCII字符集字母:A~Z,a~z數(shù)字:0~9專門符號(hào):29個(gè):!”#&‘()*等空格符:空格、水平制表符、換行等不能顯示的字符:空(null)字符(以‘\0’表示)、警告(以‘\a’表示)、退格(以‘\b’表示)、回車(以‘\r’表示)等字符型數(shù)據(jù)1、字符常量定義:用單引號(hào)括起來(lái)的單個(gè)普通字符或轉(zhuǎn)義字符.
字符常量的值:該字符的ASCII碼值<轉(zhuǎn)義字符及其含義:轉(zhuǎn)義字符含義\n\v\r\a\’\033\t\b\f\\\’’\0xee轉(zhuǎn)義字符含義換行垂直制表回車響鈴單引號(hào)2位8進(jìn)制數(shù)代表的字符水平制表退格換頁(yè)反斜線雙引號(hào)2位16進(jìn)制數(shù)代表的字符如‘\101’-----------‘A’‘\012’-----------’\n’‘\376’-----------’’‘\x61’-----------’a’例:‘A’-------’\101’-------’\x41’--------65<如‘A’——65,‘a(chǎn)’——97,
‘0’——48,‘\n’——10如‘a(chǎn)’‘A’‘?’‘\n’‘\101’轉(zhuǎn)義字符:反斜線后面跟一個(gè)字符或一個(gè)代碼值表示<轉(zhuǎn)義字符及其含義:轉(zhuǎn)義字符含義\n\v\r\a\’\ddd\t\b\f\\\’’\xhh轉(zhuǎn)義字符含義換行垂直制表回車響鈴單引號(hào)3位8進(jìn)制數(shù)代表的字符水平制表退格換頁(yè)反斜線雙引號(hào)2位16進(jìn)制數(shù)代表的字符<例轉(zhuǎn)義字符舉例(ch2_001.c,ch2_004.c)
#include<stdio.h>voidmain(){printf(“~ab~c\t~de\rf\tg\n");printf(“h\ti\b\bj~k\n");}運(yùn)行結(jié)果:fab~c~~~gdeh~~~~~~jik屏幕顯示結(jié)果:f~~~~~~~gdeh~~~~~~j~k(1)用單引號(hào)包含的一個(gè)字符是字符型常量(2)只能包含一個(gè)字符例‘a(chǎn)’,’A’,‘1’‘a(chǎn)bc’、“a”字符’1’和整數(shù)1是不同的概念:字符’1’只是代表一個(gè)形狀為’1’的符號(hào),在需要時(shí)按原樣輸出,在內(nèi)存中以ASCII碼形式存儲(chǔ),占1個(gè)字節(jié)整數(shù)1是以整數(shù)存儲(chǔ)方式(二進(jìn)制補(bǔ)碼方式)存儲(chǔ)的,占2個(gè)或4個(gè)字節(jié)0011000100000000000000012、字符變量字符型變量用來(lái)存放字符常量,注意只能放一個(gè)字符。字符變量的定義形式如下:charc1,c2;
可以用下面語(yǔ)句對(duì)c1,c2賦值:
c1=‘a(chǎn)’;c2=‘b’
;在所有的編譯系統(tǒng)中都規(guī)定以一個(gè)字節(jié)來(lái)存放一個(gè)字符,因此,一個(gè)字符變量在內(nèi)存中占一個(gè)字節(jié)。
<>注:?jiǎn)我?hào)只是作為定界符使用,并不是字符常量的組成部分3.2.4字符型數(shù)據(jù)例如:charc=’?’;
系統(tǒng)把“?”的ASCII代碼63賦給變量cprintf(”%d%c\n”,c,c);輸出結(jié)果是:63?字符數(shù)據(jù)在內(nèi)存中的存儲(chǔ)形式及其使用方法一個(gè)字符常量存放到一個(gè)字符變量中,實(shí)際上并不是把該字符的字型放到內(nèi)存中去,而是將該字符的相應(yīng)的ASCII代碼放到存儲(chǔ)單元中。這樣使字符型數(shù)據(jù)和整型數(shù)據(jù)之間可以通用。注意:
一個(gè)字符數(shù)據(jù)既可以以字符形式輸出,也可以以整數(shù)形式輸出。例:向字符變量賦予整數(shù)。
#include<stdio.h>
voidmain()
{charc1,c2;
c1=97;
c2=98;
printf(“%c%c\n”,c1,c2);
printf(“%d%d\n”,c1,c2);
}
說(shuō)明:在第3和第4行中,將整數(shù)97和98分別賦給c1和c2,它的作用相當(dāng)于以下兩個(gè)賦值語(yǔ)句:
c1=′a′;c2=′b′;因?yàn)椤鋋′和′b′的ASCII碼為97和98運(yùn)行結(jié)果:ab
9798例:大小寫字母的轉(zhuǎn)換
#include<stdio.h>
voidmain()
{charc1,c2;
c1=’a’;
c2=’b’;
c1=c1-32;
c2=c2-32;
printf(“%c%c″,c1,c2);
}說(shuō)明:程序的作用是將兩個(gè)小寫字母a和b轉(zhuǎn)換成大寫字母A和B。從ASCII代碼表中可以看到每一個(gè)小寫字母比它相應(yīng)的大寫字母的ASCII碼大32。C語(yǔ)言允許字符數(shù)據(jù)與整數(shù)直接進(jìn)行算術(shù)運(yùn)算。
運(yùn)行結(jié)果:AB
字符類型存儲(chǔ)空間和值的范圍說(shuō)明:有些系統(tǒng)(如TurboC)將字符變量定義為signedchar型。其存儲(chǔ)單元中的最高位作為符號(hào)位,它的取值范圍是-128~127。如果在字符變量中存放一個(gè)ASCII碼為0~127間的字符,由于字節(jié)中最高位為0,因此用%d輸出字符變量時(shí),輸出的是一個(gè)正整數(shù)。如果在字符變量中存放一個(gè)ASCII碼為128~255間的字符,由于在字節(jié)中最高位為1,用%d格式符輸出時(shí),就會(huì)得到一個(gè)負(fù)整數(shù),用c%輸出則參照附錄B。
類型字節(jié)數(shù)取值范圍signedchar1-27~27-1(-128~127)unsignedchar10~28-1(0~255)字符常量與字符串常量不同字符串常量定義:用雙引號(hào)(“
”)括起來(lái)的字符序列存儲(chǔ):每個(gè)字符串尾自動(dòng)加一個(gè)‘\0’作為字符串結(jié)束標(biāo)志hello\0例字符串“hello”在內(nèi)存中a
a\0例‘a(chǎn)’“a”例空串“
”\0例:charch;ch=“A”;
例:charch;ch=‘A’;
3.2.5浮點(diǎn)型數(shù)據(jù)float型(單精度浮點(diǎn)型)編譯系統(tǒng)為float型變量分配4個(gè)字節(jié)浮點(diǎn)型數(shù)據(jù)是用來(lái)表示具有小數(shù)點(diǎn)的實(shí)數(shù)1、浮點(diǎn)型常量的表示方法兩種表示形式小數(shù)形式:指數(shù)形式:0.1233e-3十進(jìn)制小數(shù)形式:(必須有小數(shù)點(diǎn))如0.123,123.0,0.0,123.指數(shù)形式:(用字母e和E代表以10為底的指數(shù);e或E之前必須有數(shù)字;e后面的指數(shù)必須為整數(shù))如12.3e3,123E2,1.23e4,e-5,1.2E-3.51、浮點(diǎn)型常量的表示方法兩種表示形式小數(shù)形式:指數(shù)形式:0.1233e-3注意:字母e(或E)之前必須有數(shù)字,且e后面的指數(shù)必須為整數(shù)1e3、1.8e-3、-123e-6、-.1e-3e3、2.1e3.5、.e3、e
標(biāo)準(zhǔn)化(規(guī)范化)的指數(shù)形式:把小數(shù)部分中小數(shù)點(diǎn)前的數(shù)字為0,小數(shù)點(diǎn)后第1位數(shù)字不為0的表示形式稱為規(guī)范化指數(shù)形式。例如:123.456可以表示為:
123.456e0,12.3456e1,1.23456e2,0.123456e3,0.0123456e4,0.00123456e
其中的0.123456e003稱為“標(biāo)準(zhǔn)化(規(guī)范化)的指數(shù)形式”。標(biāo)準(zhǔn)化(規(guī)范化)的指數(shù)形式:把小數(shù)部分中小數(shù)點(diǎn)前的數(shù)字為0,小數(shù)點(diǎn)后第1位數(shù)字不為0的表示形式稱為規(guī)范化指數(shù)形式。實(shí)數(shù)在計(jì)算機(jī)內(nèi)存中按照標(biāo)準(zhǔn)化指數(shù)形式存儲(chǔ)。因?yàn)橄到y(tǒng)存儲(chǔ)實(shí)數(shù)時(shí),會(huì)為該位開辟一段固定大小的空間,如果允許該位為0,則表明系統(tǒng)白白浪費(fèi)了這部分空間,不利于提高所存儲(chǔ)數(shù)據(jù)的精確度和表示范圍。例如:123.456可以表示為:
123.456e0,12.3456e1,1.23456e2,0.123456e3,0.0123456e4,0.00123456e
其中的0.123456e003稱為“標(biāo)準(zhǔn)化(規(guī)范化)的指數(shù)形式”。規(guī)范化的指數(shù)輸出形式:
在字母e(或E)之前的小數(shù)部分中,小數(shù)點(diǎn)左邊應(yīng)有一位(且只能有一位)非零的數(shù)字.一個(gè)實(shí)數(shù)在用指數(shù)形式輸出時(shí),是按規(guī)范化的指數(shù)形式輸出的。例如,指定實(shí)數(shù)1234.56按指數(shù)形式(%e格式)輸出,輸出的形式只能是1.23456+003,而不會(huì)是0.123456e+004或12.3456e+002.2、浮點(diǎn)型變量(1)浮點(diǎn)型數(shù)據(jù)在內(nèi)存中的存放形式
一個(gè)浮點(diǎn)型數(shù)據(jù)一般在內(nèi)存中占4個(gè)字節(jié)(32位)。與整型數(shù)據(jù)的存儲(chǔ)方式不同,浮點(diǎn)型數(shù)據(jù)是按照指數(shù)形式存儲(chǔ)的。系統(tǒng)把一個(gè)浮點(diǎn)型數(shù)據(jù)分成小數(shù)部分和指數(shù)部分,分別存放。指數(shù)部分采用規(guī)范化的指數(shù)形式。編譯系統(tǒng)確定各自占的位數(shù)小數(shù)部分占的越多,精度越高,指數(shù)部分占的越多,范圍越大類型位數(shù)數(shù)的范圍有效數(shù)字float32
0及1.2*10-38~3.4*1038
6-7位double型64
0及2.3*10-308~1.7*10308
15-16位longdouble640及2.3*10-308~1.7*1030815-16位(2)浮點(diǎn)型變量的分類浮點(diǎn)型變量分為單精度(float型)、雙精度(double型)和長(zhǎng)雙精度型(longdouble)三類形式。
1280及3.4*10-4932~1.1*10493219位longdouble浮點(diǎn)型數(shù)據(jù)的舍入誤差
#include<stdio.h>
voidmain()
{floata,b;
a=123456.789e5;
b=a+20;
printf(“%e\n”,b);
}
說(shuō)明:一個(gè)浮點(diǎn)型變量只能保證的有效數(shù)字是6-7位有效數(shù)字,后面的數(shù)字是無(wú)意義的,并不準(zhǔn)確地表示該數(shù)。應(yīng)當(dāng)避免將一個(gè)很大的數(shù)和一個(gè)很小的數(shù)直接相加或相減,否則就會(huì)“丟失”小的數(shù)運(yùn)行結(jié)果:1.234568e+010浮點(diǎn)型常量的類型
C編譯系統(tǒng)將浮點(diǎn)型常量作為雙精度來(lái)處理。
例如:f=2.45678*4523.65
系統(tǒng)先把2.45678和4523.65作為雙精度數(shù),然后進(jìn)行相乘的運(yùn)算,得到的乘也是一個(gè)雙精度數(shù)。最后取其前7位賦給浮點(diǎn)型變量f。如是在數(shù)的后面加字母f或F(如1.65f,654.87F),這樣編譯系統(tǒng)就會(huì)把它們按單精度(32位)處理。3.2.6怎樣確定常量的類型整型常量:不帶小數(shù)點(diǎn)的數(shù)值系統(tǒng)根據(jù)數(shù)值的大小確定int型還是long型等字符常量:由單撇號(hào)括起來(lái)的單個(gè)字符或轉(zhuǎn)義字符浮點(diǎn)型常量:凡以小數(shù)形式或指數(shù)形式出現(xiàn)的實(shí)數(shù)C編譯系統(tǒng)把浮點(diǎn)型常量都按雙精度處理分配8個(gè)字節(jié)C運(yùn)算符算術(shù)運(yùn)算符:(+-*/%++--)關(guān)系運(yùn)算符:(<<===>>=!=)邏輯運(yùn)算符:((!&&||)位運(yùn)算符:(<<>>~|^&)賦值運(yùn)算符:(=及其擴(kuò)展)條件運(yùn)算符:(?:)逗號(hào)運(yùn)算符:(,)指針運(yùn)算符:(*&)求字節(jié)數(shù):(sizeof)強(qiáng)制類型轉(zhuǎn)換:(類型)分量運(yùn)算符:(.->)下標(biāo)運(yùn)算符:([])其它:(()-)<>3.2.7運(yùn)算符和表達(dá)式學(xué)習(xí)運(yùn)算符應(yīng)注意:運(yùn)算符功能與運(yùn)算量關(guān)系要求運(yùn)算量個(gè)數(shù)要求運(yùn)算量類型運(yùn)算符優(yōu)先級(jí)別結(jié)合方向結(jié)果的類型<>算術(shù)運(yùn)算符和算術(shù)表達(dá)式基本算術(shù)運(yùn)算符:+-*/%結(jié)合方向:從左向右優(yōu)先級(jí):----->*/%----->+-(2)(3)(4) 說(shuō)明:“-”可為單目運(yùn)算符時(shí),右結(jié)合性兩整數(shù)相除,結(jié)果為整數(shù);有負(fù)值時(shí),采取“向零取整”方法;%要求兩側(cè)均為整型數(shù)據(jù)參加+、-、*、/運(yùn)算的兩個(gè)數(shù)中若有一個(gè)數(shù)為實(shí)型,則結(jié)果是double型;例5/2=-5/2=5/2.0=例5%2=1%10=
5%1=5.5%2<>例
5/2=2
-5/2=-25/2.0=2.5例5%2=1
1%10=
1
5%1=
05.5%2()2、自增、自減運(yùn)算符++--作用:使變量值加1或減1種類:前置
++i,--i等價(jià)于i=i+1(先執(zhí)行i+1或i-1,再使用i值)后置
i++,i--等價(jià)于i=i+1(先使用i值,再執(zhí)行i+1或i-1)例j=3;k=++j;j=3;k=j++;j=3;printf(“%d”,++j);j=3;printf(“%d”,j++);a=3;b=5;c=(++a)*b;a=3;b=5;c=(a++)*b;<>//k=4,j=4//k=3,j=4//4//3//c=20,a=4//c=15,a=4自增、自減運(yùn)算符++--作用:使變量值加1或減1種類:前置++i,--i(先執(zhí)行i+1或i-1,再使用i值)后置i++,i--(先使用i值,再執(zhí)行i+1或i-1)說(shuō)明:++--不能用于常量和表達(dá)式,如5++,(a+b)++++--結(jié)合方向:自右向左優(yōu)先級(jí):-++-------->*/%----->+-
(2)(3)(4)例-i++-(i++)i=3;printf(“%d”,-i++);//-3
例-i++i=3;printf(“%d”,-i++);
3、
算術(shù)表達(dá)式和運(yùn)算符的優(yōu)先級(jí)與結(jié)合性:
用算術(shù)運(yùn)算符和括號(hào)將運(yùn)算對(duì)象(也稱操作數(shù))連接起來(lái)的、符合C語(yǔ)法規(guī)則的式子,稱為C算術(shù)表達(dá)式。運(yùn)算對(duì)象包括常量、變量、函數(shù)等。
例如:
a*b/c-1.5+′a′
是一個(gè)合法的表達(dá)式。C語(yǔ)言規(guī)定了運(yùn)算符的優(yōu)先級(jí)和結(jié)合性。在表達(dá)式求值時(shí),先按運(yùn)算符的優(yōu)先級(jí)別高低次序執(zhí)行,例如先乘除后加減。C規(guī)定了各種運(yùn)算符的結(jié)合方向(結(jié)合性)
算術(shù)運(yùn)算符的結(jié)合方向?yàn)椤白宰笾劣摇?,即先左后右。隱式轉(zhuǎn)換什么情況下發(fā)生運(yùn)算轉(zhuǎn)換------不同類型數(shù)據(jù)混合運(yùn)算時(shí)賦值轉(zhuǎn)換------把一個(gè)值賦給與其類型不同的變量時(shí)輸出轉(zhuǎn)換------輸出時(shí)轉(zhuǎn)換成指定的輸出格式函數(shù)調(diào)用轉(zhuǎn)換------實(shí)參與形參類型不一致時(shí)轉(zhuǎn)換運(yùn)算轉(zhuǎn)換規(guī)則:不同類型數(shù)據(jù)運(yùn)算時(shí)先自動(dòng)轉(zhuǎn)換成同一類型<>4.不同類型數(shù)據(jù)間的混合運(yùn)算:(1)+、-、*、/運(yùn)算的兩個(gè)數(shù)中有一個(gè)數(shù)為float或double型,結(jié)果是double型。系統(tǒng)將float型數(shù)據(jù)都先轉(zhuǎn)換為double型,然后進(jìn)行運(yùn)算(2)如果int型與float或double型數(shù)據(jù)進(jìn)行運(yùn)算,先把int型和float型數(shù)據(jù)轉(zhuǎn)換為double型,然后進(jìn)行運(yùn)算,結(jié)果是double型(3)字符型數(shù)據(jù)與整型數(shù)據(jù)進(jìn)行運(yùn)算,就是把字符的ASCII代碼與整型數(shù)據(jù)進(jìn)行運(yùn)算doublefloatlongunsignedintchar,short低高說(shuō)明:必定的轉(zhuǎn)換運(yùn)算對(duì)象類型不同時(shí)轉(zhuǎn)換例charch;inti;floatf;doubled;ch/i+f*d-(f+i)intintdoubledoubledoubledoubledoubledoubleintintdoubledoubledoubledoubledoubledouble10+‘a(chǎn)’+i*f-d/l例inti;floatf;doubled;longl;<>
例3.3給定一個(gè)大寫字母,要求用小寫字母輸出。解題思路:關(guān)鍵是找到大、小寫字母間的內(nèi)在聯(lián)系同一個(gè)字母,用小寫表示的字符的ASCII代碼比用大寫表示的字符的ASCII代碼大32#include<stdio.h>intmain(){charc1,c2;c1=’A’;
c2=c1+32;
printf("%c\n",c2);printf(”%d\n”,c2);return0;}將字符‘A’的ASCII代碼65放到c1中將65+32的結(jié)果放到c2中用字符形式輸出用十進(jìn)制形式輸出5.強(qiáng)制類型轉(zhuǎn)換運(yùn)算符顯式轉(zhuǎn)換(強(qiáng)制轉(zhuǎn)換)一般形式:(類型名)(表達(dá)式)例(int)(x+y)(int)x+y(double)(3/2)(int)3.6說(shuō)明:強(qiáng)制轉(zhuǎn)換得到所需類型的中間變量,原變量類型不變例voidmain(){floatx;inti;x=3.6;i=(int)x;printf(“x=%f,i=%d”,x,i);}結(jié)果:x=3.600000,i=3精度損失問(wèn)題較高類型向較低類型轉(zhuǎn)換時(shí)可能發(fā)生<>6.C運(yùn)算符(1)算術(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)算符
(sizeof)(10)強(qiáng)制類型轉(zhuǎn)換運(yùn)算符
((類型))(11)成員運(yùn)算符
(.->)(12)下標(biāo)運(yùn)算符
([
])(13)其他
(如函數(shù)調(diào)用運(yùn)算符())求字節(jié)數(shù)運(yùn)算符
(sizeof)用法#include<stdio.h>voidmain(){ inta; floatb; doublec; chard;printf("%d\n%d\n%d\n%d\n",sizeof(a),sizeof(b),sizeof(c),sizeof(d));}知識(shí)回顧標(biāo)識(shí)符的命名要求滿足什么條件?如何定義一個(gè)整型變量a?int、char、float在VC++6.0系統(tǒng)中各占多少個(gè)字節(jié)?int表示數(shù)的范圍?整型數(shù)據(jù)在內(nèi)存中如何存放?12.3456e3是否是規(guī)范化的指數(shù)形式?3.3C語(yǔ)句3.3.1C語(yǔ)句的作用和分類3.3.2最基本的語(yǔ)句----賦值語(yǔ)句圖3.14C程序結(jié)構(gòu)圖3.3.1 C語(yǔ)句的作用和分類一個(gè)C程序可以由若干個(gè)源程序文件組成一個(gè)源文件可以由若干個(gè)函數(shù)和預(yù)處理命令以及全局變量聲明部分組成一個(gè)函數(shù)由函數(shù)首部和函數(shù)體組成函數(shù)體由數(shù)據(jù)聲明和執(zhí)行語(yǔ)句組成C語(yǔ)句分為5類控制語(yǔ)句函數(shù)調(diào)用語(yǔ)句表達(dá)式語(yǔ)句空語(yǔ)句復(fù)合語(yǔ)句(一)控制語(yǔ)句完成一定的控制功能
(1)if(
)…else…
條件語(yǔ)句
(2)for(
)…
循環(huán)語(yǔ)句
(3)while(
)…
循環(huán)語(yǔ)句
(4)do…while(
)
循環(huán)語(yǔ)句
(5)continue
結(jié)束本次循環(huán)語(yǔ)句
(6)break中止執(zhí)行switch或循環(huán)語(yǔ)句
(7)
switch()多分支選擇語(yǔ)句
(8)
return從函數(shù)返回語(yǔ)句(9)
goto轉(zhuǎn)向語(yǔ)句上面9種語(yǔ)句中的括號(hào)“()”表示括號(hào)中是一個(gè)判別條件,“…”表示內(nèi)嵌的語(yǔ)句。例如:“if()…else…”的具體語(yǔ)句可以寫成:“if(x>y)z=x;elsez=y;”(二)函數(shù)調(diào)用語(yǔ)句由一個(gè)函數(shù)調(diào)用加一個(gè)分號(hào)構(gòu)成。
printf(“ThisisaCstatement.”);例:(三)表達(dá)式語(yǔ)句由一個(gè)表達(dá)式加一個(gè)分號(hào)構(gòu)成。
a=3;例:分號(hào)賦值表達(dá)式表達(dá)式語(yǔ)句+=(四)空語(yǔ)句只有一個(gè)分號(hào)的語(yǔ)句
;
(什么也不做)用來(lái)做流程的轉(zhuǎn)向點(diǎn)用來(lái)作為循環(huán)語(yǔ)句中的循環(huán)體(五)復(fù)合語(yǔ)句用一對(duì){}括起來(lái)的語(yǔ)句
{ z=x+y; t=z/100; printf(“%f”,t); }例:3.3.2最基本的語(yǔ)句----賦值語(yǔ)句在C程序中,最常用的語(yǔ)句是:賦值語(yǔ)句輸入輸出語(yǔ)句其中最基本的是賦值語(yǔ)句解題思路:假設(shè)給定的三個(gè)邊符合構(gòu)成三角形的條件關(guān)鍵是找到求三角形面積的公式公式為:其中s=(a+b+c)/2
例3.4給出三角形的三邊長(zhǎng),求三角形面積#include<stdio.h>#include<math.h>intmain(){doublea,b,c,s,area;a=3.67;b=5.43;c=6.21;s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));printf("a=%f\tb=%f\t%f\n",a,b,c);printf("area=%f\n",area);return0;}對(duì)邊長(zhǎng)a、b、c賦值計(jì)算s計(jì)算area#include<stdio.h>#include<math.h>intmain(){doublea,b,c,s,area;a=3.67;b=5.43;c=6.21;s=(a+b+c)/2; area=sqrt(s*(s-a)*(s-b)*(s-c));printf("a=%f\tb=%f\t%f\n",a,b,c);printf("area=%f\n",area);return0;}數(shù)學(xué)函數(shù),計(jì)算平方根調(diào)用數(shù)學(xué)函數(shù)加此行#include<stdio.h>#include<math.h>intmain(){doublea,b,c,s,area;a=3.67;b=5.43;c=6.21;s=(a+b+c)/2; area=sqrt(s*(s-a)*(s-b)*(s-c));printf("a=%f\tb=%f\t%f\n",a,b,c);printf("area=%f\n",area);return0;}轉(zhuǎn)義字符,使輸出位置跳到下一個(gè)tab位置調(diào)用數(shù)學(xué)函數(shù)加此行1、賦值運(yùn)算符和表達(dá)式1)簡(jiǎn)單賦值運(yùn)算符符號(hào):=格式:變量標(biāo)識(shí)符=表達(dá)式作用:將一個(gè)數(shù)據(jù)(常量或表達(dá)式)賦給一個(gè)變量2)復(fù)合賦值運(yùn)算符種類:+=-=*=/=%=《=》=&=^=|=含義:exp1op=exp2
exp1=exp1opexp2a+=3a=a+3x*=y+8x=x*(y+8)x%=3x=x%3<>例a=3;d=func();c=d+2;為便于記憶,可以這樣理解:①a+=b(其中a為變量,b為表達(dá)式)②a+=b(將有下劃線的“a+”移到“=”右側(cè))
|___↑③a=a+b(在“=”左側(cè)補(bǔ)上變量名a)注意:如果b是包含若干項(xiàng)的表達(dá)式,則相當(dāng)于它有括號(hào)。如:
①x%=y+3
②x%=(y+3)|__↑
③x=x%(y+3)(不要錯(cuò)寫成x=x%y+3)
凡是二元(二目)運(yùn)算符,都可以與賦值符一起組合成復(fù)合賦值符。C語(yǔ)言規(guī)定可以使用10種復(fù)合賦值運(yùn)算符:+=,-=,*=,/=,%=,<<=,>>=,&=,∧=,|=賦值表達(dá)式的寫法由賦值運(yùn)算符將一個(gè)變量和一個(gè)表達(dá)式連接起來(lái)的式子稱為“賦值表達(dá)式”。一般形式為:
<變量><賦值運(yùn)算符><表達(dá)式>
例如:“a=5”是一個(gè)賦值表達(dá)式
對(duì)賦值表達(dá)式求解的過(guò)程是:
①求賦值運(yùn)算符右側(cè)的“表達(dá)式”的值;②賦給賦值運(yùn)算符左側(cè)的變量。例如:賦值表達(dá)式“a=3*5”的值為15,執(zhí)行表達(dá)式后,變量a的值也是15。
注意:一個(gè)表達(dá)式應(yīng)該有一個(gè)值
左值(lvalue)
:賦值運(yùn)算符左側(cè)的標(biāo)識(shí)符變量可以作為左值;而表達(dá)式就不能作為左值(如a+b);常變量也不能作為左值,
右值(lvalue)
:出現(xiàn)在賦值運(yùn)算符右側(cè)的表達(dá)式
左值也可以出現(xiàn)在賦值運(yùn)算符右側(cè),因而左值都可以作為右值。
賦值表達(dá)式中的“表達(dá)式”,又可以是一個(gè)賦值表達(dá)式。例如:a=(b=5)
分析:括弧內(nèi)的“b=5”是一個(gè)賦值表達(dá)式,它的值等于5。執(zhí)行表達(dá)式“a=(b=5)”相當(dāng)于執(zhí)行“b=5”和“a=b”兩個(gè)賦值表達(dá)式。賦值運(yùn)算符按照“自右而左”的結(jié)合順序,因此,“(b=5)”外面的括弧可以不要,即“a=(b=5)”和“a=b=5”等價(jià)。請(qǐng)分析下面的賦值表達(dá)式∶(a=3*5)=4*3分析:先執(zhí)行括弧內(nèi)的運(yùn)算,將15賦給a,然后執(zhí)行4*3的運(yùn)算,得12,再把12賦給a。最后a的值為12,整個(gè)表達(dá)式的值為12??梢钥吹健?a=3*5)出現(xiàn)在賦值運(yùn)算符的左側(cè),因此賦值表達(dá)式(a=3*5)是左值注意:在對(duì)賦值表達(dá)式(a=3*5)求解后,變量a得到值15執(zhí)行(a=3*5)=4*3時(shí),實(shí)際上是將4*3的積12賦給變量a,而不是賦給3*5。不能寫成:a=3*5=4*3賦值表達(dá)式也可以包含復(fù)合的賦值運(yùn)算符。
如:a+=a-=a*a分析:此賦值表達(dá)式的求解步驟如下∶①先進(jìn)行“a-=a*a”的運(yùn)算,它相當(dāng)于a=a-a*a,a的值為12-144=-132。②再進(jìn)行“a+=-132”的運(yùn)算,相當(dāng)于a=a+(-132),a的值為-132-132=-264。
將賦值表達(dá)式作為表達(dá)式的一種,使賦值操作不僅可以出現(xiàn)在賦值語(yǔ)句中,而且可以以表達(dá)式形式出現(xiàn)在其他語(yǔ)句(如輸出語(yǔ)句、循環(huán)語(yǔ)句等)中。如:printf("%d",a=b);
分析:如果b的值為3,則輸出a的值(也是表達(dá)式a=b的值)為3。在一個(gè)語(yǔ)句中完成了賦值和輸出雙重功能。
4、賦值過(guò)程中的類型轉(zhuǎn)換
如果賦值運(yùn)算符兩側(cè)的類型不一致,但都是數(shù)值型或字符型時(shí),在賦值時(shí)要進(jìn)行類型轉(zhuǎn)換。①將浮點(diǎn)型數(shù)據(jù)(包括單、雙精度)賦給整型變量時(shí),舍棄浮點(diǎn)數(shù)的小數(shù)部分。如:i為整型變量,執(zhí)行“i=3.56”的結(jié)果是使i的值為3,以整數(shù)形式存儲(chǔ)在整型變量中.
②將整型數(shù)據(jù)賦給單、雙精度變量時(shí),數(shù)值不變,但以浮點(diǎn)數(shù)形式存儲(chǔ)到變量中
如:
將23賦給float變量f,即執(zhí)行f=23,先將23轉(zhuǎn)換成23.00000,再存儲(chǔ)在f中。將23賦給double型變量d,即執(zhí)行d=23,系統(tǒng)將23補(bǔ)足有效位數(shù)字為23.00000000000000,然后以雙精度浮點(diǎn)數(shù)形式存儲(chǔ)到變量d中。
③將一個(gè)double型數(shù)據(jù)賦給float變量時(shí),截取其前面7位有效數(shù)字,存放到float變量的存儲(chǔ)單元(4個(gè)字節(jié))中。但應(yīng)注意數(shù)值范圍不能溢出。
如:floatf;doubled=123.456789e100;f=d;
就出現(xiàn)溢出的錯(cuò)誤。
如果將一個(gè)float型數(shù)據(jù)賦給double變量時(shí),數(shù)值不變,有效位數(shù)擴(kuò)展到16位,在內(nèi)存中以8個(gè)字節(jié)存儲(chǔ)④字符型數(shù)據(jù)賦給整型變量時(shí),由于字符只占1個(gè)字節(jié),而整型變量為2個(gè)字節(jié),因此將字符數(shù)據(jù)(8?jìng)€(gè)二進(jìn)位)放到整型變量存儲(chǔ)單元的低8位中。第一種情況:低位對(duì)應(yīng)、高位補(bǔ)零
若所用系統(tǒng)將字符處理為無(wú)符號(hào)字符類型,或程序已將字符變量定義為unsignedchar型,則將字符的8位放到整型變量低8位,高8位補(bǔ)零。例如:將字符‘\376’賦給int型變量i第二種情況:符號(hào)擴(kuò)展
若所用系統(tǒng)(如TurboC++)將字符處理為帶符號(hào)(signedchar)時(shí),若字符最高位為0,則整型變量高8位補(bǔ)0;若字符最高位為1,則高8位全補(bǔ)1。這稱為“符號(hào)擴(kuò)展”,這樣做的目的是使數(shù)值保持不變,如變量c(字符‘\376’)以整數(shù)形式輸出為-2,i的值也是-2。⑤將一個(gè)int、short、long型數(shù)據(jù)賦給一個(gè)char型變量時(shí),只將其低8位原封不動(dòng)地送到char型變量(即截?cái)啵@纾篿nti=289;charc=′a′;c=i;c的值為33,如果用“%c”輸出c,將得到字符“!”!的ASCII碼為33。
賦值情況:將帶符號(hào)的整型數(shù)據(jù)(int型)賦給long型變量時(shí),要進(jìn)行符號(hào)擴(kuò)展,將整型數(shù)的16位送到long型低16位中:如果int型數(shù)據(jù)為正值(符號(hào)位為0),則long型變量的高16位補(bǔ)0;如果int型變量為負(fù)值(符號(hào)位為1),則long型變量的高16位補(bǔ)1,以保持?jǐn)?shù)值不改變。反之,若將一個(gè)long型數(shù)據(jù)賦給一個(gè)int型變量,只將long型數(shù)據(jù)中低16位原封不動(dòng)地送到整型變量(即截?cái)啵?。例如:inta;longb=8;a=b;
賦值情況如下
:如果b=65536(八進(jìn)制數(shù)0200000),則賦值后a值為0。⑦將unsignedint型數(shù)據(jù)賦給longint型變量時(shí),不存在符號(hào)擴(kuò)展問(wèn)題,只需將高位補(bǔ)0即可。將一個(gè)unsigned類型數(shù)據(jù)賦給一個(gè)占字節(jié)數(shù)相同的非unsigned型整型變量(例如:unsignedint->int,unsignedlong->long,unsignedshort->short),將unsigned型變量的內(nèi)容原樣送到非unsigned型變量中,但如果數(shù)據(jù)范圍超過(guò)相應(yīng)整型的范圍,則會(huì)出現(xiàn)數(shù)據(jù)錯(cuò)誤。例如:unsignedinta=65535;intb;b=a;將a整個(gè)送到b中,由于b是int,第1位是符號(hào)位,因此b成了負(fù)數(shù)。根據(jù)補(bǔ)碼知識(shí)可知,b的值為-1,可以用printf(″%d″,b);來(lái)驗(yàn)證。
⑧將非unsigned型數(shù)據(jù)賦給長(zhǎng)度相同的unsigned型變量,也是原樣照賦(符號(hào)位也作為數(shù)值一起傳送)。例:有符號(hào)數(shù)據(jù)傳送給無(wú)符號(hào)變量。
#include<stdio.h>
voidmain()
{unsigneda;
intb=-1;
a=b;
print(″%u\n″,a);
}
說(shuō)明:“%u”是輸出無(wú)符號(hào)數(shù)時(shí)所用的格式符。如果b為正值,且在0~32767之間,則賦值后數(shù)值不變。運(yùn)行結(jié)果:65535
說(shuō)明:結(jié)合方向:自右向左優(yōu)先級(jí):14左側(cè)必須是變量,不能是常量或表達(dá)式賦值表達(dá)式的值與變量值相等,且可嵌套賦值轉(zhuǎn)換規(guī)則:使賦值號(hào)右邊表達(dá)式值自動(dòng)轉(zhuǎn)換成其左邊變量的類型例3=x-2*y;a+b=3;例
floatf;inti;i=10;f=i;則
f=10.0例inti;i=2.56;//結(jié)果i=2;例:a=b=c=5a=(b=5)a=5+(c=6)a=(b=4)+(c=6)a=(b=10)/(c=2)<>//表達(dá)式值為5,a,b,c值為5//b=5;a=5//表達(dá)式值11,c=6,a=11//表達(dá)式值10,a=10,b=4,c=6//表達(dá)式值5,a=5,b=10,c=2賦值運(yùn)算符和賦值表達(dá)式小結(jié)例:
inta;
a=2;a+=a*=3;例:
inta=2;a%=4-1;a+=a*=a-=a*=3;<>//a=12等價(jià)于a=a+(a=a*3)等價(jià)于a=a+(a=a*(a=a-(a=a*3)))//a=2//a=05、賦值語(yǔ)句賦值語(yǔ)句是由賦值表達(dá)式加上一個(gè)分號(hào)構(gòu)成例:a=100賦值表達(dá)式
a=100;賦值語(yǔ)句if條件中不能含有賦值語(yǔ)句,但是賦值表達(dá)式可以包含于條件表達(dá)式中,例:if(a=b)t=a;合法
if((a=b)>0)t=a;正確
if((a=b;)>0)t=a;錯(cuò)誤1:C語(yǔ)言中的賦值號(hào)“=”是一個(gè)運(yùn)算符,在其他大多數(shù)語(yǔ)言中賦值號(hào)不是運(yùn)算符。2:其他大多數(shù)高級(jí)語(yǔ)言沒(méi)有“賦值表達(dá)式”這一概念。問(wèn)題:c語(yǔ)言中的賦值語(yǔ)句與其他高級(jí)語(yǔ)言的賦值語(yǔ)句有什么不同點(diǎn)?
(1)C語(yǔ)言允許在定義變量的同時(shí)使變量初始化。如:inta=3;
floatf=3.56;
charc=‘a(chǎn)’;
(2)可以使被定義的變量的一部分賦初值。如:
inta,b,c=5;表示指定a、b、c為整型變量,但只對(duì)c初始化,c的初值為5(3)如果對(duì)幾個(gè)變量賦以同一個(gè)初值,應(yīng)寫成:inta=3,b=3,c=3;表示a、b、c的初值都是3。
不能寫成∶
inta=b=c=3;
注意:初始化不是在編譯階段完成的,而是在程序運(yùn)行時(shí)執(zhí)行本函數(shù)時(shí)賦初值的,相當(dāng)于有一個(gè)賦值語(yǔ)句。
例如:inta=3;相當(dāng)于inta;a=3;3.4數(shù)據(jù)的輸入輸出3.4.1輸入輸出舉例3.4.2有關(guān)數(shù)據(jù)輸入輸出的概念3.4.3用printf函數(shù)輸出數(shù)據(jù)3.4.4用scanf函數(shù)輸入數(shù)據(jù)3.4.5字符數(shù)據(jù)的輸入輸出3.4.1輸入輸出舉例例3.5求
方程的根。a、b、c由鍵盤輸入
設(shè)
>0解題思路:首先要知道求方程式的根的方法。由數(shù)學(xué)知識(shí)已知:如果
≥0,則一元二次方程有兩個(gè)實(shí)根:若記#include<stdio.h>#include<math.h>intmain(){doublea,b,c,disc,x1,x2,p,q;
scanf("%lf%lf%lf",&a,&b,&c);disc=b*b-4*a*c;p=-b/(2.0*a);q=sqrt(disc)/(2.0*a);x1=p+q;x2=p-q;
printf("x1=%7.2f\nx2=%7.2f\n",x1,x2);return0;}程序中調(diào)用數(shù)學(xué)函數(shù)sqrt輸入a,b,c的值#include<stdio.h>#include<math.h>intmain(){doublea,b,c,disc,x1,x2,p,q;
scanf("%lf%lf%lf",&a,&b,&c);disc=b*b-4*a*c;p=-b/(2.0*a);q=sqrt(disc)/(2.0*a);x1=p+q;x2=p-q;
printf("x1=%7.2f\nx2=%7.2f\n",x1,x2);return0;}輸入的是雙精度型實(shí)數(shù)#include<stdio.h>#include<math.h>intmain(){doublea,b,c,disc,x1,x2,p,q;
scanf("%lf%lf%lf",&a,&b,&c);disc=b*b-4*a*c;p=-b/(2.0*a);q=sqrt(disc)/(2.0*a);x1=p+q;x2=p-q;
printf("x1=%7.2f\nx2=%7.2f\n",x1,x2);return0;}要求輸入3個(gè)實(shí)數(shù)自動(dòng)轉(zhuǎn)成實(shí)數(shù)后賦給a,b,c#include<stdio.h>#include<math.h>intmain(){doublea,b,c,disc,x1,x2,p,q;
scanf("%lf%lf%lf",&a,&b,&c);disc=b*b-4*a*c;p=-b/(2.0*a);q=sqrt(disc)/(2.0*a);x1=p+q;x2=p-q;
printf("x1=%7.2f\nx2=%7.2f\n",x1,x2);return0;}輸出數(shù)據(jù)占7列,其中小數(shù)占2列3.4.2有關(guān)數(shù)據(jù)輸入輸出的概念幾乎每一個(gè)C程序都包含輸入輸出輸入輸出是程序中最基本的操作之一(一)所謂輸入輸出是以計(jì)算機(jī)主機(jī)為主體而言的輸出:從計(jì)算機(jī)向外部輸出設(shè)備(顯示器,打印機(jī))輸出數(shù)據(jù)。輸入:從輸入設(shè)備(鍵盤,鼠標(biāo),掃描儀)向計(jì)算機(jī)輸入數(shù)據(jù)。(二)C語(yǔ)言本身不提供輸入輸出語(yǔ)句,輸入和輸出操作是由C函數(shù)庫(kù)中的函數(shù)來(lái)實(shí)現(xiàn)的。例如:字符輸入函數(shù):getchar字符輸出函數(shù):putchar格式輸入函數(shù):scanf
格式輸出函數(shù):printf字符串輸入函數(shù):gets
字符串輸出函數(shù):puts(三)在使用系統(tǒng)庫(kù)函數(shù)時(shí),要用預(yù)編譯命令“#include”將有關(guān)的“頭文件”包括到用戶源文件中。例如:
在調(diào)用標(biāo)準(zhǔn)輸入輸出庫(kù)函數(shù)時(shí),文件開頭應(yīng)該有:
#include“stdio.h”或#include<stdio.h>
stdio.h是standardinput&output的縮寫,它包含了與標(biāo)準(zhǔn)I/O庫(kù)有關(guān)的變量定義和宏定義。
頭文件3.4.3用printf函數(shù)輸出數(shù)據(jù)在C程序中用來(lái)實(shí)現(xiàn)輸出和輸入的,主要是printf函數(shù)和scanf函數(shù)這兩個(gè)函數(shù)是格式輸入輸出函數(shù)用這兩個(gè)函數(shù)時(shí),必須指定格式3.4.3用printf函數(shù)輸出數(shù)據(jù)1.printf函數(shù)的一般格式printf(格式控制,輸出表列)例如:printf(”i=%d,c=%c\n”,i,c);格式聲明功能:按指定格式向終端輸出若干個(gè)任意類型的數(shù)據(jù)返值:正常,返回輸出字節(jié)數(shù);出錯(cuò),返回EOF(-1)3.4.3用printf函數(shù)輸出數(shù)據(jù)1.printf函數(shù)的一般格式printf(格式控制,輸出表列)例如:printf(”i=%d,c=%c\n”,i,c);普通字符原樣輸出3.4.3用printf函數(shù)輸出數(shù)據(jù)1.printf函數(shù)的一般格式printf(格式控制,輸出表列)例如:printf(”i=%d,c=%c\n”,i,c);可以是常量、變量或表達(dá)式2.常用格式字符d格式符。用來(lái)輸出一個(gè)有符號(hào)的十進(jìn)制整數(shù)可以在格式聲明中指定輸出數(shù)據(jù)的域?qū)抪rintf(”%5d%5d\n”,12,-345);%d輸出int型數(shù)據(jù)%ld輸出long型數(shù)據(jù)2.常用格式字符c格式符。用來(lái)輸出一個(gè)字符charch=’a’;printf(”%c”,ch);或printf(”%5c”,ch);輸出字符:a2.常用格式字符s格式符。用來(lái)輸出一個(gè)字符串printf(”%s”,”CHINA”);輸出字符串:CHINA不包含雙引號(hào)2.常用格式字符f格式符。用來(lái)輸出實(shí)數(shù),以小數(shù)形式輸出①不指定數(shù)據(jù)寬度和小數(shù)位數(shù),用%f
例3.6用%f輸出實(shí)數(shù),只能得到6位小數(shù)。doublea=1.
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 開工會(huì)議紀(jì)要內(nèi)容范文(3篇)
- 私營(yíng)企業(yè)股東合作協(xié)議書(35篇)
- 天津市重點(diǎn)校聯(lián)考2024-2025學(xué)年高一上學(xué)期期中考試歷史試題(無(wú)答案)
- 陜西省漢中市期中聯(lián)考2024-2025學(xué)年高一上學(xué)期11月期中化學(xué)試題(含答案)
- 遼寧省撫順市六校協(xié)作體2024-2025學(xué)年高一上學(xué)期期中語(yǔ)文試卷(含答案)
- 黑龍江省哈爾濱工業(yè)大學(xué)附屬中學(xué)2024-2025學(xué)年八年級(jí)上學(xué)期期中考試地理試題(含答案)
- 吉林省“BEST合作體”2023-2024學(xué)年高二年級(jí)下冊(cè)7月期末考試生物試題(解析版)
- 出口貨物運(yùn)輸代理協(xié)議樣本
- 企業(yè)員工檔案托管協(xié)議專業(yè)版
- 工程監(jiān)理勞動(dòng)合同書
- 公司燃?xì)忮仩t技術(shù)規(guī)范書
- 文化館建筑設(shè)計(jì)任務(wù)書
- 《肺功能檢測(cè)》課件
- 鋼渣熱悶工藝規(guī)程及人員崗位職責(zé)
- (中職)數(shù)控編程與操作教程全冊(cè)電子教案
- 初中 初一 語(yǔ)文 寫作《學(xué)會(huì)記事》(第一課時(shí)) 微課課件
- 一年級(jí)家訪記錄表(常用)
- 體育教師招聘技能評(píng)分標(biāo)準(zhǔn)(體育)
- 新媒體背景下的輿情引導(dǎo)和危機(jī)應(yīng)對(duì)專題培訓(xùn)課件
- 廣東開放大學(xué)大學(xué)英語(yǔ)(B)(本2022春)-Unit 2 Internet 單元練習(xí)題答案
- 反邪教知識(shí)競(jìng)賽試題題庫(kù)
評(píng)論
0/150
提交評(píng)論