版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第第3章章 數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu) C程序設(shè)計(jì)快速進(jìn)階大學(xué)教程程序設(shè)計(jì)快速進(jìn)階大學(xué)教程C程序設(shè)計(jì)快速進(jìn)階大學(xué)教程2022-2-212第第3章章 數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu) 本章要點(diǎn)本章要點(diǎn) 數(shù)組數(shù)組 結(jié)構(gòu)體結(jié)構(gòu)體 動(dòng)態(tài)數(shù)組動(dòng)態(tài)數(shù)組 文件文件數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu) + 算法算法 = 程序程序 C程序設(shè)計(jì)快速進(jìn)階大學(xué)教程2022-2-2133.1 數(shù)組數(shù)組 知識(shí)點(diǎn)知識(shí)點(diǎn) 數(shù)組的概念數(shù)組的概念 數(shù)組的定義數(shù)組的定義 數(shù)組元素的引用數(shù)組元素的引用問(wèn)題問(wèn)題1: 求求N門(mén)課程的平均成績(jī)門(mén)課程的平均成績(jī) C程序設(shè)計(jì)快速進(jìn)階大學(xué)教程2022-2-2143.1 數(shù)組數(shù)組 1. 數(shù)組的定義數(shù)組的定義 利用整型數(shù)組利用整型數(shù)組 aGra
2、deaGrade實(shí)現(xiàn)多個(gè)成績(jī)的存儲(chǔ)實(shí)現(xiàn)多個(gè)成績(jī)的存儲(chǔ); ; 定義數(shù)組時(shí)需要指定數(shù)組的大小和類(lèi)型。定義數(shù)組時(shí)需要指定數(shù)組的大小和類(lèi)型。 int aGradeN; 類(lèi)型類(lèi)型intint表示數(shù)組中所有數(shù)據(jù)都為整數(shù),表示數(shù)組中所有數(shù)據(jù)都為整數(shù), 方括號(hào)方括號(hào)中必須是正整型常量,中必須是正整型常量, 表示數(shù)組的長(zhǎng)度,即包含多少個(gè)數(shù)據(jù)。表示數(shù)組的長(zhǎng)度,即包含多少個(gè)數(shù)據(jù)。 C程序設(shè)計(jì)快速進(jìn)階大學(xué)教程2022-2-2153.1 數(shù)組數(shù)組 2. 數(shù)組的引用數(shù)組的引用 數(shù)組中的每個(gè)數(shù)據(jù)稱(chēng)為數(shù)組元素?cái)?shù)組中的每個(gè)數(shù)據(jù)稱(chēng)為數(shù)組元素; aGradei表示數(shù)組中的第表示數(shù)組中的第i+1個(gè)元素。個(gè)元素。 引用數(shù)組元素時(shí)方括號(hào)
3、中的整數(shù)稱(chēng)為下標(biāo),引用數(shù)組元素時(shí)方括號(hào)中的整數(shù)稱(chēng)為下標(biāo),可為整型常量或者變量,注意下標(biāo)的范圍為可為整型常量或者變量,注意下標(biāo)的范圍為0 N-1。 數(shù)組元素的使用數(shù)組元素的使用 可以通過(guò)運(yùn)算符進(jìn)行各種運(yùn)算,也可以作為可以通過(guò)運(yùn)算符進(jìn)行各種運(yùn)算,也可以作為參數(shù)實(shí)現(xiàn)輸入輸出操作。參數(shù)實(shí)現(xiàn)輸入輸出操作。C程序設(shè)計(jì)快速進(jìn)階大學(xué)教程6例例3.1 求求N門(mén)課程的平均成績(jī)門(mén)課程的平均成績(jī) #include #define N 5 /*課程數(shù)目課程數(shù)目*/int main( ) int aGradeN ; /*成績(jī)數(shù)組成績(jī)數(shù)組*/ int i = 0; /*計(jì)數(shù)器計(jì)數(shù)器*/ float fAve = 0; /*
4、平均成績(jī)平均成績(jī)*/ printf(Input %d grade:,N); while( iN ) /*遍歷數(shù)組遍歷數(shù)組*/ scanf(%d,&aGradei ); /*輸入數(shù)組元素值輸入數(shù)組元素值*/ fAve = fAve + aGradei; +i; printf(Average = %.2fn, fAve / i); return 0;C程序設(shè)計(jì)快速進(jìn)階大學(xué)教程2022-2-2173.1 數(shù)組數(shù)組 3. 數(shù)組的初始化數(shù)組的初始化 定義數(shù)組平均分?jǐn)?shù)組定義數(shù)組平均分?jǐn)?shù)組aGrades時(shí),可用花括時(shí),可用花括號(hào)號(hào)列舉出數(shù)組元素的值,即數(shù)組初始化;列舉出數(shù)組元素的值,即數(shù)組初始化;
5、數(shù)組初始化形式數(shù)組初始化形式 float aGrades5 = 78.81, 88.56, 67.0,91.2,56.4; 花括號(hào)中數(shù)組的個(gè)數(shù)不能超過(guò)數(shù)組長(zhǎng)度?;ɡㄌ?hào)中數(shù)組的個(gè)數(shù)不能超過(guò)數(shù)組長(zhǎng)度。C程序設(shè)計(jì)快速進(jìn)階大學(xué)教程8例例3.2 求求5個(gè)學(xué)生的最高成績(jī)和最低成績(jī)個(gè)學(xué)生的最高成績(jī)和最低成績(jī) #include int main() float aGrades5= 78.81, 88.56, 67.0,91.2,56.4; float fMax = 0, fMin = 100 ; int i = 0; do /* 遍歷數(shù)組遍歷數(shù)組*/ printf(%6.2f,aGradesi); if(aG
6、radesifMax) /* 比較最高分比較最高分*/ fMax = aGradesi; if(aGradesifMin) /* 比較最低分比較最低分*/ fMin = aGradesi;+i ;while( i 5);return 0;C程序設(shè)計(jì)快速進(jìn)階大學(xué)教程2022-2-2193.1 數(shù)組數(shù)組 4. 數(shù)組的遍歷數(shù)組的遍歷 通常使用循環(huán)結(jié)構(gòu)逐個(gè)訪(fǎng)問(wèn)數(shù)組中的所有元通常使用循環(huán)結(jié)構(gòu)逐個(gè)訪(fǎng)問(wèn)數(shù)組中的所有元素,并用計(jì)數(shù)器變量控制循環(huán),這稱(chēng)為數(shù)組素,并用計(jì)數(shù)器變量控制循環(huán),這稱(chēng)為數(shù)組的遍歷。的遍歷?!就骄毩?xí)】【同步練習(xí)】大毛要參加歌唱比賽,有大毛要參加歌唱比賽,有10個(gè)評(píng)委給她打分,個(gè)評(píng)委給她打分
7、,實(shí)際得分是去掉最高分和最低分的平均分。實(shí)際得分是去掉最高分和最低分的平均分。利用數(shù)組編寫(xiě)程序,輸入利用數(shù)組編寫(xiě)程序,輸入10個(gè)分?jǐn)?shù),個(gè)分?jǐn)?shù),輸出最高分、最低分和實(shí)際得分。輸出最高分、最低分和實(shí)際得分。C程序設(shè)計(jì)快速進(jìn)階大學(xué)教程2022-2-21103.2 結(jié)構(gòu)體結(jié)構(gòu)體 知識(shí)點(diǎn)知識(shí)點(diǎn) 結(jié)構(gòu)體的概念結(jié)構(gòu)體的概念 結(jié)構(gòu)體的聲明結(jié)構(gòu)體的聲明 結(jié)構(gòu)體變量的定義結(jié)構(gòu)體變量的定義 結(jié)構(gòu)體成員的引用結(jié)構(gòu)體成員的引用問(wèn)題問(wèn)題2: 利用結(jié)構(gòu)體輸入輸出個(gè)人信息利用結(jié)構(gòu)體輸入輸出個(gè)人信息 C程序設(shè)計(jì)快速進(jìn)階大學(xué)教程2022-2-21113.2結(jié)構(gòu)體結(jié)構(gòu)體 1. 結(jié)構(gòu)體類(lèi)型用途結(jié)構(gòu)體類(lèi)型用途 結(jié)構(gòu)體是用來(lái)描述具有多個(gè)
8、成員數(shù)據(jù)的自定結(jié)構(gòu)體是用來(lái)描述具有多個(gè)成員數(shù)據(jù)的自定義數(shù)據(jù)類(lèi)型,不要求所有成員數(shù)據(jù)類(lèi)型一致。義數(shù)據(jù)類(lèi)型,不要求所有成員數(shù)據(jù)類(lèi)型一致。2. 結(jié)構(gòu)的聲明與結(jié)構(gòu)體變量定義結(jié)構(gòu)的聲明與結(jié)構(gòu)體變量定義 結(jié)構(gòu)的聲明是用來(lái)說(shuō)明一個(gè)數(shù)據(jù)類(lèi)型,并沒(méi)結(jié)構(gòu)的聲明是用來(lái)說(shuō)明一個(gè)數(shù)據(jù)類(lèi)型,并沒(méi)有數(shù)據(jù)空間。有數(shù)據(jù)空間。 結(jié)構(gòu)體變量定義才真正開(kāi)辟了空間。結(jié)構(gòu)體變量定義才真正開(kāi)辟了空間。C程序設(shè)計(jì)快速進(jìn)階大學(xué)教程12例例3_3 定義阿定義阿Q的結(jié)構(gòu)體,的結(jié)構(gòu)體, 輸入并輸出其姓名、年齡和成績(jī)。輸入并輸出其姓名、年齡和成績(jī)。#include /*開(kāi)始聲明結(jié)構(gòu)體開(kāi)始聲明結(jié)構(gòu)體Student*/*結(jié)構(gòu)體聲明只是在聲明一種數(shù)據(jù)類(lèi)型,
9、并沒(méi)有存放數(shù)據(jù)的結(jié)構(gòu)體聲明只是在聲明一種數(shù)據(jù)類(lèi)型,并沒(méi)有存放數(shù)據(jù)的空間,只有用該類(lèi)型定義變量時(shí)才有存放數(shù)據(jù)空間空間,只有用該類(lèi)型定義變量時(shí)才有存放數(shù)據(jù)空間*/struct Studentchar aName20; /*姓名姓名*/int iAge; /*年齡年齡*/float fScore; /*成績(jī)成績(jī)*/; /*不要忘記此處的分號(hào)(不要忘記此處的分號(hào)(;)*/*結(jié)束聲明結(jié)構(gòu)體結(jié)束聲明結(jié)構(gòu)體Student */C程序設(shè)計(jì)快速進(jìn)階大學(xué)教程13例例3_3 定義阿定義阿Q的結(jié)構(gòu)體的結(jié)構(gòu)體 int main( ) struct Student sAhQ; /*定義結(jié)構(gòu)體變量定義結(jié)構(gòu)體變量sAhQ*/
10、printf(輸入阿輸入阿Q的姓名、年齡、成績(jī)的姓名、年齡、成績(jī):n);scanf(%s,sAhQ.aName); /*輸入輸入sAhQ的姓名的姓名*/scanf(%d, &sAhQ.iAge); /*輸入輸入sAhQ的年齡的年齡*/scanf(%f, &sAhQ.fScore); /*輸入輸入sAhQ的成績(jī)的成績(jī)*/printf(輸出阿輸出阿Q的姓名、年齡、成績(jī)的姓名、年齡、成績(jī):n); printf(%sn,sAhQ.aName); /*輸出輸出sAhQ的姓名的姓名*/printf(%dn,sAhQ.iAge); /*輸出輸出sAhQ的年齡的年齡*/printf(%.2fn
11、,sAhQ.fScore); /*輸出輸出sAhQ的成績(jī)的成績(jī)*/ return 0;C程序設(shè)計(jì)快速進(jìn)階大學(xué)教程2022-2-21143.2結(jié)構(gòu)體結(jié)構(gòu)體 3. 結(jié)構(gòu)體成員的引用結(jié)構(gòu)體成員的引用 結(jié)構(gòu)體成員的引用通過(guò)成員運(yùn)算符結(jié)構(gòu)體成員的引用通過(guò)成員運(yùn)算符. .引用。引用。具體格式為:具體格式為: 結(jié)構(gòu)體變量結(jié)構(gòu)體變量. .成員成員4. 結(jié)構(gòu)體輸入、輸出結(jié)構(gòu)體輸入、輸出 不可以用結(jié)構(gòu)體變量進(jìn)行整體輸入輸出,不可以用結(jié)構(gòu)體變量進(jìn)行整體輸入輸出, 只能使用結(jié)構(gòu)體成員分別輸入、輸出,只能使用結(jié)構(gòu)體成員分別輸入、輸出, 但是結(jié)構(gòu)體變量間可以整體賦值。但是結(jié)構(gòu)體變量間可以整體賦值。 C程序設(shè)計(jì)快速進(jìn)階大學(xué)
12、教程15例例3.4 計(jì)算計(jì)算5個(gè)學(xué)生的最高成績(jī)和最低成績(jī)個(gè)學(xué)生的最高成績(jī)和最低成績(jī)#include struct Studentchar aName20; /*姓名姓名*/int iAge; /*年齡年齡*/float fScore; /*成績(jī)成績(jī)*/; /*結(jié)束聲明結(jié)構(gòu)體結(jié)束聲明結(jié)構(gòu)體Student*/int main() /* 學(xué)生結(jié)構(gòu)體數(shù)組學(xué)生結(jié)構(gòu)體數(shù)組*/ struct Student aStudents5 =AhQ,19,78.81f,AhX,20,88.56f, “AhY”,18,67.0f, “AhZ”,20,91.2f,“AhD”,20,56.4f; C程序設(shè)計(jì)快速進(jìn)階大學(xué)教程
13、16例例3.4 計(jì)算計(jì)算5個(gè)學(xué)生的最高成績(jī)和最低成績(jī)個(gè)學(xué)生的最高成績(jī)和最低成績(jī)float fMaxValue=0, fMinValue=100; /*成績(jī)最高值和最低值成績(jī)最高值和最低值*/ int fMaxNumber=0, fMinNumber=0; int i = 0; /*假定成績(jī)最高和最低同學(xué)的下標(biāo)都為假定成績(jī)最高和最低同學(xué)的下標(biāo)都為0*/ do/* 遍歷數(shù)組遍歷數(shù)組*/ printf(%st,aStudentsi.aName); printf(%dt,aStudentsi.iAge); printf(%.2fn,aStudentsi.fScore); if( aStudentsi.
14、fScorefMaxValue ) /*比較最高分比較最高分*/ fMaxValue=aStudentsi.fScore; /*獲取新的最高值獲取新的最高值*/ fMaxNumber = i; /*獲取新的最高值下標(biāo)獲取新的最高值下標(biāo)*/C程序設(shè)計(jì)快速進(jìn)階大學(xué)教程17例例3.4 計(jì)算計(jì)算5個(gè)學(xué)生的最高成績(jī)和最低成績(jī)個(gè)學(xué)生的最高成績(jī)和最低成績(jī)if(aStudentsi.fScorefMinValue) /*比較最低分比較最低分*/ fMinValue=aStudentsi.fScore; /*獲取新的最低值獲取新的最低值*/ fMinNumber = i; /*獲取新的最低值下標(biāo)獲取新的最低值下
15、標(biāo)*/+i ;while( i 5);printf(%s成績(jī)最高成績(jī)最高,%s成績(jī)最低成績(jī)最低n, aStudentsfMaxNumber.aName, aStudentsfMinNumber.aName);printf(%s請(qǐng)請(qǐng)%s吃飯吃飯n,aStudentsfMinNumber.aName,aStudentsfMaxNumber.aName);return 0;C程序設(shè)計(jì)快速進(jìn)階大學(xué)教程2022-2-21183.2結(jié)構(gòu)體結(jié)構(gòu)體 【同步練習(xí)】【同步練習(xí)】 大毛有兄弟五人,分別叫大毛、二毛、三毛、大毛有兄弟五人,分別叫大毛、二毛、三毛、四毛、五毛、每個(gè)人都有自己的零用錢(qián),四毛、五毛、每個(gè)人都
16、有自己的零用錢(qián), 寫(xiě)一個(gè)程序,輸出零用錢(qián)最多和最少者的姓寫(xiě)一個(gè)程序,輸出零用錢(qián)最多和最少者的姓名。名。C程序設(shè)計(jì)快速進(jìn)階大學(xué)教程2022-2-21193.3 動(dòng)態(tài)數(shù)組動(dòng)態(tài)數(shù)組知識(shí)點(diǎn)知識(shí)點(diǎn) 指針的應(yīng)用指針的應(yīng)用 動(dòng)態(tài)空間的申請(qǐng)和釋放動(dòng)態(tài)空間的申請(qǐng)和釋放 malloc函數(shù)函數(shù) free函數(shù)函數(shù)問(wèn)題問(wèn)題3: 利用變長(zhǎng)數(shù)組計(jì)算平均成績(jī)利用變長(zhǎng)數(shù)組計(jì)算平均成績(jī)C程序設(shè)計(jì)快速進(jìn)階大學(xué)教程2022-2-21203.3 動(dòng)態(tài)數(shù)組動(dòng)態(tài)數(shù)組 數(shù)組定義時(shí)必須用常量指定大小數(shù)組定義時(shí)必須用常量指定大小 不能在程序運(yùn)行過(guò)程中根據(jù)需要定義數(shù)組的大小。不能在程序運(yùn)行過(guò)程中根據(jù)需要定義數(shù)組的大小。 用變量用變量來(lái)定義數(shù)組的大
17、小是不允許的來(lái)定義數(shù)組的大小是不允許的: :int i1, i2=10;scanf(%d,&i1);int aArr1i1, aArr2i2; 可以利用指針及可以利用指針及mallocmalloc函數(shù),根據(jù)需要開(kāi)辟數(shù)組函數(shù),根據(jù)需要開(kāi)辟數(shù)組的大小。的大小。C程序設(shè)計(jì)快速進(jìn)階大學(xué)教程2022-2-21213.3 動(dòng)態(tài)數(shù)組動(dòng)態(tài)數(shù)組 用到動(dòng)態(tài)空間申請(qǐng)與釋放時(shí),用到動(dòng)態(tài)空間申請(qǐng)與釋放時(shí), 需要頭文件需要頭文件stdlib.h。 malloc函數(shù)申請(qǐng)一塊連續(xù)的空間函數(shù)申請(qǐng)一塊連續(xù)的空間 返回值為該空間的起始地址,是一個(gè)空類(lèi)型的地址需要返回值為該空間的起始地址,是一個(gè)空類(lèi)型的地址需要轉(zhuǎn)換為指定類(lèi)型
18、,括號(hào)為強(qiáng)制轉(zhuǎn)換運(yùn)算符。轉(zhuǎn)換為指定類(lèi)型,括號(hào)為強(qiáng)制轉(zhuǎn)換運(yùn)算符。 釋放空間釋放空間 當(dāng)空間使用完畢后,應(yīng)該使用函數(shù)當(dāng)空間使用完畢后,應(yīng)該使用函數(shù)free釋放。釋放。C程序設(shè)計(jì)快速進(jìn)階大學(xué)教程22例例3.5 變長(zhǎng)數(shù)組計(jì)算平均成績(jī)變長(zhǎng)數(shù)組計(jì)算平均成績(jī)#include#include /*使用使用malloc函數(shù)時(shí)需要此頭文件函數(shù)時(shí)需要此頭文件*/int main() int i1;int iNumber; /*課程門(mén)數(shù)課程門(mén)數(shù)*/float fSum=0,fAve;float *pScore;printf(輸入課程門(mén)數(shù):輸入課程門(mén)數(shù):n);scanf(%d,&iNumber);/*申請(qǐng)申請(qǐng)i
19、Number個(gè)個(gè)float類(lèi)型大小的空間,類(lèi)型大小的空間, 用用pScore記載該空間起始地址記載該空間起始地址*/pScore=(float*)malloc(sizeof(float)*iNumber);C程序設(shè)計(jì)快速進(jìn)階大學(xué)教程23例例3.5 變長(zhǎng)數(shù)組計(jì)算平均成績(jī)變長(zhǎng)數(shù)組計(jì)算平均成績(jī) /*輸入輸入iNumber門(mén)課程成績(jī)門(mén)課程成績(jī)*/ printf(輸入輸入%d門(mén)課程成績(jī):門(mén)課程成績(jī):n,iNumber);for(i1=0;i1iNumber;i1+)scanf(%f,&pScorei1); /*計(jì)算計(jì)算iNumber門(mén)課程平均成績(jī)門(mén)課程平均成績(jī)*/ for(i1=0;i1iNum
20、ber;i1+)fSum=fSum+pScorei1;fAve=fSum/iNumber;printf(%d門(mén)課程平均成績(jī)?yōu)殚T(mén)課程平均成績(jī)?yōu)?.2f,iNumber,fAve); free(pScore); /*釋放有釋放有malloc申請(qǐng)的空間申請(qǐng)的空間*/ return 0;C程序設(shè)計(jì)快速進(jìn)階大學(xué)教程2022-2-21243.3 動(dòng)態(tài)數(shù)組動(dòng)態(tài)數(shù)組例例3.6 3.6 輸出某班級(jí)學(xué)生的最高成績(jī)和最低成績(jī)的姓名輸出某班級(jí)學(xué)生的最高成績(jī)和最低成績(jī)的姓名阿阿Q Q所在學(xué)校每個(gè)班級(jí)的學(xué)生人數(shù)目是不同的,希望寫(xiě)一個(gè)所在學(xué)校每個(gè)班級(jí)的學(xué)生人數(shù)目是不同的,希望寫(xiě)一個(gè)程序,首先輸入班級(jí)的學(xué)生人數(shù),然后輸入該班
21、每個(gè)同學(xué)程序,首先輸入班級(jí)的學(xué)生人數(shù),然后輸入該班每個(gè)同學(xué)的姓名、年齡、成績(jī)并用數(shù)組保存起來(lái),最后計(jì)算并輸出的姓名、年齡、成績(jī)并用數(shù)組保存起來(lái),最后計(jì)算并輸出成績(jī)最高和最低的同學(xué)的姓名。為了讓阿成績(jī)最高和最低的同學(xué)的姓名。為了讓阿Q Q所在學(xué)校的每個(gè)所在學(xué)校的每個(gè)班級(jí)都能夠使用該程序,所以程序中保存同學(xué)的數(shù)組的長(zhǎng)班級(jí)都能夠使用該程序,所以程序中保存同學(xué)的數(shù)組的長(zhǎng)度必須是可變的。度必須是可變的。 應(yīng)該使用數(shù)組成員換成了學(xué)生結(jié)構(gòu)體應(yīng)該使用數(shù)組成員換成了學(xué)生結(jié)構(gòu)體 空間的分配與回收道理是一樣的函數(shù)空間的分配與回收道理是一樣的函數(shù)freefree釋放。釋放。C程序設(shè)計(jì)快速進(jìn)階大學(xué)教程2022-2-21
22、253.3 動(dòng)態(tài)數(shù)組動(dòng)態(tài)數(shù)組 【同步練習(xí)】【同步練習(xí)】 大毛有兄弟五人,分別叫大毛、二毛、大毛有兄弟五人,分別叫大毛、二毛、三毛、四毛、五毛;三毛、四毛、五毛; 每個(gè)人都有自己的故事書(shū)(每本書(shū)有書(shū)每個(gè)人都有自己的故事書(shū)(每本書(shū)有書(shū)名、頁(yè)數(shù)),但是每個(gè)人的本數(shù)不一樣。名、頁(yè)數(shù)),但是每個(gè)人的本數(shù)不一樣。 寫(xiě)一個(gè)程序,使得寫(xiě)一個(gè)程序,使得5 5個(gè)兄弟都能用該程序個(gè)兄弟都能用該程序找出自己的頁(yè)數(shù)最多和頁(yè)數(shù)最少的書(shū)的書(shū)名。找出自己的頁(yè)數(shù)最多和頁(yè)數(shù)最少的書(shū)的書(shū)名。C程序設(shè)計(jì)快速進(jìn)階大學(xué)教程2022-2-21263.4 文件文件知識(shí)點(diǎn)知識(shí)點(diǎn) 文件的概念文件的概念 文件標(biāo)識(shí)文件標(biāo)識(shí) 文件的操作文件的操作 問(wèn)
23、題問(wèn)題4: 利用文件讀寫(xiě)數(shù)據(jù)利用文件讀寫(xiě)數(shù)據(jù)C程序設(shè)計(jì)快速進(jìn)階大學(xué)教程2022-2-21273.4 文件文件 文件的概念文件的概念 所謂所謂“文件文件”一般是指存儲(chǔ)在外部介質(zhì)上數(shù)據(jù)的集合。一般是指存儲(chǔ)在外部介質(zhì)上數(shù)據(jù)的集合。文件是以數(shù)據(jù)的形式存放在外部介質(zhì)上文件是以數(shù)據(jù)的形式存放在外部介質(zhì)上 操作系統(tǒng)是以文件為單位對(duì)數(shù)據(jù)進(jìn)行管理的操作系統(tǒng)是以文件為單位對(duì)數(shù)據(jù)進(jìn)行管理的 如果想找存在外部介質(zhì)上的數(shù)據(jù),必須先按文件名找如果想找存在外部介質(zhì)上的數(shù)據(jù),必須先按文件名找到指定的文件,然后再?gòu)脑撐募凶x取數(shù)據(jù)。到指定的文件,然后再?gòu)脑撐募凶x取數(shù)據(jù)。 文件標(biāo)識(shí)文件標(biāo)識(shí) (1 1) 文件路徑:表示文件在外部
24、存儲(chǔ)設(shè)備中的位置文件路徑:表示文件在外部存儲(chǔ)設(shè)備中的位置(2 2) 文件名:文件命名規(guī)則遵循標(biāo)識(shí)符的命名規(guī)則文件名:文件命名規(guī)則遵循標(biāo)識(shí)符的命名規(guī)則(3 3) 文件擴(kuò)展名:用來(lái)表示文件的性質(zhì)文件擴(kuò)展名:用來(lái)表示文件的性質(zhì)( .txt .dat .c)( .txt .dat .c)C程序設(shè)計(jì)快速進(jìn)階大學(xué)教程28例例3.7 把結(jié)構(gòu)體數(shù)組寫(xiě)入文件把結(jié)構(gòu)體數(shù)組寫(xiě)入文件#includestruct Studentchar aName20; /*姓名姓名*/int iAge; /*年齡年齡*/float fScore; /*成績(jī)成績(jī)*/; /*結(jié)束聲明結(jié)構(gòu)體結(jié)束聲明結(jié)構(gòu)體Student*/int main
25、()struct Student aStudents5; /*定義結(jié)構(gòu)體數(shù)組定義結(jié)構(gòu)體數(shù)組*/FILE *fp; int i1;float f=1.0;C程序設(shè)計(jì)快速進(jìn)階大學(xué)教程29for(i1=0;i15;i1+) printf(輸入第輸入第%d同學(xué)信息:姓名、年齡、成績(jī)同學(xué)信息:姓名、年齡、成績(jī)n,i1); scanf(%s,aStudentsi1.aName); /*輸入某同學(xué)的姓名輸入某同學(xué)的姓名*/ scanf(%d,&aStudentsi1.iAge); /*輸入某同學(xué)的年齡輸入某同學(xué)的年齡*/ scanf(%f,&aStudentsi1.fScore); /*輸入
26、某同學(xué)的成績(jī)輸入某同學(xué)的成績(jī)*/if(fp=fopen(file1.txt,wb) =NULL) /*打開(kāi)磁盤(pán)文件打開(kāi)磁盤(pán)文件*/ printf(nCannot open file strike any key exit!); getch(); /*等待敲鍵盤(pán),為顯示上一句話(huà)等待敲鍵盤(pán),為顯示上一句話(huà)*/ exit(1); /*結(jié)束程序結(jié)束程序*/ fwrite(aStudents,sizeof(struct Student),5,fp); fclose(fp); /*關(guān)閉磁盤(pán)文件關(guān)閉磁盤(pán)文件*/ return 0; fopen函數(shù)打開(kāi)文件函數(shù)打開(kāi)文件“file1.txt”為磁盤(pán)文件名為磁盤(pán)文
27、件名“wb”說(shuō)明文件是以寫(xiě)二進(jìn)制文件的方式打開(kāi)說(shuō)明文件是以寫(xiě)二進(jìn)制文件的方式打開(kāi)write函數(shù)的作用函數(shù)的作用把從把從aStudents的內(nèi)存地址開(kāi)始的內(nèi)存地址開(kāi)始5倍的倍的sizeof(struct student)個(gè)字節(jié)寫(xiě)到個(gè)字節(jié)寫(xiě)到fp所指所指的文件中。的文件中。 例例3.7 把結(jié)構(gòu)體數(shù)組寫(xiě)入文件把結(jié)構(gòu)體數(shù)組寫(xiě)入文件C程序設(shè)計(jì)快速進(jìn)階大學(xué)教程2022-2-21303.4 文件文件 文件操作分文件操作分3 3部分:部分:1. 打開(kāi)文件打開(kāi)文件 fopen函數(shù)函數(shù)2. 讀寫(xiě)文件讀寫(xiě)文件 fread函數(shù)函數(shù) fwrite函數(shù)函數(shù)3. 關(guān)閉文件關(guān)閉文件 fclose函數(shù)函數(shù)把數(shù)據(jù)寫(xiě)進(jìn)磁盤(pán)文件后,
28、以后使用數(shù)據(jù)時(shí)就可以直接從把數(shù)據(jù)寫(xiě)進(jìn)磁盤(pán)文件后,以后使用數(shù)據(jù)時(shí)就可以直接從文件中讀出來(lái),不必要再重新輸入。文件中讀出來(lái),不必要再重新輸入。C程序設(shè)計(jì)快速進(jìn)階大學(xué)教程31例例3.8 把文件中的同學(xué)數(shù)據(jù)讀出并輸出到標(biāo)準(zhǔn)輸出設(shè)備上把文件中的同學(xué)數(shù)據(jù)讀出并輸出到標(biāo)準(zhǔn)輸出設(shè)備上#includestruct Studentchar aName20; /*姓名姓名*/int iAge; /*年齡年齡*/float fScore; /*成績(jī)成績(jī)*/; int main()struct Student aStudents5; /*定義結(jié)構(gòu)體數(shù)組定義結(jié)構(gòu)體數(shù)組*/FILE *fp; int i1;if(fp=fopen(file1.txt,rb)=NULL) /*打開(kāi)磁盤(pán)文件打開(kāi)磁盤(pán)文件*/ printf(nCannot open file strike any key exit!); getch(); exit(1); 文件打開(kāi)方式文件打開(kāi)方式“rb”,讀二進(jìn)制文件的方式打開(kāi)讀二進(jìn)制文件的方式打開(kāi) C程序設(shè)計(jì)快速進(jìn)階大學(xué)教程32例例3.8 把文件中的同學(xué)數(shù)據(jù)讀出并輸出到標(biāo)準(zhǔn)輸出設(shè)備上把文件中的同學(xué)數(shù)據(jù)讀出并輸出到標(biāo)準(zhǔn)輸出設(shè)備上 /*從文件中讀從文件中讀5條學(xué)生記錄寫(xiě)到數(shù)組條學(xué)生記錄寫(xiě)到數(shù)組aStudents中中*/ fread(aStudents,si
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 眼鏡盒相關(guān)項(xiàng)目建議書(shū)
- 狗用外套相關(guān)項(xiàng)目實(shí)施方案
- 成都師范學(xué)院《近世代數(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 磁性留言板辦公用品相關(guān)項(xiàng)目實(shí)施方案
- 小冊(cè)子項(xiàng)目可行性實(shí)施報(bào)告
- 成都錦城學(xué)院《施工組織設(shè)計(jì)》2021-2022學(xué)年第一學(xué)期期末試卷
- 汽車(chē)輪轂保護(hù)圈項(xiàng)目可行性實(shí)施報(bào)告
- 電動(dòng)器械用電樞相關(guān)項(xiàng)目實(shí)施方案
- 《綠林女兒》讀后感
- 2024年牙科連鎖機(jī)構(gòu)承包協(xié)議版
- 中考化學(xué)雙向細(xì)目表(共4頁(yè))
- 2022年教科版小學(xué)四年級(jí)上冊(cè)綜合實(shí)踐活動(dòng)教案
- 卒中中心預(yù)申報(bào)表1
- 六年級(jí)30道解方程應(yīng)用題
- 淺談煉鋼轉(zhuǎn)爐檢修更換工藝
- 聚丙烯腈碳纖維性能表征規(guī)范
- 第二章算法與問(wèn)題解決PPT課件
- 水滸傳人物解讀時(shí)遷課件
- 球罐聚氨酯噴涂保冷施工方案
- 物業(yè)項(xiàng)目經(jīng)理考試題(精華版)
- 北師大版二年級(jí)上冊(cè)數(shù)學(xué)全冊(cè)教學(xué)反思
評(píng)論
0/150
提交評(píng)論