版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
C程序設(shè)計基礎(chǔ)C程序設(shè)計基礎(chǔ)本章要點基本數(shù)據(jù)類型運算符和表達(dá)式主要內(nèi)容C語言程序結(jié)構(gòu)C語言的數(shù)據(jù)類型及其常量的表示法變量的定義及初始化方法運算符與表達(dá)式的概念、賦值的概念C語言的自動類型轉(zhuǎn)換和強制類型轉(zhuǎn)換主要內(nèi)容2.1C程序概述2.2基本數(shù)據(jù)類型2.3運算符與表達(dá)式2.4不同類型數(shù)據(jù)之間的轉(zhuǎn)換2.5錯誤解析2.1C程序概述2.1.1一個簡單的C程序2.1.2C語言的字符集2.1.1一個簡單的C程序例2-1一個簡單的C程序。#include"stdio.h" //include稱為文件包含命令;擴展名為.h的文件也稱為頭文件intmain() //主函數(shù)main(),函數(shù)值為整形;{ //主函數(shù)開始printf("HelloC!\n"); //輸出信息"HelloC!"并換行return(0); //程序正常結(jié)束,返回值0} //主函數(shù)結(jié)束例2-2計算兩個數(shù)的和#includestdio.hintmain() //{ intsum(intx,inty); //對被調(diào)函數(shù)sum的聲明 inta,b,c; //定義變量a、b、c scanf(“%d,%d”,&a,&b);//輸入變量a和b的值 c=sum(a,b);//調(diào)用sum函數(shù),將得到的值賦給c printf(“sum=%d\n”,c);//輸出c的值}intsum(intx,inty) //定義sum函數(shù),函數(shù)值為整形,形式參數(shù)x、y為整形{ intz; z=x+y; //將x、y的值相加賦給變量z return(z); //將z的值返回,通過sum帶回到調(diào)用函數(shù)的位置}C源程序的結(jié)構(gòu)特點一個C語言源程序可以由一個或多個函數(shù)組成。一個源程序有且只能有一個main函數(shù),即主函數(shù)。源程序中可以有預(yù)處理命令(include命令僅為其中的一種),預(yù)處理命令通常應(yīng)放在源文件或源程序的最前面。每一個說明,每一個語句都必須以分號結(jié)尾。但預(yù)處理命令,函數(shù)頭和花括號“}”之后不能加分號。2.1.2C語言的字符集字符是組成語言的最基本的元素。C語言字符集由字母,數(shù)字,空格,標(biāo)點和特殊字符組成。在字符常量,字符串常量和注釋中還可以使用漢字或其它可表示的圖形符號。C語言詞匯在C語言中使用的詞匯分為六類:標(biāo)識符,關(guān)鍵字,運算符,分隔符,常量,注釋符等。2.2基本數(shù)據(jù)類型在一個具體的C語言系統(tǒng)里,每個數(shù)據(jù)類型都有固定的表示方式,這個表示方式實際上就確定了可能表示的數(shù)據(jù)范圍和它在內(nèi)存中的存放形式。C的數(shù)據(jù)類型C語言提供了以下一些數(shù)據(jù)類型。
數(shù)據(jù)類型構(gòu)造類型指針類型空類型(無值類型)void枚舉類型enum數(shù)組類型結(jié)構(gòu)類型struct聯(lián)合類型
union基本類型整型int字符型char實型(浮點型)單精度實型
float雙精度實型
double2.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’輸入一個半徑值,分別計算圓周長、圓面積和球的體積。
#include"stdio.h"
#definePI3.14159265 /*定義一個符號常量PI*/
intmain()
{
floatr,p,a,v; /*定義實型變量r,p,a,v*/
printf("Inputrodius:");
scanf("%f",&r);
p=2*PI*r;a=PI*r*r;v=4/3*PI*r*r*r;
printrf("\nperimeter=%f,area=%f,volume=%f",p,a,v);
return(0);
}符號常量:用一個標(biāo)識符代表一個常量。符號常量的值在其作用域內(nèi)不能改變,也不能再被賦值。說明:
程序中用#define命令行定義PI代表常量3.1415926,此后凡在本文件中出現(xiàn)的PI都代表3.1415926,可以和常量一樣進(jìn)行運算說明:如再用賦值語句給PI賦值是錯的
PI=3.14;/*錯誤,不能給符號常量賦值例1符號常量的使用常量與變量變量變量代表內(nèi)存中具有特定屬性的一個存儲單元,它用來存放數(shù)據(jù),這就是變量的值,在程序運行期間,這些值是可以改變的。變量名實際上是一個以一個名字對應(yīng)代表一個地址,在對程序編譯連接時由編譯系統(tǒng)給每一個變量名分配對應(yīng)的內(nèi)存地址。從變量中取值,實際上是通過變量名找到相應(yīng)的內(nèi)存地址,從該存儲單元中讀取數(shù)據(jù)。常量與變量
變量命名的規(guī)定:C語言規(guī)定標(biāo)識符只能由字母、數(shù)字和下劃線三種字符組成,且第一個字符必須為字母或下劃線。
例:sum,_total,month,Student_name,
lotus_1_2_3,BASIC,li_lingM.D.John,¥123,3D64,a>b
常量與變量注意:編譯系統(tǒng)將大寫字母和小寫字母認(rèn)為是兩個不同的字符。建議變量名的長度最好不要超過8個字符。在選擇變量名和其它標(biāo)識符時,應(yīng)注意做到“見名知意”,即選有含意的英文單詞(或其縮寫)作標(biāo)識符。要求對所有用到的變量作強制定義,也就是“先定義,后使用”。2.2.2整型數(shù)據(jù)整型常量的表示方法
整型常量即整常數(shù),整常數(shù)可用以下三種形式表示:(1)十進(jìn)制整數(shù)。
如:137,-469.5。(2)八進(jìn)制整數(shù)。以0頭的數(shù)是八進(jìn)制數(shù)。
如:035表示八進(jìn)制數(shù)35,等于十進(jìn)制數(shù)13,-011表示八進(jìn)制數(shù)-11,即十進(jìn)制數(shù)-9。2.2.2整型數(shù)據(jù)(3)十六進(jìn)制整數(shù)。以0x開頭的數(shù)是16進(jìn)制數(shù)。
如:0x2A,代表16進(jìn)制數(shù)2A,等于十進(jìn)制數(shù)42。-0x12等于十進(jìn)制數(shù)-10。
整型變量
(1)整型數(shù)據(jù)在內(nèi)存中的存放形式
數(shù)據(jù)在內(nèi)存中是以二進(jìn)制形式存放的。
如:inti;/*定義為整型變量*/i=15;/*給i賦以整數(shù)15*/
2.2.2整型數(shù)據(jù)注意:十進(jìn)制數(shù)10的二進(jìn)制形式為1010,不同的編譯系統(tǒng)為整型數(shù)據(jù)分配的字節(jié)數(shù)是不相同的,VC++6.0分配4個字節(jié)。數(shù)值是以補碼(complement)表示的。
2.2.2整型數(shù)據(jù)整型常量的類型
(1)一個整數(shù),如果其值在-32768~+32767范圍內(nèi),認(rèn)為它是shortint型,它可以賦值給int型和longint型變量。
(2)一個整數(shù),如果其值超過了上述范圍,而在-2147483637~+2147483647范圍內(nèi),則認(rèn)為它是為int型或長整型??梢詫⑺x值給一個longint型變量。2.2.2整型數(shù)據(jù)(3)一個整型常量后面加一個字母u或U,認(rèn)為是unsignedint型,如12345u,在內(nèi)存中按unsignedint規(guī)定的方式存放(存儲單元中最高位不作為符號位,而用來存儲數(shù)據(jù))。如果寫成-12345u,則先將-12345轉(zhuǎn)換成其補碼53191,然后按無符號數(shù)存儲。2.2.2整型數(shù)據(jù)(4)在一個整常量后面加一個字母l或L,則認(rèn)為是longint型常量。
例如:123l、432L、0L2.2.2整型數(shù)據(jù)(2)整型變量的分類共六種有符號基本整型有符號短整型有符號長整型無符號基本整型無符號短整型無符號長整型(signed)int(signed)short(int)(signed)long(int)unsignedintunsignedshort(int)unsignedlong(int)
注意:括號表示其中的內(nèi)容是可選的.2.2.2整型數(shù)據(jù)整數(shù)類型的有關(guān)數(shù)據(jù):
類型類型說明符長度數(shù)的范圍基本型int
4字節(jié)-231~231-1
短整型short2字節(jié)-215~215-1
長整型long4字節(jié)-231~231-1
無符號整型unsigned4字節(jié)0~(232-1)
無符號短整型unsignedshort4字節(jié)0~(232-1)
無符號長整型unsignedlong4字節(jié)0~(232-1)2.2.2整型數(shù)據(jù)
整型變量的定義:
C規(guī)定在程序中所有用到的變量都必須在程序中定義,即“強制類型定義”。
例如:
inta,b(指定變量a、b為整型)
unsignedshortc,d;(指定變量c、d為無符號短整型)
longe,f;(指定變量e、f為長整型)#include"stdio.h"
intmain()
{
inta,b,c,d;/*定義整型變量a、b、c、d*/
unsignedu;/*定義無符號整型變量u*/
a=12;b=24;u=10;/*a,b,u分別賦初值*/
c=a+u;d=b+u;/*把a+u的值賦給變量c,把b+u的值賦給變量d*/
printf("%d,%d\n",c,d);/*輸出變量c和d的值*/
return(0);
}說明:
可以看到不同種類的整型數(shù)據(jù)可以進(jìn)行算術(shù)運算例整型變量的定義與使用
#include"stdio.h"
intmain()
{
inta,b;
a=2147483647;
b=a+1;
printf("\na=%d,a+1=%d",a,b);
a=-2147483648;
b=a-1;
printf("\na=%d,a-1=%d\n",a,b);
return0;
}
說明:數(shù)值是以補碼表示的。一個整型變量只能容納-21474836478~2147483647范圍內(nèi)的數(shù),無法表示大于2147483647或小于-2147483648的數(shù)。遇此情況就發(fā)生“溢出”。例
整型數(shù)據(jù)的溢出2.2.3實型數(shù)據(jù)實型常量的表示方法小數(shù)指數(shù)兩種表示形式0.0033e-3注意:字母e(或E)之前必須有數(shù)字,且e后面的指數(shù)必須為整數(shù)1e5、1.83e-3、-143e-4、-.1e-2e6、2.1e3.5、.e3、e
2.2。3實型數(shù)據(jù)規(guī)范化的指數(shù)形式:
在字母e(或E)之前的小數(shù)部分中,小數(shù)點左邊應(yīng)有一位(且只能有一位)非零的數(shù)字.
例如:123.456可以表示為:
123.456e0,12.3456e1,1.23456e2,0.123456e3,0.0123456e4,0.00123456e
其中的1.23456e3稱為“規(guī)范化的指數(shù)形式”。2.2.3實型數(shù)據(jù)實型變量(浮點型)(1)實型數(shù)據(jù)在內(nèi)存中的存放形式
一個浮點型數(shù)據(jù)一般在內(nèi)存中占4個字節(jié)(32位)。與整型數(shù)據(jù)的存儲方式不同,浮點型數(shù)據(jù)是按照指數(shù)形式存儲的。系統(tǒng)把一個浮點型數(shù)據(jù)分成小數(shù)部分和指數(shù)部分,分別存放。指數(shù)部分采用規(guī)范化的指數(shù)形式。類型位數(shù)數(shù)的范圍有效數(shù)字float32
10-37~10386~7位double型64
10-307~1030815~16位longdouble12810-4931~10493218~19位2.2.3實型數(shù)據(jù)(2)浮點型變量的分類浮點型變量分為單精度(float型)、雙精度(double型)和長雙精度型(longdouble)三類形式。#include<stdio.h>
voidmain()
{floata,b;
a=123456.789e5;
b=a+20;
printf(“a=%f,b=%f\n”,a,b);
/*以十進(jìn)制小數(shù)形式輸出實型變量a,b的值*/
return(0);
}
說明:一個浮點型變量只能保證的有效數(shù)字是7位有效數(shù)字,后面的數(shù)字是無意義的,并不準(zhǔn)確地表示該數(shù)。應(yīng)當(dāng)避免將一個很大的數(shù)和一個很小的數(shù)直接相加或相減,否則就會“丟失”小的數(shù)例
實型數(shù)據(jù)的舍入誤差2.2.3實型數(shù)據(jù)由于實數(shù)存在舍入誤差,使用時要注意以下幾點。不要試圖用一個實數(shù)精確表示一個大整數(shù),浮點數(shù)是不精確的。實數(shù)一般不判斷“相等”,而是判斷接近或近似。避免直接將一個很大的實數(shù)與一個很小的實數(shù)相加、相減,否則會“丟失”小的數(shù)。根據(jù)要求選擇單精度型和雙精度型。2.2.4字符型數(shù)據(jù)
字符常量(1)用單引號包含的一個字符是字符型常量(2)只能包含一個字符‘a(chǎn)’,’A’,‘1’‘a(chǎn)bc’、“a”
有些以“\”開頭的特殊字符稱為轉(zhuǎn)義字符\n換行\(zhòng)t橫向跳格\r回車\\反斜杠\dddddd表示1到3位八進(jìn)制數(shù)字\xhhhh表示1到2位十六進(jìn)制數(shù)字2.2.4字符型數(shù)據(jù)
例
轉(zhuǎn)義字符的使用
#include"stdio.h"
intmain()
{
inta,b,c;
a=5;b=6;c=7;
printf("%d\n\t%d%d\n%d%d\t\b%d",a,b,c,a,b,c);
return(0);
}2.2.4字符型數(shù)據(jù)
字符變量字符型變量用來存放字符常量,注意只能放一個字符。字符變量的定義形式如下:charc1,c2;在本函數(shù)中可以用下面語句對c1,c2賦值:
c1=‘a(chǎn)’;c2=‘b’
;一個字符變量在內(nèi)存中占一個字節(jié)。
2.2.4字符型數(shù)據(jù)字符數(shù)據(jù)在內(nèi)存中的存儲形式及其使用方法一個字符常量存放到一個字符變量中,實際上并不是把該字符的字型放到內(nèi)存中去,而是將該字符的相應(yīng)的ASCII代碼放到存儲單元中。這樣使字符型數(shù)據(jù)和整型數(shù)據(jù)之間可以通用。注意:
一個字符數(shù)據(jù)既可以以字符形式輸出,也可以以整數(shù)形式輸出。#include"stdio.h"
intmain() /*字符"a"的各種表達(dá)方法*/
{
charc1='a';
charc2='\x61';/*\x61為轉(zhuǎn)義字符*/
charc3='\141';/*\141為轉(zhuǎn)義字符*/
charc4=97;
charc5=0x61;/*0x61為十六進(jìn)制數(shù),相當(dāng)于十進(jìn)制數(shù)的97*/
charc6=0141;/*0141為八進(jìn)制數(shù),相當(dāng)于十進(jìn)制數(shù)的97*/
printf("\ncl=%c,c2=%c,c3=%c,c4=%c,c5=%c,c6=%c\n",c1,c2,c3,c4,c5,c6);
/*以字符形式輸出*/
printf("\ncl=%c,c2=%d,c3=%d,c4=%d,c5=%d,c6=%d\n",c1,c2,c3,c4,c5,c6);
/*以十進(jìn)制整數(shù)形式輸出*/
return0;
}說明:在7行中,將整數(shù)97賦給c4,它的作用相當(dāng)于以下賦值語句: c1=′a′;
因為’a’的ASCII碼為97例
向字符變量賦以整數(shù)。#include"stdio.h"
intmain()
{
charc1,c2;
c1='a';
c2='b';
c1=c1-32;/*c1的ASCII碼97減32再賦給c1*/
c2=c2-32;/*c2的ASCII碼98減32再賦給c2*/
printf("\n%c%c\n",c1,c2);/*按字符形式輸出c1,c2的值*/
printf("%d%d\n",c1,c2);/*按ASCII碼形式輸出c1,c2的值*/
return0;
}說明:程序的作用是將兩個小寫字母a和b轉(zhuǎn)換成大寫字母A和B。從ASCII代碼表中可以看到每一個小寫字母比它相應(yīng)的大寫字母的ASCII碼大32。C語言允許字符數(shù)據(jù)與整數(shù)直接進(jìn)行算術(shù)運算。例
大小寫字母的轉(zhuǎn)換2.2.4字符型數(shù)據(jù)字符串常量字符串常量是一對雙撇號括起來的字符序列.合法的字符串常量:
“Howdoyoudo.”,“CHINA”,“a”
,“$123.45”可以輸出一個字符串,如
printf(“Howdoyoudo.”);2.2.4字符型數(shù)據(jù)
‘a’是字符常量,”a”是字符串常量,二者不同。
如:假設(shè)C被指定為字符變量
:charcc=’a’;
c=”a”;c=”CHINA”;
結(jié)論:不能把一個字符串常量賦給一個字符變量。C規(guī)定:在每一個字符串常量的結(jié)尾加一個“字符串結(jié)束標(biāo)志”,以便系統(tǒng)據(jù)此判斷字符串是否結(jié)束。C規(guī)定以字符’\0’作為字符串結(jié)束標(biāo)志。
如:如果有一個字符串常量”CHINA”,實際上在內(nèi)存中是:2.2.4字符型數(shù)據(jù)CHINA\0
它占內(nèi)存單元不是5個字符,而是6個字符,最后一個字符為’\0’。但在輸出時不輸出’\0’。2.2.5變量賦初值
字符串常量(1)C語言允許在定義變量的同時使變量初始化如:inta=3;//指定a為整型變量,初值為3
floatf=3.56;//指定f為浮點型變量,初值為3.56charc=‘a(chǎn)’;//指定c為字符變量,初值為‘a(chǎn)’2.2.5變量賦初值
(2)可以使被定義的變量的一部分賦初值。
如:
inta,b,c=5;表示指定a、b、c為整型變量,但只對c初始化,c的初值為5(3)如果對幾個變量賦以同一個初值,應(yīng)寫成:inta=3,b=3,c=3;表示a、b、c的初值都是3。不能寫成∶
inta=b=c=3;
注意:初始化不是在編譯階段完成的而是在程序運行時執(zhí)行本函數(shù)時賦初值的,相當(dāng)于有一個賦值語句。各類數(shù)值型數(shù)據(jù)間的混合運算
混合運算:整型(包括int,short,long)、浮點型(包括float,double)可以混合運算。在進(jìn)行運算時,不同類型的數(shù)據(jù)要先轉(zhuǎn)換成同一類型,然后進(jìn)行運算.說明:這種類型轉(zhuǎn)換是由系統(tǒng)自動進(jìn)行的。2.3運算符和表達(dá)式2.3.1C運算符簡介
C的運算符有以下幾類:(1)算術(shù)運算符(+-*/%)(2)關(guān)系運算符(><
==>=<=!=)(3)邏輯運算符(!&&||)(4)位運算符(<<>>~|∧&)(5)賦值運算符(=及其擴展賦值運算符)(6)條件運算符(?:)(7)逗號運算符(,)2.3運算符和表達(dá)式(8)指針運算符(*和&)(9)求字節(jié)數(shù)運算符(sizeof)(10)強制類型轉(zhuǎn)換運算符((類型))(11)分量運算符(.->)(12)下標(biāo)運算符([])(13)其他(如函數(shù)調(diào)用運算符())2.3.2算術(shù)運算符和算術(shù)表達(dá)式(1)基本的算術(shù)運算符:+(加法運算符,或正值運算符。如:3+5、+3)-(減法運算符,或負(fù)值運算符。如:5-2、-3)*(乘法運算符。如:3*5)/(除法運算符。如:5/3)%(模運算符,或稱求余運算符,%兩側(cè)均應(yīng)為整型數(shù)據(jù),如:7%4的值為3)。2.3.2算術(shù)運算符和算術(shù)表達(dá)式(2)算術(shù)表達(dá)式和運算符的優(yōu)先級與結(jié)合性基本的算術(shù)運算符:
用算術(shù)運算符和括號將運算對象(也稱操作數(shù))連接起來的、符合C語法規(guī)則的式子,稱為C算術(shù)表達(dá)式。運算對象包括常量、變量、函數(shù)等。
例如:
a*b/c-1.5+′a′
是一個合法的表達(dá)式C語言規(guī)定了運算符的優(yōu)先級和結(jié)合性。在表達(dá)式求值時,先按運算符的優(yōu)先級別高低次序執(zhí)行,例如先乘除后加減。
C規(guī)定了各種運算符的結(jié)合方向(結(jié)合性)
算術(shù)運算符的結(jié)合方向為“自左至右”,即先左后右。2.3.2算術(shù)運算符和算術(shù)表達(dá)式假設(shè)今天是星期三,20天之后是星期幾?
#include"stdio.h"
intmain()
{
intday,n;
scanf("%d",&n); /*輸入過多少天后*/
day=(n%7+3)%7; /*計算過n天后是星期幾*/
printf("%d\n",day); /*輸出計算結(jié)果*/
return0;
}
說明:設(shè)用0、1、2、3、4、5、6分別表示星期日、星期一、星期二、星期三、星期四、星期五、星期六。因為一個星期有7天,即7天為一周期,所以n/7等于n天里過了多少個整周,n%7就是n天里除去整周后的零頭(不滿一周的天數(shù)),(n%7+3)%7就是過n天之后的星期幾。例算術(shù)運算符和算術(shù)表達(dá)式的使用2.3.3關(guān)系運算符與關(guān)系表達(dá)式6種關(guān)系運算符:<、>、<=、>=、==、!=用關(guān)系運算符將兩個操作數(shù)連接起來的合法的C語言式子,稱為關(guān)系表達(dá)式。例如,8>5、a==b、c!=d、x>=y。關(guān)系表達(dá)式的結(jié)果為邏輯值,邏輯值只有兩個值,即邏輯真與邏輯假。在C語言中沒有邏輯型數(shù)據(jù)類型,以0表示邏輯假,以l表示邏輯真。在輸出時,邏輯真顯示1,邏輯假顯示0。例
輸出兩個整數(shù)的最大值。#include"stdio.h"intmain(){ inta,b,max; scanf("%d,%d",&a,&b); //輸入a,b的值 if(a>b)max=a; //如果a大于b,把a賦給max elsemax=b; //否則把b賦給max printf("max=%d\n",max); //輸出max的值 return(0);}2.3.4邏輯運算符與邏輯表達(dá)式3種邏輯運算符:&&(邏輯與)如果兩個操作數(shù)均為邏輯真,則結(jié)果為邏輯真,否則為邏輯假,即“兩真為真,否則為假”或“見假為假,否則為真”。||(邏輯或)如果兩個操作數(shù)均為邏輯假,則結(jié)果為邏輯假,否則為邏輯真,即“兩假為假,否則為真”或“見真為真,否則為假”。!(邏輯非)將邏輯假轉(zhuǎn)變?yōu)檫壿嬚?,邏輯真轉(zhuǎn)變?yōu)檫壿嫾?,即“顛倒是否”,它是邏輯運算符中惟一的單目運算符。2.3.5賦值運算符和賦值表達(dá)式
(1)賦值運算符
賦值符號“=”就是賦值運算符,它的作用是將一個數(shù)據(jù)賦給一個變量。如“a=3”的作用是執(zhí)行一次賦值操作(或稱賦值運算)。把常量3賦給變量a。也可以將一個表達(dá)式的值賦給一個變量.
2.3.5賦值運算符和賦值表達(dá)式(2)類型轉(zhuǎn)換
如果賦值運算符兩側(cè)的類型不一致,但都是數(shù)值型或字符型時,在賦值時要進(jìn)行類型轉(zhuǎn)換。①將浮點型數(shù)據(jù)(包括單、雙精度)賦給整型變量時,舍棄浮點數(shù)的小數(shù)部分。如:i為整型變量,執(zhí)行“i=3.26”的結(jié)果是使i的值為3,以整數(shù)形式存儲在整型變量中.2.3.5賦值運算符和賦值表達(dá)式
②將整型數(shù)據(jù)賦給單、雙精度變量時,數(shù)值不變,但以浮點數(shù)形式存儲到變量中
如:
將23賦給float變量f,即執(zhí)行f=23,先將23轉(zhuǎn)換成23.00000,再存儲在f中。將23賦給double型變量d,即執(zhí)行d=23,系統(tǒng)將23補足有效位數(shù)字為23.00000000000000,然后以雙精度浮點數(shù)形式存儲到變量d中。
2.3.5賦值運算符和賦值表達(dá)式③將一個double型數(shù)據(jù)賦給float變量時,截取其前面7位有效數(shù)字,存放到float變量的存儲單元(4個字節(jié))中。但應(yīng)注意數(shù)值范圍不能溢出。
如:floatf;doubled=123.456789e100;f=d;
就出現(xiàn)溢出的錯誤。
如果將一個float型數(shù)據(jù)賦給double變量時,數(shù)值不變,有效位數(shù)擴展到16位,在內(nèi)存中以8個字節(jié)存儲2.3.5賦值運算符和賦值表達(dá)式④字符型數(shù)據(jù)賦給整型變量時,由于字符只占1個字節(jié),而整型變量為4個字節(jié),因此將字符數(shù)據(jù)(8個二進(jìn)位)放到整型變量存儲單元的低8位中。2.3.5賦值運算符和賦值表達(dá)式⑤將一個int、short、long型數(shù)據(jù)賦給一個char型變量時,只將其低8位原封不動地送到char型變量(即截斷)。2.3.5賦值運算符和賦值表達(dá)式⑥將unsignedint型數(shù)據(jù)賦給longint型變量時,不存在符號擴展問題,只需將高位補0即可。將一個unsigned類型數(shù)據(jù)賦給一個占字節(jié)數(shù)相同的非unsigned型整型變量(例如:unsignedint->int,unsignedlong->long,unsignedshort->short),將unsigned型變量的內(nèi)容原樣送到非unsigned型變量中,但如果數(shù)據(jù)范圍超過相應(yīng)整型的范圍,則會出現(xiàn)數(shù)據(jù)錯誤。#include"stdio.h"
intmain()
{
inti=5; /*說明整型變量i并初始化為5*/
floata=3.5,a1; /*說明實型變量a和al并初始化a*/
doubleb=123456789.123456789;/*說明雙精度型變量b并初始化*/
charc='A'; /*說明字符變量C并初始化為A*/
printf("i=%d,a=%f,c=%c\n",i,a,b,c);/*輸出i,a,b,c的初始值*/
a1=i;i=a;a=b;c=i;
/*整型變量i的值賦值給實型變量al,實型變量a的值賦給整型變量i,
雙精度型變量b的值賦值給實型變量a,整型變量i的值賦值給字符變量c*/
printf("i=%d,a=%f,a1=%f,c=%c\n",i,a,a1,c);
/*輸出i,a,a1,c賦值以后的值*/
return(0);
}例賦值運算中類型轉(zhuǎn)換的規(guī)則
2.3.5賦值運算符和賦值表達(dá)式(3)復(fù)合的賦值運算符
在賦值符“=”之前加上其他運算符,可以構(gòu)成復(fù)合的運算符。例如:a+=3等價于a=a+3x*=y+8等價于x=x*(y+8)x%=3等價于x=x%3以“a+=3”為例來說明,它相當(dāng)于使a進(jìn)行一次自加(3)的操作。即先使a加3,再賦給a。賦值運算符和賦值表達(dá)式
為便于記憶,可以這樣理解:①a+=b(其中a為變量,b為表達(dá)式)②a+=b(將有下劃線的“a+”移到“=”右側(cè))
|___↑③a=a+b(在“=”左側(cè)補上變量名a)賦值運算符和賦值表達(dá)式
注意:如果b是包含若干項的表達(dá)式,則相當(dāng)于它有括號。如:
①x%=y+3
②x%=(y+3)|__↑
③x=x%(y+3)(不要錯寫成x=x%y+3)
凡是二元(二目)運算符,都可以與賦值符一起組合成復(fù)合賦值符。C語言規(guī)定可以使用10種復(fù)合賦值運算符:+=,-=,*=,/=,%=,<<=,>>=,&=,∧=,|=
例
復(fù)合賦值運算符的使用#include"stdio.h"intmain(){inta=3,b=2,c=4,d=8,x;a+=b*c; /*a=11*/b-=c/b; /*b=0*/printf("%d,%d,%d\n",a,b,c*=2*(a-b));d%=a;printf("x=%d\n",x=a+b+c+d);return0;}2.3.5賦值運算符和賦值表達(dá)式賦值表達(dá)式
由賦值運算符將一個變量和一個表達(dá)式連接起來的式子稱為“賦值表達(dá)式”。一般形式為:
<變量><賦值運算符><表達(dá)式>
例如:“a=5”是一個賦值表達(dá)式
2.3.5賦值運算符和賦值表達(dá)式對賦值表達(dá)式求解的過程是:
①求賦值運算符右側(cè)的“表達(dá)式”的值;②賦給賦值運算符左側(cè)的變量。例如:賦值表達(dá)式“a=3*5”的值為15,執(zhí)行表達(dá)式后,變量a的值也是15。
注意:一個表達(dá)式應(yīng)該有一個值
左值(lvalue)
:賦值運算符左側(cè)的標(biāo)識符變量可以作為左值;而表達(dá)式就不能作為左值(如a+b);常變量也不能作為左值,
右值(lvalue)
:出現(xiàn)在賦值運算符右側(cè)的表達(dá)式
左值也可以出現(xiàn)在賦值運算符右側(cè),因而左值都可以作為右值。2.3.5賦值運算符和賦值表達(dá)式2.3.6逗號運算符和逗號表達(dá)式逗號運算符:將兩個表達(dá)式連接起來,又稱為“順序求值運算符”
如:3+5,6+8
一般形式:
表達(dá)式1,表達(dá)式2求解過程:先求解表達(dá)式1,再求解表達(dá)式2。整個逗號表達(dá)式的值是表達(dá)式2的值。
逗號表達(dá)式的值為14例:逗號表達(dá)式a=3*5,a*4
分析:賦值運算符的優(yōu)先級別高于逗號運算符,因此應(yīng)先求解a=3*5。
一個逗號表達(dá)式又可以與另一個表達(dá)式組成一個新的逗號表達(dá)式如:(a=3*5,a*4),a+5
先計算出a的值等于15,再進(jìn)行a*4的運算得60(但a值未變,仍為15),再進(jìn)行a+5得20,即整個表達(dá)式的值為20。2.3.6逗號運算符和逗號表達(dá)式a的值為15,然后求解a*4,得60。整個逗號表達(dá)式的值為60。逗號表達(dá)式的一般形式可以擴展為
表達(dá)式1,表達(dá)式2,表達(dá)式3,……,表達(dá)式n它的值為表達(dá)式n的值。逗號運算符是所有運算符中級別最低的例:①x=(a=3,6*3)②x=a=3,6*3賦值表達(dá)式,將一個逗號表達(dá)式的值賦給x,x的值等于18逗號表達(dá)式,包括一個賦值表達(dá)式和一個算術(shù)表達(dá)式,x的值為3,整個逗號表達(dá)式的值為18。2.3.6逗號運算符和逗號表達(dá)式注意:并不是任何地方出現(xiàn)的逗號都是作為逗號運算符。例如函數(shù)參數(shù)也是用逗號來間隔的。如:printf(“%d,%d,%d”,a,b,c);printf(“%d,%d,%d”,(a,b,c),b,c)
“(a,b,c)”是一個逗號表達(dá)式,它的值等于c的值。2.3.6逗號運算符和逗號表達(dá)式“a,b,c”并不是一個逗號表達(dá)式,它是printf函數(shù)的3個參數(shù)例
逗號表達(dá)式的使用#include"stdio.h"intmain(){intx,a;x=(a=3,6*3); /*把逗號表達(dá)式的值賦給變量x,a=3,x=18*/printf("%d,%d\n",a,x);x=a=3,6*a; /*a=3,x=3,整個逗號表達(dá)式的值為18*/printf("%d,%d\n",a,x);return0;}算術(shù)運算符和算術(shù)表達(dá)式(3)強制類型轉(zhuǎn)換運算符
可以利用強制類型轉(zhuǎn)換運算符將一個表達(dá)式轉(zhuǎn)換成所需類型。
一般形式:(類型名)(表達(dá)式)例如:(double)a將a轉(zhuǎn)換成double類型(int)(x+y)將x+y的值轉(zhuǎn)換成整型(float)(5%3)將5%3的值轉(zhuǎn)換成float型2.3.7自增自減運算符自增、自減運算符
作用是使變量的值增1或減1如:++i,--i(在使用i之前,先使i的值加(減)1)i++,i--(在使用i之后,使i的值加(減)1)
i++與++i的區(qū)別:
++i是先執(zhí)行i=i+1后,再使用i的值;i++是先使用i的值后,再執(zhí)行i=i+1。例如:①j=++i;
i的值先變成4,再賦給j,j的值均為4②j=i++;先將i的值3賦給j,j的值為3,然后i變?yōu)椋?.3.7自增自減運算符注意:
(1)自增運算符(++),自減運算符(--),只能用于變量,而不能用于常量或表達(dá)式,
(2)++和--的結(jié)合方向是“自右至左”。
自增(減)運算符常用于循環(huán)語句中使循環(huán)變量自動加1。也用于指針變量,使指針指向
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 湖南省某廢鋼基地項目可行性研究報告
- 2024租賃期滿后購買選擇權(quán)協(xié)議
- 2025年度特色餐廳餐飲配送服務(wù)承包合同4篇
- 中國防水膠卷材項目投資可行性研究報告
- 2025年度個人創(chuàng)業(yè)貸款擔(dān)保合同樣本4篇
- 2025年涂裝勞務(wù)分包合同范本大全:涂裝工程安全3篇
- 2025年度個人房產(chǎn)抵押融資合同規(guī)范文本2篇
- 2025年度個人汽車貸款合同標(biāo)準(zhǔn)格式4篇
- 2025年度個人汽車租賃保險附加服務(wù)合同3篇
- 2025年江蘇海州發(fā)展集團(tuán)有限公司招聘筆試參考題庫含答案解析
- CNAS實驗室評審不符合項整改報告
- 農(nóng)民工考勤表(模板)
- 承臺混凝土施工技術(shù)交底
- 臥床患者更換床單-軸線翻身
- 計量基礎(chǔ)知識培訓(xùn)教材201309
- 中考英語 短文填詞、選詞填空練習(xí)
- 一汽集團(tuán)及各合資公司組織架構(gòu)
- 阿特拉斯基本擰緊技術(shù)ppt課件
- 初一至初三數(shù)學(xué)全部知識點
- 新課程理念下的班主任工作藝術(shù)
- (完整版)企業(yè)破產(chǎn)流程圖(四張)
評論
0/150
提交評論