版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第2章基本IO和基本運(yùn)算哈爾濱工業(yè)大學(xué)2.1認(rèn)識C語言程序從HelloWorld開始【例2.1】向屏幕輸出"Helloworld!"分兩行輸出“Helloworld!”呢?#include<stdio.h>intmain(void){printf("Helloworld\n");
return0;}以#開頭,編譯預(yù)處理指令EveryCprogrammusthaveamainfunctionTheexecutionofCprogramstartsfrommain()function頭文件2.2變量及其數(shù)據(jù)類型常量(Constant)在程序中不能改變其值的量變量(Variable)其值在程序執(zhí)行過程中是可以改變的2.2.1變量的類型和變量的定義(1)聲明變量的同時(shí)為變量賦值(Assignment)
——變量的初始化(Initialize)未被初始化的變量的值會是什么?其值為隨機(jī)數(shù)(亂碼)
變量的聲明(VariableDeclaration)
類型關(guān)鍵字變量名;2.2.1變量的類型和變量的定義使用變量的基本原則變量必須先聲明,后使用一條聲明語句可聲明若干個(gè)同類型的變量inta,b,c;聲明的順序無關(guān)緊要占用內(nèi)存空間的大小數(shù)據(jù)的存儲形式合法的表數(shù)范圍可參與的運(yùn)算種類2.2.2變量的類型決定了什么?(1)不同數(shù)據(jù)類型可參與的運(yùn)算不同整型加、減、乘、除、求余實(shí)型加、減、乘、除字符型加、減(整數(shù))對ASCII碼值的運(yùn)算指針類型加、減(整數(shù))和比較運(yùn)算(2)不同類型數(shù)據(jù)占用的內(nèi)存大小不同如何計(jì)算變量或類型占內(nèi)存的大小計(jì)算變量占內(nèi)存空間的大小用sizeof運(yùn)算符一元運(yùn)算符用sizeof運(yùn)算符計(jì)算變量占內(nèi)存空間的大小的好處增加程序的可移植性編譯時(shí)執(zhí)行的運(yùn)算符,不會導(dǎo)致額外的運(yùn)行時(shí)間開銷語法形式運(yùn)算結(jié)果sizeof(類型)類型占用的內(nèi)存字節(jié)數(shù)
sizeof(變量或表達(dá)式)變量或表達(dá)式所屬類型占的內(nèi)存字節(jié)數(shù)整型數(shù)一個(gè)多字節(jié)的數(shù)據(jù)是如何存放到存儲單元中的呢?小端次序便于計(jì)算機(jī)從低位字節(jié)向高位字節(jié)運(yùn)算大端次序與人們從左到右的書寫順序相同,便于處理字符串(3)不同類型數(shù)據(jù)的存儲形式不同高位字節(jié)低位字節(jié)……低位字節(jié)高位字節(jié)小端次序(Little-endian)……高位字節(jié)低位字節(jié)大端次序(Big-endian)如何存儲實(shí)型數(shù)呢?關(guān)鍵:確定小數(shù)點(diǎn)的位置問題:如何表示實(shí)型數(shù)?小數(shù)形式指數(shù)形式——科學(xué)計(jì)數(shù)法(3)不同類型數(shù)據(jù)的存儲形式不同整數(shù)部分小數(shù)部分定點(diǎn)數(shù)(FixedPoint)小數(shù)點(diǎn)的位置固定定點(diǎn)整數(shù)定點(diǎn)小數(shù)定點(diǎn)數(shù)定點(diǎn)小數(shù)(純小數(shù))——小數(shù)點(diǎn)位于符號位和最高數(shù)值位之間定點(diǎn)整數(shù)——小數(shù)點(diǎn)位于數(shù)值位的最低位
(3)不同類型數(shù)據(jù)的存儲形式不同...符號位固定小數(shù)點(diǎn)數(shù)值部分...符號位固定小數(shù)點(diǎn)數(shù)值部分問題:如何表示實(shí)型數(shù)?小數(shù)形式指數(shù)形式——科學(xué)計(jì)數(shù)法(3)不同類型數(shù)據(jù)的存儲形式不同整數(shù)部分小數(shù)部分指數(shù)部分小數(shù)部分定點(diǎn)數(shù)(FixedPoint)小數(shù)點(diǎn)的位置固定浮點(diǎn)數(shù)(Floating-Point)小數(shù)點(diǎn)的位置不固定浮點(diǎn)數(shù)實(shí)現(xiàn)小數(shù)點(diǎn)位置可浮動的主要原因?qū)?shí)數(shù)拆分成了階碼(Exponent)和尾數(shù)(Mantissa)分別存儲對于同樣的尾數(shù),階碼的值越大,則浮點(diǎn)數(shù)所表示的數(shù)值的絕對值就越大(3)不同類型數(shù)據(jù)的存儲形式不同階碼E(指數(shù)部分)尾數(shù)M(小數(shù)部分)N=rE
M
r為基數(shù)通常取2決定實(shí)數(shù)的表數(shù)精度決定實(shí)數(shù)的表數(shù)范圍同樣是4個(gè)字節(jié)(32位)定點(diǎn)數(shù)表數(shù)范圍受其二進(jìn)制位數(shù)的限制——值域都是有限的在計(jì)算機(jī)中通常是用定點(diǎn)數(shù)來表示整數(shù)和純小數(shù)用浮點(diǎn)數(shù)表示既有整數(shù)部分、又有小數(shù)部分的實(shí)數(shù)(3)不同類型數(shù)據(jù)的存儲形式不同定點(diǎn)數(shù)-231~231-1單精度浮點(diǎn)數(shù)-3.402823466×1038~3.402823466×1038字符型數(shù)據(jù)(英文字母、數(shù)字、控制字符)以二進(jìn)制編碼方式存儲,一個(gè)字節(jié)保存一個(gè)字符字符編碼方式取決于計(jì)算機(jī)系統(tǒng)所使用的字符集ASCII(美國標(biāo)準(zhǔn)信息交換碼)字符集每個(gè)字符有一個(gè)編碼值(查ASCII碼表)字符常數(shù)就是一個(gè)普通整數(shù)(3)不同類型數(shù)據(jù)的存儲形式不同01001000‘H’72(4)不同數(shù)據(jù)類型的表數(shù)范圍不同(2)不同數(shù)據(jù)類型的表數(shù)范圍不同以2字節(jié)(16位)短整型為例有符號整數(shù)的最高位是符號位,使其數(shù)據(jù)位比無符號整數(shù)的數(shù)據(jù)位少了1位2.2.3標(biāo)識符的命名規(guī)則(1)標(biāo)識符由英文字母、數(shù)字和下畫線組成,且必須以英文字母或下畫線開頭。(2)不允許使用關(guān)鍵字作為標(biāo)識符,同時(shí)標(biāo)識符也不應(yīng)與系統(tǒng)預(yù)定義的庫函數(shù)重名。(3)C語言的標(biāo)識符可以是任意長度。一般也會有最大長度(與編譯器相關(guān))限制。(4)標(biāo)識符應(yīng)直觀、易于拼讀、易于記憶,即做到“見名知意”,最好使用英文單詞及其組合,切忌使用漢語拼音。2.2.3標(biāo)識符的命名規(guī)則(5)標(biāo)識符應(yīng)盡量與所采用的操作系統(tǒng)或開發(fā)工具的風(fēng)格保持一致。例如,Windows應(yīng)用程序的標(biāo)識符通常采用“大小寫混排”方式,如MaxValue,而UNIX應(yīng)用程序的標(biāo)識符通常采用“小寫加下畫線”方式,如max_value。不要將兩類風(fēng)格混在一起使用。(6)C語言的標(biāo)識符是區(qū)分大小寫(對大小寫敏感)的。在程序中不能改變其值的量包括:整型(如0,67,2,
123L,123u,
022,0x12)默認(rèn)為基本整型int實(shí)型(如2.3,1.2e-5,2.73F,2.73L)默認(rèn)為雙精度實(shí)型double字符型(如'z','3','$’)字符串(如"UKM","1","5a”)枚舉型2.3常量長整型無符號整型八進(jìn)制十六進(jìn)制單精度實(shí)型長雙精度實(shí)型十進(jìn)制小數(shù)指數(shù)形式十進(jìn)制2.2.1常量的表示2.2.1常量的表示24/532.3.2宏常量和const變量在程序中直接使用的常數(shù),稱為幻數(shù)(MagicNumber)
問題:使用幻數(shù)存在什么問題?程序的可讀性變差容易發(fā)生書寫錯(cuò)誤,產(chǎn)生不一致性當(dāng)常數(shù)需要改變時(shí),要修改所有引用它的代碼,繁瑣,還可能有遺漏良好的程序設(shè)計(jì)風(fēng)格建議把幻數(shù)定義為宏常量const常量優(yōu)點(diǎn)減少重復(fù)書寫常數(shù)的工作量提高程序的可讀性和可維護(hù)性宏常量(MacroConstant)用一個(gè)標(biāo)識符號來表示的常量宏定義
#define
標(biāo)識符字符串
編譯預(yù)處理命令:在源程序編譯之前,先對程序中的編譯預(yù)處理命令進(jìn)行處理然后將處理的結(jié)果和源程序一起進(jìn)行編譯,以得到目標(biāo)代碼2.3.2宏常量和const變量宏常量(MacroConstant)宏定義
#define
標(biāo)識符字符串
#definePI3.14159
符號常量(SymbolicConstant)宏名(MacroName),一般全大寫不區(qū)分?jǐn)?shù)據(jù)類型2.3.2宏常量和const變量宏常量存在的問題是什么?沒有數(shù)據(jù)類型,編譯器在宏替換時(shí)不進(jìn)行類型檢查只進(jìn)行簡單的字符串替換,極易產(chǎn)生意想不到的錯(cuò)誤2.3.2宏常量和const變量constdoublepi=3.14159;const常量與宏常量相比的優(yōu)點(diǎn)是什么?const常量有數(shù)據(jù)類型,編譯器能對其進(jìn)行類型檢查某些集成化調(diào)試工具可以對const常量進(jìn)行調(diào)試2.4鍵盤輸入和屏幕輸出2.4.1單個(gè)字符的輸入輸出函數(shù)2.4.2格式化輸入輸出函數(shù)2.4.1單個(gè)字符的輸入輸出字符輸出函數(shù)putchar()putchar(ch)向屏幕輸出一個(gè)字符,字符型變量ch的值字符輸入函數(shù)getchar()ch=getchar()從鍵盤接收的字符作為getchar()的函數(shù)值無參數(shù)【例2.2】小寫英文字母轉(zhuǎn)換成大寫英文字母B↙b#include<stdio.h>intmain(void){ charch; ch=getchar();//從鍵盤輸入一個(gè)字符,按回車鍵結(jié)束輸入
ch=ch–('a'-'A');//將大寫字母轉(zhuǎn)換為小寫字母 putchar(ch);//在屏幕上顯示變量ch中的字符 putchar('\n');//輸出一個(gè)回車換行控制符
return0;}2.4.2數(shù)據(jù)的格式化屏幕輸出按指定格式和類型輸出變量的值,或者輸出一行字符串printf(格式控制字符串,輸出值參數(shù)表);printf("a=%db=%f",a,b);輸出值參數(shù)類型應(yīng)與格式轉(zhuǎn)換說明符相匹配可輸出多個(gè)任意類型的數(shù)據(jù)可變長度的輸出參數(shù)表與格式說明符一一對應(yīng)普通字符轉(zhuǎn)換說明指定輸出數(shù)據(jù)格式%ddecimal
輸出十進(jìn)制有符號int型%uunsigned
輸出十進(jìn)制無符號int型%ffloat
以小數(shù)形式(6位小數(shù))輸出float,double型%eexponent以標(biāo)準(zhǔn)指數(shù)形式輸出float,double型inta=10;printf("%d",a);10doubleb=10.3;printf("%f",b);10.300000floatb=10.3;printf("%e",b);1.030000e+0012.4.2數(shù)據(jù)的格式化屏幕輸出%ccharacter以字符形式輸出單個(gè)字符charc=‘A’;printf("%c",c);Acharc=‘A’;printf("%d",c);652.4.2數(shù)據(jù)的格式化屏幕輸出2.4.3數(shù)據(jù)的格式化鍵盤輸入
轉(zhuǎn)換說明可變長度輸入地址參數(shù)表格式scanf(格式控制字符串,輸入地址表);scanf("%d%f",&a,&b);
&是取地址運(yùn)算符格式scanf(格式控制字符串,輸入地址表);scanf("%d%f",&a,&b);如何分隔多個(gè)輸入數(shù)據(jù)?1)空格、Tab或回車2)達(dá)到輸入位寬3)遇非法字符遇以上情況都認(rèn)為一個(gè)數(shù)據(jù)輸入結(jié)束:2.4.3數(shù)據(jù)的格式化鍵盤輸入%d 輸入十進(jìn)制int型%f,%e 輸入float型(不能指定輸入數(shù)據(jù)的精度)%c 輸入一個(gè)字符(包括空白字符)常見錯(cuò)誤scanf("%7.2f",&a);scanf("%f",
a);scanf("%f\n",
&a);2.4.3數(shù)據(jù)的格式化鍵盤輸入scanf()的格式修飾符m 輸入數(shù)據(jù)的位寬l 加d、u前輸入long型 加f、e前輸入double型L 加f、e前輸入longdouble型h 加d前輸入short型%ld 輸入longint型%hd 輸入shortint型%f 輸入float型%lf
輸入double型m 輸入數(shù)據(jù)的位寬l 加d、u前輸入long型 加f、e前輸入double型L 加f、e前輸入longdouble型h 加d前輸入short型* 輸入項(xiàng)在讀入后不賦給相應(yīng)的變量2.4.3數(shù)據(jù)的格式化鍵盤輸入2.5算術(shù)運(yùn)算算術(shù)表達(dá)式除法(Division)
a/b浮點(diǎn)數(shù)除法(FloatingDivision)aorborbotharefloats整數(shù)除法(IntegerDivision)aandbareintegers11/5=211.0/5=2.22.5算術(shù)運(yùn)算操作數(shù)必須是整數(shù),返回a與b相除之后的余數(shù)(Remainder)(1)提取數(shù)字的最低位。例如,123%10即可得到123的最低位3。(2)判斷一個(gè)數(shù)能否被另一個(gè)數(shù)整除。例如,若m%n的結(jié)果為0,則m能被n整除。(3)判斷一個(gè)數(shù)是否為偶數(shù)。例如,若m%2的結(jié)果為0,則m為偶數(shù)。(4)生成一個(gè)指定范圍內(nèi)的隨機(jī)數(shù)。求余(Modulus)——也稱a對b取模
a%b2.5算術(shù)運(yùn)算問題:輸出一個(gè)三位整數(shù)的個(gè)位、十位和百位數(shù)字關(guān)鍵:如何分離個(gè)位、十位、百位數(shù)字?153%10
=3153/100=1153-1*100=53
53/10=5153-1*100-5*10=3153%100
=53
53/10=5153/10
=
15
15%10=52.5算術(shù)運(yùn)算對p求模取余:H(k)=k%p將一個(gè)大范圍的自然數(shù)集合映射到一個(gè)只有p個(gè)元素的小集合上隨機(jī)函數(shù)rand()生成一個(gè)在0~32767之間的隨機(jī)數(shù)問題:如何生成一個(gè)指定范圍(如1~100)內(nèi)的隨機(jī)數(shù)?magic=rand()%100;//0~99magic=rand()%100+1;//1~1002.5算術(shù)運(yùn)算常用的標(biāo)準(zhǔn)數(shù)學(xué)函數(shù)#include<math.h>函數(shù)名功能exp(x)ex函數(shù)名功能exp(x)expow(x,y)xy函數(shù)名功能exp(x)expow(x,y)xysqrt(x)x的平方根,(x>=0)函數(shù)名功能exp(x)expow(x,y)xysqrt(x)x的平方根,(x>=0)fabs(x)|x|函數(shù)名功能exp(x)expow(x,y)xysqrt(x)x的平方根,(x>=0)fabs(x)|x|log(x)lnx,(x>0)函數(shù)名功能exp(x)expow(x,y)xysqrt(x)x的平方根,(x>=0)fabs(x)|x|log(x)lnx,(x>0)log10(x)lgx,(x>0)函數(shù)名功能exp(x)expow(x,y)xysqrt(x)x的平方根,(x>=0)fabs(x)|x|log(x)lnx,(x>0)log10(x)lgx,(x>0)sin(x)sinx,x為弧度值函數(shù)名功能exp(x)expow(x,y)xysqrt(x)x的平方根,(x>=0)fabs(x)|x|log(x)lnx,(x>0)log10(x)lgx,(x>0)sin(x)sinx,x為弧度值cos(x)cosx,x為弧度值2.5算術(shù)運(yùn)算2.6賦值運(yùn)算賦值運(yùn)算符和數(shù)學(xué)中的等號有何區(qū)別?有方向性左值和右值類型應(yīng)一致
(1)賦值表達(dá)式語句(
ExpressionStatement
)
變量
=
表達(dá)式
;
(2)定義變量的同時(shí)為變量賦值——初始化(Initialize)
類型變量=表達(dá)式;
2.6賦值運(yùn)算賦值運(yùn)算符的結(jié)合性?
(2)多重賦值(MultipleAssignment)
變量1=變量2=
表達(dá)式
賦值運(yùn)算符的優(yōu)先級?
(1)簡單賦值(SimpleAssignment)
變量=
表達(dá)式
一種簡寫的且執(zhí)行效率更高的賦值
(3)復(fù)合的賦值(CombinedAssignment)
變量1運(yùn)算符op=表達(dá)式
2.6賦值運(yùn)算增1運(yùn)算符(Increment)++使變量的值增加1個(gè)單位減1運(yùn)算符(Decrement)--使變量的值減少1個(gè)單位操作數(shù)只能是變量,不能是表達(dá)式,自增自減運(yùn)算一元運(yùn)算符前綴(prefix)++n--n后綴(postfix)n++n--
n=n+1
n=n–1
n=n+1
n=n–1作為前綴(prefix)運(yùn)算符時(shí)++n,--n先對n增1/減1,然后再使用n的值m=++n;n=n+1;
m=n;printf("%d",++n);n=n+1;
printf("%d",n);用增1和減1運(yùn)算生成的代碼運(yùn)行速度更快2.6賦值運(yùn)算作為后綴(postfix)運(yùn)算符時(shí)n++,n--先使用n的值,然后再對n增1/減1m=
n++;m=n;n=n+1;
printf("%d",n++);n=n+1;
printf("%d",n);2.7增1和減1運(yùn)算符i5j??46前綴與后綴對變量和表達(dá)式的影響mnm=++n-2;n=n+1;
m=n-2;m=
n++-2;m=n-2;n=n+1;
n5m??36操作數(shù)的值是相同的但表達(dá)式的值是不同的2.7增1和減1運(yùn)算符優(yōu)點(diǎn)增1和減1運(yùn)算生成的代碼效率更高一些問題:過多的增1和減1運(yùn)算混合會產(chǎn)生什么結(jié)果?可讀性差,例如(++n)+(++n),(n++)+(n++)不同編譯器產(chǎn)生的運(yùn)行結(jié)果不同良好的程序設(shè)計(jì)風(fēng)格提倡在一行語句中,一個(gè)變量只出現(xiàn)一次增1或減1運(yùn)算2.7增1和減1運(yùn)算符2.8.1自動類型轉(zhuǎn)換2.8.2強(qiáng)制類型轉(zhuǎn)換2.8混合數(shù)據(jù)類型運(yùn)算中的類型轉(zhuǎn)換算術(shù)表達(dá)式中問題:相同類型數(shù)據(jù)的運(yùn)算結(jié)果的類型是什么?還是該類型例如,整數(shù)除法2.8.1自動類型轉(zhuǎn)換11/5=2根據(jù)參與運(yùn)算的操作數(shù)類型從低級別向高級別自動轉(zhuǎn)換算術(shù)表達(dá)式中問題:不同類型數(shù)據(jù)的運(yùn)算結(jié)果的類型是什么?取值范圍較大的那種類型例如,浮點(diǎn)數(shù)除法C編譯器將所有操作數(shù)都轉(zhuǎn)換成取值范圍較大的操作數(shù)的類型——類型提升(TypePromotion)11.0/5=11.0/5.0=2.22.8.1自動類型轉(zhuǎn)換Example:
inttotal,number; floataver; … aver=total/number;
15/2
7total15number2aver??7.000000整數(shù)除法2.8.2強(qiáng)制類型轉(zhuǎn)換不同類型的數(shù)據(jù)的運(yùn)算結(jié)果的類型?
intnumber;
floattotal,aver; … aver=total/number;
15.000000/2
7.500000total15number2aver??7.500000浮點(diǎn)數(shù)除法2.8.2
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年旅游度假村品牌提升方案
- 2026年文登市小升初數(shù)學(xué)考試測試卷含答案詳解(完整版)
- 2026年初中歷史專項(xiàng)考試卷
- 配件銷售合同(范本)
- 矛盾專題試題及其答案
- 六年級下冊數(shù)學(xué)北師大含答案 計(jì)算與應(yīng)用1
- 中醫(yī)藥膳學(xué)練習(xí)題及完整答案
- 2026年低碳建筑設(shè)計(jì)理念解析
- 保險(xiǎn)科目試題及準(zhǔn)確答案一覽
- 混凝土下料分層均勻澆筑全流程
- 扎蘭屯國森礦業(yè)二道河銀鉛鋅礦采礦擴(kuò)能工程報(bào)告書
- 2026年統(tǒng)計(jì)調(diào)查服務(wù)中心招聘試題及答案解析
- 綜合管理部安全培訓(xùn)手冊
- 武警拓展訓(xùn)練方案
- 建筑工地安全員培訓(xùn)資料與手冊
- 2025年安徽省直機(jī)關(guān)公開遴選公務(wù)員筆試題及答案解析(B類)
- 化工企業(yè)質(zhì)量安全培訓(xùn)課件
- 2025年遠(yuǎn)傳水表項(xiàng)目可行性研究報(bào)告模板
- 豬場糞污消納協(xié)議書
- 溫室氣體培訓(xùn)課件
- 房屋市政工程生產(chǎn)安全重大事故隱患判定標(biāo)準(zhǔn)(2024版)宣傳海報(bào)
評論
0/150
提交評論