您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 77《C语言程序设计》综合实习报告
-1--1-课题一:用指针优化学生成绩排名一、目的1.熟悉变量的指针和指向变量的的指针变量的概念和使用2.熟悉数组的指针和指向数组的的指针变量的概念和使用3.掌握冒泡法或选择法排序的算法4.掌握函数的定义、调用、声明,以及参数的两种传递方式二、实习环境个人计算机,Windows操作系统,TurboC2.0或WinTC或VisualC++等编译开发环境三、实习内容与步骤1.定义一个数组stu[10]存放10个学生的成绩,从键盘输入数据,要求用指针实现2.将数组stu[10]的内容输出到屏幕上,要求用指针实现3.将成绩数组按照从高到低进行排序,要求用指针实现4.将第三步内容放在函数中实现,在主函数中调用实现排序,用指针实现,输出排序后的成绩单5.采用指针方法,输入字符串“studentscore”,复制该字符串并输出(复制字符串采用库函数或用户自定义函数)6.在实习报告中画出程序流程图,说明程序设计的算法,附主要程序段运行结果(屏幕截图)。7.在实习报告中说明知识点。8.在实习报告中说明程序设计过程中的难点、解决办法及编程小结或体会。四、程序流程图、算法及运行结果1.程序流程图:开始-2--2-2.算法:先定义一个函数接收10个学生的成绩,利用指针将数据保存在数组中,再定义第二个函数输出所以学生的成绩,同样也是使用指针,最后定义一个函数用选择排序法对成绩进行由大到小的排序,将指针指向的是数组中的第一个地址,在主函数中依次调用这两个函数;定义一个字符指针指向字符串,利用库函数中的strcpy将studentscore复制给字符指针,输出字符串3.程序:#includestdio.h#includestring.hstructstudent{intgrade;intnum;}stu[10];voidinput(structstudent*p){inti;for(i=0;i10;i++,p++){printf(请输入第%-2d个学生的成绩:,i+1);scanf(%d%d,&p-num,&p-grade);}由键盘输入成绩输出成绩比较成绩的高低复制studentscore对成绩排序输出字符串输出排序好的成绩结束-3--3-}voidprintout(structstudent*p){inti;for(i=0;i10;i++,p++)printf(第%-2d个学生的成绩为:%d\n,i+1,p-grade);}voidarrow(int*p1,int*p2,int*px,int*py){intt,m;t=*px;*px=*py;*py=t;m=*p1;*p1=*p2;*p2=m;}voidplace(structstudentstu[]){inti,j;for(i=1;i10;i++)for(j=0;j10-i;j++)if(stu[j].gradestu[j+1].grade)arrow(&stu[j].num,&stu[j+1].num,&stu[j].grade,&stu[j+1].grade);}intmain(void){structstudentstu[10],*ptr;inti;charstring[100],*s;s=string;ptr=stu;input(ptr);printout(ptr);place(stu);printf(排序后的成绩单为:\n);for(i=0;i10;i++)printf(第%-2d名%-2d%-5d\n,i+1,stu[i].num,stu[i].grade);printf(\n);strcpy(s,studentscore);printf(%s\n,string);-4--4-}4.运行结果:五、知识点、难点及解决办法。主要考察的是利用指针作为函数参数以及指针数组的知识点,如何使指针指向数组并能将值返回给主函数是一个难点首先定义一个整型指针指向数组stu[]的首地址,在自定义函数中运用循环结构实现指针的移动并分别存储各个学生的成绩返回给主函数六、编程小结或体会。编程时除了注意指针与函数如何调用外,还要注意细节问题,比如自定义变量类型的统一,循环结构的循环次数等等,要谨慎对待课题二:学生成绩单制作一、目的1.掌握结构体变量及数组的定义、赋值、初始化、输入、输出2.结构体数组的操作。二、实习环境个人计算机,Windows操作系统,TurboC2.0或WinTC或VisualC++等编译开发环境三、实习内容与步骤1.定义一个结构体数组,存放10个学生的学号,姓名,三门课的成绩2.从键盘输入10个学生的以上内容3.输出单门课成绩最高的学生的学号、姓名、以及该门课程的成绩-5--5-4.输出三门课程的平均分数最高的学生的学号、姓名及其平均分5.将10个学生按照平均分数从高到低进行排序,输出结果,格式如下所示:numbernamemathChineseEnglishaverage103tom909010095101alice908070806.在实习报告中画出程序流程图,说明程序设计的算法,附主要程序段及运行结果(屏幕截图)。7.在实习报告中说明知识点。8.在实习报告中说明程序设计过程中的难点、解决办法及编程小结或体会四、程序流程图、算法及运行结果1.程序流程图:2.算法:先定义一个结构体,存储学生的各项信息,定义一个结构体指针指向结构体数组,第一个函数比较每个学生单门课的成绩,返回每一门课最高分学生的stu的下标;第二个函数比较每个学生的平均分,返回平均分最比较每个学生单门课成绩计算每个学生平均分比较按平均分高低排序结束开始键入每个学生的信息根据返回值输出相应的学生信息按照排序输出学生信息-6--6-高的学生;第三个函数主要按照平均分高低对学生进行排序,通过循环和选择排序法实现指针的移动以及重新排列,主函数中依次调用这三个函数3.程序:#includestdio.h#defineN10structstudent{longnumber;charname[20];floatgrade[3];floataverage;}stu[10];inthanshu_best(structstudent*p,intm){intq,num;floata;a=p-grade[m];num=0;for(q=0;qN-1;q++)if((p+q)-grade[m]a){a=(p+q)-grade[m];num=q;}returnnum;}inthanshu_average(structstudent*p){inti,m,index;floata;for(m=0;mN;p++,m++){p-average=0;for(i=0;i3;i++)p-average=p-average+p-grade[i];p-average=p-average*1.0/3;}a=p-average;-7--7-for(m=0;mN;p++,m++)if(p-averagea){a=p-average;index=m;}elseindex=0;returnindex;}voidhanshu_place(structstudentstu[]){inti,j;structstudentt;for(i=0;iN;i++)for(j=i;jN-1;j++)if(stu[j+1].averagestu[i].average){t=stu[j+1];stu[j+1]=stu[i];stu[i]=t;}}voidmain(){structstudentstu[10],*ptr;inti,j,index,m,num;floataverage;ptr=stu;for(i=0;iN;i++){printf(请输入第%d个学生的学号、姓名及三科成绩:\n,i+1);scanf(%ld%s,&stu[i].number,stu[i].name);for(j=0;j3;j++)scanf(%f,&stu[i].grade[j]);}printf(\n);for(m=0;m3;m++){num=hanshu_best(ptr,m);printf(学号%ld姓名:%-10s最高分%-8.2f\n,stu[num].number,stu[num].name,stu[num].grade[m]);}-8--8-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(numbernameMathChineseEnglishaverage\n);hanshu_place(ptr);for(i=0;iN;i++){printf(%-10ld%-10s%,stu[i].number,stu[i].name);for(j=0;j3;j++)printf(%-10.2f,stu[i].grade[j]);printf(%-10.2f\n,stu[i].average);}}4.运行结果:五、知识点、难点及解决办法。主要考察的是结构体指针的运用,比较难的地方也就是如何将指针指向结构体并返回我们所要的数值先定义一个结构体数组,再定义一个结构体指针,令指针指向数组的首地址,在自定义函数中通过指针的运算实现数组的运算,并返回相应的值六、编程小结或体会。-9--9-在输出我们所需要的数据时候可以通过一些小技巧使程序看起来更好看。掌握结构体指针的技巧可以解决很多问题,使自己的程序具有解决多个复杂问题的能力,以后多练习此类的程序设计问题,使自己更加熟练课题三:学生成绩文件管理一、目的1.掌握文件指针的概念和运用2.掌握文件的相关操作:打开、读、写、关闭3.掌握文件的定位操作二、实习环境个人计算机,Windows操作系统,TurboC2.0或WinTC或VisualC++等编译开发环境三、实习内容与步骤1.定义一个结构体数组,存放10个学生的学号,姓名,三门课的成绩2.从键盘输入10个学生的以上内容,存入文件stud.txt,关闭文件3.打开stud.txt文件,将数据读出,查看是否正确写入,关闭文件。4.打开文件stud.txt文件,读出数据,将10个学生按照平均分数从高到低进行排序,分别将结果输出到屏幕上和另一文件studsort.txt中。5.在实习报告中画出程序流程图,说明程序设计的算法,附主要程序段及运行结果(屏幕截图)。6.在实习报告中说明知识点。7.在实习报告中说明程序设计过程中的难点、解决办法及编程小结或体会。四、程序流程图、算法及运行结果1.程序流程图:2.算法:将学生信息存入文件中键入每个学生的信息将文件中的信息读出按平均分高低排序将排序后的信息存入另一文件开始结束-10--10-首先创建一个可读可写的新文件stud.txt,键入十个学生的信息并储存在文件中,关闭程序;打开文件stud.txt,读出文件中的信息并输出,检查有无错漏,并按照平均分通过选择排序法对学生由高到低排序,关闭程序;将排好序的信息输出并存储在新的可写文件studsort.txt中3.程序:#includestdio.h#includestdlib.h#defineN10structstudent{longnum;charname[20];intgrade[3];}stu[10];intmain(void){FILE*fp,*fpp;structstudentstu[10],t;floataverage[100];inti=0,j;if((fp=fopen(stud.txt,w+))==NULL){printf(该文件打开失败!);exit(0);}for(i=0;iN;i++){printf(第%-2d个学生的学号、姓名及三门课成绩:\n,i+
本文标题:77《C语言程序设计》综合实习报告
链接地址:https://www.777doc.com/doc-3167324 .html