版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
C程序設(shè)計(jì)基礎(chǔ)C程序設(shè)計(jì)基礎(chǔ)本章要點(diǎn)基本數(shù)據(jù)類型運(yùn)算符和表達(dá)式主要內(nèi)容C語言程序結(jié)構(gòu)C語言的數(shù)據(jù)類型及其常量的表示法變量的定義及初始化方法運(yùn)算符與表達(dá)式的概念、賦值的概念C語言的自動(dòng)類型轉(zhuǎn)換和強(qiáng)制類型轉(zhuǎn)換主要內(nèi)容2.1C程序概述2.2基本數(shù)據(jù)類型2.3運(yùn)算符與表達(dá)式2.4不同類型數(shù)據(jù)之間的轉(zhuǎn)換2.5錯(cuò)誤解析2.1C程序概述2.1.1一個(gè)簡單的C程序2.1.2C語言的字符集2.1.1一個(gè)簡單的C程序例2-1一個(gè)簡單的C程序。#include"stdio.h" //include稱為文件包含命令;擴(kuò)展名為.h的文件也稱為頭文件intmain() //主函數(shù)main(),函數(shù)值為整形;{ //主函數(shù)開始printf("HelloC!\n"); //輸出信息"HelloC!"并換行return(0); //程序正常結(jié)束,返回值0} //主函數(shù)結(jié)束例2-2計(jì)算兩個(gè)數(shù)的和#includestdio.hintmain() //{ intsum(intx,inty); //對(duì)被調(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)特點(diǎn)一個(gè)C語言源程序可以由一個(gè)或多個(gè)函數(shù)組成。一個(gè)源程序有且只能有一個(gè)main函數(shù),即主函數(shù)。源程序中可以有預(yù)處理命令(include命令僅為其中的一種),預(yù)處理命令通常應(yīng)放在源文件或源程序的最前面。每一個(gè)說明,每一個(gè)語句都必須以分號(hào)結(jié)尾。但預(yù)處理命令,函數(shù)頭和花括號(hào)“}”之后不能加分號(hào)。2.1.2C語言的字符集字符是組成語言的最基本的元素。C語言字符集由字母,數(shù)字,空格,標(biāo)點(diǎn)和特殊字符組成。在字符常量,字符串常量和注釋中還可以使用漢字或其它可表示的圖形符號(hào)。C語言詞匯在C語言中使用的詞匯分為六類:標(biāo)識(shí)符,關(guān)鍵字,運(yùn)算符,分隔符,常量,注釋符等。2.2基本數(shù)據(jù)類型在一個(gè)具體的C語言系統(tǒng)里,每個(gè)數(shù)據(jù)類型都有固定的表示方式,這個(gè)表示方式實(shí)際上就確定了可能表示的數(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實(shí)型(浮點(diǎn)型)單精度實(shí)型
float雙精度實(shí)型
double2.2.1常量與變量常量和符號(hào)常量在程序運(yùn)行過程中,其值不能被改變的量稱為常量常量區(qū)分為不同的類型:整型100,125,-100,0實(shí)型3.14,0.125,-3.789字符型‘a(chǎn)’,‘b’,‘2’字符串‘a(chǎn)’,‘a(chǎn)b’,‘1232’輸入一個(gè)半徑值,分別計(jì)算圓周長、圓面積和球的體積。
#include"stdio.h"
#definePI3.14159265 /*定義一個(gè)符號(hào)常量PI*/
intmain()
{
floatr,p,a,v; /*定義實(shí)型變量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);
}符號(hào)常量:用一個(gè)標(biāo)識(shí)符代表一個(gè)常量。符號(hào)常量的值在其作用域內(nèi)不能改變,也不能再被賦值。說明:
程序中用#define命令行定義PI代表常量3.1415926,此后凡在本文件中出現(xiàn)的PI都代表3.1415926,可以和常量一樣進(jìn)行運(yùn)算說明:如再用賦值語句給PI賦值是錯(cuò)的
PI=3.14;/*錯(cuò)誤,不能給符號(hào)常量賦值例1符號(hào)常量的使用常量與變量變量變量代表內(nèi)存中具有特定屬性的一個(gè)存儲(chǔ)單元,它用來存放數(shù)據(jù),這就是變量的值,在程序運(yùn)行期間,這些值是可以改變的。變量名實(shí)際上是一個(gè)以一個(gè)名字對(duì)應(yīng)代表一個(gè)地址,在對(duì)程序編譯連接時(shí)由編譯系統(tǒng)給每一個(gè)變量名分配對(duì)應(yīng)的內(nèi)存地址。從變量中取值,實(shí)際上是通過變量名找到相應(yīng)的內(nèi)存地址,從該存儲(chǔ)單元中讀取數(shù)據(jù)。常量與變量
變量命名的規(guī)定:C語言規(guī)定標(biāo)識(shí)符只能由字母、數(shù)字和下劃線三種字符組成,且第一個(gè)字符必須為字母或下劃線。
例:sum,_total,month,Student_name,
lotus_1_2_3,BASIC,li_lingM.D.John,¥123,3D64,a>b
常量與變量注意:編譯系統(tǒng)將大寫字母和小寫字母認(rèn)為是兩個(gè)不同的字符。建議變量名的長度最好不要超過8個(gè)字符。在選擇變量名和其它標(biāo)識(shí)符時(shí),應(yīng)注意做到“見名知意”,即選有含意的英文單詞(或其縮寫)作標(biāo)識(shí)符。要求對(duì)所有用到的變量作強(qiáng)制定義,也就是“先定義,后使用”。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個(gè)字節(jié)。數(shù)值是以補(bǔ)碼(complement)表示的。
2.2.2整型數(shù)據(jù)整型常量的類型
(1)一個(gè)整數(shù),如果其值在-32768~+32767范圍內(nèi),認(rèn)為它是shortint型,它可以賦值給int型和longint型變量。
(2)一個(gè)整數(shù),如果其值超過了上述范圍,而在-2147483637~+2147483647范圍內(nèi),則認(rèn)為它是為int型或長整型。可以將它賦值給一個(gè)longint型變量。2.2.2整型數(shù)據(jù)(3)一個(gè)整型常量后面加一個(gè)字母u或U,認(rèn)為是unsignedint型,如12345u,在內(nèi)存中按unsignedint規(guī)定的方式存放(存儲(chǔ)單元中最高位不作為符號(hào)位,而用來存儲(chǔ)數(shù)據(jù))。如果寫成-12345u,則先將-12345轉(zhuǎn)換成其補(bǔ)碼53191,然后按無符號(hào)數(shù)存儲(chǔ)。2.2.2整型數(shù)據(jù)(4)在一個(gè)整常量后面加一個(gè)字母l或L,則認(rèn)為是longint型常量。
例如:123l、432L、0L2.2.2整型數(shù)據(jù)(2)整型變量的分類共六種有符號(hào)基本整型有符號(hào)短整型有符號(hào)長整型無符號(hào)基本整型無符號(hào)短整型無符號(hào)長整型(signed)int(signed)short(int)(signed)long(int)unsignedintunsignedshort(int)unsignedlong(int)
注意:括號(hào)表示其中的內(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
無符號(hào)整型unsigned4字節(jié)0~(232-1)
無符號(hào)短整型unsignedshort4字節(jié)0~(232-1)
無符號(hào)長整型unsignedlong4字節(jié)0~(232-1)2.2.2整型數(shù)據(jù)
整型變量的定義:
C規(guī)定在程序中所有用到的變量都必須在程序中定義,即“強(qiáng)制類型定義”。
例如:
inta,b(指定變量a、b為整型)
unsignedshortc,d;(指定變量c、d為無符號(hào)短整型)
longe,f;(指定變量e、f為長整型)#include"stdio.h"
intmain()
{
inta,b,c,d;/*定義整型變量a、b、c、d*/
unsignedu;/*定義無符號(hào)整型變量u*/
a=12;b=24;u=10;/*a,b,u分別賦初值*/
c=a+u;d=b+u;/*把a(bǔ)+u的值賦給變量c,把b+u的值賦給變量d*/
printf("%d,%d\n",c,d);/*輸出變量c和d的值*/
return(0);
}說明:
可以看到不同種類的整型數(shù)據(jù)可以進(jìn)行算術(shù)運(yùn)算例整型變量的定義與使用
#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ù)值是以補(bǔ)碼表示的。一個(gè)整型變量只能容納-21474836478~2147483647范圍內(nèi)的數(shù),無法表示大于2147483647或小于-2147483648的數(shù)。遇此情況就發(fā)生“溢出”。例
整型數(shù)據(jù)的溢出2.2.3實(shí)型數(shù)據(jù)實(shí)型常量的表示方法小數(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í)型數(shù)據(jù)規(guī)范化的指數(shù)形式:
在字母e(或E)之前的小數(shù)部分中,小數(shù)點(diǎn)左邊應(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í)型數(shù)據(jù)實(shí)型變量(浮點(diǎn)型)(1)實(shí)型數(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ù)形式。類型位數(shù)數(shù)的范圍有效數(shù)字float32
10-37~10386~7位double型64
10-307~1030815~16位longdouble12810-4931~10493218~19位2.2.3實(shí)型數(shù)據(jù)(2)浮點(diǎn)型變量的分類浮點(diǎn)型變量分為單精度(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ù)形式輸出實(shí)型變量a,b的值*/
return(0);
}
說明:一個(gè)浮點(diǎn)型變量只能保證的有效數(shù)字是7位有效數(shù)字,后面的數(shù)字是無意義的,并不準(zhǔn)確地表示該數(shù)。應(yīng)當(dāng)避免將一個(gè)很大的數(shù)和一個(gè)很小的數(shù)直接相加或相減,否則就會(huì)“丟失”小的數(shù)例
實(shí)型數(shù)據(jù)的舍入誤差2.2.3實(shí)型數(shù)據(jù)由于實(shí)數(shù)存在舍入誤差,使用時(shí)要注意以下幾點(diǎn)。不要試圖用一個(gè)實(shí)數(shù)精確表示一個(gè)大整數(shù),浮點(diǎn)數(shù)是不精確的。實(shí)數(shù)一般不判斷“相等”,而是判斷接近或近似。避免直接將一個(gè)很大的實(shí)數(shù)與一個(gè)很小的實(shí)數(shù)相加、相減,否則會(huì)“丟失”小的數(shù)。根據(jù)要求選擇單精度型和雙精度型。2.2.4字符型數(shù)據(jù)
字符常量(1)用單引號(hào)包含的一個(gè)字符是字符型常量(2)只能包含一個(gè)字符‘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ù)
字符變量字符型變量用來存放字符常量,注意只能放一個(gè)字符。字符變量的定義形式如下:charc1,c2;在本函數(shù)中可以用下面語句對(duì)c1,c2賦值:
c1=‘a(chǎn)’;c2=‘b’
;一個(gè)字符變量在內(nèi)存中占一個(gè)字節(jié)。
2.2.4字符型數(shù)據(jù)字符數(shù)據(jù)在內(nèi)存中的存儲(chǔ)形式及其使用方法一個(gè)字符常量存放到一個(gè)字符變量中,實(shí)際上并不是把該字符的字型放到內(nèi)存中去,而是將該字符的相應(yīng)的ASCII代碼放到存儲(chǔ)單元中。這樣使字符型數(shù)據(jù)和整型數(shù)據(jù)之間可以通用。注意:
一個(gè)字符數(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′;
因?yàn)椤痑’的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;
}說明:程序的作用是將兩個(gè)小寫字母a和b轉(zhuǎn)換成大寫字母A和B。從ASCII代碼表中可以看到每一個(gè)小寫字母比它相應(yīng)的大寫字母的ASCII碼大32。C語言允許字符數(shù)據(jù)與整數(shù)直接進(jìn)行算術(shù)運(yùn)算。例
大小寫字母的轉(zhuǎn)換2.2.4字符型數(shù)據(jù)字符串常量字符串常量是一對(duì)雙撇號(hào)括起來的字符序列.合法的字符串常量:
“Howdoyoudo.”,“CHINA”,“a”
,“$123.45”可以輸出一個(gè)字符串,如
printf(“Howdoyoudo.”);2.2.4字符型數(shù)據(jù)
‘a’是字符常量,”a”是字符串常量,二者不同。
如:假設(shè)C被指定為字符變量
:charcc=’a’;
c=”a”;c=”CHINA”;
結(jié)論:不能把一個(gè)字符串常量賦給一個(gè)字符變量。C規(guī)定:在每一個(gè)字符串常量的結(jié)尾加一個(gè)“字符串結(jié)束標(biāo)志”,以便系統(tǒng)據(jù)此判斷字符串是否結(jié)束。C規(guī)定以字符’\0’作為字符串結(jié)束標(biāo)志。
如:如果有一個(gè)字符串常量”CHINA”,實(shí)際上在內(nèi)存中是:2.2.4字符型數(shù)據(jù)CHINA\0
它占內(nèi)存單元不是5個(gè)字符,而是6個(gè)字符,最后一個(gè)字符為’\0’。但在輸出時(shí)不輸出’\0’。2.2.5變量賦初值
字符串常量(1)C語言允許在定義變量的同時(shí)使變量初始化如:inta=3;//指定a為整型變量,初值為3
floatf=3.56;//指定f為浮點(diǎn)型變量,初值為3.56charc=‘a(chǎn)’;//指定c為字符變量,初值為‘a(chǎn)’2.2.5變量賦初值
(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è)賦值語句。各類數(shù)值型數(shù)據(jù)間的混合運(yùn)算
混合運(yùn)算:整型(包括int,short,long)、浮點(diǎn)型(包括float,double)可以混合運(yùn)算。在進(jìn)行運(yùn)算時(shí),不同類型的數(shù)據(jù)要先轉(zhuǎn)換成同一類型,然后進(jìn)行運(yùn)算.說明:這種類型轉(zhuǎn)換是由系統(tǒng)自動(dòng)進(jìn)行的。2.3運(yùn)算符和表達(dá)式2.3.1C運(yùn)算符簡介
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)算符(,)2.3運(yùn)算符和表達(dá)式(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)算符())2.3.2算術(shù)運(yùn)算符和算術(shù)表達(dá)式(1)基本的算術(shù)運(yùn)算符:+(加法運(yùn)算符,或正值運(yùn)算符。如:3+5、+3)-(減法運(yùn)算符,或負(fù)值運(yùn)算符。如:5-2、-3)*(乘法運(yùn)算符。如:3*5)/(除法運(yùn)算符。如:5/3)%(模運(yùn)算符,或稱求余運(yùn)算符,%兩側(cè)均應(yīng)為整型數(shù)據(jù),如:7%4的值為3)。2.3.2算術(shù)運(yùn)算符和算術(shù)表達(dá)式(2)算術(shù)表達(dá)式和運(yùn)算符的優(yōu)先級(jí)與結(jié)合性基本的算術(shù)運(yùn)算符:
用算術(shù)運(yùn)算符和括號(hào)將運(yùn)算對(duì)象(也稱操作數(shù))連接起來的、符合C語法規(guī)則的式子,稱為C算術(shù)表達(dá)式。運(yùn)算對(duì)象包括常量、變量、函數(shù)等。
例如:
a*b/c-1.5+′a′
是一個(gè)合法的表達(dá)式C語言規(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)椤白宰笾劣摇?,即先左后右?.3.2算術(shù)運(yùn)算符和算術(shù)表達(dá)式假設(shè)今天是星期三,20天之后是星期幾?
#include"stdio.h"
intmain()
{
intday,n;
scanf("%d",&n); /*輸入過多少天后*/
day=(n%7+3)%7; /*計(jì)算過n天后是星期幾*/
printf("%d\n",day); /*輸出計(jì)算結(jié)果*/
return0;
}
說明:設(shè)用0、1、2、3、4、5、6分別表示星期日、星期一、星期二、星期三、星期四、星期五、星期六。因?yàn)橐粋€(gè)星期有7天,即7天為一周期,所以n/7等于n天里過了多少個(gè)整周,n%7就是n天里除去整周后的零頭(不滿一周的天數(shù)),(n%7+3)%7就是過n天之后的星期幾。例算術(shù)運(yùn)算符和算術(shù)表達(dá)式的使用2.3.3關(guān)系運(yùn)算符與關(guān)系表達(dá)式6種關(guān)系運(yùn)算符:<、>、<=、>=、==、!=用關(guān)系運(yùn)算符將兩個(gè)操作數(shù)連接起來的合法的C語言式子,稱為關(guān)系表達(dá)式。例如,8>5、a==b、c!=d、x>=y。關(guān)系表達(dá)式的結(jié)果為邏輯值,邏輯值只有兩個(gè)值,即邏輯真與邏輯假。在C語言中沒有邏輯型數(shù)據(jù)類型,以0表示邏輯假,以l表示邏輯真。在輸出時(shí),邏輯真顯示1,邏輯假顯示0。例
輸出兩個(gè)整數(shù)的最大值。#include"stdio.h"intmain(){ inta,b,max; scanf("%d,%d",&a,&b); //輸入a,b的值 if(a>b)max=a; //如果a大于b,把a(bǔ)賦給max elsemax=b; //否則把b賦給max printf("max=%d\n",max); //輸出max的值 return(0);}2.3.4邏輯運(yùn)算符與邏輯表達(dá)式3種邏輯運(yùn)算符:&&(邏輯與)如果兩個(gè)操作數(shù)均為邏輯真,則結(jié)果為邏輯真,否則為邏輯假,即“兩真為真,否則為假”或“見假為假,否則為真”。||(邏輯或)如果兩個(gè)操作數(shù)均為邏輯假,則結(jié)果為邏輯假,否則為邏輯真,即“兩假為假,否則為真”或“見真為真,否則為假”。!(邏輯非)將邏輯假轉(zhuǎn)變?yōu)檫壿嬚妫壿嬚孓D(zhuǎn)變?yōu)檫壿嫾?,即“顛倒是否”,它是邏輯運(yùn)算符中惟一的單目運(yùn)算符。2.3.5賦值運(yùn)算符和賦值表達(dá)式
(1)賦值運(yùn)算符
賦值符號(hào)“=”就是賦值運(yùn)算符,它的作用是將一個(gè)數(shù)據(jù)賦給一個(gè)變量。如“a=3”的作用是執(zhí)行一次賦值操作(或稱賦值運(yùn)算)。把常量3賦給變量a。也可以將一個(gè)表達(dá)式的值賦給一個(gè)變量.
2.3.5賦值運(yùn)算符和賦值表達(dá)式(2)類型轉(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.26”的結(jié)果是使i的值為3,以整數(shù)形式存儲(chǔ)在整型變量中.2.3.5賦值運(yùn)算符和賦值表達(dá)式
②將整型數(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中。
2.3.5賦值運(yùn)算符和賦值表達(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ǔ)2.3.5賦值運(yùn)算符和賦值表達(dá)式④字符型數(shù)據(jù)賦給整型變量時(shí),由于字符只占1個(gè)字節(jié),而整型變量為4個(gè)字節(jié),因此將字符數(shù)據(jù)(8個(gè)二進(jìn)位)放到整型變量存儲(chǔ)單元的低8位中。2.3.5賦值運(yùn)算符和賦值表達(dá)式⑤將一個(gè)int、short、long型數(shù)據(jù)賦給一個(gè)char型變量時(shí),只將其低8位原封不動(dòng)地送到char型變量(即截?cái)啵?.3.5賦值運(yùn)算符和賦值表達(dá)式⑥將unsignedint型數(shù)據(jù)賦給longint型變量時(shí),不存在符號(hào)擴(kuò)展問題,只需將高位補(bǔ)0即可。將一個(gè)unsigned類型數(shù)據(jù)賦給一個(gè)占字節(jié)數(shù)相同的非unsigned型整型變量(例如:unsignedint->int,unsignedlong->long,unsignedshort->short),將unsigned型變量的內(nèi)容原樣送到非unsigned型變量中,但如果數(shù)據(jù)范圍超過相應(yīng)整型的范圍,則會(huì)出現(xiàn)數(shù)據(jù)錯(cuò)誤。#include"stdio.h"
intmain()
{
inti=5; /*說明整型變量i并初始化為5*/
floata=3.5,a1; /*說明實(shí)型變量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的值賦值給實(shí)型變量al,實(shí)型變量a的值賦給整型變量i,
雙精度型變量b的值賦值給實(shí)型變量a,整型變量i的值賦值給字符變量c*/
printf("i=%d,a=%f,a1=%f,c=%c\n",i,a,a1,c);
/*輸出i,a,a1,c賦值以后的值*/
return(0);
}例賦值運(yùn)算中類型轉(zhuǎn)換的規(guī)則
2.3.5賦值運(yùn)算符和賦值表達(dá)式(3)復(fù)合的賦值運(yùn)算符
在賦值符“=”之前加上其他運(yùn)算符,可以構(gòu)成復(fù)合的運(yùn)算符。例如:a+=3等價(jià)于a=a+3x*=y+8等價(jià)于x=x*(y+8)x%=3等價(jià)于x=x%3以“a+=3”為例來說明,它相當(dāng)于使a進(jìn)行一次自加(3)的操作。即先使a加3,再賦給a。賦值運(yùn)算符和賦值表達(dá)式
為便于記憶,可以這樣理解:①a+=b(其中a為變量,b為表達(dá)式)②a+=b(將有下劃線的“a+”移到“=”右側(cè))
|___↑③a=a+b(在“=”左側(cè)補(bǔ)上變量名a)賦值運(yùn)算符和賦值表達(dá)式
注意:如果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語言規(guī)定可以使用10種復(fù)合賦值運(yùn)算符:+=,-=,*=,/=,%=,<<=,>>=,&=,∧=,|=
例
復(fù)合賦值運(yùn)算符的使用#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賦值運(yùn)算符和賦值表達(dá)式賦值表達(dá)式
由賦值運(yùn)算符將一個(gè)變量和一個(gè)表達(dá)式連接起來的式子稱為“賦值表達(dá)式”。一般形式為:
<變量><賦值運(yùn)算符><表達(dá)式>
例如:“a=5”是一個(gè)賦值表達(dá)式
2.3.5賦值運(yùn)算符和賦值表達(dá)式對(duì)賦值表達(dá)式求解的過程是:
①求賦值運(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è),因而左值都可以作為右值。2.3.5賦值運(yùn)算符和賦值表達(dá)式2.3.6逗號(hào)運(yùn)算符和逗號(hào)表達(dá)式逗號(hào)運(yùn)算符:將兩個(gè)表達(dá)式連接起來,又稱為“順序求值運(yùn)算符”
如:3+5,6+8
一般形式:
表達(dá)式1,表達(dá)式2求解過程:先求解表達(dá)式1,再求解表達(dá)式2。整個(gè)逗號(hào)表達(dá)式的值是表達(dá)式2的值。
逗號(hào)表達(dá)式的值為14例:逗號(hào)表達(dá)式a=3*5,a*4
分析:賦值運(yùn)算符的優(yōu)先級(jí)別高于逗號(hào)運(yùn)算符,因此應(yīng)先求解a=3*5。
一個(gè)逗號(hào)表達(dá)式又可以與另一個(gè)表達(dá)式組成一個(gè)新的逗號(hào)表達(dá)式如:(a=3*5,a*4),a+5
先計(jì)算出a的值等于15,再進(jìn)行a*4的運(yùn)算得60(但a值未變,仍為15),再進(jìn)行a+5得20,即整個(gè)表達(dá)式的值為20。2.3.6逗號(hào)運(yùn)算符和逗號(hào)表達(dá)式a的值為15,然后求解a*4,得60。整個(gè)逗號(hào)表達(dá)式的值為60。逗號(hào)表達(dá)式的一般形式可以擴(kuò)展為
表達(dá)式1,表達(dá)式2,表達(dá)式3,……,表達(dá)式n它的值為表達(dá)式n的值。逗號(hào)運(yùn)算符是所有運(yùn)算符中級(jí)別最低的例:①x=(a=3,6*3)②x=a=3,6*3賦值表達(dá)式,將一個(gè)逗號(hào)表達(dá)式的值賦給x,x的值等于18逗號(hào)表達(dá)式,包括一個(gè)賦值表達(dá)式和一個(gè)算術(shù)表達(dá)式,x的值為3,整個(gè)逗號(hào)表達(dá)式的值為18。2.3.6逗號(hào)運(yùn)算符和逗號(hào)表達(dá)式注意:并不是任何地方出現(xiàn)的逗號(hào)都是作為逗號(hào)運(yùn)算符。例如函數(shù)參數(shù)也是用逗號(hào)來間隔的。如:printf(“%d,%d,%d”,a,b,c);printf(“%d,%d,%d”,(a,b,c),b,c)
“(a,b,c)”是一個(gè)逗號(hào)表達(dá)式,它的值等于c的值。2.3.6逗號(hào)運(yùn)算符和逗號(hào)表達(dá)式“a,b,c”并不是一個(gè)逗號(hào)表達(dá)式,它是printf函數(shù)的3個(gè)參數(shù)例
逗號(hào)表達(dá)式的使用#include"stdio.h"intmain(){intx,a;x=(a=3,6*3); /*把逗號(hào)表達(dá)式的值賦給變量x,a=3,x=18*/printf("%d,%d\n",a,x);x=a=3,6*a; /*a=3,x=3,整個(gè)逗號(hào)表達(dá)式的值為18*/printf("%d,%d\n",a,x);return0;}算術(shù)運(yùn)算符和算術(shù)表達(dá)式(3)強(qiáng)制類型轉(zhuǎn)換運(yùn)算符
可以利用強(qiáng)制類型轉(zhuǎn)換運(yùn)算符將一個(gè)表達(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自增自減運(yùn)算符自增、自減運(yùn)算符
作用是使變量的值增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自增自減運(yùn)算符注意:
(1)自增運(yùn)算符(++),自減運(yùn)算符(--),只能用于變量,而不能用于常量或表達(dá)式,
(2)++和--的結(jié)合方向是“自右至左”。
自增(減)運(yùn)算符常用于循環(huán)語句中使循環(huán)變量自動(dòng)加1。也用于指針變量,使指針指向
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 鈾礦開采石方施工協(xié)議
- 建筑制冷承攬施工合同
- 臨時(shí)展覽LED屏幕租賃合同
- 文化傳媒合同專用章管理指南
- 船舶電氣系統(tǒng)安裝合同
- 影劇院隔墻施工合同
- 挖掘機(jī)跨國作業(yè)合同范本
- 車禍病人出院協(xié)議書(2篇)
- 土地違約解除合同通知書
- 集合資產(chǎn)管理計(jì)劃資產(chǎn)管理合同審查要點(diǎn)
- 煙霧病病人的護(hù)理-課件
- 投資公司勞務(wù)合同
- 小紅帽故事PPT課件16
- 五年級(jí)小數(shù)綜合運(yùn)算
- 了不起的我課件完整版
- 低結(jié)構(gòu)材料在區(qū)域游戲投放過程中存在的問題及應(yīng)對(duì)策略 論文
- 識(shí)別自動(dòng)化思維重塑快樂自我
- 2023版思想道德與法治課件專題7第1講社會(huì)主義法律的特征和運(yùn)行PPT
- 毒品與艾滋病預(yù)防智慧樹知到答案章節(jié)測(cè)試2023年湖南警察學(xué)院
- GJB9001C質(zhì)量手冊(cè)+程序文件+記錄清單
- 2023-2024學(xué)年山東省臨沂市小學(xué)數(shù)學(xué)五年級(jí)上冊(cè)期末自測(cè)試卷
評(píng)論
0/150
提交評(píng)論