《C語言程序設計》綜合實習報告.doc
《《C語言程序設計》綜合實習報告.doc》由會員分享,可在線閱讀,更多相關《《C語言程序設計》綜合實習報告.doc(17頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、- 17 -- 17 - 課題一:用指針優(yōu)化學生成績排名 一、目的 1.熟悉變量的指針和指向變量的的指針變量的概念和使用 2.熟悉數(shù)組的指針和指向數(shù)組的的指針變量的概念和使用 3. 掌握冒泡法或選擇法排序的算法 4. 掌握函數(shù)的定義、調(diào)用、聲明,以及參數(shù)的兩種傳遞方式 二、實習環(huán)境 個人計算機,Windows操作系統(tǒng),Turbo C 2.0或 WinTC或Visual C++等編譯開發(fā)環(huán)境 三、實習內(nèi)容與步驟 1.定義一個數(shù)組stu[10]存放10個學生的成績,從鍵盤輸入數(shù)據(jù),要求用指針實現(xiàn) 2.將數(shù)組stu[10]的內(nèi)容輸出到屏幕上,要求用指針實現(xiàn) 3.將成績數(shù)組按照
2、從高到低進行排序,要求用指針實現(xiàn) 4.將第三步內(nèi)容放在函數(shù)中實現(xiàn),在主函數(shù)中調(diào)用實現(xiàn)排序,用指針實現(xiàn),輸出排序后的成績單 5.采用指針方法,輸入字符串“student score ”,復制該字符串并輸出(復制字符串采用庫函數(shù)或用戶自定義函數(shù)) 6.在實習報告中畫出程序流程圖,說明程序設計的算法,附主要程序段運行結(jié)果(屏幕截圖)。 7. 在實習報告中說明知識點。 8.在實習報告中說明程序設計過程中的難點、解決辦法及編程小結(jié)或體會。 四、程序流程圖、算法及運行結(jié)果 1.程序流程圖: 開始 由鍵盤輸入成績 輸出成績 比較成績的高低 復制stud
3、ent score 對成績排序 輸出字符串 輸出排序好的成績 結(jié)束 2.算法: 先定義一個函數(shù)接收10個學生的成績,利用指針將數(shù)據(jù)保存在數(shù)組中,再定義第二個函數(shù)輸出所以學生的成績,同樣也是使用指針,最后定義一個函數(shù)用選擇排序法對成績進行由大到小的排序,將指針指向的是數(shù)組中的第一個地址,在主函數(shù)中依次調(diào)用這兩個函數(shù); 定義一個字符指針指向字符串,利用庫函數(shù)中的strcpy將student score復制給字符指針,輸出字符串 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("請輸入第 %-2d個學生的成績:",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個學生的成績?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.運行結(jié)果:
五、知識點、難點及解決辦法。
主要考察的是利用指針作為函數(shù)參數(shù)以及指針數(shù)組的知識點,如何使指針指向數(shù)組并能將值返回給主函數(shù)是一個難點
首先定義一個整型指針指向數(shù)組stu[]的首地址,在自定義函數(shù)中運用循環(huán)結(jié)構實現(xiàn)指針的移動并分別存儲各個學生的成績返回給主函數(shù)
六、編程小結(jié)或體會。
編程時除了注意指針與函數(shù)如何調(diào)用外,還要注意細節(jié)問題,比如自定義變量類型的統(tǒng)一,循環(huán)結(jié)構的循環(huán)次數(shù)等等,要謹慎對待
課題二:學生成績單制作
一、 8、目的
1.掌握結(jié)構體變量及數(shù)組的定義、賦值、初始化、輸入、輸出
2.結(jié)構體數(shù)組的操作。
二、實習環(huán)境
個人計算機,Windows操作系統(tǒng),Turbo C 2.0或 WinTC或Visual C++等編譯開發(fā)環(huán)境
三、實習內(nèi)容與步驟
1.定義一個結(jié)構體數(shù)組,存放10個學生的學號,姓名,三門課的成績
2.從鍵盤輸入10個學生的以上內(nèi)容
3.輸出單門課成績最高的學生的學號、姓名、以及該門課程的成績
4.輸出三門課程的平均分數(shù)最高的學生的學號、姓名及其平均分
5.將10個學生按照平均分數(shù)從高到低進行排序,輸出結(jié)果,格式如下所示:
number name math 9、Chinese English average
103 tom 90 90 100 95
101 alice 90 80 70 80
6.在實習報告中畫出程序流程圖,說明程序設計的算法,附主要程序段及運行結(jié)果(屏幕截圖)。
7.在實習報告中說明知識點。
8.在實習報告中說明程序設計過程中的難點、解決辦法及編程小結(jié)或體會
四、程序流程圖、算法及運行結(jié)果
1.程序流程圖:
比較每個學生單門課成績
計算每個學生平均分比較
按平均分高低排序
結(jié)束
10、
開始
鍵入每個學生的信息
根據(jù)返回值輸出相應的學生信息
按照排序輸出學生信息
2.算法:
先定義一個結(jié)構體,存儲學生的各項信息,定義一個結(jié)構體指針指向結(jié)構體數(shù)組,第一個函數(shù)比較每個學生單門課的成績,返回每一門課最高分學生的stu的下標;第二個函數(shù)比較每個學生的平均分,返回平均分最高的學生;第三個函數(shù)主要按照平均分高低對學生進行排序,通過循環(huán)和選擇排序法實現(xiàn)指針的移動以及重新排列,主函數(shù)中依次調(diào)用這三個函數(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;q 12、m,index;
float a;
for(m=0;m 13、n index;
}
void hanshu_place(struct student stu[])
{ int i,j;
struct student t;
for(i=0;i 14、erage;
ptr=stu;
for(i=0;i 15、m].number,stu[num].name,stu[num].grade[m]); }
index=hanshu_average(ptr);
printf("\n三門課平均分最高的學生信息是:\n");
printf("學號%ld 姓名:%-10s 平均分%-8.2f\n",stu[index].number,stu[index].name,stu[index].average);
printf("\n10個學生由高分到低分排名為:\n");
printf("number name Math Chinese E 16、nglish average\n");
hanshu_place(ptr);
for(i=0;i 17、
先定義一個結(jié)構體數(shù)組,再定義一個結(jié)構體指針,令指針指向數(shù)組的首地址,在自定義函數(shù)中通過指針的運算實現(xiàn)數(shù)組的運算,并返回相應的值
六、編程小結(jié)或體會。
在輸出我們所需要的數(shù)據(jù)時候可以通過一些小技巧使程序看起來更好看。
掌握結(jié)構體指針的技巧可以解決很多問題,使自己的程序具有解決多個復雜問題的能力,以后多練習此類的程序設計問題,使自己更加熟練
課題三:學生成績文件管理
一、目的
1.掌握文件指針的概念和運用
2.掌握文件的相關操作:打開、讀、寫、關閉
3.掌握文件的定位操作
二、實習環(huán)境
個人計算機,Windows操作系統(tǒng),Turbo C 2.0或 WinTC或Visu 18、al C++等編譯開發(fā)環(huán)境
三、實習內(nèi)容與步驟
1.定義一個結(jié)構體數(shù)組,存放10個學生的學號,姓名,三門課的成績
2.從鍵盤輸入10個學生的以上內(nèi)容,存入文件stud.txt,關閉文件
3.打開stud.txt文件,將數(shù)據(jù)讀出,查看是否正確寫入,關閉文件。
4.打開文件stud.txt文件,讀出數(shù)據(jù),將10個學生按照平均分數(shù)從高到低進行排序,
分別將結(jié)果輸出到屏幕上和另一文件studsort.txt中。
5.在實習報告中畫出程序流程圖,說明程序設計的算法,附主要程序段及運行結(jié)果(屏幕截圖)。
6.在實習報告中說明知識點。
7.在實習報告中說明程序設計過程中的難點、解決辦法及編 19、程小結(jié)或體會。
四、程序流程圖、算法及運行結(jié)果
1.程序流程圖:
將學生信息存入文件中
鍵入每個學生的信息
將文件中的信息讀出
按平均分高低排序
將排序后的信息存入另一文件
開始
結(jié)束
2.算法:
首先創(chuàng)建一個可讀可寫的新文件stud.txt,鍵入十個學生的信息并儲存在文件中,關閉程序;打開文件stud.txt,讀出文件中的信息并輸出,檢查有無錯漏,并按照平均分通過選擇排序法對學生由高到低排序,關閉程序;將排好序的信息輸出并存儲在新的可寫文件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個學生的學號、姓名及三門課成績:\n",i+1);
scanf("%ld%s",&stu[i].num,stu[i].name);
fprintf(fp,"第%-2d個學生的學號、姓名及三門課成績:\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("該文件無法正常關閉!\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("該文件無法正常關閉!\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("該文件無法正常關閉!\n");
exit(0); }
if((fpp=fopen("studsort.txt","w+"))==NULL)
{ printf("該文件打開失??!");
exit(0); }
printf("\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("該文件無法正常關閉!\n");
exit(0); }
} 27、
4.運行結(jié)果:
五、知識點、難點及解決辦法。
主要考察對于文件信息的存儲以及讀取文件內(nèi)的信息,難點在于如何將信息存儲起來以及如何從文件中讀取有效信息并顯示在調(diào)式框中
首先定義一個指針指向文件,然后創(chuàng)建或是打開一個的文件,注意文件的類型和打開方式,如果是寫入信息則用fprintf,如果是讀取信息則是fscanf,注意寫入和讀取的書寫格式,前面許注明指向該文件的指針
六、編程小結(jié)或體會。
通過文件的學習,以后調(diào)試程序后還可以將信息永久的保存起來隨時使用或更改,不需要使用一次就輸入一次,方便又省時間,
課題四:鏈表的創(chuàng)建與使用
28、一、目的
1.掌握單向鏈表的概念
2.掌握單向鏈表的創(chuàng)建、查找、刪除方法
二、實習環(huán)境
個人計算機,Windows操作系統(tǒng),Turbo C 2.0或 WinTC或Visual C++等編譯開發(fā)環(huán)境
三、實習內(nèi)容與步驟
1.創(chuàng)建一個單向鏈表,存放10個學生的學號,姓名,并輸出這種10個學生的信息。
2.在鏈表中查找指定學號的學生,輸出其姓名。
3.在鏈表中刪除指定學號的學生,然后輸出其余學生的信息。
4.在實習報告中畫出程序流程圖,說明程序設計的算法,附主要程序段及運行結(jié)果(屏幕截圖)。
5.在實習報告中說明知識點。
6.在實習報告中說明程序設計過程中的難點、解決辦法及編 29、程小結(jié)或體會。
四、程序流程圖、算法及運行結(jié)果
1.程序流程圖:
鍵入10個學生的信息
開始
結(jié)束
主函數(shù)
創(chuàng)建鏈表將學生信息存儲進去
查找指定學號的學生
刪除指定學號的學生
輸出其余學生信息
輸出該學生姓名
2.算法:
用指針處理單向鏈表,定義一個頭指針,尾指針,通過尾指針的移動實現(xiàn)數(shù)據(jù)信息的存儲與讀取;刪除結(jié)點時,應該先將要刪除結(jié)點前后的結(jié)點連上,然后再將其刪除,保證鏈表不會“斷”。
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("請輸入要查找的學生學號:");
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("請輸入你要刪除的學生學號:");
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("請輸入%d個學生的信息:\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個學生的信息為:\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.運行結(jié)果:
五、知識點、難點及解決辦法。
主要考察利用指針制作單向鏈表,難點在于各個結(jié)點的鏈接以及對于鏈表的輸出,刪除結(jié)點時如何不讓鏈表斷開
定義一個頭指針和一個尾指針,通過尾指針的移動實現(xiàn)結(jié)點的鏈接,刪除結(jié)點時先將要刪除結(jié)點兩端的結(jié)點鏈接上,再刪除。
六、編程小結(jié)或體會。
制作單向鏈表是對指針的充分運用,可以節(jié)省內(nèi)存,但是要熟練掌握還是有
- 溫馨提示:
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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識競賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識測試題庫及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習題含答案
- 2煤礦安全監(jiān)測工種技術比武題庫含解析
- 1 礦山應急救援安全知識競賽試題
- 1 礦井泵工考試練習題含答案
- 2煤礦爆破工考試復習題含答案
- 1 各種煤礦安全考試試題含答案