东方亚洲欧a∨人在线观看|欧美亚洲日韩在线播放|日韩欧美精品一区|久久97AV综合

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

        發(fā)布時(shí)間:2020-10-04 來(lái)源: 入黨申請(qǐng) 點(diǎn)擊:

         課題一:用指針優(yōu)化學(xué)生成績(jī)排名

         一、目的

         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++等編譯開(kāi)發(fā)環(huán)境 三、實(shí)習(xí)內(nèi)容與步驟

         1.定義一個(gè)數(shù)組 stu[10]存放 10 個(gè)學(xué)生的成績(jī),從鍵盤(pán)輸入數(shù)據(jù),要求用指針實(shí)現(xiàn) 2.將數(shù)組 stu[10]的內(nèi)容輸出到屏幕上,要求用指針實(shí)現(xiàn) 3.將成績(jī)數(shù)組按照從高到低進(jìn)行排序,要求用指針實(shí)現(xiàn) 4.將第三步內(nèi)容放在函數(shù)中實(shí)現(xiàn),在主函數(shù)中調(diào)用實(shí)現(xiàn)排序,用指針實(shí)現(xiàn),輸出排序后的成績(jī)單 5.采用指針?lè)椒ǎ斎胱址?ldquo;student score ”,復(fù)制該字符串并輸出(復(fù)制字符串采用庫(kù)函數(shù)或用戶自定義函數(shù))

         6.在實(shí)習(xí)報(bào)告中畫(huà)出程序流程圖,說(shuō)明程序設(shè)計(jì)的算法,附主要程序段運(yùn)行結(jié)果(屏幕截圖)。

         7. 在實(shí)習(xí)報(bào)告中說(shuō)明知識(shí)點(diǎn)。

         8.在實(shí)習(xí)報(bào)告中說(shuō)明程序設(shè)計(jì)過(guò)程中的難點(diǎn)、解決辦法及編程小結(jié)或體會(huì)。

         四、程序流程圖、算法及運(yùn)行結(jié)果

         1.程序流程圖:

          2.算法:

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

         #include"stdio.h" #include"string.h" struct student {

          int grade;

         int num; }stu[10]; void input(struct student *p) {

          int i;

         for(i=0;i<10;i++,p++)

         {

          printf("請(qǐng)輸入第 %-2d 個(gè)學(xué)生的成績(jī):",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é)生的成績(jī)?yōu)椋?d\n",i+1,p->grade); } void arrow (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<stu[j+1].grade) arrow(&stu[j].num,&stu[j+1].num,&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("排序后的成績(jī)單為:\n");

         for(i=0;i<10;i++)

          printf("第 %-2d 名

         %-2d

         %-5d\n",i+1,stu[i].num,stu[i].grade);

         printf("\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é)生的成績(jī)返回給主函數(shù) 六、編程小結(jié)或體會(huì)。

         編程時(shí)除了注意指針與函數(shù)如何調(diào)用外,還要注意細(xì)節(jié)問(wèn)題,比如自定義變量類型的統(tǒng)一,循環(huán)結(jié)構(gòu)的循環(huán)次數(shù)等等,要謹(jǐn)慎對(duì)待

         課題二:學(xué)生成績(jī)單制作

         一、目的

         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++等編譯開(kāi)發(fā)環(huán)境 三、實(shí)習(xí)內(nèi)容與步驟

         1.定義一個(gè)結(jié)構(gòu)體數(shù)組,存放 10 個(gè)學(xué)生的學(xué)號(hào),,三門(mén)課的成績(jī) 2.從鍵盤(pán)輸入 10 個(gè)學(xué)生的以上內(nèi)容 3.輸出單門(mén)課成績(jī)最高的學(xué)生的學(xué)號(hào)、、以及該門(mén)課程的成績(jī) 4.輸出三門(mén)課程的平均分?jǐn)?shù)最高的學(xué)生的學(xué)號(hào)、姓名及其平均分 5.將 10 個(gè)學(xué)生按照平均分?jǐn)?shù)從高到低進(jìn)行排序,輸出結(jié)果,格式如下所示:

         number

          name

          math

          Chinese

          English

         average 103

         tom

         90

         90

          100

          95 101

         alice

         90

         80

          70

         80

         6.在實(shí)習(xí)報(bào)告中畫(huà)出程序流程圖,說(shuō)明程序設(shè)計(jì)的算法,附主要程序段及運(yùn)行結(jié)果(屏幕截圖)。

         7.在實(shí)習(xí)報(bào)告中說(shuō)明知識(shí)點(diǎn)。

         8.在實(shí)習(xí)報(bào)告中說(shuō)明程序設(shè)計(jì)過(guò)程中的難點(diǎn)、解決辦法及編程小結(jié)或體會(huì) 四、程序流程圖、算法及運(yùn)行結(jié)果

         1.程序流程圖:

         2.算法:

         先定義一個(gè)結(jié)構(gòu)體,存儲(chǔ)學(xué)生的各項(xiàng)信息,定義一個(gè)結(jié)構(gòu)體指針指向結(jié)構(gòu)體數(shù)組,第一個(gè)函數(shù)比較每個(gè)學(xué)生單門(mén)課的成績(jī),返回每一門(mén)課最高分學(xué)生的 stu 的下標(biāo);第二個(gè)函數(shù)比較每個(gè)學(xué)生的平均分,返回平均分最高的學(xué)生;第三個(gè)函數(shù)主要按照平均分高低對(duì)學(xué)生進(jìn)行排序,通過(guò)循環(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[20];

         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<N-1;q++)

          if((p+q)->grade[m]>a)

          {

         a=(p+q)->grade[m];

         num=q;

         }

         return num; } int hanshu_average(struct student *p) {

         int i,m,index;

         float a;

         for(m=0;m<N;p++,m++)

         {

         p->average=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;m<N;p++,m++)

          if(p->average>a)

          {

         a=p->average;

          index=m;

         }

          else

         index=0;

         return index; } void hanshu_place(struct student stu[]) {

          int i,j;

          struct student t;

         for(i=0;i<N;i++)

          for(j=i;j<N-1;j++)

         if(stu[j+1].average>stu[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 average;

         ptr=stu;

         for(i=0;i<N;i++)

         {

          printf("請(qǐng)輸入第%d 個(gè)學(xué)生的學(xué)號(hào)、姓名及三科成績(jī):\n",i+1);

         scanf("%ld%s",&stu[i].number,stu[i].name);

          for(j=0;j<3;j++)

         scanf("%f",&stu[i].grade[j]);

         }

         printf("\n");

         for(m=0;m<3;m++)

         {

         num=hanshu_best(ptr,m); printf(" 學(xué) 號(hào) %ld

         :

         %-10s

         最 高 分 % -8.2f\n",stu[num].number,stu[num].name,stu[num].grade[m]);

          }

         index=hanshu_average(ptr);

         printf("\n 三門(mén)課平均分最高的學(xué)生信息是:\n");

          printf(" 學(xué) 號(hào) %ld

        。

         %-10s

         平 均分 %-8.2f\n",stu[index].number,stu[index].name,stu[index].a

         verage);

          printf("\n10 個(gè)學(xué)生由高分到低分排名為:\n"); printf("number

         name

         Math

         Chinese

          English

          average\n");

         hanshu_place(ptr);

         for(i=0;i<N;i++)

         {

          printf("%-10ld%-10s%",stu[i].number,stu[i].name);

         for(j=0;j<3;j++)

         printf("%-10.2f",stu[i].grade[j]);

          printf("%-10.2f\n",stu[i].average);} } 4.運(yùn)行結(jié)果:

         五、知識(shí)點(diǎn)、難點(diǎn)及解決辦法。

         主要考察的是結(jié)構(gòu)體指針的運(yùn)用,比較難的地方也就是如何將指針指向結(jié)構(gòu)體并返回我們所要的數(shù)值

          先定義一個(gè)結(jié)構(gòu)體數(shù)組,再定義一個(gè)結(jié)構(gòu)體指針,令指針指向數(shù)組的首地址,在自定義函數(shù)中通過(guò)指針的運(yùn)算實(shí)現(xiàn)數(shù)組的運(yùn)算,并返回相應(yīng)的值 六、編程小結(jié)或體會(huì)。

         在輸出我們所需要的數(shù)據(jù)時(shí)候可以通過(guò)一些小技巧使程序看起來(lái)更好看。

         掌握結(jié)構(gòu)體指針的技巧可以解決很多問(wèn)題,使自己的程序具有解決多個(gè)復(fù)雜問(wèn)題的能力,以后多練習(xí)此類的程序設(shè)計(jì)問(wèn)題,使自己更加熟練 課題三:學(xué)生成績(jī)文件管理

         一、目的

         1.掌握文件指針的概念和運(yùn)用 2.掌握文件的相關(guān)操作:打開(kāi)、讀、寫(xiě)、關(guān)閉 3.掌握文件的定位操作 二、實(shí)習(xí)環(huán)境

         個(gè)人計(jì)算機(jī),Windows 操作系統(tǒng),Turbo C 2.0 或 WinTC 或 Visual C++等編譯開(kāi)發(fā)環(huán)境 三、實(shí)習(xí)內(nèi)容與步驟

         1.定義一個(gè)結(jié)構(gòu)體數(shù)組,存放 10 個(gè)學(xué)生的學(xué)號(hào),,三門(mén)課的成績(jī) 2.從鍵盤(pán)輸入 10 個(gè)學(xué)生的以上內(nèi)容,存入文件 stud.txt,關(guān)閉文件

         3.打開(kāi) stud.txt 文件,將數(shù)據(jù)讀出,查看是否正確寫(xiě)入,關(guān)閉文件。

         4.打開(kāi)文件 stud.txt 文件,讀出數(shù)據(jù),將 10 個(gè)學(xué)生按照平均分?jǐn)?shù)從高到低進(jìn)行排序, 分別將結(jié)果輸出到屏幕上和另一文件 studsort.txt 中。

         5.在實(shí)習(xí)報(bào)告中畫(huà)出程序流程圖,說(shuō)明程序設(shè)計(jì)的算法,附主要程序段及運(yùn)行結(jié)果(屏幕截圖)。

         6.在實(shí)習(xí)報(bào)告中說(shuō)明知識(shí)點(diǎn)。

         7.在實(shí)習(xí)報(bào)告中說(shuō)明程序設(shè)計(jì)過(guò)程中的難點(diǎn)、解決辦法及編程小結(jié)或體會(huì)。

         四、程序流程圖、算法及運(yùn)行結(jié)果

         1.程序流程圖:

          2.算法:

         首先創(chuàng)建一個(gè)可讀可寫(xiě)的新文件 stud.txt,鍵入十個(gè)學(xué)生的信息并儲(chǔ)存在文件中,關(guān)閉程序;打開(kāi)文件 stud.txt,讀出文件中的信息并輸出,檢查有無(wú)錯(cuò)漏,并按照平均分通過(guò)選擇排序法對(duì)學(xué)生由高到低排序,關(guān)閉程序;將排好序的信息輸出并存儲(chǔ)在新的可寫(xiě)文件 studsort.txt 中 3.程序:

         #include"stdio.h" #include"stdlib.h" #define 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("該文件打開(kāi)失!");

         exit(0);

         }

         for(i=0;i<N;i++)

         {

         printf("第 %-2d 個(gè)學(xué)生的學(xué)號(hào)、姓名及三門(mén)課成績(jī):\n",i+1);

          scanf("%ld%s",&stu[i].num,stu[i].name);

          fprintf(fp,"第%-2d 個(gè)學(xué)生的學(xué)號(hào)、姓名及三門(mén)課成績(jī):\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");

         }

          if(fclose(fp))

          {

          printf("該文件無(wú)法正常關(guān)閉!\n");

         exit(0);

          }

         if((fp=fopen("stud.txt","r+"))==NULL)

         {

          printf("該文件打開(kāi)失。");

          exit(0);

          }

         printf("\n");

         for(i=0;i<N;i++)

         {

         printf("第%d 個(gè)學(xué)生的學(xué)號(hào)、姓名及三門(mén)課成績(jī):\n",i+1);

          fscanf(fp,"%ld%s",&stu[i].num,stu[i].name);

          printf("%ld

         %-5s",stu[i].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("該文件無(wú)法正常關(guān)閉!\n");

         exit(0);

         }

          if((fp=fopen("stud.txt","r+"))==NULL)

         {

          printf("該文件打開(kāi)失!");

          exit(0);

          }

         for(i=0;i<N;i++)

         {

          fscanf(fp,"%ld%s",&stu[i].num,stu[i].name);

          for(j=0;j<3;j++)

         fscanf(fp,"%d",&stu[i].grade[j]);

          }

         for(i=0;i<N;i++)

         {

          for(j=0;j<3;j++)

         average[i]=average[i]+stu[i].grade[j];

          average[i]=average[i]*1.00/3;

          }

         for(i=0;i<N-1;i++)

          for(j=i;j<N;j++)

         if(average[j+1]>average[i])

          {

         t=stu[j+1];

         stu[j+1]=stu[i];

         stu[i]=t;

          }

         if(fclose(fp))

          {

          printf("該文件無(wú)法正常關(guān)閉!\n");

         exit(0);

          }

         if((fpp=fopen("studsort.txt","w+"))==NULL)

         {

         printf("該文件打開(kāi)失。");

          exit(0);

          }

         printf("\n 由高到低排序?yàn)椋篭n");

         for(i=0;i<N;i++)

         {

          printf("%ld

         %-5s",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("該文件無(wú)法正常關(guān)閉!\n");

          exit(0);

          } } 4.運(yùn)行結(jié)果:

          五、知識(shí)點(diǎn)、難點(diǎn)及解決辦法。

         主要考察對(duì)于文件信息的存儲(chǔ)以及讀取文件內(nèi)的信息,難點(diǎn)在于如何將信息存儲(chǔ)起來(lái)以及如何從文件中讀取有效信息并顯示在調(diào)式框中

         首先定義一個(gè)指針指向文件,然后創(chuàng)建或是打開(kāi)一個(gè)的文件,注意文件的類型和打開(kāi)方式,如果是寫(xiě)入信息則用 fprintf,如果是讀取信息則是fscanf,注意寫(xiě)入和讀取的書(shū)寫(xiě)格式,前面許注明指向該文件的指針 六、編程小結(jié)或體會(huì)。

         通過(guò)文件的學(xué)習(xí),以后調(diào)試程序后還可以將信息永久的保存起來(lái)隨時(shí)使用或更改,不需要使用一次就輸入一次,方便又省時(shí)間, 課題四:鏈表的創(chuàng)建與使用

         一、目的

         1.掌握單向鏈表的概念 2.掌握單向鏈表的創(chuàng)建、查找、刪除方法

         二、實(shí)習(xí)環(huán)境

         個(gè)人計(jì)算機(jī),Windows 操作系統(tǒng),Turbo C 2.0 或 WinTC 或 Visual C++等編譯開(kāi)發(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)告中畫(huà)出程序流程圖,說(shuō)明程序設(shè)計(jì)的算法,附主要程序段及運(yùn)行結(jié)果(屏幕截圖)。

         5.在實(shí)習(xí)報(bào)告中說(shuō)明知識(shí)點(diǎn)。

         6.在實(shí)習(xí)報(bào)告中說(shuō)明程序設(shè)計(jì)過(guò)程中的難點(diǎn)、解決辦法及編程小結(jié)或體會(huì)。

         四、程序流程圖、算法及運(yùn)行結(jié)果

         1.程序流程圖:

         2.算法:

         用指針處理單向鏈表,定義一個(gè)頭指針,尾指針,通過(guò)尾指針的移動(dòng)實(shí)現(xiàn)數(shù)據(jù)信息的存儲(chǔ)與讀取;刪除結(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 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;

          }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->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(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!=NULL);

          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í)如何不讓鏈表斷開(kāi)

          定義一個(gè)頭指針和一個(gè)尾指針,通過(guò)尾指針的移動(dòng)實(shí)現(xiàn)結(jié)點(diǎn)的鏈接,刪除結(jié)點(diǎn)時(shí)先將要?jiǎng)h除結(jié)點(diǎn)兩端的結(jié)點(diǎn)鏈接上,再刪除。

         六、編程小結(jié)或體會(huì)。

        相關(guān)熱詞搜索:實(shí)習(xí)報(bào)告 語(yǔ)言程序設(shè)計(jì) 綜合

        版權(quán)所有 蒲公英文摘 smilezhuce.com