2023年C語言實(shí)驗(yàn)報(bào)告九_(tái)第1頁
2023年C語言實(shí)驗(yàn)報(bào)告九_(tái)第2頁
2023年C語言實(shí)驗(yàn)報(bào)告九_(tái)第3頁
2023年C語言實(shí)驗(yàn)報(bào)告九_(tái)第4頁
2023年C語言實(shí)驗(yàn)報(bào)告九_(tái)第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

數(shù)學(xué)與軟件科學(xué)學(xué)院實(shí)驗(yàn)報(bào)告學(xué)期:_2023_至_2023_第1學(xué)期2023_年12_月09_日課程名稱:程序設(shè)計(jì)基礎(chǔ)教程-C語言_專業(yè):_數(shù)學(xué)與應(yīng)用數(shù)學(xué)_2023_級(jí)_1班實(shí)驗(yàn)編號(hào):09實(shí)驗(yàn)項(xiàng)目:結(jié)構(gòu)體和共用__指導(dǎo)教師__(dá)____姓名:學(xué)號(hào):實(shí)驗(yàn)成績(jī):一、實(shí)驗(yàn)?zāi)康募耙?guī)定(1)掌握C語言環(huán)境下結(jié)構(gòu)體和共用體類型變量的定義和使用方法;(2)掌握結(jié)構(gòu)體類型數(shù)組的概念和使用;(3)掌握指向結(jié)構(gòu)體變量的指針變量、特別是鏈表概念;二、實(shí)驗(yàn)內(nèi)容1.一方面熟悉結(jié)構(gòu)體類型變量的基本聲明方法、結(jié)構(gòu)體類型變量的內(nèi)存分派原則、初始化和引用結(jié)構(gòu)體變量及其成員變量的基本方法;然后掌握結(jié)構(gòu)體變量的輸入、輸出方法。(參見教材例10-1~10-5)2.基于結(jié)構(gòu)體數(shù)組的應(yīng)用實(shí)驗(yàn)。(1)有n個(gè)學(xué)生,每個(gè)學(xué)生的數(shù)據(jù)涉及學(xué)好(num)、姓名(name[20])、性別(sex)、年齡(age),以及三門課程的成績(jī)(score[3])。規(guī)定:在main()函數(shù)中輸入這些學(xué)生的這些數(shù)據(jù),然后設(shè)計(jì)一個(gè)函數(shù)count()來計(jì)算每個(gè)學(xué)生的總分和平均分,最后,打印出所有數(shù)據(jù)信息(包含本來輸入的學(xué)生原始數(shù)據(jù)信息和求解出來的新信息)。(2)對(duì)第(1)題實(shí)驗(yàn),求出其中成績(jī)最佳的人和成績(jī)最差的人,并顯示出來。(假定成績(jī)最佳和最差的人都只有一個(gè))(3)*假如假定成績(jī)最佳和最差的人的個(gè)數(shù)不一定唯一,程序應(yīng)當(dāng)如何修改才干完畢求出所有最佳和最差者,以及輸出它們來。3.*鏈表實(shí)驗(yàn)。(1)建立一個(gè)鏈表,每個(gè)結(jié)點(diǎn)包含:職工號(hào)、工資。用malloc()函數(shù)開辟新結(jié)點(diǎn),用free()函數(shù)回收不用的結(jié)點(diǎn)空間。規(guī)定從鍵盤輸入5個(gè)員工的數(shù)據(jù)信息(用create_list()),然后,用函數(shù)output_list()將它們一一打印出來,用free_list()將鏈表中的結(jié)點(diǎn)空間回收。假設(shè)職工編號(hào)為1001,1005,1008,1010,1101。注:malloc()和free(cuò)()為系統(tǒng)函數(shù)。create_list(),output_list(),free_list()為用戶自定義函數(shù)。(2)在(1)的基礎(chǔ)上,新增一個(gè)函數(shù)inset_node()插入員工1006和1032的數(shù)據(jù)信息。規(guī)定新插入的員工后,員工仍然按職工號(hào)順序排列。(3)在(2)的基礎(chǔ)上,新增一個(gè)函數(shù)delete_node(),可以用來將指定員工的數(shù)據(jù)從鏈表中刪除。(4)在(3)的基礎(chǔ)上,增長(zhǎng)回收所刪除結(jié)點(diǎn)所占內(nèi)存空間的功能。(5)*如何查看和測(cè)試鏈表中結(jié)點(diǎn)的內(nèi)存空間地址?能否由此分析(1)、(2)、(3)中鏈表結(jié)點(diǎn)的邏輯結(jié)構(gòu)?三、實(shí)驗(yàn)準(zhǔn)備:(1)復(fù)習(xí)有關(guān)結(jié)構(gòu)體方面的所有知識(shí),特別是10-3-4節(jié)所學(xué)的動(dòng)態(tài)存儲(chǔ)分派技術(shù);(2)編寫所選實(shí)驗(yàn)題目的程序代碼和流程圖;(3)檢查源程序并給出其也許的運(yùn)營(yíng)結(jié)果說明。四、實(shí)驗(yàn)環(huán)節(jié):(1)上機(jī)驗(yàn)證所選題目的程序設(shè)計(jì)結(jié)果,并做相應(yīng)測(cè)試和分析;(2)進(jìn)行實(shí)驗(yàn)分析;(3)總結(jié)結(jié)構(gòu)體程序設(shè)計(jì)和實(shí)現(xiàn)的基本方法及其經(jīng)驗(yàn),特別是鏈表技術(shù);(4)編寫實(shí)驗(yàn)報(bào)告。五、實(shí)驗(yàn)結(jié)果分析與評(píng)價(jià)(1)根據(jù)測(cè)試目的寫出測(cè)試報(bào)告;(2)測(cè)試結(jié)果分析說明;(3)測(cè)試程序代碼清單。1.一方面熟悉結(jié)構(gòu)體類型變量的基本聲明方法、結(jié)構(gòu)體類型變量的內(nèi)存分派原則、初始化和引用結(jié)構(gòu)體變量及其成員變量的基本方法;然后掌握結(jié)構(gòu)體變量的輸入、輸出方法。(參見教材例10-1~10-5)答:(1)結(jié)構(gòu)體聲明方法:(先定義結(jié)構(gòu)體類型,再聲明結(jié)構(gòu)體變量)struct結(jié)構(gòu)體數(shù)據(jù)類型名{類型標(biāo)記符成員變量名;類型標(biāo)記符成員變量名;......}變量名表列;(2)結(jié)構(gòu)體類型變量的內(nèi)存分派原則:其存儲(chǔ)空間大小隨著成員變量所占存儲(chǔ)空間大小而變化。其存儲(chǔ)空間是連續(xù)分派的一段存儲(chǔ)區(qū)域,大小為成員變量所占存儲(chǔ)空間之總和。(3)初始化:初始化列表中值的個(gè)數(shù)少于結(jié)構(gòu)體成員變量個(gè)數(shù)時(shí),余下的成員變量自動(dòng)初始化為0或NULL。反之,將出現(xiàn)編譯型錯(cuò)誤:(4)引用結(jié)構(gòu)體變量:既可以訪問結(jié)構(gòu)體中的成員變量,也可以將結(jié)構(gòu)體變量作整體引用。(5)結(jié)構(gòu)體變量的輸入、輸出方法:運(yùn)用scanf()和printf()函數(shù)完畢運(yùn)用gets()和puts()函數(shù)完畢例題分析:例10-1測(cè)試結(jié)構(gòu)體數(shù)據(jù)類型student所占的存儲(chǔ)空間長(zhǎng)度程序如下:#include<stdio.h>structstudent/*定義一個(gè)結(jié)構(gòu)體*/{intnStno;charcName[20];charcSex;intnAge;floatfScore;charcAddr[30];}struStud;intmain(void)/*主函數(shù),重要測(cè)試各個(gè)結(jié)構(gòu)體的內(nèi)存大小*/{intnSizeStud;printf("sizeofstruStudare%dand%d.\n",sizeof(structstudent),sizeof(struStud));nSizeStud=sizeof(struStud.nStno)+sizeof(struStud.cName)+sizeof(struStud.cSex);nSizeStud+=sizeof(struStud.nAge)+sizeof(struStud.fScore)+sizeof(struStud.cAddr);printf("totalsizeis%d\n",nSizeStud);return0;}運(yùn)營(yíng)結(jié)果如下:結(jié)果分析:此例題重要是要我們掌握,結(jié)構(gòu)體的所占的空間長(zhǎng)度是怎么樣的。Int占兩個(gè)字節(jié),char占一個(gè)字節(jié),數(shù)組占30個(gè),一共就有59個(gè)字節(jié)??臻g長(zhǎng)度就是59.結(jié)構(gòu)體存儲(chǔ)空間以所有成員變量所需存儲(chǔ)空間大小為分派依據(jù)。sizeof()內(nèi)可以是結(jié)構(gòu)體數(shù)據(jù)類型標(biāo)記符,也可以是結(jié)構(gòu)體變量。結(jié)果和計(jì)算各成員變量?jī)?nèi)存空間大小之和一致。注意:sizeof()中,用結(jié)構(gòu)體數(shù)據(jù)類型名測(cè)試大小必須以數(shù)據(jù)類型標(biāo)記符形式表述。否則,編譯器將報(bào)告“Undefinedsymbol”結(jié)構(gòu)體數(shù)據(jù)類型名“infunction…”錯(cuò)誤。例10-3輸入并輸出學(xué)生成績(jī)記錄#include<stdio.h>structscore_type/*定義一個(gè)結(jié)構(gòu)體*/{intnStno;intnAge;float(yī)fScore;};intmain(void)/*主函數(shù)*/{structscore_typestruStud;/*聲明一個(gè)結(jié)構(gòu)體*/printf("enternStno,nAge,fScore::");scanf("%d%d%f",&(struStud.nStno),&struStud.nAge,&struStud.fScore);printf("nStno=%d,nAge=%d,fScore=%1f\n",struStud.nStno,struStud.nAge,\struStud.fScore);return0;}運(yùn)營(yíng)結(jié)果:EnternStNo.nAge,fscore:1,20,95.5nStNo=1,nAge=20,fScore=95.5結(jié)果分析:對(duì)結(jié)構(gòu)體成員變量的訪問用圓點(diǎn)操作符“·”,它被稱為成員操作符,圓點(diǎn)運(yùn)算優(yōu)先級(jí)最高且是自左向右的結(jié)合,其具體格式如下:結(jié)構(gòu)體變量名.成員變量名,它表達(dá)要訪問結(jié)構(gòu)體變量下的成員變量名域;由于取地址操作符優(yōu)先級(jí)低于圓點(diǎn)操作符,對(duì)成員變量地址的引用可以不加括號(hào)。然后還要注旨在結(jié)構(gòu)體定義完畢后要記住加分號(hào)。2.基于結(jié)構(gòu)體數(shù)組的應(yīng)用實(shí)驗(yàn)。(1)有n個(gè)學(xué)生,每個(gè)學(xué)生的數(shù)據(jù)涉及學(xué)號(hào)(num)、姓名(name[20])、性別(sex)、年齡(age),以及三門課程的成績(jī)(score[3])。規(guī)定:在main()函數(shù)中輸入這些學(xué)生的這些數(shù)據(jù),然后設(shè)計(jì)一個(gè)函數(shù)count()來計(jì)算每個(gè)學(xué)生的總分和平均分,最后,打印出所有數(shù)據(jù)信息(包含本來輸入的學(xué)生原始數(shù)據(jù)信息和求解出來的新信息)。程序如下:#include<stdio.h>#include<stdlib.h>#defineSTUD_NUM2/*宏定義*/structstud_info/*定義一個(gè)結(jié)構(gòu)體*/{intnum;charname[20];charsex;intage;intscore[3];};voidstud_gets(structstud_info*studPtr,constintno);/*聲明外部函數(shù)*/voidstud_input(structstud_info*stud_arr,constintnum);voidstud_output(conststructstud_info*stud_arr,constintnum);voidstud_gets(structstud_info*studPtr,constintno)/*分別定義*/{intj,h;charcTemp[10];printf("Theno%d'sinfois:\n",no);printf("num=");gets(cTemp);studPtr->num=at(yī)oi(cTemp);for(h=0;h<20;h++){studPtr->name[h]=0;}printf("name=");gets(studPtr->name);printf("sex=");studPtr->sex=getchar();getchar();printf("age=");scanf("%d",&(studPtr->age));getchar();printf("\nscore=");for(j=0;j<3;j++){scanf("%d",&(studPtr->score[j]));}getchar();}voidstud_input(structstud_info*stud_arr,constintnum){inti;structstud_info*studPtr=stud_arr;printf("Pl(wèi)easeinputstudents'info.\n");printf("(numnamesexagescore)\n");for(i=0;i<num;studPtr++,i++)stud_gets(studPtr,i+1);return;}voidstud_output(conststructstud_info*stud_arr,constintnum){inti;structstud_info*studPtr;studPtr=stud_arr;printf("Informationofthestudentsare::\n");printf("\nnumnamesexagescore:\n");for(i=0;i<num;studPtr++,i++){printf("%-8d%-8s%-8c%-8d%-8d%-8d%-8d",studPtr->num,studPtr->name,studPtr->sex,studPtr->age,\studPtr->score[0],studPtr->score[1],studPtr->score[2]);return;}}voidcount(conststructstud_info*stud_arr,constintnum){inti,snum,ave,max;char*pt;structstud_info*studPtr=stud_arr;for(i=0;i<num;studPtr++,i++){snum=studPtr->score[0]+studPtr->score[1]+studPtr->score[2];ave=snum/3;if(i==0){max=snum;pt=studPtr->name;}else{if(max<snum)pt=studPtr->name;}printf("\n\nthe%d'sscoreis%d\naveis%d",num,snum,ave);}printf("\n\n\nthebestis");for(i=0;i<20;i++){if(pt[i]!=0)printf("%c",pt[i]);}return;}intmain(void){structstud_infostudArr[STUD_NUM];clrscr();stud_input(studArr,STUD_NUM);stud_output(studArr,STUD_NUM);count(studArr,STUD_NUM);return0;}運(yùn)營(yíng)結(jié)果如下:分析:程序提成六個(gè)模塊,分別是結(jié)構(gòu)體,structstud_info,voidstud_gets,voidstud_input,voidstud_output,voidcount,main(void)這六個(gè)模塊,程序一方面聲明了

溫馨提示

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

評(píng)論

0/150

提交評(píng)論