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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

wn-1+a2

wn-2…+an-1

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

wn-1+b2

wn-2…+bn-1

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

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

16=0……3。所以轉換的結果為34。十進制60536轉換成16進制:60536

16=3783……8;3783

16=236……7;236

16=14……12,12對應16進制的C;14

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

longint或long按值內部表示的最高位不同理解又分別有兩類有符號和無符號signedunsigned不帶符號整型存儲一個整數(shù)的存儲單元中的全部二進位都用作存放數(shù)據本身,而不存儲符號位不帶符號整型的標記方法不帶符號的基本型:unsignedint不帶符號短整型:unsignedshort不帶符號長整型:unsignedlong27-8月-2427-8月-24整型分類類型標識符比特數(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個二進位存儲一個整數(shù)帶符號整數(shù)的數(shù)值范圍是:-32768~32767不帶符號整數(shù)的數(shù)值范圍是:0~65535若用32個二進位存儲一個整數(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ù)據進行算術運算#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整型常量的類型普通根據實際大小定后綴u或U:無符號整數(shù)12345u-12345u53191后綴l或L:長整型整數(shù)123l432L0L2.2.2浮點型數(shù)據實型數(shù)據(realnumber)又稱浮點數(shù)(floatnumber)因計算機只能表示有限位的實數(shù),故實型數(shù)據是實數(shù)的有限子集:實型數(shù)據有數(shù)值大小(范圍)和有效位數(shù)多少(精度)兩個方面實型有三種類型單精度實型:用float標記,單精度實型又稱浮點型floatx,y;雙精度實型:用double標記doubleresult;長雙精度實型:用longdouble標記longdoublez;27-8月-2427-8月-24浮點型數(shù)據浮點型常量的表示方法浮點型變量浮點型數(shù)據在內存中的存放形式浮點型變量的分類浮點型變量的舍入誤差浮點型常量的類型27-8月-24浮點型常量的表示方法C語言中的浮點數(shù)就是平常所說的實數(shù)格式:正負號整數(shù)部分.小數(shù)部分

指數(shù)部分十進制小數(shù)形式0.123,123.,123.0,0.0指數(shù)形式123e3,123E3都表示123*103規(guī)范化:1.23e5非法:e3,2.1e3.5,.e3,e浮點型數(shù)據在內存中的存放形式計算機中,是用二進制數(shù)來表示小數(shù)部分以及用2的冪次來表示指數(shù)部分的在4個字節(jié)(32位)中,究竟用多少位來表示小數(shù)部分,多少位來表示指數(shù)部分,標準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浮點型數(shù)據在內存中的存放形式+

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

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

1038~3.4

1038雙精度浮點型double1564-1.7

10308~1.7

10308長雙精度浮點型longdouble19128-1.2

104932~1.2

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

標識float

型實型常數(shù)用l(或L)標識longdouble

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

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

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

來標記charc1,c2;/*定義兩個字符變量*/字符型數(shù)據占一個字節(jié)(8位二進位)表示,也可當作一個8位的整型數(shù)據27-8月-24字符a、b的存儲27-8月-24字符輸出27-8月-2427-8月-24字符型數(shù)據字符常量字符變量字符數(shù)據在內存中的存儲形式及其使用方法字符串常量27-8月-24字符常量字符型常量是單個字符,它的書寫方法:普通字符:用單引號括起一個字符,如’a’特殊字符:用’\字符或字符列’來標記,如’\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將當前位置填充為8個字符的倍數(shù),不足的補空格;

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

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

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

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

c1='a';

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

c1=c1-(‘a’-’A’);

c2=c2-(‘a’-’A’); printf("%c%c\n",c1,c2);}27-8月-24【例2.2.3.3】將小寫字母轉換為大寫字母#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ù)據可與整型數(shù)據混合運算由于字符型數(shù)據以ASCII代碼的二進制形式存儲,它與整數(shù)的存儲形式相類似。因此,在C程序中,字符型數(shù)據和整型數(shù)據之間可以通用,字符型數(shù)據與整型數(shù)據可混合運算。一個字符型數(shù)據可以用字符格式("%c")輸出,顯示字符本身;也可以用整數(shù)形式輸出,顯示字符的ASCII碼值27-8月-24C規(guī)定:在每一個字符串的結尾加一個“字符串結束標志”,以便系統(tǒng)據此判斷字符串是否結束。C規(guī)定以字符‘\0’作為字符串結束標志‘\0’是一個ASCII碼為0的字符,這是“空操作字符”,不引起任何控制動作,也不是一個可顯示的字符如果有一個字符串“CHINA”,實際上在內存中是CHINA\0,它的長度不是5個字符,而是6個字符,最后一個字符為‘\0’,但在輸出時不輸出‘\0’C中沒有專門的字符串變量,如果想將一個字符串存放在變量中,必須使用字符數(shù)組27-8月-2427-8月-24字符串常量字符串常量是由一對雙引號括起來的字符序列“”Howdoyoudo”,“CHINA”,“a”,“$123.45”CHINA\0aa\0‘a’“a”“CHINA”27-8月-242.3輸入輸出基礎小到一個程序,大到一個軟件系統(tǒng),都是“輸入—處理—輸出”的模式。輸出設備:顯示器,打印機等輸入設備:鍵盤,鼠標,掃描儀等C語言本身不提供輸入輸出語句,輸入輸出操作是由C函數(shù)庫中的函數(shù)來實現(xiàn)的。在使用系統(tǒng)庫函數(shù)時,要使用預編譯命令“”#include”將有關的頭文件包含到用戶源文件中。#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);輸出格式控制字符串:雙引號括起的字符串轉義字符:按轉義字符的意義輸出,如’\n’,‘\b’輸出格式轉換說明:由若干輸出格式組成輸出格式用“%”開頭,后加輸出修飾符和輸出格式符組成;輸出修飾符可以缺省普通字符:按原樣輸出輸出表列需要輸出的一些數(shù)據,可以是表達式,用逗號分隔【例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以十進制形式輸出整型數(shù)據u以無符號十進制形式輸出整型數(shù)據o以八進制無符號形式輸出整型數(shù)據x,X以十六進制無符號形式輸出整型數(shù)據c以字符形式輸出,只輸出一個字符s輸出字符串f以小數(shù)形式輸出單、雙精度數(shù)e,E以指數(shù)形式輸出單、雙精度數(shù)g,G選用f或e格式輸出寬度較短的一種格式27-8月-24輸出格式修飾符字符說明h/l/L指明輸出項的類型w數(shù)據最小寬度p對實數(shù),表示輸出p位小數(shù);對字符串,表示截取的字符個數(shù)-輸出的數(shù)字或字符在域內向左靠+正數(shù)也帶符號輸出空格若對應輸出的數(shù)值數(shù)據是個正數(shù),符號用空格代替#適用于八進制數(shù),十六進制數(shù)和浮點數(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對應的字符是%*/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ù)時應注意的問題27-8月-24格式輸入函數(shù)scanf()的一般形式scanf(輸入格式控制字符串,數(shù)據存儲地址表列)scanf(“%d%d%d”,&a,&b,&c);輸入格式控制字符串包含輸入格式轉換說明和普通字符兩種信息數(shù)據存儲地址表列是由若干個地址組成的表列,可以是變量的地址,或字符串的首地址27-8月-24輸入格式轉換說明的一般形式%[*][w][h/l/L]輸入格式符27-8月-24格式說明格式字符說明d,i用來輸入十進制整數(shù)u用來輸入無符號十進制整數(shù)o,O用來輸入八進制整數(shù)x,X用來輸入十六進制整數(shù)c用來輸入一個字符s用來輸入字符串f用來輸入實數(shù)e,E,g,G與f相同27-8月-24附加格式說明字符說明l修飾d,o,x,u時,表示輸入長整型整數(shù);修飾e,f,g時,表示輸入的實數(shù)按double型存儲L表示輸入的實數(shù)按longdouble型存儲h用于輸入短整型數(shù)據w指定輸入數(shù)據所占寬度(列數(shù))*表示本輸入項在讀入后不賦給相應的變量【例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ù)時應注意的問題“輸入格式控制字符串”后面應該是變量地址,而不應該是變量名若在“輸入格式控制”字符串中除了格式說明以外還有其他字符,則在輸入數(shù)據時應該在對應位置輸入與這些字符相同的字符在用“%c”格式輸入字符時,空格字符和“轉義字符”都作為有效字符輸入在輸入數(shù)據時,遇以下情況時認為該數(shù)據結束遇空格,或按“回車”或Tab鍵按指定的寬度結束,如“%3d”遇非法輸入C++的輸出流cout和輸入流cin使用cout或cin的C++程序包含頭文件#include<iostream>:cout標準輸出(屏幕)cin標準輸入(鍵盤)輸出流cout輸出流cout輸出數(shù)據的一般格式為:cout

<<表達式1

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

\141:141,八進制數(shù);97,十進制,字符,’a’27-8月-24字符輸入函數(shù):getchar()從標準輸入設備上讀取一個字符。該函數(shù)沒有參數(shù),對它的每次調用,就返回下一個輸入字符的ASCII碼值執(zhí)行語句:“ch=getchar();”使變量ch得到輸入字符的ASCII碼值。變量ch為char型或int型#include<stdio.h>voidmain(){charc;c=getchar();/*調用getchar()不要參數(shù)*/putchar(c);/*輸出讀入的字符*/putchar(’\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ù)據運算C語言運算符簡介賦值運算27-8月-24C語言運算符簡介賦值運算符(=及其擴展賦值運算符)算術運算符(+-*/%)關系運算符(><==>=<=!=)邏輯運算符(!&&||)條件運算符(?:)位運算符(<<>>~|^&)求字節(jié)數(shù)運算符(sizeof)強制類型轉換運算符((類型))逗號運算符(,)下標運算符([])指針運算符(*&)分量運算符(.->)其它(如函數(shù)調用運算符())27-8月-242.4.1賦值運算變量

=表達式a=3;運算過程:計算賦值運算符右端的表達式當賦值運算符兩側的類型不一致時,將表達式值的類型自動轉換成變量的類型將表達式的值賦給變量賦值運算y=x=3.5;/*右結合*/賦值運算符右結合,即,自右向左: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’;inta,b,c=5;inta=3,b=3,c=3;inta=b=c=3;(錯誤)inta=b=c=3;定義的時候是不能這樣連等賦值的,因為后面的變量還沒有定義,不對;inta,b,c;a=b=c=3;對。先定義后,然后就可以連等賦值了27-8月-24賦值表達式的形式:變量=表達式;賦值運算表達式返回左式的值?!纠?.4.1.2】賦值運算表達式返回左式的值。inta=3,b,c;b=a;//b是左式的值c=b;//c是左式的值a=(b=c+5);//賦值運算,返回左式a的值,b和a的值是8【例2.4.1.3】賦值運算表達式返回左式的值。inta,b=10,c=-1;(a=b)=c;//a=-1,b=10,c=-127-8月-24復合的賦值運算符a+=b;

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

x=x*(u+v);+=,-=,*=,/=,%=,<<=,>>=,&=,^=,|=簡化程序提高編譯效率:“a+=b;”,變量a僅被計算了一次【例2.4.1.4】賦值運算表達式返回左式的值,復合賦值運算。inta,c;a=1;c=(a*=2)+(a+=3);//a=5,c=72.4.2算術運算一般算術運算算術表達式和運算符的優(yōu)先級和結合性不同類型數(shù)據間的混合運算自增(++)自減(--)運算符27-8月-24一般算術運算+(加法運算符,或正值運算符,如3+5,+3)-(減法運算符,或負值運算符,如5-2,-3)*(乘法運算符,如3*5)/(除法運算符,如5/3)5/3=1,5.0/3.0=1.666667,-5/3=-1%(模運算符,或求余運算符,如7%4)兩側均應為整型數(shù)據-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算術表達式和運算符的優(yōu)先級和結合性優(yōu)先級結合性自動類型轉換inta=3,b=4,c=5;a*b/c-1.5+’a’97.500000不同類型數(shù)據間的混合運算+、-、*、/運算的兩個數(shù)中有一個數(shù)為float或double型,結果是double型,因為系統(tǒng)將所有float型數(shù)據都先轉換為double型,然后進行運算。如果int型與float或double型數(shù)據進行運算,先把int型和float型數(shù)據轉換為double型,然后進行運算,結果是double型。字符(char)型數(shù)據與整型數(shù)據進行運算,就是把字符的ASCII代碼與整型數(shù)據進行運算。如果字符型數(shù)據與實型數(shù)據進行運算,則將字符的ASCII代碼轉換為double型數(shù)據,然后進行運算。27-8月-2427-8月-24不同類型數(shù)據間的混合運算高doublefloatlongunsigned低intchar,shortinti;floatf;doubled;longinte;10+′a′+i*f-d/e,運算結果為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①進行10+′a′的運算,′a′的值是整數(shù)97,運算結果為107。②由于“*”比“+”優(yōu)先級高,先進行i*f的運算。先將i與f都轉成double型,運算結果為7.5,double型。③整數(shù)107與i*f的積相加。先將整數(shù)107轉換成雙精度數(shù),相加結果為114.5,double型。④進行d/3的運算,先將3轉換成double型,d/3結果為2.5,double型。⑤將10+′a′+i*f的結果114.5與d/3的商2.5相減,結果為112.0,double型。27-8月-24自增(++)自減(--)運算符++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自增和自減運算,最簡單的形式,即i++,i--,且把它們作為單獨的表達式?!纠?.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);運行如下程序,闡述結果#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有關表達式使用中的問題說明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關系運算和邏輯運算關系運算符和關系表達式邏輯運算符和邏輯表達式27-8月-24關系運算符及其優(yōu)先次序<(小于)<=(小于或等于)>(大于)>=(大于或等于)==(等于)!=(不等于)優(yōu)先級相同(高)優(yōu)先級相同(低)算術運算符(高)關系運算符賦值運算符(低)c>a+b等效于c>(a+b)a>b==c等效于(a>b)==c27-8月-24關系表達式a>b,a+b>b+c,(a=3)>(b=5),‘a’<‘b’,‘a’>‘b’C語言沒有邏輯型數(shù)據,在C的邏輯運算中,以‘1’表示“真”,以‘0’表示“假”a=3,b=2,c=1a>b(a>b)==cb+c<ad=a>bf=a>b>c【例2.4.3.1】關系表達式3>=5,結果為0;‘a’<‘b’,結果為1?!纠?.4.3.2】表達式x>y==c<d,等價于(x>y)==(c<d);該表達式的意義是x>y與c<d,或者同時成立,或者同時不成立。a>b==c,等價于(a>b)==c。【例2.4.3.3】關系運算符的結合方向是自左向右的。i=1;j=2;k=3;則表達式k>j>i的值為0。該表達式的計算過程先計算k>j,條件滿足(真),結果為1;再計算1>i,條件不滿足(假),結果為0?!纠?.4.3.4】c>a+b等價于c>(a+b)?!纠?.4.3.5】設a=3;b=2;c=1;則表達式f=a>b>c的值是0。計算過程f=((a>b)>c)。先計算a>b,條件滿足(真),結果為1;再計算1>c,條件不滿足(假),結果為0。將0賦值給f。27-8月-24邏輯運算符和邏輯表達式邏輯運算符及其優(yōu)先次序邏輯表達式27-8月-24邏輯運算符及其優(yōu)先次序

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

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

?

表達式2

:

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

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論