C語言程序設(shè)計教程(第2版)-課件 第2章 數(shù)據(jù)類型、表達式_第1頁
C語言程序設(shè)計教程(第2版)-課件 第2章 數(shù)據(jù)類型、表達式_第2頁
C語言程序設(shè)計教程(第2版)-課件 第2章 數(shù)據(jù)類型、表達式_第3頁
C語言程序設(shè)計教程(第2版)-課件 第2章 數(shù)據(jù)類型、表達式_第4頁
C語言程序設(shè)計教程(第2版)-課件 第2章 數(shù)據(jù)類型、表達式_第5頁
已閱讀5頁,還剩65頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第二章數(shù)據(jù)類型、運算符與表達式

本章要點數(shù)據(jù)的描述規(guī)則數(shù)據(jù)的操作規(guī)則C語言的基本元素一、符號集(字符集)(1)大寫字母:A~Z(2)小寫字母a~z(3)阿拉伯?dāng)?shù)字:0~9(4)下劃線:_(5)標(biāo)點符號和運算符二、標(biāo)識符用來標(biāo)記常量、變量、函數(shù)及文件名字的字符序列。標(biāo)識符的構(gòu)成規(guī)則:(1)以字母(大小寫皆可)或下劃線開頭(2)隨后可跟若干個(包括0個)字母、數(shù)字、下劃線如:xy3_imaxELSEX

(合法)

7xint#Nobadone(不合法)注意:C語言區(qū)分大小寫,如sum和SUM是兩個標(biāo)識符。三、關(guān)鍵字(附錄B)也稱“保留字”,它是C語言中具有特定含義、專門用作語言特定成分的一類標(biāo)識符。ANSI推薦的C語言的關(guān)鍵字是32個如:int、char、float、void等注意:所有的關(guān)鍵字都有固定的意義,不能用作其他。所有關(guān)鍵字都必須小寫。如:else與ELSE代表不同含義

else是關(guān)鍵字,ELSE用戶定義的標(biāo)識符2.1C的數(shù)據(jù)類型C語言提供了以下一些數(shù)據(jù)類型。數(shù)據(jù)類型構(gòu)造類型指針類型空類型(無值類型)void枚舉類型enum數(shù)組類型結(jié)構(gòu)類型

struct聯(lián)合類型union

基本類型整型int字符型char實型(浮點型)單精度實型

float雙精度實型

double

2.2常量與變量1、常量:在程序運行過程中,其值不能被改變的量稱為常量。常量區(qū)分為不同的類型:整型100,125,-100,0實型3.14,0.125,-3.789字符型‘a(chǎn)’,‘b’,‘2’字符串“a”,“ab”,“1232”常量和符號常量2、符號常量:用一個標(biāo)識符代表的一個常量。定義方法:#define標(biāo)識符常量例2.1符號常量的使用

#definePRICE30

#include<stdio.h>

intmain()

{

intnum,total;

num=10;

total=num*PRICE;

printf("total=%d\n",total);}運行結(jié)果:

total=300說明:如再用賦值語句給PRICE賦值是錯的

PRICE=40;/*錯誤,不能給符號常量賦值*/說明:程序中用#define命令行定義PRICE代表常量30,此后凡在本文件中出現(xiàn)的PRICE都代表30,可以和常量一樣進行運算變量其值是可以改變的量,它用標(biāo)識符(變量名)來表示,在內(nèi)存中占據(jù)一定的存儲單元。變量名實際上是以一個名字代表一個地址,在對程序編譯連接時由編譯系統(tǒng)給每一個變量名分配對應(yīng)的內(nèi)存地址。從變量中取值,實際上是通過變量名找到相應(yīng)的內(nèi)存地址,從該存儲單元中讀取數(shù)據(jù)。變量的定義方法

類型符標(biāo)識符如:inti,j;charc1,c2;floatx,y;doublez;變量命名的規(guī)定:C語言規(guī)定標(biāo)識符只能由字母、數(shù)字和下劃線三種字符組成,且第一個字符必須為字母或下劃線。例:sum,_total,month,Student_name,

lotus_1_2_3,BASIC,li_ling

M.D.John,¥123,3D64,a>b

注意:編譯系統(tǒng)將大寫字母和小寫字母認為是兩個不同的字符(習(xí)慣上,符號常量用大寫)。建議變量名的長度最好不要超過8個字符。在選擇變量名和其它標(biāo)識符時,應(yīng)注意做到“見名知意”,即選有含意的英文單詞(或其縮寫)作標(biāo)識符。要求對所有用到的變量作強制定義,也就是“先定義,后使用”。student_name->s_namestudent_num->s_num2.3整型數(shù)據(jù)整型常量即整常數(shù)。在C語言中,整常數(shù)可用以下三種形式表示:(1)十進制整數(shù)。

如:123,-456,4。(2)八進制整數(shù)。以0開頭的數(shù)是八進制數(shù)。

如:0123表示八進制數(shù)123,等于十進制數(shù)83,(3)十六進制整數(shù)。以0x開頭的數(shù)是16進制數(shù)。如:0x123,代表16進制數(shù)123,等于十進制數(shù)291。

整型常量的表示方法整型變量(1)整型數(shù)據(jù)在內(nèi)存中的存放形式在內(nèi)存中是以二進制的補碼表示。如:inti;/*定義為整型變量*/i=10;/*給i賦以整數(shù)10*/補碼:

一個正整數(shù)的補碼和該數(shù)的原碼(即該數(shù)的二進制形式)相同。如果數(shù)值是負的,求負數(shù)的補碼方法是:將該數(shù)的絕對值的二進制形式,按位取反再加1。注意:十進制數(shù)10的二進制形式為1010,TurboC2.0和TurboC++3.0為一個整型變量在內(nèi)存中分配2個字節(jié)的存儲單元(不同的編譯系統(tǒng)為整型數(shù)據(jù)分配的字節(jié)數(shù)是不相同的,VC++6.0則分配4個字節(jié))。數(shù)值是以補碼(complement)表示的。存儲有符號整數(shù)時存儲單元中的第一個二進制位(即最高位)用來代表數(shù)值符號。(2)整型變量的分類有符號基本整型有符號短整型有符號長整型無符號基本整型無符號短整型無符號長整型(signed)int(signed)short(int)(signed)long(int)unsignedintunsignedshort(int)unsignedlong(int)注意:括號表示其中的內(nèi)容是可選的。例如:整數(shù)13在內(nèi)存中實際存放的情況:(3)整型變量的定義:

C規(guī)定在程序中所有用到的變量都必須在程序中定義,即“強制類型定義”。例如:inta,b;(指定變量a、b為整型)

unsignedshortc,d;

(指定變量c、d為無符號短整型)

longe,f;(指定變量e、f為長整型)例2.2整型變量的定義與使用#include<stdio.h>intmain()

{inta,b,c,d;/*指定a、b、c、d為整型變量*/

unsignedu;/*指定u為無符號整型變量*/

a=12;b=-24;u=10;

c=a+u;d=b+u;

printf(”a+u=%d,b+u=%d\n”,c,d);

}運行結(jié)果:a+u=22,b+u=-14

說明:可以看到不同種類的整型數(shù)據(jù)可以進行算術(shù)運算.

0000000000001100a0000000000001010u0000000000010110a+u1111111111101000b0000000000001010u1111111111110010b+ub=-24先計算其絕對值24的二進制形式0000000000011000

按位取反再加1為11111111111010001111111111110001減1取反0000000000001110負數(shù)的絕對值14是負數(shù)-?整型常量的類型

(1)一個整數(shù),如果其值在-32768~+32767范圍內(nèi),認為它是int型,它可以賦值給int型和longint型變量。(2)一個整數(shù),如果其值超過了上述范圍,而在-2147483648~+2147483647范圍內(nèi),則認為它是為長整型??梢詫⑺x值給一個longint型變量。(3)如果所用的C版本(如TurboC)分配給shortint與int型數(shù)據(jù)在內(nèi)存中占據(jù)的長度相同,則它的表數(shù)范圍與int型相同。因此一個int型的常量同時也是一個shortint型常量,可以賦給int型或shortint型量。

(4)一個整常量后面加一個字母u或U,認為是unsignedint型,如12345u,在內(nèi)存中按unsignedint規(guī)定的方式存放(存儲單元中最高位不作為符號位,而用來存儲數(shù)據(jù))。(5)在一個整常量后面加一個字母l或L,則認為是longint型常量。例如:123l,432L,0L用于函數(shù)調(diào)用中。2.4浮點型數(shù)據(jù)兩種表示形式浮點型常量的表示方法小數(shù)指數(shù)0.1233e-3注意:字母e(或E)前后必須有數(shù)字,且e后面的指數(shù)必須為整數(shù).1e3、1.8e-3、-123e-6e3、2.1e3.5、.e3、e

類型:缺省為double;后綴f或F,為float型;后綴l或L,為longdouble型。規(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ù)形式”。浮點型變量(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ù)形式。(2)浮點型變量的分類浮點型變量分為單精度(float型)、雙精度(double型)和長雙精度型(longdouble)三類形式。單精度(float型):占4個字節(jié),7位有效數(shù)字(3.4e-38~3.4e+38)雙精度(double型):占8個字節(jié),15~16位有效數(shù)字(1.7e-308~1.7e+308)

longdouble型:占10個字節(jié),15~16位有效數(shù)字(3.4e-4932~1.1e+4932)(3)浮點型數(shù)據(jù)的舍入誤差

#include<stdio.h>

intmain()

{floata,b;

a=123456.789e5;

b=a+20;

printf(“a=%f,b=%f\n”,a,b);

}

運行結(jié)果:a=12345678848.000000,b=12345678868.000000說明:一個浮點型變量只能保證的有效數(shù)字是7位有效數(shù)字,后面的數(shù)字是無意義的,并不準(zhǔn)確地表示該數(shù)。應(yīng)當(dāng)避免將一個很大的數(shù)和一個很小的數(shù)直接相加或相減,否則就會“丟失”小的數(shù).若數(shù)據(jù)超過有效位,則被舍去,故可能產(chǎn)生誤差。

2.5字符型數(shù)據(jù)

(1)用單引號包含的一個字符是字符型常量如:‘a(chǎn)’、‘A’、‘b’、‘*’、‘$’(2)轉(zhuǎn)義字符:特殊的字符常量,都以“\”開頭(代表一個字符)\n換行,移到下一行開頭\0空值\t橫向跳格(每8列為一制表位)\v縱向跳格\r回車,移到本行開頭\a報警\b退格\f走紙換頁\\反斜杠\’

輸出單引號\dddddd表示1到3位八進制數(shù)字(字符的ASCII碼)

如:‘\101’

代表字符‘A’\xhh

hh表示1到2位十六進制數(shù)字如:‘\x41’

代表字符‘A’字符常量輸出格式控制輸出字符例2.5轉(zhuǎn)義字符的使用

#include<stdio.h>

intmain(){printf(“a\t\rf\tg\n″);

顯示屏上的運行結(jié)果:fg例2.5轉(zhuǎn)義字符的使用

#include<stdio.h>

intmain(){printf(“a\t\rf\tg\n″);

printf("h\ti\b\bjk\n″);

顯示屏上的運行結(jié)果:fghjk例2.5轉(zhuǎn)義字符的使用

#include<stdio.h>

intmain(){printf("abc\tde\rf\tg\n″);

printf("h\ti\b\bjk\n″);

顯示屏上的運行結(jié)果:fgdehjk字符變量字符型變量用來存放字符常量,注意只能放一個字符。字符變量的定義形式如下:

charc1,c2;unsignedcharc3,c4;

字符型變量的賦值方法:

c1=‘a(chǎn)’;c2=‘\101’;c3=0xff;c4=‘\377’;一個字符變量在內(nèi)存中占一個字節(jié)。字符數(shù)據(jù)在內(nèi)存中的存儲形式及其使用方法(1)一個字符常量存放到一個字符變量中,實際上并不是把該字符的字型放到內(nèi)存中去,而是將該字符的相應(yīng)的ASCII代碼放到存儲單元中。這樣使字符型數(shù)據(jù)和整型數(shù)據(jù)之間可以通用。abab

#include<stdio.h>intmain(){charcl,c2;c1='a';c2='b'printf("oc%c",cl,c2);c1=97;c2=98;printf("oc%c",cl,c2);}(2)字符數(shù)據(jù)與整型數(shù)據(jù)可以相互賦值(3)字符數(shù)據(jù)可以以字符形式輸出,也可以用整型數(shù)形式輸出。intmain(){inti;charc;i=‘a(chǎn)’;c=97;printf(“%c,%d\n”,c,c);printf(“%c,%d\n”,i,i);}等同于:i=97;c=‘a(chǎn)’;例2.6向字符變量賦以整數(shù)。

#include<stdio.h>

intmain()

{charc1,c2;

c1=97;

c2=98;

printf(“%c%c\n”,c1,c2);

printf(“%d%d\n”,c1,c2);

}運行結(jié)果:ab

9798說明:在第4和第5行中,將整數(shù)97和98分別賦給c1和c2,它的作用相當(dāng)于以下兩個賦值語句:

c1=’a’;c2=’b’;因為’a’和’b’的ASCII碼為97和98例2.7大小寫字母的轉(zhuǎn)換

#include<stdio.h>

intmain()

{charc1,c2;

c1=’a’;

c2=’b’;

c1=c1-32;

c2=c2-32;

printf(“%c%c”,c1,c2);

}運行結(jié)果:AB說明:程序的作用是將兩個小寫字母a和b轉(zhuǎn)換成大寫字母A和B。從ASCII代碼表中可以看到每一個小寫字母比它相應(yīng)的大寫字母的ASCII碼大32。C語言允許字符數(shù)據(jù)與整數(shù)直接進行算術(shù)運算。字符’a’的存儲形式

01100001intmain(){charc;c=‘\376’;printf(“%c,%d\n”,c,c);}八進制數(shù)376(十進制為254)ASCII碼字符為:11111110unsignedcharc;

,-2,2541111110100000010字符串常量1、字符串常量是一對雙引號括起來的字符序列.

合法的字符串常量:

“Howdoyoudo.”,“CHINA”,“a”

,“$123.45”

可以輸出一個字符串,如

printf(“Howdoyoudo.”);‘a’是字符常量,“a”是字符串常量,二者不同。如:假設(shè)c被指定為字符變量:charc;c=’a’;c=“a”;c=“CHINA”;

結(jié)論:不能把一個字符串常量賦給一個字符變量。2、C規(guī)定:在每一個字符串常量的結(jié)尾加一個“字符串結(jié)束標(biāo)志”,以便系統(tǒng)據(jù)此判斷字符串是否結(jié)束。C規(guī)定以字符’\0’作為字符串結(jié)束標(biāo)志。如:如果有一個字符串常量”CHINA”

,實際上在內(nèi)存中是:CHINA\0

它占內(nèi)存單元不是5個字符,而是6個字符,最后一個字符為’\0’。但在輸出時不輸出’\0’。2.6變量賦初值(1)C語言允許在定義變量的同時使變量初始化如:inta=3;//指定a為整型變量,初值為3

floatf=3.56;//指定f為浮點型變量,初 // 值為3.56charc=‘a(chǎn)’;//指定c為字符變量,初值為‘a(chǎn)’(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;

2.7各類數(shù)值型數(shù)據(jù)間的混合運算

整型(包括int,short,long)、浮點型(包括float,double)等可以混合運算。例如:10+’a’+12.3-3.14*’x’是合法的。在進行運算時,不同類型的數(shù)據(jù)要先轉(zhuǎn)換成同一類型,然后進行運算。

2.8算術(shù)運算符和算術(shù)表達式C運算符(1)基本的算術(shù)運算符:+(加法運算符,或正值運算符。如:3+5、+3)-(減法運算符,或負值運算符。如:5-2、-3)*(乘法運算符。如:3*5,2*x,3*(a+b))/(除法運算符。如:5/3,(x+y)/(a+b))1)兩個整數(shù)相除,其值為整數(shù),如:5/3值為1,舍去小數(shù)部分;2)除數(shù)、被除數(shù)有一個為負值時,結(jié)果”向零取整”,如-5/3=-1;3)除數(shù)、被除數(shù)有一個為實數(shù)時,結(jié)果為double型(1)基本的算術(shù)運算符:%(模運算符,或稱求余運算符,%兩側(cè)均應(yīng)為整型數(shù)據(jù),如:7%4的值為3)。-7%4,7%-4,-7%-4的值為多少?-3,3,-3符號由被除數(shù)決定(2)算術(shù)表達式和運算符的優(yōu)先級與結(jié)合性用算術(shù)運算符和括號將運算對象(也稱操作數(shù))連接起來的、符合C語法規(guī)則的式子,稱為C算術(shù)表達式。運算對象包括常量、變量、函數(shù)等。例如:a*b/c-1.5+’a’3.14*r*rx+sqrt(0.25*y)/(abs(a+b)-3.6)

優(yōu)先級在表達式求值時,先按運算符的優(yōu)先級別高低次序執(zhí)行,例如先乘除后加減。結(jié)合性算術(shù)運算符的結(jié)合方向為“自左至右”,即先左后右。(3)強制類型轉(zhuǎn)換運算符可以利用強制類型轉(zhuǎn)換運算符將一個表達式轉(zhuǎn)換成所需類型。一般形式:(類型名)(表達式)例如:(double)a將a轉(zhuǎn)換成double類型(int)(x+y)將x+y的值轉(zhuǎn)換成整型(float)(5%3)將5%3的值轉(zhuǎn)換成float型注意:與(int)x+y不同例2.8強制類型轉(zhuǎn)換。

#include<stdio.h>

intmain(){floatx;

inti;

x=3.6;

i=(int)x;/*不影響x單元的內(nèi)容*/printf("x=%f,i=%d\n",x,i);

運行結(jié)果:x=3.600000,i=3說明:有兩種類型轉(zhuǎn)換,一種是在運算時不必用戶指定,系統(tǒng)自動進行的類型轉(zhuǎn)換,如3+6.5。第二種是強制類型轉(zhuǎn)換。當(dāng)自動類型轉(zhuǎn)換不能實現(xiàn)目的時,可以用強制類型轉(zhuǎn)換。注意:x的類型沒有發(fā)生改變。(4)自增、自減運算符作用是使變量的值增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。例2.9:

#include<stdio.h>intmain(){inti=0,j;j=i++;printf(“%d%d\n”,i,j);i=0;j=++i;printf(“%d%d\n”,i,j);}區(qū)分:j=i+1;j=++i;011注意:

(1)自增運算符(++),自減運算符(--),只能用于變量,而不能用于常量或表達式。如:5++、--(a+b)不合法。(2)++和--的優(yōu)先級高于算術(shù)運算符,結(jié)合方向是“自右至左”。如:-i++相當(dāng)于-(i++)。(3)C語言中有的運算符為一個字符,有的運算符由兩個字符組成,為避免誤解,最好采取大家都能理解的寫法。例如:不要寫成i+++j的形式,而應(yīng)寫成

(i++)+j的形式2.9逗號運算符和逗號表達式逗號運算符:將兩個表達式連接起來,又稱為“順序求值運算符”.

如:3+5,6+8

一般形式:

表達式1,表達式2求解過程:

1)求解表達式1

2)再求解表達式2

3)整個逗號表達式的值是表達式2的值。逗號表達式的值為14例:逗號表達式a=3*5,a*4分析:逗號運算符是所有運算符中級別最低的,因此應(yīng)先求解a=3*5。a的值為15,然后求解a*4,得60。整個逗號表達式的值為60。

一個逗號表達式又可以與另一個表達式組成一個新的逗號表達式如:(a=3*5,a*4),a+5先計算出a的值等于15,再進行a*4的運算得60(但a值未變,仍為15),再進行a+5得20,即整個表達式的值為20。逗號表達式的一般形式可以擴展為表達式1,表達式2,表達式3,……,表達式n它的值為表達式n的值。逗號運算符是所有運算符中級別最低的例:①x=(a=3,6*3)②x=a=3,6*a逗號表達式,包括一個賦值表達式和一個算術(shù)表達式,x的值為3,整個逗號表達式的值為18。

注意:并不是任何地方出現(xiàn)的逗號都是作為逗號運算符。

如:printf(“%d,%d,%d”,a,b,c);“a,b,c”并不是一個逗號表達式,它是printf函數(shù)的3個參數(shù)printf(“%d,%d,%d”,(a,b,c),b,c);

“(a,b,c)”是一個逗號表達式,它的值等于c的值。例:#include<stdio.h>intmain(){inta=1;printf(“結(jié)果為:%d\n”,a=3*a,3*a);}結(jié)果為:3(a=3*a,3*a)結(jié)果為:92.10賦值表達式和賦值語句一、賦值運算符“=”用法:變量=表達式作用:將表達式的值賦給變量(常量、變量是表達式的特例)如:a=5;

ave=(a+b)/10;注意:與數(shù)學(xué)中的等式不同!二、復(fù)合的賦值運算符在賦值符“=”之前加上其他運算符,構(gòu)成復(fù)合賦值運算符+=,-=,*=,/=,%=,<<=,>>=,&=,^=,|=如:a+=3等價于a=a+3x*=y+8等價于x=x*(y+8)

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論