c程序語(yǔ)言設(shè)計(jì)教學(xué)課件_第1頁(yè)
c程序語(yǔ)言設(shè)計(jì)教學(xué)課件_第2頁(yè)
c程序語(yǔ)言設(shè)計(jì)教學(xué)課件_第3頁(yè)
c程序語(yǔ)言設(shè)計(jì)教學(xué)課件_第4頁(yè)
c程序語(yǔ)言設(shè)計(jì)教學(xué)課件_第5頁(yè)
已閱讀5頁(yè),還剩25頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

C程序語(yǔ)言設(shè)計(jì):開(kāi)啟編程之門(mén)歡迎踏上程序設(shè)計(jì)的奇妙旅程!C語(yǔ)言作為編程界的經(jīng)典之選,是連接計(jì)算機(jī)底層與高級(jí)應(yīng)用的重要橋梁。在這門(mén)課程中,我們將從零開(kāi)始,循序漸進(jìn)地掌握C語(yǔ)言的核心概念和實(shí)踐技能。引子:從"Hello,World!"到智能世界11972年DennisRitchie在貝爾實(shí)驗(yàn)室發(fā)明C語(yǔ)言,同時(shí)UNIX操作系統(tǒng)隨之問(wèn)世,開(kāi)啟了現(xiàn)代計(jì)算機(jī)系統(tǒng)的新紀(jì)元。2Hello,World!全球超過(guò)5000萬(wàn)程序員的第一行代碼,這個(gè)簡(jiǎn)單的程序成為了編程學(xué)習(xí)的經(jīng)典起點(diǎn)和傳統(tǒng)儀式。3現(xiàn)代應(yīng)用第一章:C語(yǔ)言的誕生與奇跡技術(shù)革命的基石C語(yǔ)言不僅僅是一門(mén)編程語(yǔ)言,更是現(xiàn)代計(jì)算機(jī)技術(shù)革命的重要基石。它為操作系統(tǒng)開(kāi)發(fā)、嵌入式系統(tǒng)設(shè)計(jì)提供了強(qiáng)大而靈活的工具。Linux操作系統(tǒng)內(nèi)核完全基于C語(yǔ)言開(kāi)發(fā)Git版本控制系統(tǒng)使用C語(yǔ)言實(shí)現(xiàn)核心功能MySQL數(shù)據(jù)庫(kù)系統(tǒng)的底層架構(gòu)采用C語(yǔ)言2024年TIOBE編程語(yǔ)言排行榜:C語(yǔ)言穩(wěn)居前三位編程探險(xiǎn)隊(duì)集結(jié)主角:初學(xué)者小李一個(gè)充滿(mǎn)好奇心的計(jì)算機(jī)專(zhuān)業(yè)大一學(xué)生,夢(mèng)想著能夠?qū)懗龈淖兪澜绲牡谝粋€(gè)程序作品,正準(zhǔn)備在編程世界中開(kāi)啟自己的冒險(xiǎn)之旅。導(dǎo)師:資深程序員張博士擁有20年C語(yǔ)言開(kāi)發(fā)經(jīng)驗(yàn)的資深工程師,曾參與多個(gè)大型系統(tǒng)開(kāi)發(fā)項(xiàng)目,見(jiàn)證了無(wú)數(shù)代碼如何從想法變成改變世界的現(xiàn)實(shí)。成功案例:編程少年一個(gè)高中生利用課余時(shí)間學(xué)習(xí)C語(yǔ)言,成功開(kāi)發(fā)出益智小游戲,最終在省級(jí)青少年創(chuàng)意編程大賽中獲得一等獎(jiǎng)的勵(lì)志故事。第二章:程序設(shè)計(jì)與思維訓(xùn)練深入理解計(jì)算機(jī)的思維方式,掌握程序設(shè)計(jì)的核心理念計(jì)算機(jī)是如何思考的?01數(shù)據(jù)輸入計(jì)算機(jī)接收和處理各種形式的數(shù)據(jù)信息,包括數(shù)字、文字、圖像等,這些都是程序運(yùn)行的原料。02指令執(zhí)行按照預(yù)先編寫(xiě)的程序指令,計(jì)算機(jī)嚴(yán)格按照邏輯順序執(zhí)行每一步操作,不會(huì)遺漏也不會(huì)自作主張。03存儲(chǔ)管理在執(zhí)行過(guò)程中,計(jì)算機(jī)需要將中間結(jié)果和最終結(jié)果保存在內(nèi)存中,以便后續(xù)使用和輸出。04結(jié)果輸出經(jīng)過(guò)計(jì)算和處理后,計(jì)算機(jī)將結(jié)果以人類(lèi)可理解的形式呈現(xiàn)出來(lái),完成整個(gè)計(jì)算任務(wù)。看得見(jiàn)的算法:生活場(chǎng)景解讀自動(dòng)售貨機(jī)找零算法想象你在自動(dòng)售貨機(jī)前投入10元硬幣購(gòu)買(mǎi)5元的飲料,機(jī)器如何準(zhǔn)確找零5元?這背后就是一個(gè)典型的算法問(wèn)題。//找零算法示例intchange=paid_amount-item_price;intcoins_5=change/5;intcoins_1=change%5;printf("找零:%d個(gè)5元硬幣,%d個(gè)1元硬幣\n",coins_5,coins_1);遞歸vs循環(huán):遞歸就像俄羅斯套娃,一層套一層自我調(diào)用;循環(huán)則像傳遞接力棒,重復(fù)執(zhí)行相同動(dòng)作。易錯(cuò)警示:新手常見(jiàn)三大誤區(qū)語(yǔ)法錯(cuò)誤:漏寫(xiě)分號(hào)在C語(yǔ)言中,每個(gè)語(yǔ)句都必須以分號(hào)結(jié)尾。這是最常見(jiàn)也是最容易忽略的錯(cuò)誤,往往會(huì)導(dǎo)致編譯失敗。printf("Hello")//錯(cuò)誤:缺少分號(hào)printf("Hello");//正確命名不規(guī)范變量名應(yīng)該具有描述性,避免使用單個(gè)字母或無(wú)意義的字符組合,這會(huì)大大降低代碼的可讀性和維護(hù)性。inta1b2c3;//糟糕的命名intstudent_score;//良好的命名括號(hào)配對(duì)錯(cuò)誤大括號(hào)、小括號(hào)、方括號(hào)必須嚴(yán)格配對(duì),缺少或多余的括號(hào)會(huì)導(dǎo)致程序邏輯錯(cuò)誤或編譯失敗。張博士的真實(shí)經(jīng)歷:曾經(jīng)因?yàn)榘汛髮?xiě)字母I誤認(rèn)為小寫(xiě)字母l,導(dǎo)致變量名錯(cuò)誤,花了整整一個(gè)下午才找到這個(gè)看似微不足道但影響巨大的Bug!第三章:基礎(chǔ)數(shù)據(jù)類(lèi)型與變量魔法探索數(shù)據(jù)的本質(zhì),掌握變量的生命周期數(shù)字的游戲——基本數(shù)據(jù)類(lèi)型整型(int)內(nèi)存占用:4字節(jié)(32位系統(tǒng))取值范圍:-2,147,483,648到2,147,483,647適用場(chǎng)景:計(jì)數(shù)、索引、標(biāo)識(shí)符浮點(diǎn)型(float)內(nèi)存占用:4字節(jié)精度:約7位有效數(shù)字適用場(chǎng)景:科學(xué)計(jì)算、價(jià)格計(jì)算字符型(char)內(nèi)存占用:1字節(jié)取值范圍:-128到127或0到255適用場(chǎng)景:文本處理、ASCII碼變量的生命軌跡1聲明階段告訴編譯器變量的名稱(chēng)和類(lèi)型,為變量分配內(nèi)存空間,但此時(shí)變量的值是未定義的。intscore;//聲明一個(gè)整型變量2初始化階段給變量賦予初始值,這是一個(gè)良好的編程習(xí)慣,可以避免使用未初始化變量導(dǎo)致的錯(cuò)誤。intscore=0;//聲明并初始化3使用階段在程序執(zhí)行過(guò)程中,變量可以被讀取、修改,參與各種運(yùn)算和邏輯判斷。score=score+10;//修改變量值4銷(xiāo)毀階段當(dāng)變量超出作用域時(shí),系統(tǒng)自動(dòng)回收其占用的內(nèi)存空間,變量生命周期結(jié)束。變量命名黃金法則:使用有意義的名稱(chēng),如student_count而不是n,讓代碼自我解釋?zhuān)∵\(yùn)算符與表達(dá)式王國(guó)算術(shù)運(yùn)算符基本的數(shù)學(xué)運(yùn)算:加(+)、減(-)、乘(*)、除(/)、取模(%),是程序計(jì)算的基礎(chǔ)工具。關(guān)系運(yùn)算符比較運(yùn)算:大于(>)、小于(<)、等于(==)、不等于(!=),用于條件判斷和邏輯分析。邏輯運(yùn)算符邏輯判斷:與(&&)、或(||)、非(!),用于復(fù)合條件的構(gòu)建和布爾邏輯處理。實(shí)戰(zhàn)案例:分?jǐn)?shù)及格判斷//一行代碼實(shí)現(xiàn)及格判斷char*result=(score>=60)?"及格":"不及格";//等價(jià)的if-else寫(xiě)法if(score>=60){printf("及格\n");}else{printf("不及格\n");}第四章:控制結(jié)構(gòu)——讓程序會(huì)選擇、能循環(huán)掌握程序流程控制,讓代碼具備決策和重復(fù)能力分支與循環(huán)的魔法陣條件分支(if/switch)讓程序能夠根據(jù)不同條件做出不同的決策,就像人類(lèi)的思維判斷過(guò)程一樣靈活和智能。循環(huán)結(jié)構(gòu)(for/while)讓程序能夠重復(fù)執(zhí)行相同的操作,大大提高了處理效率,是批量數(shù)據(jù)處理的核心工具。閏年判斷示例if((year%4==0&&year%100!=0)||(year%400==0)){printf("%d年是閏年\n",year);}else{printf("%d年是平年\n",year);}九九乘法表輸出for(inti=1;i<=9;i++){for(intj=1;j<=i;j++){printf("%d×%d=%d",j,i,i*j);}printf("\n");}C語(yǔ)言的"跳板":break、continue、gotobreak語(yǔ)句立即跳出當(dāng)前循環(huán)或switch語(yǔ)句,是程序流程控制的"緊急出口",常用于滿(mǎn)足特定條件時(shí)提前結(jié)束循環(huán)。for(inti=0;i<10;i++){if(i==5)break;//i為5時(shí)跳出循環(huán)printf("%d",i);//輸出:01234}continue語(yǔ)句跳過(guò)當(dāng)前循環(huán)的剩余部分,直接進(jìn)入下一次循環(huán),適用于需要跳過(guò)特定條件的情況。for(inti=0;i<5;i++){if(i==2)continue;//i為2時(shí)跳過(guò)printf("%d",i);//輸出:0134}goto語(yǔ)句無(wú)條件跳轉(zhuǎn)到指定標(biāo)簽,雖然功能強(qiáng)大但容易造成代碼混亂,現(xiàn)代編程中應(yīng)謹(jǐn)慎使用或避免使用。goto"地獄"警示:過(guò)度使用goto語(yǔ)句會(huì)讓代碼變成難以維護(hù)的"意大利面條代碼",導(dǎo)致程序邏輯混亂,調(diào)試?yán)щy!第五章:函數(shù),讓程序"模塊化"學(xué)會(huì)分解復(fù)雜問(wèn)題,構(gòu)建可重用的代碼模塊拆分任務(wù):函數(shù)的定義與調(diào)用函數(shù)是C語(yǔ)言中實(shí)現(xiàn)代碼模塊化的重要機(jī)制,它允許我們將復(fù)雜的任務(wù)分解為多個(gè)簡(jiǎn)單的子任務(wù),每個(gè)函數(shù)負(fù)責(zé)完成特定的功能。函數(shù)的基本結(jié)構(gòu)返回類(lèi)型函數(shù)名(參數(shù)列表){//函數(shù)體return返回值;}//示例:計(jì)算兩數(shù)之和intadd(inta,intb){returna+b;}函數(shù)調(diào)用過(guò)程程序執(zhí)行到函數(shù)調(diào)用語(yǔ)句保存當(dāng)前執(zhí)行狀態(tài)跳轉(zhuǎn)到函數(shù)定義處執(zhí)行執(zhí)行完畢后返回調(diào)用點(diǎn)繼續(xù)執(zhí)行后續(xù)代碼計(jì)算n階乘:兩種實(shí)現(xiàn)方式對(duì)比循環(huán)實(shí)現(xiàn)intfactorial_loop(intn){intresult=1;for(inti=1;i<=n;i++){result*=i;}returnresult;}遞歸實(shí)現(xiàn)intfactorial_recursive(intn){if(n<=1){return1;}returnn*factorial_recursive(n-1);}實(shí)戰(zhàn)升級(jí):最大公約數(shù)(GCD)算法最大公約數(shù)算法是數(shù)學(xué)和編程中的經(jīng)典問(wèn)題,通過(guò)兩種不同的實(shí)現(xiàn)方式,我們可以深入理解遞歸和循環(huán)的特點(diǎn)及其在函數(shù)調(diào)用棧中的變化。1歐幾里得算法(循環(huán)版本)intgcd_loop(inta,intb){inttemp;while(b!=0){temp=b;b=a%b;a=temp;}returna;}循環(huán)版本直觀易懂,內(nèi)存占用穩(wěn)定,適合處理大數(shù)值的情況。2歐幾里得算法(遞歸版本)intgcd_recursive(inta,intb){if(b==0){returna;}returngcd_recursive(b,a%b);}遞歸版本代碼簡(jiǎn)潔優(yōu)雅,體現(xiàn)了數(shù)學(xué)算法的自然美,但需要注意棧溢出風(fēng)險(xiǎn)。函數(shù)調(diào)用棧的奧秘:每次函數(shù)調(diào)用都會(huì)在棧中創(chuàng)建新的棧幀,存儲(chǔ)局部變量和返回地址。遞歸調(diào)用會(huì)形成多層棧幀,理解這個(gè)過(guò)程對(duì)掌握程序執(zhí)行機(jī)制非常重要!第六章:數(shù)組,批量存儲(chǔ)的利器掌握數(shù)組這一強(qiáng)大的數(shù)據(jù)容器,實(shí)現(xiàn)高效的批量數(shù)據(jù)處理一維數(shù)組、二維數(shù)組與內(nèi)存布局?jǐn)?shù)組是C語(yǔ)言中最重要的數(shù)據(jù)結(jié)構(gòu)之一,它允許我們?cè)谶B續(xù)的內(nèi)存空間中存儲(chǔ)多個(gè)相同類(lèi)型的數(shù)據(jù)元素,通過(guò)索引來(lái)快速訪(fǎng)問(wèn)和操作這些數(shù)據(jù)。01一維數(shù)組聲明intscores[10];//聲明包含10個(gè)整數(shù)的數(shù)組intgrades[]={85,92,78,96,88};//聲明并初始化一維數(shù)組在內(nèi)存中是連續(xù)存儲(chǔ)的,可以通過(guò)下標(biāo)直接訪(fǎng)問(wèn)任意元素。02二維數(shù)組理解intmatrix[3][4];//3行4列的二維數(shù)組inttable[2][3]={{1,2,3},{4,5,6}};//初始化二維數(shù)組二維數(shù)組本質(zhì)上是"數(shù)組的數(shù)組",在內(nèi)存中仍然是線(xiàn)性存儲(chǔ)。03數(shù)組名與指針的關(guān)系數(shù)組名實(shí)際上是指向數(shù)組第一個(gè)元素的指針,arr等價(jià)于&arr[0],這是理解C語(yǔ)言?xún)?nèi)存管理的關(guān)鍵概念。實(shí)用案例:學(xué)生成績(jī)錄入與及格率分析#include<stdio.h>intmain(){intscores[5];intpass_count=0;//錄入成績(jī)printf("請(qǐng)輸入5個(gè)學(xué)生的成績(jī):\n");for(inti=0;i<5;i++){printf("學(xué)生%d:",i+1);scanf("%d",&scores[i]);if(scores[i]>=60){pass_count++;}}//計(jì)算及格率doublepass_rate=(double)pass_count/5*100;printf("及格率:%.1f%%\n",pass_rate);return0;}字符數(shù)組與字符串處理在C語(yǔ)言中,字符串實(shí)際上是以空字符('\0')結(jié)尾的字符數(shù)組。理解字符串的本質(zhì)對(duì)于文本處理和避免常見(jiàn)的安全漏洞至關(guān)重要。危險(xiǎn)函數(shù)警告gets()函數(shù)不檢查輸入長(zhǎng)度,可能導(dǎo)致緩沖區(qū)溢出,這是一個(gè)嚴(yán)重的安全隱患。//危險(xiǎn)的寫(xiě)法charname[20];gets(name);//可能溢出!安全的替代方案使用fgets()和printf()來(lái)安全地處理字符串輸入輸出。//安全的寫(xiě)法charname[20];fgets(name,sizeof(name),stdin);printf("你好,%s",name);字符串常用操作示例#include<stdio.h>#include<string.h>intmain(){charstr1[50]="Hello";charstr2[]="World!";charstr3[50];//字符串連接strcat(str1,str2);printf("連接后:%s\n",str1);//輸出:HelloWorld!//字符串復(fù)制strcpy(str3,str1);printf("復(fù)制后:%s\n",str3);//輸出:HelloWorld!//字符串長(zhǎng)度printf("長(zhǎng)度:%d\n",strlen(str1));//輸出:12return0;}真實(shí)安全事故:某銀行核心系統(tǒng)曾因字符數(shù)組越界訪(fǎng)問(wèn)導(dǎo)致內(nèi)存破壞,造成系統(tǒng)崩潰和數(shù)據(jù)丟失,損失數(shù)百萬(wàn)元!這提醒我們必須嚴(yán)格檢查數(shù)組邊界。第七章:多維數(shù)組與矩陣運(yùn)算趣談多維數(shù)組不僅僅是數(shù)據(jù)的容器,更是解決復(fù)雜問(wèn)題的強(qiáng)大工具。通過(guò)"數(shù)獨(dú)判定器"這個(gè)有趣的項(xiàng)目,我們將深入理解二維數(shù)組的實(shí)際應(yīng)用。數(shù)獨(dú)判定器項(xiàng)目實(shí)現(xiàn)#include<stdio.h>#defineSIZE9//檢查行是否有效intcheck_row(intgrid[SIZE][SIZE],introw){intused[10]={0};//標(biāo)記1-9是否已使用for(intcol=0;col<SIZE;col++){intnum=grid[row][col];if(num!=0){if(used[num])return0;//重復(fù)數(shù)字used[num]=1;}}return1;//行有效}//檢查列是否有效intcheck_col(intgrid[SIZE][SIZE],intcol){intused[10]={0};for(introw=0;row<SIZE;row++){intnum=grid[row][col];if(num!=0){if(used[num])return0;used[num]=1;}}return1;}//檢查3x3小方格是否有效intcheck_box(intgrid[SIZE][SIZE],intstart_row,intstart_col){intused[10]={0};for(introw=0;row<3;row++){for(intcol=0;col<3;col++){intnum=grid[start_row+row][start_col+col];if(num!=0){if(used[num])return0;used[num]=1;}}}return1;}行檢驗(yàn)檢查每一行是否包含1-9的唯一數(shù)字,不能有重復(fù)值出現(xiàn)。列檢驗(yàn)檢查每一列是否包含1-9的唯一數(shù)字,確保垂直方向無(wú)重復(fù)。九宮格檢驗(yàn)檢查每個(gè)3×3的小方格是否包含1-9的唯一數(shù)字,這是數(shù)獨(dú)的核心規(guī)則。第八章:指針,C語(yǔ)言最鋒利的雙刃劍掌握指針這一C語(yǔ)言的核心特性,解鎖內(nèi)存操作的強(qiáng)大能力理論與危險(xiǎn)并存指針是C語(yǔ)言最強(qiáng)大也是最危險(xiǎn)的特性。它讓程序員能夠直接操作內(nèi)存,實(shí)現(xiàn)高效的數(shù)據(jù)處理,但同時(shí)也帶來(lái)了潛在的安全風(fēng)險(xiǎn)。指針變量存儲(chǔ)其他變量地址的變量,通過(guò)解引用操作符(*)可以訪(fǎng)問(wèn)所指向的值。intx=42;int*p=&x;//p指向x的地址printf("%d",*p);//輸出42指針數(shù)組數(shù)組的每個(gè)元素都是指針,常用于處理字符串?dāng)?shù)組或動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)。char*names[]={"Alice","Bob","Charlie"};printf("%s",names[1]);//輸出Bob函數(shù)指針指向函數(shù)的指針,可以實(shí)現(xiàn)回調(diào)函數(shù)和動(dòng)態(tài)函數(shù)調(diào)用。int(*operation)(int,int);operation=add;//指向add函數(shù)intresult=operation(3,4);"野指針"安全警示:某知名銀行的核心交易系統(tǒng)曾因野指針問(wèn)題導(dǎo)致內(nèi)存訪(fǎng)問(wèn)違例,造成系統(tǒng)癱瘓數(shù)小時(shí),直接經(jīng)濟(jì)損失超過(guò)千萬(wàn)元!這個(gè)案例提醒我們:指針使用前必須初始化避免訪(fǎng)問(wèn)已釋放的內(nèi)存指針置空后不要再次使用利用指針優(yōu)化效率正確使用指針可以顯著提高程序性能,特別是在處理大量數(shù)據(jù)或需要?jiǎng)討B(tài)內(nèi)存分配的場(chǎng)景中。掌握指針的正確用法是成為優(yōu)秀C程序員的必經(jīng)之路。用指針實(shí)現(xiàn)快速變量交換//傳統(tǒng)方法(值傳遞)-無(wú)法交換voidswap_wrong(inta,intb){inttemp=a;a=b;b=temp;//只在函數(shù)內(nèi)生效}//正確方法(指針傳遞)voidswap_correct(int*a,int*b){inttemp=*a;*a=*b;*b=temp;//實(shí)際交換原變量的值}//使用示例intx=10,y=20;swap_correct(&x,&y);printf("x=%d,y=%d",x,y);//x=20,y=10動(dòng)態(tài)內(nèi)存分配#include<stdlib.h>intmain(){intn;printf("輸入數(shù)組大小:");scanf("%d",&n);//動(dòng)態(tài)分配內(nèi)存int*arr=(int*)malloc(n*sizeof(int));if(arr==NULL){printf("內(nèi)存分配失敗!\n");return-1;}//使用數(shù)組for(inti=0;i<n;i++){arr[i]=i*i;printf("%d",arr[i]);}//釋放內(nèi)存-非常重要!free(arr);arr=NULL;//防止野指針return0;}01malloc()分配內(nèi)存從堆區(qū)分配指定大小的內(nèi)存空間,返回指向該空間的指針。分配失敗時(shí)返回NULL。02檢查分配結(jié)果務(wù)必檢查malloc返回值是否為NULL,避免使用無(wú)效指針導(dǎo)致程序崩潰。03正確使用內(nèi)存在分配的內(nèi)存范圍內(nèi)進(jìn)行讀寫(xiě)操作,避免越界訪(fǎng)問(wèn)造成未定義行為。04free()釋放內(nèi)存使用完畢后必須調(diào)用free()釋放內(nèi)存,并將指針置為NULL防止誤用。第九章:結(jié)構(gòu)體與自定義類(lèi)型創(chuàng)建自定義數(shù)據(jù)類(lèi)型,構(gòu)建復(fù)雜的數(shù)據(jù)結(jié)構(gòu)結(jié)構(gòu)體和聯(lián)合體——信息打包與節(jié)省空間結(jié)構(gòu)體允許我們將不同類(lèi)型的數(shù)據(jù)組織成一個(gè)邏輯單元,而聯(lián)合體則可以在相同內(nèi)存空間中存儲(chǔ)不同類(lèi)型的數(shù)據(jù),這兩種機(jī)制為構(gòu)建復(fù)雜數(shù)據(jù)結(jié)構(gòu)提供了強(qiáng)大支持。學(xué)生信息管理小系統(tǒng)示例#include<stdio.h>#include<string.h>//定義學(xué)生結(jié)構(gòu)體structStudent{intid;//學(xué)號(hào)charname[20];//姓名floatscores[3];//三門(mén)課程成績(jī)floataverage;//平均分};//使用typedef簡(jiǎn)化類(lèi)型名typedefstructStudentStudent;//計(jì)算平均分的函數(shù)voidcalculate_average(Student*stu){floatsum=0;for(inti=0;i<3;i++){sum+=stu->scores[i];}stu->average=sum/3.0;}//顯示學(xué)生信息voiddisplay_student(constStudent*stu){printf("學(xué)號(hào):%d\n",stu->id);printf("姓名:%s\n",stu->name);printf("成績(jī):%.1f,%.1f,%.1f\n",stu->scores[0],stu->scores[1],stu->scores[2]);printf("平均分:%.2f\n",stu->average);printf("------------------------\n");}intmain(){Studentstudents[3]={{1001,"張三",{85.5,92.0,78.5},0},{1002,"李四",{91.0,87.5,94.0},0},{1003,"王五",{76.5,83.0,89.5},0}};//計(jì)算每個(gè)學(xué)生的平均分并顯示for(inti=0;i<3;i++){calculate_average(&students[i]);display_student(&students[i]);}return0;}結(jié)構(gòu)體的優(yōu)勢(shì)將相關(guān)數(shù)據(jù)組織在一起提高代碼的可讀性和維護(hù)性支持復(fù)雜數(shù)據(jù)結(jié)構(gòu)的構(gòu)建便于傳遞和操作復(fù)合數(shù)據(jù)typedef的作用簡(jiǎn)化復(fù)雜類(lèi)型的書(shū)寫(xiě)提高代碼的可讀性便于類(lèi)型的維護(hù)和修改增強(qiáng)代碼的可移植性結(jié)構(gòu)體與聯(lián)合體的區(qū)別:結(jié)構(gòu)體的所有成員同時(shí)存在于內(nèi)存中,而聯(lián)合體的所有成員共享同一塊內(nèi)存空間,任何時(shí)候只有一個(gè)成員的值是有效的。第十章:文件操作——數(shù)據(jù)永久保存掌握文件I/O操作,實(shí)現(xiàn)數(shù)據(jù)的持久化存儲(chǔ)文件讀寫(xiě)大揭秘文件操作是程序與外部世界交互的重要方式,通過(guò)文件I/O,我們可以實(shí)現(xiàn)數(shù)據(jù)的持久化存儲(chǔ)、程序間的數(shù)據(jù)交換以及大量數(shù)據(jù)的批處理。01fopen()-打開(kāi)文件建立程序與文件的連接,指定訪(fǎng)問(wèn)模式(讀、寫(xiě)、追加等),返回文件指針用于后續(xù)操作。FILE*fp=fopen("data.txt","w");//以寫(xiě)模式打開(kāi)02fprintf()-格式化寫(xiě)入按照指定格式將數(shù)據(jù)寫(xiě)入文件,類(lèi)似于printf但輸出目標(biāo)是文件而不是屏幕。fprintf(fp,"學(xué)生ID:%d,成績(jī):%.2f\n",id,score);03fscanf()-格式化讀取從文件中按照指定格式讀取數(shù)據(jù),類(lèi)似于scanf但數(shù)據(jù)源是文件而不是鍵盤(pán)。fscanf(fp,"%d%f",&id,&score);04fclose()-關(guān)閉文件斷開(kāi)與文件的連接,釋放系統(tǒng)資源,確保所有數(shù)據(jù)完整寫(xiě)入文件。fclose(fp);//務(wù)必關(guān)閉文件實(shí)例:學(xué)生分?jǐn)?shù)管理系統(tǒng)#include<stdio.h>#include<stdlib.h>typedefstruct{intid;charname[20];floatscore;}Student;//將學(xué)生數(shù)據(jù)保存到文件voidsave_students(Studentstudents[],intcount,constchar*filename){FILE*fp=fopen(filename,"w");if(fp==NULL){printf("文件打開(kāi)失敗!\n");return;}fprintf(fp,"學(xué)號(hào),姓名,成績(jī)\n");//CSV表頭for(inti=0;i<count;i++){fprintf(fp,"%d,%s,%.2f\n",students[i].id,students[i].name,students[i].score);}fclose(fp);printf("數(shù)據(jù)已保存到%s\n",filename);}//從文件讀取學(xué)生數(shù)據(jù)intload_students(Studentstudents[],intmax_count,constchar*filename){FILE*fp=fopen(filename,"r");if(fp==NULL){

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論