《C語言程序設(shè)計(jì)》綜合實(shí)習(xí)報(bào)告.doc

上傳人:小** 文檔編號(hào):16611690 上傳時(shí)間:2020-10-19 格式:DOC 頁數(shù):17 大小:350.50KB
收藏 版權(quán)申訴 舉報(bào) 下載
《C語言程序設(shè)計(jì)》綜合實(shí)習(xí)報(bào)告.doc_第1頁
第1頁 / 共17頁
《C語言程序設(shè)計(jì)》綜合實(shí)習(xí)報(bào)告.doc_第2頁
第2頁 / 共17頁
《C語言程序設(shè)計(jì)》綜合實(shí)習(xí)報(bào)告.doc_第3頁
第3頁 / 共17頁

下載文檔到電腦,查找使用更方便

5 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《《C語言程序設(shè)計(jì)》綜合實(shí)習(xí)報(bào)告.doc》由會(huì)員分享,可在線閱讀,更多相關(guān)《《C語言程序設(shè)計(jì)》綜合實(shí)習(xí)報(bào)告.doc(17頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

1、- 17 -- 17 - 課題一:用指針優(yōu)化學(xué)生成績排名 一、目的 1.熟悉變量的指針和指向變量的的指針變量的概念和使用 2.熟悉數(shù)組的指針和指向數(shù)組的的指針變量的概念和使用 3. 掌握冒泡法或選擇法排序的算法 4. 掌握函數(shù)的定義、調(diào)用、聲明,以及參數(shù)的兩種傳遞方式 二、實(shí)習(xí)環(huán)境 個(gè)人計(jì)算機(jī),Windows操作系統(tǒng),Turbo C 2.0或 WinTC或Visual C++等編譯開發(fā)環(huán)境 三、實(shí)習(xí)內(nèi)容與步驟 1.定義一個(gè)數(shù)組stu[10]存放10個(gè)學(xué)生的成績,從鍵盤輸入數(shù)據(jù),要求用指針實(shí)現(xiàn) 2.將數(shù)組stu[10]的內(nèi)容輸出到屏幕上,要求用指針實(shí)現(xiàn) 3.將成績數(shù)組按照

2、從高到低進(jìn)行排序,要求用指針實(shí)現(xiàn) 4.將第三步內(nèi)容放在函數(shù)中實(shí)現(xiàn),在主函數(shù)中調(diào)用實(shí)現(xiàn)排序,用指針實(shí)現(xiàn),輸出排序后的成績單 5.采用指針方法,輸入字符串“student score ”,復(fù)制該字符串并輸出(復(fù)制字符串采用庫函數(shù)或用戶自定義函數(shù)) 6.在實(shí)習(xí)報(bào)告中畫出程序流程圖,說明程序設(shè)計(jì)的算法,附主要程序段運(yùn)行結(jié)果(屏幕截圖)。 7. 在實(shí)習(xí)報(bào)告中說明知識(shí)點(diǎn)。 8.在實(shí)習(xí)報(bào)告中說明程序設(shè)計(jì)過程中的難點(diǎn)、解決辦法及編程小結(jié)或體會(huì)。 四、程序流程圖、算法及運(yùn)行結(jié)果 1.程序流程圖: 開始 由鍵盤輸入成績 輸出成績 比較成績的高低 復(fù)制stud

3、ent score 對(duì)成績排序 輸出字符串 輸出排序好的成績 結(jié)束 2.算法: 先定義一個(gè)函數(shù)接收10個(gè)學(xué)生的成績,利用指針將數(shù)據(jù)保存在數(shù)組中,再定義第二個(gè)函數(shù)輸出所以學(xué)生的成績,同樣也是使用指針,最后定義一個(gè)函數(shù)用選擇排序法對(duì)成績進(jìn)行由大到小的排序,將指針指向的是數(shù)組中的第一個(gè)地址,在主函數(shù)中依次調(diào)用這兩個(gè)函數(shù); 定義一個(gè)字符指針指向字符串,利用庫函數(shù)中的strcpy將student score復(fù)制給字符指針,輸出字符串 3.程序: #include"stdio.h" #include"string.h" struct student { int grad

4、e; int num; }stu[10]; void input(struct student *p) { int i; for(i=0;i<10;i++,p++) { printf("請(qǐng)輸入第 %-2d個(gè)學(xué)生的成績:",i+1); scanf("%d%d",&p->num,&p->grade); } } void printout(struct student *p) { int i; for(i=0;i<10;i++,p++) printf("第 %-2d個(gè)學(xué)生的成績?yōu)椋?d\n",i+1,p->grade); } void ar

5、row (int *p1,int *p2,int *px,int *py) { int t,m; t=*px; *px=*py; *py=t; m=*p1; *p1=*p2; *p2=m; } void place(struct student stu[]) { int i,j; for(i=1;i<10;i++ ) for(j=0;j<10-i;j++) if (stu[j].grade

6、stu[j].grade,&stu[j+1].grade); } int main(void) { struct student stu[10],*ptr; int i; char string[100],*s; s=string;ptr=stu; input(ptr); printout(ptr); place(stu); printf("排序后的成績單為:\n"); for(i=0;i<10;i++) printf("第 %-2d名 %-2d %-5d\n",i+1,stu[i].num,stu[i].grade); print

7、f("\n"); strcpy(s,"student score"); printf("%s\n",string); } 4.運(yùn)行結(jié)果: 五、知識(shí)點(diǎn)、難點(diǎn)及解決辦法。 主要考察的是利用指針作為函數(shù)參數(shù)以及指針數(shù)組的知識(shí)點(diǎn),如何使指針指向數(shù)組并能將值返回給主函數(shù)是一個(gè)難點(diǎn) 首先定義一個(gè)整型指針指向數(shù)組stu[]的首地址,在自定義函數(shù)中運(yùn)用循環(huán)結(jié)構(gòu)實(shí)現(xiàn)指針的移動(dòng)并分別存儲(chǔ)各個(gè)學(xué)生的成績返回給主函數(shù) 六、編程小結(jié)或體會(huì)。 編程時(shí)除了注意指針與函數(shù)如何調(diào)用外,還要注意細(xì)節(jié)問題,比如自定義變量類型的統(tǒng)一,循環(huán)結(jié)構(gòu)的循環(huán)次數(shù)等等,要謹(jǐn)慎對(duì)待 課題二:學(xué)生成績單制作 一、

8、目的 1.掌握結(jié)構(gòu)體變量及數(shù)組的定義、賦值、初始化、輸入、輸出 2.結(jié)構(gòu)體數(shù)組的操作。 二、實(shí)習(xí)環(huán)境 個(gè)人計(jì)算機(jī),Windows操作系統(tǒng),Turbo C 2.0或 WinTC或Visual C++等編譯開發(fā)環(huán)境 三、實(shí)習(xí)內(nèi)容與步驟 1.定義一個(gè)結(jié)構(gòu)體數(shù)組,存放10個(gè)學(xué)生的學(xué)號(hào),姓名,三門課的成績 2.從鍵盤輸入10個(gè)學(xué)生的以上內(nèi)容 3.輸出單門課成績最高的學(xué)生的學(xué)號(hào)、姓名、以及該門課程的成績 4.輸出三門課程的平均分?jǐn)?shù)最高的學(xué)生的學(xué)號(hào)、姓名及其平均分 5.將10個(gè)學(xué)生按照平均分?jǐn)?shù)從高到低進(jìn)行排序,輸出結(jié)果,格式如下所示: number name math

9、Chinese English average 103 tom 90 90 100 95 101 alice 90 80 70 80 6.在實(shí)習(xí)報(bào)告中畫出程序流程圖,說明程序設(shè)計(jì)的算法,附主要程序段及運(yùn)行結(jié)果(屏幕截圖)。 7.在實(shí)習(xí)報(bào)告中說明知識(shí)點(diǎn)。 8.在實(shí)習(xí)報(bào)告中說明程序設(shè)計(jì)過程中的難點(diǎn)、解決辦法及編程小結(jié)或體會(huì) 四、程序流程圖、算法及運(yùn)行結(jié)果 1.程序流程圖: 比較每個(gè)學(xué)生單門課成績 計(jì)算每個(gè)學(xué)生平均分比較 按平均分高低排序 結(jié)束

10、 開始 鍵入每個(gè)學(xué)生的信息 根據(jù)返回值輸出相應(yīng)的學(xué)生信息 按照排序輸出學(xué)生信息 2.算法: 先定義一個(gè)結(jié)構(gòu)體,存儲(chǔ)學(xué)生的各項(xiàng)信息,定義一個(gè)結(jié)構(gòu)體指針指向結(jié)構(gòu)體數(shù)組,第一個(gè)函數(shù)比較每個(gè)學(xué)生單門課的成績,返回每一門課最高分學(xué)生的stu的下標(biāo);第二個(gè)函數(shù)比較每個(gè)學(xué)生的平均分,返回平均分最高的學(xué)生;第三個(gè)函數(shù)主要按照平均分高低對(duì)學(xué)生進(jìn)行排序,通過循環(huán)和選擇排序法實(shí)現(xiàn)指針的移動(dòng)以及重新排列,主函數(shù)中依次調(diào)用這三個(gè)函數(shù) 3.程序: #include"stdio.h" #define N 10 struct student { long number; char name[2

11、0]; float grade[3]; float average; }stu[10]; int hanshu_best(struct student *p,int m) { int q,num; float a; a=p->grade[m]; num=0; for(q=0;qgrade[m]>a) { a=(p+q)->grade[m]; num=q; } return num; } int hanshu_average(struct student *p) { int i,

12、m,index; float a; for(m=0;maverage=0; for(i=0;i<3;i++) p->average=p->average+p->grade[i]; p->average=p->average*1.0/3; } a=p->average; for(m=0;maverage>a) { a=p->average; index=m; } else index=0; retur

13、n index; } void hanshu_place(struct student stu[]) { int i,j; struct student t; for(i=0;istu[i].average) { t=stu[j+1]; stu[j+1]=stu[i]; stu[i]=t;} } void main() { struct student stu[10],*ptr; int i,j,index,m,num; float av

14、erage; ptr=stu; for(i=0;i

15、m].number,stu[num].name,stu[num].grade[m]); } index=hanshu_average(ptr); printf("\n三門課平均分最高的學(xué)生信息是:\n"); printf("學(xué)號(hào)%ld 姓名:%-10s 平均分%-8.2f\n",stu[index].number,stu[index].name,stu[index].average); printf("\n10個(gè)學(xué)生由高分到低分排名為:\n"); printf("number name Math Chinese E

16、nglish average\n"); hanshu_place(ptr); for(i=0;i

17、 先定義一個(gè)結(jié)構(gòu)體數(shù)組,再定義一個(gè)結(jié)構(gòu)體指針,令指針指向數(shù)組的首地址,在自定義函數(shù)中通過指針的運(yùn)算實(shí)現(xiàn)數(shù)組的運(yùn)算,并返回相應(yīng)的值 六、編程小結(jié)或體會(huì)。 在輸出我們所需要的數(shù)據(jù)時(shí)候可以通過一些小技巧使程序看起來更好看。 掌握結(jié)構(gòu)體指針的技巧可以解決很多問題,使自己的程序具有解決多個(gè)復(fù)雜問題的能力,以后多練習(xí)此類的程序設(shè)計(jì)問題,使自己更加熟練 課題三:學(xué)生成績文件管理 一、目的 1.掌握文件指針的概念和運(yùn)用 2.掌握文件的相關(guān)操作:打開、讀、寫、關(guān)閉 3.掌握文件的定位操作 二、實(shí)習(xí)環(huán)境 個(gè)人計(jì)算機(jī),Windows操作系統(tǒng),Turbo C 2.0或 WinTC或Visu

18、al C++等編譯開發(fā)環(huán)境 三、實(shí)習(xí)內(nèi)容與步驟 1.定義一個(gè)結(jié)構(gòu)體數(shù)組,存放10個(gè)學(xué)生的學(xué)號(hào),姓名,三門課的成績 2.從鍵盤輸入10個(gè)學(xué)生的以上內(nèi)容,存入文件stud.txt,關(guān)閉文件 3.打開stud.txt文件,將數(shù)據(jù)讀出,查看是否正確寫入,關(guān)閉文件。 4.打開文件stud.txt文件,讀出數(shù)據(jù),將10個(gè)學(xué)生按照平均分?jǐn)?shù)從高到低進(jìn)行排序, 分別將結(jié)果輸出到屏幕上和另一文件studsort.txt中。 5.在實(shí)習(xí)報(bào)告中畫出程序流程圖,說明程序設(shè)計(jì)的算法,附主要程序段及運(yùn)行結(jié)果(屏幕截圖)。 6.在實(shí)習(xí)報(bào)告中說明知識(shí)點(diǎn)。 7.在實(shí)習(xí)報(bào)告中說明程序設(shè)計(jì)過程中的難點(diǎn)、解決辦法及編

19、程小結(jié)或體會(huì)。 四、程序流程圖、算法及運(yùn)行結(jié)果 1.程序流程圖: 將學(xué)生信息存入文件中 鍵入每個(gè)學(xué)生的信息 將文件中的信息讀出 按平均分高低排序 將排序后的信息存入另一文件 開始 結(jié)束 2.算法: 首先創(chuàng)建一個(gè)可讀可寫的新文件stud.txt,鍵入十個(gè)學(xué)生的信息并儲(chǔ)存在文件中,關(guān)閉程序;打開文件stud.txt,讀出文件中的信息并輸出,檢查有無錯(cuò)漏,并按照平均分通過選擇排序法對(duì)學(xué)生由高到低排序,關(guān)閉程序;將排好序的信息輸出并存儲(chǔ)在新的可寫文件studsort.txt中 3.程序: #include"stdio.h" #include"stdlib.h" #d

20、efine N 10 struct student { long num; char name[20]; int grade[3]; }stu[10]; int main(void) { FILE *fp,*fpp; struct student stu[10],t; float average[100]; int i=0,j; if((fp=fopen("stud.txt","w+"))==NULL) { printf("該文件打開失敗!"); exit(0); } for(i=0;i

21、("第 %-2d個(gè)學(xué)生的學(xué)號(hào)、姓名及三門課成績:\n",i+1); scanf("%ld%s",&stu[i].num,stu[i].name); fprintf(fp,"第%-2d個(gè)學(xué)生的學(xué)號(hào)、姓名及三門課成績:\n",i+1); fprintf(fp,"%ld %-5s",stu[i].num,stu[i].name); for(j=0;j<3;j++) { scanf("%d",&stu[i].grade[j]); fprintf(fp,"%d ",stu[i].grade[j]); } fprintf(fp,"\n"); }

22、 if(fclose(fp)) { printf("該文件無法正常關(guān)閉!\n"); exit(0); } if((fp=fopen("stud.txt","r+"))==NULL) { printf("該文件打開失?。?); exit(0); } printf("\n"); for(i=0;i

23、.num,stu[i].name); for(j=0;j<3;j++) { fscanf(fp,"%d",&stu[i].grade[j]); printf("%d ",stu[i].grade[j]); } printf("\n"); } if(fclose(fp)) { printf("該文件無法正常關(guān)閉!\n"); exit(0); } if((fp=fopen("stud.txt","r+"))==NULL) { printf("該文件打開失敗!"); exit(0); }

24、 for(i=0;i

25、f(average[j+1]>average[i]) { t=stu[j+1]; stu[j+1]=stu[i]; stu[i]=t; } if(fclose(fp)) { printf("該文件無法正常關(guān)閉!\n"); exit(0); } if((fpp=fopen("studsort.txt","w+"))==NULL) { printf("該文件打開失敗!"); exit(0); } printf("\n由高到低排序?yàn)椋篭n"); for(i=0;i

26、stu[i].num,stu[i].name); fprintf(fpp,"%ld %-5s",stu[i].num,stu[i].name); for(j=0;j<3;j++) { fprintf(fpp,"%d ",stu[i].grade[j]); printf("%d ",stu[i].grade[j]); } printf("\n"); fprintf(fpp,"\n"); } if(fclose(fp)) { printf("該文件無法正常關(guān)閉!\n"); exit(0); } }

27、 4.運(yùn)行結(jié)果: 五、知識(shí)點(diǎn)、難點(diǎn)及解決辦法。 主要考察對(duì)于文件信息的存儲(chǔ)以及讀取文件內(nèi)的信息,難點(diǎn)在于如何將信息存儲(chǔ)起來以及如何從文件中讀取有效信息并顯示在調(diào)式框中 首先定義一個(gè)指針指向文件,然后創(chuàng)建或是打開一個(gè)的文件,注意文件的類型和打開方式,如果是寫入信息則用fprintf,如果是讀取信息則是fscanf,注意寫入和讀取的書寫格式,前面許注明指向該文件的指針 六、編程小結(jié)或體會(huì)。 通過文件的學(xué)習(xí),以后調(diào)試程序后還可以將信息永久的保存起來隨時(shí)使用或更改,不需要使用一次就輸入一次,方便又省時(shí)間, 課題四:鏈表的創(chuàng)建與使用

28、一、目的 1.掌握單向鏈表的概念 2.掌握單向鏈表的創(chuàng)建、查找、刪除方法 二、實(shí)習(xí)環(huán)境 個(gè)人計(jì)算機(jī),Windows操作系統(tǒng),Turbo C 2.0或 WinTC或Visual C++等編譯開發(fā)環(huán)境 三、實(shí)習(xí)內(nèi)容與步驟 1.創(chuàng)建一個(gè)單向鏈表,存放10個(gè)學(xué)生的學(xué)號(hào),姓名,并輸出這種10個(gè)學(xué)生的信息。 2.在鏈表中查找指定學(xué)號(hào)的學(xué)生,輸出其姓名。 3.在鏈表中刪除指定學(xué)號(hào)的學(xué)生,然后輸出其余學(xué)生的信息。 4.在實(shí)習(xí)報(bào)告中畫出程序流程圖,說明程序設(shè)計(jì)的算法,附主要程序段及運(yùn)行結(jié)果(屏幕截圖)。 5.在實(shí)習(xí)報(bào)告中說明知識(shí)點(diǎn)。 6.在實(shí)習(xí)報(bào)告中說明程序設(shè)計(jì)過程中的難點(diǎn)、解決辦法及編

29、程小結(jié)或體會(huì)。 四、程序流程圖、算法及運(yùn)行結(jié)果 1.程序流程圖: 鍵入10個(gè)學(xué)生的信息 開始 結(jié)束 主函數(shù) 創(chuàng)建鏈表將學(xué)生信息存儲(chǔ)進(jìn)去 查找指定學(xué)號(hào)的學(xué)生 刪除指定學(xué)號(hào)的學(xué)生 輸出其余學(xué)生信息 輸出該學(xué)生姓名 2.算法: 用指針處理單向鏈表,定義一個(gè)頭指針,尾指針,通過尾指針的移動(dòng)實(shí)現(xiàn)數(shù)據(jù)信息的存儲(chǔ)與讀?。粍h除結(jié)點(diǎn)時(shí),應(yīng)該先將要?jiǎng)h除結(jié)點(diǎn)前后的結(jié)點(diǎn)連上,然后再將其刪除,保證鏈表不會(huì)“斷”。 3.程序: #include"stdio.h" #include"stdlib.h" #define N 10 #define len sizeof(struct

30、 student) struct student { long num; char name[20]; struct student *next; }; void search(struct student *head) { long number; struct student *p; p=head; printf("請(qǐng)輸入要查找的學(xué)生學(xué)號(hào):"); scanf("%ld",&number); do { if(p->num==number) printf("%-15s\n",p->name); p=p->next;

31、 }while(p!=NULL); } void cdelete(struct student *q) { struct student *p1,*p2; long count; printf("請(qǐng)輸入你要?jiǎng)h除的學(xué)生學(xué)號(hào):"); scanf("%ld",&count); p1=q; while(count!=p1->num&&p1->next!=NULL) { p2=p1; p1=p1->next; }; if(count==p1->num) { if(p1==q) q=p1->next; else p2->next=p1-

32、>next; printf("delete :%ld\n",p1->num); } } int main(void) { struct student *head,*tail,*p,*p1,*p2,*q; int n=0,i; long number,NUM; printf("請(qǐng)輸入%d個(gè)學(xué)生的信息:\n",N); p=tail=(struct student *)malloc(len); head=NULL; scanf("%ld%s",&p->num,p->name); while(p->num!=0) { n+=1; if(

33、n==1) head=p; else tail->next=p; tail=p; p=(struct student *)malloc(len); scanf("%ld%s",&p->num,p->name); }; tail->next=NULL; printf("\n這10個(gè)學(xué)生的信息為:\n"); p=head; if(head!=NULL) do { printf("%-15ld%-15s\n",p->num,p->name); p=p->next; }while(p!=NUL

34、L); search(head); q=head; cdelete(q); do { printf("%-15ld%-15s\n",q->num,q->name); q=q->next; }while(q!=NULL); } 4.運(yùn)行結(jié)果: 五、知識(shí)點(diǎn)、難點(diǎn)及解決辦法。 主要考察利用指針制作單向鏈表,難點(diǎn)在于各個(gè)結(jié)點(diǎn)的鏈接以及對(duì)于鏈表的輸出,刪除結(jié)點(diǎn)時(shí)如何不讓鏈表斷開 定義一個(gè)頭指針和一個(gè)尾指針,通過尾指針的移動(dòng)實(shí)現(xiàn)結(jié)點(diǎn)的鏈接,刪除結(jié)點(diǎn)時(shí)先將要?jiǎng)h除結(jié)點(diǎn)兩端的結(jié)點(diǎn)鏈接上,再刪除。 六、編程小結(jié)或體會(huì)。 制作單向鏈表是對(duì)指針的充分運(yùn)用,可以節(jié)省內(nèi)存,但是要熟練掌握還是有

展開閱讀全文
溫馨提示:
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ì)自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!