第2章 基本數(shù)據(jù)及其運(yùn)算_第1頁
第2章 基本數(shù)據(jù)及其運(yùn)算_第2頁
第2章 基本數(shù)據(jù)及其運(yùn)算_第3頁
第2章 基本數(shù)據(jù)及其運(yùn)算_第4頁
第2章 基本數(shù)據(jù)及其運(yùn)算_第5頁
已閱讀5頁,還剩141頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第2章基本數(shù)據(jù)及其運(yùn)算程序程序模式輸入—處理—輸出程序中兩方面的內(nèi)容處理的數(shù)據(jù)(數(shù)據(jù)結(jié)構(gòu))處理的方法(算法)算法+數(shù)據(jù)結(jié)構(gòu)=程序——NiklausWirth數(shù)據(jù)基本數(shù)據(jù)復(fù)合數(shù)據(jù)27-8月-24第2章基本數(shù)據(jù)及其運(yùn)算2.1常量、變量、標(biāo)識符2.2基本數(shù)據(jù)類型2.3輸入輸出基礎(chǔ)2.4數(shù)據(jù)運(yùn)算2.5表達(dá)式27-8月-242.1常量、變量、標(biāo)識符常量在程序運(yùn)行過程中,其值不能被改變的量稱為常量。變量變量代表內(nèi)存中具有特定屬性的一個存儲單元,它用來存放數(shù)據(jù),也就是變量的值;在程序運(yùn)行期間,這些值是可以改變的。27-8月-24常量字面常量12,0,-3;4.6,-1.23;‘a(chǎn)’,‘d’符號常量(含義清楚,一改全改)#definePRICE30#include<stdio.h>voidmain(){intnum,total;num=10;total=num*PRICE;printf(“total=%d\n”,total);}符號常量增加程序的可讀性提高程序的可維護(hù)性簡化程序的代碼27-8月-24變量3a變量名變量值存儲單元變量名即地址標(biāo)識符就是一個名字C規(guī)定在程序中所有用到的變量都必須在程序中定義對變量的定義,一般是放在一個函數(shù)的開頭部分的聲明部分也可以放在函數(shù)中某一段程序內(nèi),但作用域只限它所在的程序段27-8月-24標(biāo)識符C語言中用來對變量、符號常量、函數(shù)、數(shù)組、類型等數(shù)據(jù)對象命名的有效字符序列統(tǒng)稱為標(biāo)識符C語言規(guī)定標(biāo)識符只能由字母、數(shù)字和下劃線3種字符組成,且第一個字符必須為字母或下劃線。合法Sum,average,_total,day,month,Student_name,tan,lotus_1_2_3,BASIC,li_ling不合法M.D.John,¥123,#33,3D64,a>b27-8月-24C語言中的關(guān)鍵字和預(yù)處理命令autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunionunsignedvoidvolatilewhiledefineundefineincludeifdefifndefendiflineelif27-8月-24標(biāo)識符特點(diǎn)大小寫敏感X、x不同字符長度有限一般前8位,abcdefghijk、abcdefghijm認(rèn)為相同先定義,后使用27-8月-242.2基本數(shù)據(jù)類型2.2.1整型數(shù)據(jù)2.2.2實(shí)型(浮點(diǎn)型)數(shù)據(jù):單精度型、雙精度型2.2.3字符型數(shù)據(jù)27-8月-24C語言數(shù)據(jù)類型一覽27-8月-242.2.1整型數(shù)據(jù):不帶小數(shù)點(diǎn)和指數(shù)符號的數(shù)據(jù)整型常量的表示方法整型變量整型數(shù)據(jù)在內(nèi)存中的存放形式整型變量的分類整型變量的定義整型數(shù)據(jù)的溢出整型常量的類型27-8月-24整型常量的表示方法十進(jìn)制:123,-456,0八進(jìn)制:以數(shù)字符0開頭,并由數(shù)字符0~7組成的數(shù)字符序列。0123=1*82+2*81+3*80=83,-011=-9十六進(jìn)制:表示十六進(jìn)制數(shù)的數(shù)字符有16個,它們分別是0~9和A、B、C、D、E、F,其中六個字母也可以小寫。以0x(或0X)開頭,并由十六進(jìn)制數(shù)的數(shù)字符組成的數(shù)字符序列0x123=1*162+2*161+3*160=291,0xabc=10*162+11*161+12=2748十進(jìn)制與其它進(jìn)制數(shù)據(jù)的轉(zhuǎn)換w進(jìn)制數(shù)據(jù)到十進(jìn)制數(shù)據(jù)的轉(zhuǎn)換w進(jìn)制的數(shù)據(jù)a1a2…an=a1

wn-1+a2

wn-2…+an-1

w+an二進(jìn)制數(shù)1001001轉(zhuǎn)換成十進(jìn)制1001001=127-1+124-1+1=64+8+1=7327-8月-24十進(jìn)制數(shù)據(jù)到w進(jìn)制數(shù)據(jù)的轉(zhuǎn)換十進(jìn)制的數(shù)據(jù)a1a2…an=b1

wn-1+b2

wn-2…+bn-1

w+bn如何求bi(i=1-n)?連續(xù)除以w,并反向取余。十進(jìn)制52轉(zhuǎn)換成16進(jìn)制:52

16=3……4,余數(shù)為4;接著3

16=0……3。所以轉(zhuǎn)換的結(jié)果為34。十進(jìn)制60536轉(zhuǎn)換成16進(jìn)制:60536

16=3783……8;3783

16=236……7;236

16=14……12,12對應(yīng)16進(jìn)制的C;14

16=0……14,14對應(yīng)16進(jìn)制的E,所以最終轉(zhuǎn)換結(jié)果為EC78。27-8月-2427-8月-24整型數(shù)據(jù)在內(nèi)存中的存放方式數(shù)據(jù)在內(nèi)存中是以二進(jìn)制形式存放計算機(jī)只能表示整數(shù)的一個子集數(shù)值以補(bǔ)碼表示正整數(shù)的補(bǔ)碼和該數(shù)的原碼相同負(fù)數(shù)補(bǔ)碼:絕對值按位取反加1原碼,反碼與補(bǔ)碼在機(jī)器內(nèi)部,負(fù)整數(shù)是以補(bǔ)碼(complement)表示的采用補(bǔ)碼,是為了簡化計算負(fù)數(shù)的補(bǔ)碼計算將該數(shù)的絕對值的二進(jìn)制形式,1)按位取反;2)加127-8月-2427-8月-24整型變量的分類整型數(shù)據(jù)按其數(shù)值范圍劃分成三種:基本整型,短整型和長整型intshortint或short

longint或long按值內(nèi)部表示的最高位不同理解又分別有兩類有符號和無符號signedunsigned不帶符號整型存儲一個整數(shù)的存儲單元中的全部二進(jìn)位都用作存放數(shù)據(jù)本身,而不存儲符號位不帶符號整型的標(biāo)記方法不帶符號的基本型:unsignedint不帶符號短整型:unsignedshort不帶符號長整型:unsignedlong27-8月-2427-8月-24整型分類類型標(biāo)識符比特數(shù)取值范圍有符號基本整型[signed]int32-2147483648~2147483647即-231~231-1無符號基本整型unsigned[int]320~4294967295即0~232-1有符號短整型[signed]short[int]16-32768~32767即-215~215-1無符號短整型unsignedshort[int]160~65535即0~216-1有符號長整型[signed]longint32-2147483648~2147483647即-231~231-1無符號長整型unsignedlong[int]320~4294967295即0~232-1常用的整數(shù)表示的數(shù)值范圍用16個二進(jìn)位存儲一個整數(shù)帶符號整數(shù)的數(shù)值范圍是:-32768~32767不帶符號整數(shù)的數(shù)值范圍是:0~65535若用32個二進(jìn)位存儲一個整數(shù)帶符號整數(shù)的數(shù)值范圍是-2147483648~2147483647不帶符號整數(shù)的數(shù)值范圍是0~429496729527-8月-2427-8月-24signedvs.unsigned27-8月-24不同類型的1327-8月-2427-8月-24【例2.2.1.1】整型變量的定義:不同種類的整型數(shù)據(jù)進(jìn)行算術(shù)運(yùn)算#include<stdio.h>voidmain(){

inta,b,c,d;

unsignedu; a=12;b=-24;u=10; c=a+u;d=b+u; printf("a+u=%d,b+u=%d",c,d);}27-8月-24【例2.2.1.2】整型變量的溢出#include<stdio.h>voidmain(){ shortinta,b; a=32767; b=a+1; printf("a=%d,b=%d",a,b);}01111111111111111000000000000000a:b:32767-32768#include<stdio.h>voidmain(){longinta,b;a=2147483647L;b=a+1;printf("%ld,%ld\n",a,b);}思路:a=21478483647;b=a+1;輸出:2147483647,-214748364827-8月-2427-8月-24整型常量的類型普通根據(jù)實(shí)際大小定后綴u或U:無符號整數(shù)12345u-12345u53191后綴l或L:長整型整數(shù)123l432L0L2.2.2浮點(diǎn)型數(shù)據(jù)實(shí)型數(shù)據(jù)(realnumber)又稱浮點(diǎn)數(shù)(floatnumber)因計算機(jī)只能表示有限位的實(shí)數(shù),故實(shí)型數(shù)據(jù)是實(shí)數(shù)的有限子集:實(shí)型數(shù)據(jù)有數(shù)值大?。ǚ秶┖陀行粩?shù)多少(精度)兩個方面實(shí)型有三種類型單精度實(shí)型:用float標(biāo)記,單精度實(shí)型又稱浮點(diǎn)型floatx,y;雙精度實(shí)型:用double標(biāo)記doubleresult;長雙精度實(shí)型:用longdouble標(biāo)記longdoublez;27-8月-2427-8月-24浮點(diǎn)型數(shù)據(jù)浮點(diǎn)型常量的表示方法浮點(diǎn)型變量浮點(diǎn)型數(shù)據(jù)在內(nèi)存中的存放形式浮點(diǎn)型變量的分類浮點(diǎn)型變量的舍入誤差浮點(diǎn)型常量的類型27-8月-24浮點(diǎn)型常量的表示方法C語言中的浮點(diǎn)數(shù)就是平常所說的實(shí)數(shù)格式:正負(fù)號整數(shù)部分.小數(shù)部分

指數(shù)部分十進(jìn)制小數(shù)形式0.123,123.,123.0,0.0指數(shù)形式123e3,123E3都表示123*103規(guī)范化:1.23e5非法:e3,2.1e3.5,.e3,e浮點(diǎn)型數(shù)據(jù)在內(nèi)存中的存放形式計算機(jī)中,是用二進(jìn)制數(shù)來表示小數(shù)部分以及用2的冪次來表示指數(shù)部分的在4個字節(jié)(32位)中,究竟用多少位來表示小數(shù)部分,多少位來表示指數(shù)部分,標(biāo)準(zhǔn)C并無具體規(guī)定,由各C編譯系統(tǒng)自定不少C編譯系統(tǒng)以24位表示小數(shù)部分(包括符號),以8位表示指數(shù)部分(包括指數(shù)的符號)小數(shù)部分占的位(bit)數(shù)愈多,數(shù)的有效數(shù)字愈多,精度愈高;指數(shù)部分占的位數(shù)愈多,則能表示的數(shù)值范圍愈大27-8月-2427-8月-24浮點(diǎn)型數(shù)據(jù)在內(nèi)存中的存放形式+

1.5707951數(shù)符有效數(shù)部分指數(shù)+1.570795

213.1415927-8月-24浮點(diǎn)型變量的分類類型標(biāo)識符有效位比特數(shù)取值范圍單精度浮點(diǎn)型float732-3.4

1038~3.4

1038雙精度浮點(diǎn)型double1564-1.7

10308~1.7

10308長雙精度浮點(diǎn)型longdouble19128-1.2

104932~1.2

104932float型實(shí)型數(shù)據(jù)在內(nèi)存中占用4個字節(jié)(32個二進(jìn)位),約7個十進(jìn)位有效數(shù)字,能表示絕對值最接近0的實(shí)數(shù)約為10的-38次方,最大的實(shí)數(shù)約為10的38次方double型實(shí)型數(shù)據(jù)占用8個字節(jié)(64個二進(jìn)位),約15個十進(jìn)位有效數(shù)字,能表示絕對值最接近0的實(shí)數(shù)約為10的-308次方,最大的實(shí)數(shù)約為10的308次方longdouble型實(shí)型數(shù)據(jù)占用16個字節(jié)(128個二進(jìn)位)。提供的有效數(shù)字位數(shù)、它的取值范圍與機(jī)器和系統(tǒng)的設(shè)定有關(guān)27-8月-24實(shí)型常量的一般書寫格式正負(fù)號整數(shù)部分.小數(shù)部分指數(shù)部分其中,正負(fù)號可有可無,無正負(fù)號即為正實(shí)數(shù);整數(shù)部分和小數(shù)部分都是十進(jìn)數(shù)字符序列;指數(shù)部分是e(或E),接上正負(fù)號和十進(jìn)數(shù)字符序列兩條限制整數(shù)部分和小數(shù)部分可以任選,但不可同時都沒有小數(shù)和指數(shù)部分不可以同時都沒有合法的實(shí)型常數(shù):7.、.457、1E5、1.5e-6不正確的實(shí)型常數(shù):E4、.E5、4.0E用f

標(biāo)識float

型實(shí)型常數(shù)用l(或L)標(biāo)識longdouble

型實(shí)型常數(shù),而無后綴符的實(shí)型常數(shù)被認(rèn)為是double

型的實(shí)型常數(shù)27-8月-24計算機(jī)接受的實(shí)型值與書寫的實(shí)數(shù)會有一定的誤差例如:floatx=111111.111,因x只有約7位有效數(shù)字,實(shí)數(shù)111111.111所對應(yīng)的二進(jìn)制形式中,超出存儲位數(shù)的那些位就不會被存儲由于實(shí)數(shù)運(yùn)算的計算誤差,兩個數(shù)學(xué)上完全等價的計算公式,會因計算順序不同,得到的兩個結(jié)果不能保證相等27-8月-2427-8月-24【例2.2.2.4】浮點(diǎn)型變量的舍入誤差#include<stdio.h>voidmain(){ floata,b; a=123456.789e5; b=a+20; printf("a=%f,b=%f",a,b);}準(zhǔn)確應(yīng)該是:12345678920

運(yùn)行結(jié)果:a=b=12345678848.00000027-8月-2427-8月-24浮點(diǎn)型變量的計算誤差要判段兩個浮點(diǎn)型變量是否相等不能簡單地用x==y來比較一般采用以下方式fabs(x-y)<1e-6fabs(x-y)<fabs(x*1e-6)27-8月-24浮點(diǎn)型常量的類型缺?。弘p精度強(qiáng)制:可以單精度2.2.3字符型數(shù)據(jù)字符型數(shù)據(jù)用于表示字符及其代表的值字符型數(shù)據(jù)的內(nèi)部表示是字符的ASCII代碼(二進(jìn)制形式)字符型數(shù)據(jù)的類型符用char

來標(biāo)記charc1,c2;/*定義兩個字符變量*/字符型數(shù)據(jù)占一個字節(jié)(8位二進(jìn)位)表示,也可當(dāng)作一個8位的整型數(shù)據(jù)27-8月-24字符a、b的存儲27-8月-24字符輸出27-8月-2427-8月-24字符型數(shù)據(jù)字符常量字符變量字符數(shù)據(jù)在內(nèi)存中的存儲形式及其使用方法字符串常量27-8月-24字符常量字符型常量是單個字符,它的書寫方法:普通字符:用單引號括起一個字符,如’a’特殊字符:用’\字符或字符列’來標(biāo)記,如’\r’、’\n’’\t’。這種方法就能表示特殊字符#include<stdio.h>voidmain(){printf("_ab_c\t_de\rf\tg\n");printf("h\ti\b\bj_k\n");}27-8月-24printf("abc\tde\rf\tg\n");輸出:fgde具體解答過程如下:

1、\t將當(dāng)前位置填充為8個字符的倍數(shù),不足的補(bǔ)空格;

2、所以"abc\t"=>"abc",最后3個空格

3、"abc\tde"=>"abcde",共11字符,de前4個空格;

4、\r將光標(biāo)移動到當(dāng)前行最前,后面輸出的字符會覆蓋原有的;

5、所以"f\tg"=>"fg",9字符,覆蓋原有的9個,最終為"fgde"。27-8月-24‘\b’:在C程序中,向左移動光標(biāo)27-8月-2427-8月-24字符變量字符變量的定義:charc1,c2;賦值:c1=‘a(chǎn)’,c2=‘b’;存儲:一個字節(jié)(8比特)存放一個字符字符數(shù)據(jù)在內(nèi)存中的存儲形式#include<stdio.h>voidmain(){charc1,c2;/*定義兩個字符型變量*/c1=97;/*’a’的ASCII碼值為97*/c2=c1+1;/*字符型與整型數(shù)據(jù)混合運(yùn)算*/printf("c1=%c,c2=%c\n",c1,c2);printf("%c'sASCIIcode=%d\n",c2,c2);}程序輸出:

c1=a,c2=bb'sASCIIcode=9827-8月-2427-8月-24【例2.2.3.2】字符型與整型數(shù)據(jù)混合運(yùn)算#include<stdio.h>voidmain(){ charc1,c2;

c1='a';

c2='b'; printf("%c%c\n",c1,c2);

c1=c1-(‘a(chǎn)’-’A’);

c2=c2-(‘a(chǎn)’-’A’); printf("%c%c\n",c1,c2);}27-8月-24【例2.2.3.3】將小寫字母轉(zhuǎn)換為大寫字母#include<stdio.h>voidmain(){ charc1,c2; printf("Pleaseinputalowcasecharacter:"); scanf("%c",&c1); c2=c1-32; printf("Theuppercaseis%c\n",c2);}字符串常量字符型常量與字符串常量書寫形式的區(qū)別字符串常量是一對雙引號括起來的字符序列"Iamastudent.“"China","a","$1234.00"字符型常量’a’與字符串常量“a”不同,不允許將字符串常量賦給字符變量字符型數(shù)據(jù)可與整型數(shù)據(jù)混合運(yùn)算由于字符型數(shù)據(jù)以ASCII代碼的二進(jìn)制形式存儲,它與整數(shù)的存儲形式相類似。因此,在C程序中,字符型數(shù)據(jù)和整型數(shù)據(jù)之間可以通用,字符型數(shù)據(jù)與整型數(shù)據(jù)可混合運(yùn)算。一個字符型數(shù)據(jù)可以用字符格式("%c")輸出,顯示字符本身;也可以用整數(shù)形式輸出,顯示字符的ASCII碼值27-8月-24C規(guī)定:在每一個字符串的結(jié)尾加一個“字符串結(jié)束標(biāo)志”,以便系統(tǒng)據(jù)此判斷字符串是否結(jié)束。C規(guī)定以字符‘\0’作為字符串結(jié)束標(biāo)志‘\0’是一個ASCII碼為0的字符,這是“空操作字符”,不引起任何控制動作,也不是一個可顯示的字符如果有一個字符串“CHINA”,實(shí)際上在內(nèi)存中是CHINA\0,它的長度不是5個字符,而是6個字符,最后一個字符為‘\0’,但在輸出時不輸出‘\0’C中沒有專門的字符串變量,如果想將一個字符串存放在變量中,必須使用字符數(shù)組27-8月-2427-8月-24字符串常量字符串常量是由一對雙引號括起來的字符序列“”Howdoyoudo”,“CHINA”,“a”,“$123.45”CHINA\0aa\0‘a(chǎn)’“a”“CHINA”27-8月-242.3輸入輸出基礎(chǔ)小到一個程序,大到一個軟件系統(tǒng),都是“輸入—處理—輸出”的模式。輸出設(shè)備:顯示器,打印機(jī)等輸入設(shè)備:鍵盤,鼠標(biāo),掃描儀等C語言本身不提供輸入輸出語句,輸入輸出操作是由C函數(shù)庫中的函數(shù)來實(shí)現(xiàn)的。在使用系統(tǒng)庫函數(shù)時,要使用預(yù)編譯命令“”#include”將有關(guān)的頭文件包含到用戶源文件中。#include<stdio.h>#include“stdio.h”27-8月-242.3.1格式輸入和輸出格式輸出函數(shù)printf()格式輸入函數(shù)scanf()27-8月-24格式輸出函數(shù)printf()一般形式格式字符27-8月-24一般形式printf(輸出格式控制字符串,輸出表列)printf(“%d,%c\n”,

i,c);輸出格式控制字符串:雙引號括起的字符串轉(zhuǎn)義字符:按轉(zhuǎn)義字符的意義輸出,如’\n’,‘\b’輸出格式轉(zhuǎn)換說明:由若干輸出格式組成輸出格式用“%”開頭,后加輸出修飾符和輸出格式符組成;輸出修飾符可以缺省普通字符:按原樣輸出輸出表列需要輸出的一些數(shù)據(jù),可以是表達(dá)式,用逗號分隔【例2.3.1.2】a=3,b=4;printf(“a=%db=%d\n”,a,b);輸出:a=3b=4printf(參數(shù)1,參數(shù)2,參數(shù)3,…,參數(shù)n);27-8月-2427-8月-24輸出格式控制字符串的一般形式%[-][+][][#][w][.p][h/l/L]輸出格式符27-8月-24輸出格式符格式字符說明d,i以十進(jìn)制形式輸出整型數(shù)據(jù)u以無符號十進(jìn)制形式輸出整型數(shù)據(jù)o以八進(jìn)制無符號形式輸出整型數(shù)據(jù)x,X以十六進(jìn)制無符號形式輸出整型數(shù)據(jù)c以字符形式輸出,只輸出一個字符s輸出字符串f以小數(shù)形式輸出單、雙精度數(shù)e,E以指數(shù)形式輸出單、雙精度數(shù)g,G選用f或e格式輸出寬度較短的一種格式27-8月-24輸出格式修飾符字符說明h/l/L指明輸出項(xiàng)的類型w數(shù)據(jù)最小寬度p對實(shí)數(shù),表示輸出p位小數(shù);對字符串,表示截取的字符個數(shù)-輸出的數(shù)字或字符在域內(nèi)向左靠+正數(shù)也帶符號輸出空格若對應(yīng)輸出的數(shù)值數(shù)據(jù)是個正數(shù),符號用空格代替#適用于八進(jìn)制數(shù),十六進(jìn)制數(shù)和浮點(diǎn)數(shù)格式輸出27-8月-24【例2.3.1.3】printf("%d,%+6d,%-6d,%ld\n",1234,1234,1234,1234567L);printf("%#o,%4o,%6lo\n",045,045,-1);printf("%#x,%4x,%6lX\n",045,045,-1);printf("%d,%4u,%lu\n",4294967295u,4294967295u,-1);printf("%c,%-3c,%2c\n",045,'a','a');/*045對應(yīng)的字符是%*/printf("%f,%8.3f,%-7.2f,%.7f\n",123.4567f,123.4567f,123.4567f,123.456789);1234,+1234,1234,1234567045,45,377777777770x25,25,FFFFFFFF-1,4294967295,4294967295%,a,a123.456703,123.457,123.46,123.456789027-8月-24格式輸入函數(shù)scanf()格式輸入函數(shù)scanf()的一般形式格式說明使用scanf函數(shù)時應(yīng)注意的問題27-8月-24格式輸入函數(shù)scanf()的一般形式scanf(輸入格式控制字符串,數(shù)據(jù)存儲地址表列)scanf(“%d%d%d”,&a,&b,&c);輸入格式控制字符串包含輸入格式轉(zhuǎn)換說明和普通字符兩種信息數(shù)據(jù)存儲地址表列是由若干個地址組成的表列,可以是變量的地址,或字符串的首地址27-8月-24輸入格式轉(zhuǎn)換說明的一般形式%[*][w][h/l/L]輸入格式符27-8月-24格式說明格式字符說明d,i用來輸入十進(jìn)制整數(shù)u用來輸入無符號十進(jìn)制整數(shù)o,O用來輸入八進(jìn)制整數(shù)x,X用來輸入十六進(jìn)制整數(shù)c用來輸入一個字符s用來輸入字符串f用來輸入實(shí)數(shù)e,E,g,G與f相同27-8月-24附加格式說明字符說明l修飾d,o,x,u時,表示輸入長整型整數(shù);修飾e,f,g時,表示輸入的實(shí)數(shù)按double型存儲L表示輸入的實(shí)數(shù)按longdouble型存儲h用于輸入短整型數(shù)據(jù)w指定輸入數(shù)據(jù)所占寬度(列數(shù))*表示本輸入項(xiàng)在讀入后不賦給相應(yīng)的變量【例2.3.1.4】

scanf("%d,%d",&i,&j); printf("%d,%d\n",i,j); scanf("%d%d",&i,&j); printf("%d,%d\n",i,j); scanf("%2d%3d",&i,&j); printf("%d,%d\n",i,j); scanf("%d%*d%d",&i,&j); printf("%d,%d\n",i,j);輸入:1,234567890輸出:1,23,456,78,027-8月-2427-8月-24使用scanf函數(shù)時應(yīng)注意的問題“輸入格式控制字符串”后面應(yīng)該是變量地址,而不應(yīng)該是變量名若在“輸入格式控制”字符串中除了格式說明以外還有其他字符,則在輸入數(shù)據(jù)時應(yīng)該在對應(yīng)位置輸入與這些字符相同的字符在用“%c”格式輸入字符時,空格字符和“轉(zhuǎn)義字符”都作為有效字符輸入在輸入數(shù)據(jù)時,遇以下情況時認(rèn)為該數(shù)據(jù)結(jié)束遇空格,或按“回車”或Tab鍵按指定的寬度結(jié)束,如“%3d”遇非法輸入C++的輸出流cout和輸入流cin使用cout或cin的C++程序包含頭文件#include<iostream>:cout標(biāo)準(zhǔn)輸出(屏幕)cin標(biāo)準(zhǔn)輸入(鍵盤)輸出流cout輸出流cout輸出數(shù)據(jù)的一般格式為:cout

<<表達(dá)式1

<<表達(dá)式2<<……<<表達(dá)式n;功能:從屏幕當(dāng)前光標(biāo)的位置處開始,將各表達(dá)式的值依次輸出。輸出流cout(續(xù))①<<流插入運(yùn)算符,將表達(dá)式的數(shù)據(jù)依次插入到內(nèi)存緩沖區(qū),當(dāng)遇到內(nèi)存緩沖區(qū)滿、輸出換行符endl或清除緩沖區(qū)的流格式控制符flush時,才將緩沖區(qū)的數(shù)據(jù)輸出到屏幕上,并清空緩沖區(qū)。②一個流插入運(yùn)算符后只能插入一個輸出項(xiàng)。如果有多個輸出項(xiàng),需要有多個流插入運(yùn)算符,第一行代碼是錯誤的,第二行代碼是正確的:cout<<x,y,z;cout<<x<<y<<z;輸入流cin使用輸入流cin輸入數(shù)據(jù)的一般格式為:cin>>變量1>>變量2>>……>>變量n;功能:程序暫停執(zhí)行,等待用戶從鍵盤上輸入數(shù)據(jù)。用戶輸入了所有的數(shù)據(jù)以后以【Enter】鍵表示輸入結(jié)束。程序?qū)⒂脩糨斎氲臄?shù)據(jù)依次賦值給各變量,并繼續(xù)運(yùn)行后續(xù)語句。輸入流cin(續(xù))①>>流提取運(yùn)算符將輸入緩沖區(qū)的數(shù)據(jù)提取出來,并賦值給變量。②輸入數(shù)值數(shù)據(jù)前導(dǎo)的空白類字符被自動忽略,符合類型要求的數(shù)據(jù)被接受。遇到不符合類型要求的字符后,將結(jié)束一個數(shù)值數(shù)據(jù)的輸入。連續(xù)輸入多個數(shù)值數(shù)據(jù)時,數(shù)據(jù)之間以空白符或【Enter】鍵作為數(shù)值數(shù)據(jù)的分隔符。③輸入字符數(shù)據(jù)前導(dǎo)的空白類字符被忽略,接下來輸入的非空白類字符被輸入和存儲,字符變量只接收一個字符,字符數(shù)組變量接受一串非空白類字符。④在使用cin時,變量名前不再有取地址運(yùn)算符&。27-8月-242.3.2單個字符的輸入輸出單個字符的輸入輸出voidputchar(charc)向終端輸出一個字符intgetchar()從終端輸入一個字符字符輸出函數(shù):putchar()字符輸出函數(shù)的功能函數(shù)調(diào)用putchar(ch)將實(shí)參ch的值作為ASCII碼,輸出該代碼對應(yīng)的字符到標(biāo)準(zhǔn)輸出設(shè)備上putchar()的使用方法調(diào)用函數(shù)時,需提供一個實(shí)參,實(shí)參可以是字符型或整型數(shù)據(jù),包括字符型常量(包括控制字符和轉(zhuǎn)義字符),字符型變量,整型變量等#include<stdio.h>voidmain(){charch;inti;ch=’h’;i=’i’;putchar(’C’);/*輸出字符C*/putchar(ch);/*輸出字符h*/putchar(i);/*以字符形式輸出整型變量值*/putchar(’n’);putchar(’\141’);/*輸出字符a*/putchar(’\n’);}運(yùn)行該程序?qū)⑤敵?China

\141:141,八進(jìn)制數(shù);97,十進(jìn)制,字符,’a’27-8月-24字符輸入函數(shù):getchar()從標(biāo)準(zhǔn)輸入設(shè)備上讀取一個字符。該函數(shù)沒有參數(shù),對它的每次調(diào)用,就返回下一個輸入字符的ASCII碼值執(zhí)行語句:“ch=getchar();”使變量ch得到輸入字符的ASCII碼值。變量ch為char型或int型#include<stdio.h>voidmain(){charc;c=getchar();/*調(diào)用getchar()不要參數(shù)*/putchar(c);/*輸出讀入的字符*/putchar(’\n’);}程序運(yùn)行時,如果從鍵盤鍵入字符Z和回車:

Z程序輸出c的值’Z’:Z/*輸入字符,輸出字符及其代碼*/#include<stdio.h>voidmain(){charc1,c2;c1=getchar();/*輸入一個字符*/c2=getchar();/*再輸入一個字符*/putchar(c1);putchar(c2);printf("code1=%dcode2=%d\n",c1,c2);}27-8月-242.4數(shù)據(jù)運(yùn)算C語言運(yùn)算符簡介賦值運(yùn)算27-8月-24C語言運(yùn)算符簡介賦值運(yùn)算符(=及其擴(kuò)展賦值運(yùn)算符)算術(shù)運(yùn)算符(+-*/%)關(guān)系運(yùn)算符(><==>=<=!=)邏輯運(yùn)算符(!&&||)條件運(yùn)算符(?:)位運(yùn)算符(<<>>~|^&)求字節(jié)數(shù)運(yùn)算符(sizeof)強(qiáng)制類型轉(zhuǎn)換運(yùn)算符((類型))逗號運(yùn)算符(,)下標(biāo)運(yùn)算符([])指針運(yùn)算符(*&)分量運(yùn)算符(.->)其它(如函數(shù)調(diào)用運(yùn)算符())27-8月-242.4.1賦值運(yùn)算變量

=表達(dá)式a=3;運(yùn)算過程:計算賦值運(yùn)算符右端的表達(dá)式當(dāng)賦值運(yùn)算符兩側(cè)的類型不一致時,將表達(dá)式值的類型自動轉(zhuǎn)換成變量的類型將表達(dá)式的值賦給變量賦值運(yùn)算y=x=3.5;/*右結(jié)合*/賦值運(yùn)算符右結(jié)合,即,自右向左:y=x=3.5;//3.5先賦給x;然后,再把x的值給y。27-8月-2427-8月-24【例2.4.1.1】變量賦初值inta=3;floatf=3.56;charc=‘a(chǎn)’;inta,b,c=5;inta=3,b=3,c=3;inta=b=c=3;(錯誤)inta=b=c=3;定義的時候是不能這樣連等賦值的,因?yàn)楹竺娴淖兞窟€沒有定義,不對;inta,b,c;a=b=c=3;對。先定義后,然后就可以連等賦值了27-8月-24賦值表達(dá)式的形式:變量=表達(dá)式;賦值運(yùn)算表達(dá)式返回左式的值。【例2.4.1.2】賦值運(yùn)算表達(dá)式返回左式的值。inta=3,b,c;b=a;//b是左式的值c=b;//c是左式的值a=(b=c+5);//賦值運(yùn)算,返回左式a的值,b和a的值是8【例2.4.1.3】賦值運(yùn)算表達(dá)式返回左式的值。inta,b=10,c=-1;(a=b)=c;//a=-1,b=10,c=-127-8月-24復(fù)合的賦值運(yùn)算符a+=b;

a=a+b;x*=u+v;

x=x*(u+v);+=,-=,*=,/=,%=,<<=,>>=,&=,^=,|=簡化程序提高編譯效率:“a+=b;”,變量a僅被計算了一次【例2.4.1.4】賦值運(yùn)算表達(dá)式返回左式的值,復(fù)合賦值運(yùn)算。inta,c;a=1;c=(a*=2)+(a+=3);//a=5,c=72.4.2算術(shù)運(yùn)算一般算術(shù)運(yùn)算算術(shù)表達(dá)式和運(yùn)算符的優(yōu)先級和結(jié)合性不同類型數(shù)據(jù)間的混合運(yùn)算自增(++)自減(--)運(yùn)算符27-8月-24一般算術(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)5/3=1,5.0/3.0=1.666667,-5/3=-1%(模運(yùn)算符,或求余運(yùn)算符,如7%4)兩側(cè)均應(yīng)為整型數(shù)據(jù)-5%3=-2,5%(-3)=2a%b與a-(a/b)*b值相等-5%3=(-5)-(-5/3)*3=-5+3=-25%(-3)=5-(5/(-3))*3=227-8月-24算術(shù)表達(dá)式和運(yùn)算符的優(yōu)先級和結(jié)合性優(yōu)先級結(jié)合性自動類型轉(zhuǎn)換inta=3,b=4,c=5;a*b/c-1.5+’a’97.500000不同類型數(shù)據(jù)間的混合運(yùn)算+、-、*、/運(yùn)算的兩個數(shù)中有一個數(shù)為float或double型,結(jié)果是double型,因?yàn)橄到y(tǒng)將所有float型數(shù)據(jù)都先轉(zhuǎn)換為double型,然后進(jìn)行運(yùn)算。如果int型與float或double型數(shù)據(jù)進(jìn)行運(yùn)算,先把int型和float型數(shù)據(jù)轉(zhuǎn)換為double型,然后進(jìn)行運(yùn)算,結(jié)果是double型。字符(char)型數(shù)據(jù)與整型數(shù)據(jù)進(jìn)行運(yùn)算,就是把字符的ASCII代碼與整型數(shù)據(jù)進(jìn)行運(yùn)算。如果字符型數(shù)據(jù)與實(shí)型數(shù)據(jù)進(jìn)行運(yùn)算,則將字符的ASCII代碼轉(zhuǎn)換為double型數(shù)據(jù),然后進(jìn)行運(yùn)算。27-8月-2427-8月-24不同類型數(shù)據(jù)間的混合運(yùn)算高doublefloatlongunsigned低intchar,shortinti;floatf;doubled;longinte;10+′a′+i*f-d/e,運(yùn)算結(jié)果為double類型27-8月-24inti=3,j;

floatf=2.5;

doubled=7.5;

printf("%lf",10+'a'+i*f-d/3);10+'a'+i*f-d/3①進(jìn)行10+′a′的運(yùn)算,′a′的值是整數(shù)97,運(yùn)算結(jié)果為107。②由于“*”比“+”優(yōu)先級高,先進(jìn)行i*f的運(yùn)算。先將i與f都轉(zhuǎn)成double型,運(yùn)算結(jié)果為7.5,double型。③整數(shù)107與i*f的積相加。先將整數(shù)107轉(zhuǎn)換成雙精度數(shù),相加結(jié)果為114.5,double型。④進(jìn)行d/3的運(yùn)算,先將3轉(zhuǎn)換成double型,d/3結(jié)果為2.5,double型。⑤將10+′a′+i*f的結(jié)果114.5與d/3的商2.5相減,結(jié)果為112.0,double型。27-8月-24自增(++)自減(--)運(yùn)算符++i,--i在使用i之前,先使i的值加(減)1i++,i--在使用i之后,使i的值加(減)1++i是先執(zhí)行i=i+1,再使用i的值;i++是先使用i的值,再執(zhí)行i=i+1。--i和i--同理?!纠?.4.2.4】inti=1,j;j=++i; //i的值先加1變成2,再賦給j,j的值為2j=i++;

//先將i的值2賦給j,j的值為2,然后i再加1變成3printf("%d",++i); //輸出4printf("%d",i++); //輸4,然后i再加1變成5自增和自減運(yùn)算,最簡單的形式,即i++,i--,且把它們作為單獨(dú)的表達(dá)式。【例2.4.2.5】d=(i++)+(i++)+(i++);該語句等價于如下程序段:a=i++;b=i++;c=i++;d=a+b+c;C語言語句d=i+++j;等價于d=(i++)+j;C語言語句printf("%d,%d",i,i++);等價于:j=i++;printf("%d,%d",i,j);運(yùn)行如下程序,闡述結(jié)果#include<stdio.h>voidmain(){ inti,j; i=3; j=++i; printf("i=%d,j=%d\n",i,j); i=3; j=i++; printf("i=%d,j=%d\n",i,j);}27-8月-2427-8月-24有關(guān)表達(dá)式使用中的問題說明d=(i++)+(i++)+(i++);a=i++;b=i++;c=i++;d=a+b+c;d=i+++j;d=(i++)+j;printf("%d,%d",i,i++);j=i++;printf(“%d,%d”,i,j);27-8月-242.4.3關(guān)系運(yùn)算和邏輯運(yùn)算關(guān)系運(yùn)算符和關(guān)系表達(dá)式邏輯運(yùn)算符和邏輯表達(dá)式27-8月-24關(guān)系運(yùn)算符及其優(yōu)先次序<(小于)<=(小于或等于)>(大于)>=(大于或等于)==(等于)!=(不等于)優(yōu)先級相同(高)優(yōu)先級相同(低)算術(shù)運(yùn)算符(高)關(guān)系運(yùn)算符賦值運(yùn)算符(低)c>a+b等效于c>(a+b)a>b==c等效于(a>b)==c27-8月-24關(guān)系表達(dá)式a>b,a+b>b+c,(a=3)>(b=5),‘a(chǎn)’<‘b’,‘a(chǎn)’>‘b’C語言沒有邏輯型數(shù)據(jù),在C的邏輯運(yùn)算中,以‘1’表示“真”,以‘0’表示“假”a=3,b=2,c=1a>b(a>b)==cb+c<ad=a>bf=a>b>c【例2.4.3.1】關(guān)系表達(dá)式3>=5,結(jié)果為0;‘a(chǎn)’<‘b’,結(jié)果為1?!纠?.4.3.2】表達(dá)式x>y==c<d,等價于(x>y)==(c<d);該表達(dá)式的意義是x>y與c<d,或者同時成立,或者同時不成立。a>b==c,等價于(a>b)==c?!纠?.4.3.3】關(guān)系運(yùn)算符的結(jié)合方向是自左向右的。i=1;j=2;k=3;則表達(dá)式k>j>i的值為0。該表達(dá)式的計算過程先計算k>j,條件滿足(真),結(jié)果為1;再計算1>i,條件不滿足(假),結(jié)果為0。【例2.4.3.4】c>a+b等價于c>(a+b)。【例2.4.3.5】設(shè)a=3;b=2;c=1;則表達(dá)式f=a>b>c的值是0。計算過程f=((a>b)>c)。先計算a>b,條件滿足(真),結(jié)果為1;再計算1>c,條件不滿足(假),結(jié)果為0。將0賦值給f。27-8月-24邏輯運(yùn)算符和邏輯表達(dá)式邏輯運(yùn)算符及其優(yōu)先次序邏輯表達(dá)式27-8月-24邏輯運(yùn)算符及其優(yōu)先次序

!(高)算術(shù)運(yùn)算符關(guān)系運(yùn)算符&&和||賦值運(yùn)算符(低)a>b&&x>y等效于(a>b)&&(x>y)a==b||x==y等效于(a==b)||(x==y)!a||a>b等效于(!a)||(a>b)運(yùn)算符名稱舉例說明&&邏輯與a&&b若a,b為真,則a&&b為真||邏輯或a||b若a,b之一為真,則a||b為真!邏輯非!a若a為真,則!a為假27-8月-24邏輯表達(dá)式C語言編譯系統(tǒng)在表示邏輯運(yùn)算結(jié)果時,以數(shù)值1代表真,以0代表假但在判斷一個量是否為“真”時,以0代表“假”,以非零代表“真”a=4,b=5!aa&&ba||b!a||b‘a(chǎn)’||’b’27-8月-24邏輯表達(dá)式的運(yùn)算次序在邏輯表達(dá)式的求解中,并不是所有的邏輯運(yùn)算符都被執(zhí)行,只是在必須執(zhí)行下一個邏輯運(yùn)算符才能求出表達(dá)式的解時,才執(zhí)行該運(yùn)算符。a&&b&&ca||b||ca=1,b=2,c=3,d=4,m=1,n=1(m=a>b)&&(n=c>d)【例2.4.3.6】a>b&&x>y等價于

(a>b)&&(x>y);a==b||x==y等價于

(a==b)||(x==y);!a||a>b等價于

(!a)||(a>b)。27-8月-24【例2.4.3.7】判斷用year表示的某一年是否閏年符合下面兩個條件之一的年份是閏年:a.能被4整除但不能被100整除,如2008;b.能被100整除且能被400整除,如2000。(year%4==0&&year%100!=0)||(year%400==0)27-8月-242.4.4條件運(yùn)算

if(a>b) max=a; else max=b; max=(a>b)?a:b;條件運(yùn)算符有3個操作對象,稱三目運(yùn)算符,條件表達(dá)式的一搬形式為:表達(dá)式1?表達(dá)式2:表達(dá)式3表達(dá)式1

?

表達(dá)式2

:

表達(dá)式3條件運(yùn)算的執(zhí)行過程:①計算表達(dá)式1;②如果表達(dá)式1的值非0(真),則計算表達(dá)式2,并以表達(dá)式2的值為條件運(yùn)算的結(jié)果(不再計算表達(dá)式3);③如果表達(dá)式1的值為0(假),則計算表達(dá)式3,并以表達(dá)式3的值為條件運(yùn)算的結(jié)果(不再計算表達(dá)式2);27-8月-24例子輸入一個字符,判斷它是否大寫,如果是,將它轉(zhuǎn)換成小寫字母,如果不是,不轉(zhuǎn)換。然后輸出最后得到的字符。ch=(ch>=‘A’&&ch<=‘Z’)?(ch-’A’+’a’):ch【例2.4.4.1】條件表達(dá)式x<0?y=10:z=20;【例2.4.4.2】使用條件表達(dá)式的返回值進(jìn)行賦值。a=(x>100)?0:1;2.4.5其他運(yùn)算位運(yùn)算移位運(yùn)算sizeof運(yùn)算逗號運(yùn)算類型轉(zhuǎn)換27-8月-24位運(yùn)算位運(yùn)算的操作數(shù)只能是整型或字符型數(shù)據(jù),它把運(yùn)算對象看作是由二進(jìn)位組成的位串信息位運(yùn)算符:名稱符號位反~位與&位異或^位或|27-8月-24位與運(yùn)算&0&0=0,0&1=0,1&0=0,1&1=1兩種典型用法取一個位串的某幾位截取x的最低7位的方法:x&0177保留變量的某幾位,其余位置0保留變量x的最低6位:x=x&0770000000000110101(十進(jìn)制53,八進(jìn)制為65)&0000000000010110(十進(jìn)制22,八進(jìn)制為26)0000000000010100(十進(jìn)制20,八進(jìn)制為24)最低的2進(jìn)制7位為1111111,轉(zhuǎn)換成8進(jìn)制后為0177,則這里x=x&0177;則是將x和這個8進(jìn)制數(shù)轉(zhuǎn)換成2進(jìn)制,然后按位取與。獲取x的最低7位就是將它與0177取與因?yàn)槿魏闻c1取與的數(shù)都是其本身:1101(原數(shù))&1111(與之取與)=1101(結(jié)果)x=130,10000010(130的2進(jìn)制數(shù))&01111111(8進(jìn)制數(shù)0177的二

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論