第2章 基本IO和基本數(shù)據(jù)類型_第1頁
第2章 基本IO和基本數(shù)據(jù)類型_第2頁
第2章 基本IO和基本數(shù)據(jù)類型_第3頁
第2章 基本IO和基本數(shù)據(jù)類型_第4頁
第2章 基本IO和基本數(shù)據(jù)類型_第5頁
已閱讀5頁,還剩52頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第2章程序設計方法學基礎——基本I/O和基本數(shù)據(jù)類型哈爾濱工業(yè)大學2.1初識C語言【例2.1】向屏幕輸出"Helloworld!"分兩行輸出“Helloworld!”呢?#include<stdio.h>intmain(void){printf("Helloworld\n");

return0;}以#開頭,編譯預處理指令EveryCprogrammusthaveamainfunctionTheexecutionofCprogramstartsfrommain()function頭文件2.2常量與變量常量(Constant)在程序中不能改變其值的量變量(Variable)其值在程序執(zhí)行過程中是可以改變的2.2.1變量的類型和變量的定義(1)聲明變量的同時為變量賦值(Assignment)

——變量的初始化(Initialize)未被初始化的變量的值會是什么?其值為隨機數(shù)(亂碼)

變量的聲明(VariableDeclaration)

類型關鍵字變量名;2.2.1變量的類型和變量的定義使用變量的基本原則變量必須先聲明,后使用一條聲明語句可聲明若干個同類型的變量inta,b,c;聲明的順序無關緊要2.2.2最佳編碼原則:

標識符的命名規(guī)則和程序注釋(1)標識符由英文字母、數(shù)字和下畫線組成,且必須以英文字母或下畫線開頭。(2)不允許使用關鍵字作為標識符,同時標識符也不應與系統(tǒng)預定義的庫函數(shù)重名。(3)C語言的標識符可以是任意長度。一般也會有最大長度(與編譯器相關)限制。(4)標識符應直觀、易于拼讀、易于記憶,即做到“見名知意”,最好使用英文單詞及其組合,切忌使用漢語拼音。2.2.2最佳編碼原則:

標識符的命名規(guī)則和程序注釋(5)標識符應盡量與所采用的操作系統(tǒng)或開發(fā)工具的風格保持一致。例如,Windows應用程序的標識符通常采用“大小寫混排”方式,如MaxValue,而UNIX應用程序的標識符通常采用“小寫加下畫線”方式,如max_value。不要將兩類風格混在一起使用。(6)C語言的標識符是區(qū)分大小寫(對大小寫敏感)的。在程序中不能改變其值的量包括:整型(如0,67,2,

123L,123u,

022,0x12)默認為基本整型int實型(如2.3,1.2e-5,2.73F,2.73L)默認為雙精度實型double字符型(如'z','3','$’)字符串(如"UKM","1","5a”)枚舉型2.2.3常量的表示形式長整型無符號整型八進制十六進制單精度實型長雙精度實型十進制小數(shù)指數(shù)形式十進制2.2.3常量的表示形式2.2.3常量的表示形式11/532.2.4最佳編碼原則:

使用宏常量和const變量在程序中直接使用的常數(shù),稱為幻數(shù)(MagicNumber)

問題:使用幻數(shù)存在什么問題?程序的可讀性變差容易發(fā)生書寫錯誤,產(chǎn)生不一致性當常數(shù)需要改變時,要修改所有引用它的代碼,繁瑣,還可能有遺漏良好的程序設計風格建議把幻數(shù)定義為宏常量const常量優(yōu)點減少重復書寫常數(shù)的工作量提高程序的可讀性和可維護性宏常量(MacroConstant)用一個標識符號來表示的常量宏定義

#define

標識符字符串

編譯預處理命令:在源程序編譯之前,先對程序中的編譯預處理命令進行處理然后將處理的結(jié)果和源程序一起進行編譯,以得到目標代碼2.2.4最佳編碼原則:

使用宏常量和const變量宏常量(MacroConstant)宏定義

#define

標識符字符串

#definePI3.14159

符號常量(SymbolicConstant)宏名(MacroName),一般全大寫不區(qū)分數(shù)據(jù)類型2.2.4最佳編碼原則:

使用宏常量和const變量宏常量存在的問題是什么?沒有數(shù)據(jù)類型,編譯器在宏替換時不進行類型檢查只進行簡單的字符串替換,極易產(chǎn)生意想不到的錯誤2.2.4最佳編碼原則:

使用宏常量和const變量constdoublepi=3.14159;const常量與宏常量相比的優(yōu)點是什么?const常量有數(shù)據(jù)類型,編譯器能對其進行類型檢查某些集成化調(diào)試工具可以對const常量進行調(diào)試占用內(nèi)存空間的大小數(shù)據(jù)的存儲形式合法的表數(shù)范圍可參與的運算種類2.3變量的類型決定了什么?(1)不同數(shù)據(jù)類型可參與的運算不同整型加、減、乘、除、求余實型加、減、乘、除字符型加、減(整數(shù))對ASCII碼值的運算指針類型加、減(整數(shù))和比較運算(2)不同類型數(shù)據(jù)占用的內(nèi)存大小不同如何計算變量或類型占內(nèi)存的大小計算變量占內(nèi)存空間的大小用sizeof運算符一元運算符用sizeof運算符計算變量占內(nèi)存空間的大小的好處增加程序的可移植性編譯時執(zhí)行的運算符,不會導致額外的運行時間開銷語法形式運算結(jié)果sizeof(類型)類型占用的內(nèi)存字節(jié)數(shù)

sizeof(變量或表達式)變量或表達式所屬類型占的內(nèi)存字節(jié)數(shù)整型數(shù)一個多字節(jié)的數(shù)據(jù)是如何存放到存儲單元中的呢?小端次序便于計算機從低位字節(jié)向高位字節(jié)運算大端次序與人們從左到右的書寫順序相同,便于處理字符串(3)不同類型數(shù)據(jù)的存儲形式不同高位字節(jié)低位字節(jié)……低位字節(jié)高位字節(jié)小端次序(Little-endian)……高位字節(jié)低位字節(jié)大端次序(Big-endian)如何存儲實型數(shù)呢?關鍵:確定小數(shù)點的位置問題:如何表示實型數(shù)?小數(shù)形式指數(shù)形式——科學計數(shù)法(3)不同類型數(shù)據(jù)的存儲形式不同整數(shù)部分小數(shù)部分定點數(shù)(FixedPoint)小數(shù)點的位置固定定點整數(shù)定點小數(shù)定點數(shù)定點小數(shù)(純小數(shù))——小數(shù)點位于符號位和最高數(shù)值位之間定點整數(shù)——小數(shù)點位于數(shù)值位的最低位

(3)不同類型數(shù)據(jù)的存儲形式不同...符號位固定小數(shù)點數(shù)值部分...符號位固定小數(shù)點數(shù)值部分問題:如何表示實型數(shù)?小數(shù)形式指數(shù)形式——科學計數(shù)法(3)不同類型數(shù)據(jù)的存儲形式不同整數(shù)部分小數(shù)部分指數(shù)部分小數(shù)部分定點數(shù)(FixedPoint)小數(shù)點的位置固定浮點數(shù)(Floating-Point)小數(shù)點的位置不固定浮點數(shù)實現(xiàn)小數(shù)點位置可浮動的主要原因?qū)崝?shù)拆分成了階碼(Exponent)和尾數(shù)(Mantissa)分別存儲對于同樣的尾數(shù),階碼的值越大,則浮點數(shù)所表示的數(shù)值的絕對值就越大(3)不同類型數(shù)據(jù)的存儲形式不同階碼E(指數(shù)部分)尾數(shù)M(小數(shù)部分)N=rEM

r為基數(shù)通常取2決定實數(shù)的表數(shù)精度決定實數(shù)的表數(shù)范圍同樣是4個字節(jié)(32位)定點數(shù)表數(shù)范圍受其二進制位數(shù)的限制——值域都是有限的在計算機中通常是用定點數(shù)來表示整數(shù)和純小數(shù)用浮點數(shù)表示既有整數(shù)部分、又有小數(shù)部分的實數(shù)(3)不同類型數(shù)據(jù)的存儲形式不同定點數(shù)-231~231-1單精度浮點數(shù)-3.402823466×1038~3.402823466×1038字符型數(shù)據(jù)(英文字母、數(shù)字、控制字符)以二進制編碼方式存儲,一個字節(jié)保存一個字符字符編碼方式取決于計算機系統(tǒng)所使用的字符集ASCII(美國標準信息交換碼)字符集每個字符有一個編碼值(查ASCII碼表)字符常數(shù)就是一個普通整數(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.4鍵盤輸入和屏幕輸出單個字符的輸入輸出函數(shù)格式化輸入輸出函數(shù)2.4.1單個字符的輸入輸出字符輸出函數(shù)putchar()putchar(ch)向屏幕輸出一個字符,字符型變量ch的值字符輸入函數(shù)getchar()ch=getchar()從鍵盤接收的字符作為getchar()的函數(shù)值無參數(shù)【例2.2】大寫英文字母轉(zhuǎn)換成小寫英文字母B↙b#include<stdio.h>intmain(void){ charch; ch=getchar();//從鍵盤輸入一個字符,按回車鍵結(jié)束輸入

ch=ch+'a'-'A';//將大寫字母轉(zhuǎn)換為小寫字母 putchar(ch);//在屏幕上顯示變量ch中的字符 putchar('\n');//輸出一個回車換行控制符

return0;}2.4.2數(shù)據(jù)的格式化屏幕輸出按指定格式和類型輸出變量的值,或者輸出一行字符串printf(格式控制字符串,輸出值參數(shù)表);printf("a=%db=%f",a,b);輸出值參數(shù)類型應與格式轉(zhuǎn)換說明符相匹配可輸出多個任意類型的數(shù)據(jù)可變長度的輸出參數(shù)表與格式說明符一一對應普通字符轉(zhuǎn)換說明指定輸出數(shù)據(jù)格式%ddecimal

輸出十進制有符號int型%uunsigned

輸出十進制無符號int型%ffloat

以小數(shù)形式(6位小數(shù))輸出float,double型%eexponent以標準指數(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以字符形式輸出單個字符charc=‘A’;printf("%c",c);Acharc=‘A’;printf("%d",c);652.4.2數(shù)據(jù)的格式化屏幕輸出l加d、u前輸出long型h加d、u前輸出short型longa=10;printf("%ld",a);10shortb=10;printf("%hd",b);102.4.2數(shù)據(jù)的格式化屏幕輸出Example:printf("Valueis:%10f",32.6784728);Valueis:32.67847310characters右對齊6digits(default)m輸出數(shù)據(jù)的最小域?qū)?/p>

數(shù)據(jù)位寬大于m,按實際位寬輸出

數(shù)據(jù)位寬小于m時,右對齊,左補空格2.4.2數(shù)據(jù)的格式化屏幕輸出Example:printf("Valueis:%-10f",32.6784728);Valueis:32.67847310characters左對齊6digits(default)m數(shù)據(jù)占用的最小域?qū)?/p>

數(shù)據(jù)位寬小于m時,右對齊,左補空格-m左對齊,右補空格2.4.2數(shù)據(jù)的格式化屏幕輸出Example:printf("Valueis:%.3f",32.6784728);

Valueis:32.6783digits顯示精度.n對浮點數(shù)表示輸出n位小數(shù)格式:

%.nf2.4.2數(shù)據(jù)的格式化屏幕輸出顯示精度.n對浮點數(shù)表示輸出n位小數(shù)一般格式:%m.nfExample:printf("Valueis:%10.4f",32.6784728);Valueis:32.6785

10characters4digits2.4.2數(shù)據(jù)的格式化屏幕輸出顯示精度.n對浮點數(shù)表示輸出n位小數(shù)一般格式:%m.nfExample:printf("Valueis:%10.0f",32.6784728);Valueis:33

10characters2.4.2數(shù)據(jù)的格式化屏幕輸出inta=10;printf("%d%%",a);10%printf()用%作為格式字符的標識2.4.2數(shù)據(jù)的格式化屏幕輸出兩種輸入輸出方法的比較輸入字符的兩種方法ch=getchar();scanf("%c",&ch);輸出字符的兩種方法putchar(ch);printf("%c",ch);速度快更靈活2.4.3數(shù)據(jù)的格式化鍵盤輸入

轉(zhuǎn)換說明可變長度輸入地址參數(shù)表格式scanf(格式控制字符串,輸入地址表);scanf("%d%f",&a,&b);

&是取地址運算符#include<stdio.h>intmain(){ inta,b; scanf("%d%d",&a,&b); printf("a=%d,b=%d\n",a,b);

return0;}若程序第5行語句未使用&,結(jié)果會怎樣?a,b1234↙a=12,b=34warning:'a'isuseduninitializedinthefunctionwarning:'b'isuseduninitializedinthefunction2.4.3數(shù)據(jù)的格式化鍵盤輸入#include<stdio.h>intmain(){ inta,b; scanf("%d%d",&a,&b); printf("a=%d,b=%d\n",a,b);

return0;}若程序第5行語句格式字符寫錯,結(jié)果會怎樣?結(jié)果:scanf()將讀入錯誤的數(shù)據(jù)%f

%f1234↙a=1094713344,b=11078205442.4.3數(shù)據(jù)的格式化鍵盤輸入格式scanf(格式控制字符串,輸入地址表);scanf("%d%f",&a,&b);如何分隔多個輸入數(shù)據(jù)?1)空格、Tab或回車2)達到輸入位寬3)遇非法字符遇以上情況都認為一個數(shù)據(jù)輸入結(jié)束:2.4.3數(shù)據(jù)的格式化鍵盤輸入#include<stdio.h>intmain(){ inta,b; scanf("%d%d",&a,&b); printf("a=%d,b=%d\n",a,b);return0;}當要求程序輸出結(jié)果為

a=12,b=34時,用戶應該如何輸入數(shù)據(jù)?

1234↙a=12,b=3412↙34↙a=12,b=342.4.3數(shù)據(jù)的格式化鍵盤輸入#include<stdio.h>intmain(){ inta,b;

scanf("%d%d",&a,&b); printf("a=%d,b=%d\n",a,b);return0;}%2d%2d1234↙a=12,b=34當要求程序輸出結(jié)果為

a=12,b=34時,用戶應該如何輸入數(shù)據(jù)?

2.4.3數(shù)據(jù)的格式化鍵盤輸入#include<stdio.h>intmain(){ inta,b; scanf("%d%d",&a,&b); printf("a=%d,b=%d\n",a,b);return0;}如果用戶輸入了非數(shù)值的字符,例如,輸入了123a,那么程序運行結(jié)果如何?123a↙a=12,b=32.4.3數(shù)據(jù)的格式化鍵盤輸入#include<stdio.h>intmain(){ inta,b; scanf("%d%d",&a,&b); printf("a=%d,b=%d\n",a,b);return0;}問題:如果用戶輸入的是123a,那么結(jié)果又會如何呢?123a↙a=123,b=1212.4.3數(shù)據(jù)的格式化鍵盤輸入#include<stdio.h>intmain(){ inta,b; scanf("%d%d",&a,&b); printf("a=%d,b=%d\n",a,b);return0;},

格式字符串中的普通字符原樣輸入當要求程序輸出結(jié)果為

a=12,b=34時,用戶應該如何輸入數(shù)據(jù)?

12,34↙2.4.3數(shù)據(jù)的格式化鍵盤輸入#include<stdio.h>intmain(){ inta,b; scanf("%d%d",&a,&b); printf("a=%d,b=%d\n",a,b);return0;}a=12,b=34↙格式字符串中的普通字符原樣輸入scanf("a=%d,b=%d",&a,&b);當要求程序輸出結(jié)果為

a=12,b=34時,用戶應該如何輸入數(shù)據(jù)?

2.4.3數(shù)據(jù)的格式化鍵盤輸入%d 輸入十進制int型%f,%e 輸入float型(不能指定輸入數(shù)據(jù)的精度)%c 輸入一個字符(包括空白字符)常見錯誤scanf("%7.2f",&a)

溫馨提示

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

評論

0/150

提交評論