(最新版)武汉科技大学C语言毕业课程设计实验报告
- 格式:doc
- 大小:1.00 MB
- 文档页数:24
c语言课程设计实验报告一、教学目标本课程的目标是让学生掌握C语言的基本语法、数据结构、算法和编程技巧,培养学生独立编程和解决问题的能力。
具体目标如下:1.知识目标:–掌握C语言的基本语法和关键字。
–理解数据类型、变量、常量的概念及使用。
–熟悉运算符、表达式、语句的结构。
–学习函数的定义、声明和调用。
–掌握数组、指针、字符串的基本操作。
–了解结构体、共用体、枚举类型等数据结构。
–学习基本算法和排序、查找等常用算法。
2.技能目标:–能够使用C语言编写简单的程序,解决实际问题。
–熟练使用集成开发环境(IDE)进行程序调试和运行。
–掌握编程规范和代码注释,编写可读性强的代码。
–学会使用函数模块化编程,提高代码重用性。
3.情感态度价值观目标:–培养学生对计算机科学的兴趣,激发创新意识。
–培养学生的团队合作精神和自主学习能力。
–强化学生的编程实践能力,提高解决实际问题的能力。
二、教学内容根据课程目标,本课程的教学内容主要包括以下几个部分:1.C语言基本语法和关键字。
2.数据类型、变量、常量的使用和声明。
3.运算符、表达式、语句的结构和用法。
4.函数的定义、声明和调用。
5.数组、指针、字符串的基本操作和应用。
6.结构体、共用体、枚举类型等数据结构的概念和使用。
7.基本算法和排序、查找等常用算法。
8.第一周:C语言基本语法和关键字。
9.第二周:数据类型、变量、常量的使用和声明。
10.第三周:运算符、表达式、语句的结构和用法。
11.第四周:函数的定义、声明和调用。
12.第五周:数组、指针、字符串的基本操作和应用。
13.第六周:结构体、共用体、枚举类型等数据结构的概念和使用。
14.第七周:基本算法和排序、查找等常用算法。
三、教学方法为了提高教学效果,本课程将采用多种教学方法相结合的方式,包括:1.讲授法:教师通过讲解、示例等方式,向学生传授C语言的基本知识和编程技巧。
2.讨论法:教师引导学生进行问题讨论,培养学生的编程思维和解决问题的能力。
c语言大实验报告C 语言大实验报告一、实验目的本次 C 语言大实验的主要目的是通过实际的编程项目,深入巩固和应用 C 语言的基础知识,提高编程能力和解决实际问题的能力。
具体而言,包括熟练掌握数据类型、控制结构、函数、数组、指针等核心概念,并能够运用它们构建较为复杂的程序逻辑。
二、实验要求1、完成一个具有一定规模和功能的 C 语言程序,例如学生成绩管理系统、图书管理系统等。
2、程序应具备良好的代码结构和可读性,遵循编程规范。
3、实现数据的输入、处理和输出功能,能够进行数据的存储和查询。
4、对程序进行充分的测试,确保其稳定性和正确性。
三、实验环境1、操作系统:Windows 102、编程工具:Visual Studio 2019四、实验内容本次实验我选择开发一个学生成绩管理系统,该系统能够实现学生成绩的录入、查询、修改、删除以及成绩统计分析等功能。
(一)数据结构设计为了存储学生的信息,我定义了一个结构体`Student` ,包含学生的学号、姓名、各科成绩等字段:```ctypedef struct {int id;char name50;float score3; //假设存储三门课程的成绩} Student;```同时,使用一个动态数组来存储多个学生的信息:```cStudent students;int numStudents = 0; //记录学生数量```(二)功能模块实现1、成绩录入通过循环让用户输入学生的信息,包括学号、姓名和各科成绩,并将其添加到动态数组中:```cvoid inputStudent(){Student newStudent;printf("请输入学号:");scanf("%d",&newStudentid);printf("请输入姓名:");scanf("%s", newStudentname);printf("请输入三门课程的成绩:");for (int i = 0; i < 3; i++){scanf("%f",&newStudentscorei);}students =(Student )realloc(students, (numStudents + 1) sizeof(Student));studentsnumStudents++= newStudent;}```2、成绩查询根据用户输入的学号,在动态数组中查找对应的学生信息并输出:```cvoid queryStudent(){int id;printf("请输入要查询的学号:");scanf("%d",&id);for (int i = 0; i < numStudents; i++){if (studentsiid == id) {printf("学号:%d\n", studentsiid);printf("姓名:%s\n", studentsiname);printf("成绩:");for (int j = 0; j < 3; j++){printf("%2f ", studentsiscorej);}printf("\n");return;}printf("未找到该学号的学生信息!\n");}```3、成绩修改先查询要修改的学生信息,然后让用户输入修改后的成绩:```cvoid modifyStudent(){int id;printf("请输入要修改的学号:");scanf("%d",&id);for (int i = 0; i < numStudents; i++){if (studentsiid == id) {printf("请输入修改后的三门课程成绩:");for (int j = 0; j < 3; j++){scanf("%f",&studentsiscorej);printf("修改成功!\n");return;}}printf("未找到该学号的学生信息!\n");}```4、成绩删除根据学号删除指定的学生信息,并重新调整动态数组:```cvoid deleteStudent(){int id;printf("请输入要删除的学号:");scanf("%d",&id);int found = 0;for (int i = 0; i < numStudents; i++){if (studentsiid == id) {found = 1;for (int j = i; j < numStudents 1; j++){studentsj = studentsj + 1;}numStudents;students =(Student )realloc(students, numStudents sizeof(Student));printf("删除成功!\n");return;}}if (!found) {printf("未找到该学号的学生信息!\n");}}```5、成绩统计分析计算所有学生的平均成绩,并输出最高和最低成绩:```cvoid statistics(){float totalScore = 0;float maxScore = students0score0;float minScore = students0score0;for (int i = 0; i < numStudents; i++){float sum = 0;for (int j = 0; j < 3; j++){sum += studentsiscorej;}totalScore += sum / 3;if (sum / 3 > maxScore) {maxScore = sum / 3;}if (sum / 3 < minScore) {minScore = sum / 3;}}printf("平均成绩:%2f\n", totalScore / numStudents);printf("最高成绩:%2f\n", maxScore);printf("最低成绩:%2f\n", minScore);}```(三)主函数在主函数中,通过菜单的方式让用户选择要执行的操作:```cint main(){int choice;while (1) {printf("1、录入成绩\n");printf("2、查询成绩\n");printf("3、修改成绩\n");printf("4、删除成绩\n");printf("5、成绩统计分析\n");printf("6、退出\n");printf("请选择操作:");scanf("%d",&choice);switch (choice) {case 1:inputStudent();break;case 2:queryStudent();break;case 3:modifyStudent();break;case 4:deleteStudent();break;case 5:statistics();break;case 6:free(students);return 0;default:printf("无效的选择,请重新输入!\n");}}return 0;}```五、实验结果经过多次测试,本系统能够稳定运行,实现了预期的各项功能。
通知各位老师:本学期非计算机专业《C语言程序设计基础》课实验报告要求:1.统一用《武汉科技大学实验报告》本写。
(和上学期05级用过的一样)2.本学期交三次实验报告。
①循环结构程序设计。
②函数。
③指针。
要求学生在完成以下实验报告,参考《C语言程序设计课程实践指导》中的要求认真完成。
实验1 循环结构程序设计一、实验目的1.熟悉用while语句,do-while语句和for语句实现循环的方法。
2.掌握在程序设计中用循环的方法实现各种算法(如穷举、迭代、递推等)。
3.熟悉break语句和continue语句用法的不同之处。
二、实验内容【例1】打印出所有“水仙花数”。
所谓“水仙花数”是指一个三位数,其各位数字的立方和正好等于该数本身。
例如:153是一个“水仙花数”,因为153=13+53+33。
解题思路:根据题目要求只要分别求出一个三位数的个位、十位、百位上的数字,然后判断是否满足(某一三位数a=a的百位的立方+a的十位的立方+a的个位的立方)这个公式,满足这个三位数就是“水仙花数”。
main( ){ int a, b, c ,n ;for(n=100 ; n<1000 ;n++){ a=n/100 ;b=n/10-a*10 ;c=n%10 ;if(a*100+b*10+c==a*a*a+b*b*b+c*c*c)printf(“%5d” , n) ;}}运行结果:水仙花数是:153 370 371 407【例2】以下程序,输出下三角形状的乘法九九表。
#include <stdio.h>main(){ int i,j;for (i=1;i<=9;i++) /* 打印表头*/printf(" %4d",i);printf("%c",'\n');for (i=0;i<=50;i++)printf("%c",'_');printf("%c",'\n');for (i=1;i<=9;i++) /* 循环体执行一次,打印一行*/{ for (j=1;j<=i;j++)printf(" %4d",i*j); /* 循环体执行一次,打印一个数据*/printf("%c",'\n'); /* 每行尾换行*/}printf("%c",'\n');}输入并执行该程序,观察输出结果,试着修改程序打印上三角形状的乘法九九表。
C语言程序设计实习报告一、实习目的1. 巩固和加深对C语言程序设计的理解。
2. 掌握C语言编程的基本技巧和方法。
3. 提高分析问题、解决问题的能力。
4. 学会将理论知识应用于实际编程中。
二、实习内容XXX语言基础语法练习变量、数据类型、运算符、表达式等基础语法练习。
控制结构(顺序、分支、循环)的实现。
函数的定义和调用方式练习。
2. 模块化程序设计将一个大的程序分解成多个模块,每个模块完成特定的功能。
通过模块间的调用和传递数据来实现整个程序的功能。
3. 文件操作与文件读写文件的打开、关闭、读写操作练习。
文件格式的转换和数据统计处理。
4. 预处理指令与宏定义使用预处理指令进行条件编译和宏定义替换。
练习使用常见的预处理指令如include、define、ifdef等。
5. 结构体、链表与指针结构体的定义和使用。
链表的创建、插入、删除、遍历等操作。
指针的概念和指针运算。
深入理解指针与数组、结构体等数据结构的关系。
6. 位运算与嵌入式系统编程学习位运算符的使用和位段操作的实现。
嵌入式系统的基本概念和编程方法。
7. 综合项目实践参与或独立完成一个综合性C语言程序设计项目。
项目可以包括基于命令行参数的程序设计、基于文件操作的程序设计、基于网络编程的程序设计等。
三、实习过程1. 理论学习:通过教材、网络资源等途径学习C语言的基础知识和编程技巧。
2. 上机实践:在计算机上编写和调试C语言程序,不断巩固所学知识。
3. 问题解决:遇到问题时,通过查阅资料、请教老师或同学等方式解决问题。
4. 团队合作:在小组项目中与他人协作,共同完成任务。
四、实习收获1. 知识技能方面:深入理解了C语言的基本概念和编程技巧,掌握了模块化程序设计和文件操作等常用算法。
2. 解决问题能力方面:学会了如何分析问题、寻找解决方案并通过实践验证解决方案的正确性。
3. 团队协作能力方面:学会了与他人合作,共同完成任务,提高了团队协作能力。
4. 职业素养方面:培养了耐心、细致的工作态度和勇于尝试、敢于创新的探索精神。
c语言课程设计实习报告一、教学目标本课程的教学目标是使学生掌握C语言的基本语法、数据结构、算法和编程思想,培养学生运用C语言解决实际问题的能力。
具体分为以下三个层面:1.知识目标:学生需要掌握C语言的基本语法、关键字、数据类型、运算符、控制结构、函数、数组、指针、结构体等基本概念。
2.技能目标:学生需要能够运用C语言进行程序设计,熟练使用C语言编写和调试程序,掌握常用的调试技巧。
3.情感态度价值观目标:培养学生对计算机科学的兴趣和热情,提高学生独立思考、解决问题的能力,培养学生的团队协作精神和创新意识。
二、教学内容本课程的教学内容主要包括C语言的基本语法、数据结构、算法和编程思想。
具体安排如下:1.C语言的基本语法:介绍C语言的基本规则,包括关键字、数据类型、运算符、控制结构等。
2.数据结构:讲解常用的数据结构,如数组、链表、栈、队列、树等。
3.算法:介绍常见的排序算法、查找算法、递归算法等。
4.编程思想:培养学生面向对象编程的思想,讲解面向对象编程的基本概念,如类、对象、封装、继承、多态等。
三、教学方法本课程采用多种教学方法,以激发学生的学习兴趣和主动性。
具体方法如下:1.讲授法:教师讲解C语言的基本语法、数据结构、算法和编程思想,帮助学生建立知识体系。
2.案例分析法:通过分析实际案例,让学生了解C语言在实际应用中的优势和局限。
3.实验法:安排上机实验,让学生动手编写C语言程序,培养学生的编程能力。
4.讨论法:学生进行小组讨论,分享学习心得,互相促进,提高学习效果。
四、教学资源本课程的教学资源包括教材、参考书、多媒体资料和实验设备。
具体如下:1.教材:选用权威、实用的C语言教材,如《C程序设计语言》、《CPrimer Plus》等。
2.参考书:提供丰富的参考书籍,如《C语言入门教程》、《C语言编程实践》等。
3.多媒体资料:制作精美的PPT,提供视频教程、在线编程练习等资源,帮助学生更好地理解和掌握C语言。
实验报告:C语言程序设计
一、实验目的
通过本次实验,使学生掌握C语言的基本语法和程序设计思想,培养学生的编程能力和解决问题的能力。
二、实验内容
1. C语言程序的组成和结构
2. 数据类型、运算符和表达式
3. 输入输出函数
4. 控制结构(选择结构和循环结构)
5. 数组和字符串
6. 函数和程序结构
7. 指针和内存管理
三、实验步骤
1. 准备阶段:了解实验内容和要求,准备好所需的资料和工具。
2. 设计阶段:根据实验内容,设计程序结构和算法,编写代码。
3. 调试阶段:运行程序,调试代码,确保程序的正确性和可靠性。
4. 测试阶段:对程序进行各种测试,确保程序的正确性和性能。
5. 总结阶段:总结实验过程和结果,撰写实验报告。
四、实验结果与分析
1. 实验结果:通过本次实验,学生掌握了C语言的基本语法和程序设计思想,能够编写简单的C程序,解决了一些实际问题。
2. 结果分析:在实验过程中,学生遇到了一些问题,如语法错误、逻辑错误等。
通过调试和测试,学生逐渐掌握了C语言的编程技巧和方法,提高了编程能力和解决问题的能力。
五、结论与建议
1. 结论:通过本次实验,学生掌握了C语言的基本语法和程序设计思想,能够编写简单的C程序,解决了一些实际问题。
同时,学生也提高了编程能力和解决问题的能力。
2. 建议:在今后的实验中,应该更加注重学生的实践能力和创新能力的培养,加强实验内容的深度和广度,提高学生的编程能力和解决问题的能力。
同时,应该注重实验过程的规范化和科学化,确保实验结果的准确性和可靠性。
c语言课程实验报告C语言课程实验报告引言:C语言作为一门广泛应用于计算机科学领域的编程语言,具有简洁高效的特点,被广泛用于系统软件、嵌入式设备等领域。
在C语言课程中,我们进行了一系列的实验,旨在通过实践提升我们的编程能力和理解C语言的各种特性。
本报告将对我们进行的实验进行总结和分析。
实验一:基本语法和数据类型在第一次实验中,我们学习了C语言的基本语法和数据类型。
通过编写简单的程序,我们熟悉了C语言的变量定义、运算符、控制语句等基本概念。
同时,我们也了解了C语言中常用的数据类型,如整型、浮点型、字符型等,并学会了如何进行类型转换和输入输出操作。
实验二:数组和字符串处理在第二次实验中,我们深入学习了C语言中的数组和字符串处理。
通过编写程序,我们掌握了数组的定义、初始化和访问方法,了解了一维数组和多维数组的特点。
同时,我们也学会了使用C语言提供的字符串处理函数,如strlen、strcpy、strcat等,实现字符串的复制、连接和比较等操作。
实验三:函数和指针第三次实验是函数和指针的学习。
我们学习了如何定义和调用函数,了解了函数的参数传递和返回值的相关知识。
同时,我们也深入研究了指针的概念和用法,掌握了指针的声明、初始化和使用方法。
通过实验,我们发现指针在C语言中具有重要的作用,可以提高程序的效率和灵活性。
实验四:文件操作和结构体在第四次实验中,我们学习了C语言中的文件操作和结构体。
通过使用文件读写函数,我们能够实现对文件的读取和写入操作,实现数据的永久存储。
同时,我们也学会了定义和使用结构体,实现对复杂数据的封装和处理。
这些知识对于实际项目的开发非常重要。
实验五:动态内存分配和链表在第五次实验中,我们学习了动态内存分配和链表的使用。
通过使用malloc和free函数,我们能够在程序运行时动态分配和释放内存,提高了内存的利用效率。
同时,我们也学会了使用链表数据结构,实现对数据的动态存储和管理。
链表在数据结构和算法中有着广泛的应用,对于解决实际问题非常有帮助。
二○一一~二○一二学年第二学期信息科学与工程学院课程设计报告书课程名称:C程序课程设计班级:学号:姓名:指导教师:二○一二年九月一、需求分析:1、设计题目:设计运动会成绩统计系统。
有n个学校参加运动会,学校编号为1……n。
比赛分成m个男子项目和w个女子项目,项目编号为男子1......m,女子m+1......maw,不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。
2、设计要求:①实现在程序中修改积分,然后将积分以文件(score.txt)的形式保存。
②实现对所有参赛学校的总积分排序,并将排序结果以文件(sort.txt)的形式保存。
3、系统功能需求分析:该系统须实现每个学校与其运动员以及其所得名次的对应关系,然后实现名次与所得积分的对应,最后必须求出每个学校的总积分同时按由大到小排序。
二、概要设计:1、系统总体设计框架:①对相关函数进行声明。
②用menu函数实现提供程序的友好界面功能。
③用input函数实现输入学校数、男子项目数、女子项目数以及各名次学校编号功能。
④用alter函数实现改变各项目学校编号功能从而改变积分。
⑤用show函数实现对所输入的各项目名次学校编号的显示⑥用sort函数实现将各学校以及其总积分按从大到小的顺序排列的功能。
⑦用save函数实现将积分以文件(score.txt)的形式保存同时将排序结果以文件(sort.txt)的形式保存。
2、系统功能模块图:二、详细设计:主要功能模块的算法设计思路及对应的工作流程图:1、比赛成绩输入模块:主要算法设计思路:通过定义一个input函数来实现输入相关数据的功能,首先通过几个scanf 函数来输入学校数n,男子项目数m,女子项目数w,再通过一个if语句来实现各项目取前三或前五名的选择,最后通过一个for循环来将各项目名次学校编号存入结构体items中,从而实现输入功能。
《c语言程序设计》实验报告《C语言程序设计》实验报告一、引言C语言是一种广泛应用于计算机编程的高级编程语言,具有灵活性和高效性的特点。
在《C语言程序设计》课程中,我们通过实验来巩固和应用所学的知识,提高我们的编程能力和解决问题的能力。
本实验报告将对我们在课程中进行的实验进行总结和分析。
二、实验一:Hello World程序实验一是我们在学习任何编程语言时的传统开始,即编写一个简单的Hello World程序。
这个程序的目的是在屏幕上显示出"Hello World"这个字符串。
通过这个实验,我们学会了如何编写基本的C语言程序,并且了解了程序的编译和运行过程。
三、实验二:计算圆的面积实验二要求我们编写一个程序,通过输入圆的半径,计算并输出圆的面积。
在这个实验中,我们学会了如何使用变量、常量和运算符来进行数学计算,并且学会了如何使用C语言的输入输出函数。
四、实验三:判断闰年实验三要求我们编写一个程序,判断输入的年份是否为闰年。
通过这个实验,我们学会了如何使用条件语句来进行逻辑判断,并且学会了如何使用布尔运算符和关系运算符。
五、实验四:字符串处理实验四要求我们编写一个程序,实现对字符串的基本操作,包括字符串的长度计算、字符串的复制和字符串的连接。
通过这个实验,我们进一步熟悉了C语言中的字符串处理函数,并且学会了如何使用循环和数组来处理字符串。
六、实验五:排序算法实验五要求我们编写一个程序,实现对一组数字的排序。
通过这个实验,我们学会了如何使用数组和循环来进行排序算法的实现,并且学会了如何评估和比较不同排序算法的效率。
七、实验六:文件操作实验六要求我们编写一个程序,实现对文件的读写操作。
通过这个实验,我们学会了如何使用C语言的文件处理函数来进行文件的打开、读取和写入,并且学会了如何处理文件指针和文件的结束标志。
八、实验七:数据结构实验七要求我们编写一个程序,实现对链表数据结构的基本操作,包括链表的插入、删除和查找等。
计算机c语言程序设计实验实践报告下载提示:该文档是本店铺精心编制而成的,希望大家下载后,能够帮助大家解决实际问题。
文档下载后可定制修改,请根据实际需要进行调整和使用,谢谢!本店铺为大家提供各种类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by this editor. I hope that after you download it, it can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you! In addition, this shop provides you with various types of practical materials, such as educational essays, diary appreciation, sentence excerpts, ancient poems, classic articles, topic composition, work summary, word parsing, copy excerpts, other materials and so on, want to know different data formats and writing methods, please pay attention!当然,以下是一篇关于计算机C语言程序设计实验实践报告的示范文章:计算机C语言程序设计实验实践报告。
二○一二~二○一三学年第一学期电子技术学院课程设计报告书课程名称:C程序课程设计班级:电信DB2011级1102班学号:XXXXXXXXX姓名:XXXX指导教师:陈彬二○一二年九月一、需求分析1、题目二学生成绩管理程序任务:自学C语言中相关知识,设计出学生成绩管理程序。
要求如下所述:◆录入学生信息,每位学生录入的信息有:姓名、学号、性别、班级、和三门功课(数学,英语,计算机)的成绩。
以文件(myfile.txt)的形式保存每个学生的所有信息。
(实验中:假设3个班,每个班学生人数不得少于5人)学号姓名性别班级数学英语计算机1101 王鹏男1班70 58 981102 李燕女2班68 88 951103 赵亚芳女3班58 48 96◆增加学生记录,并将增加的信息以文件的(myfile.txt)的形式保存。
◆删除学生记录,以“学号”、“姓名”为关键字删除记录,若要删除的记录不存在,给出必要的提示信息;◆统计各班级学生每门课程的班级平均分,并由高到低排序。
◆按学号或者姓名查询记录并显示其三门功课成绩;◆能浏览显示全部学生成绩,若无记录可以显示,给出必要的提示信息;2、系统功能需求分析该程序中需要有存储、读取外部文件的命令实现将信息储存于指定文件中。
程序中需要有建立、修改链表的命令实现数据的动态链表存储方式。
程序还需要一系列的提示命令使程序的易用性提高。
因为需要对数据进行统计或查询显示,所以需要有对链表数据统计和对链表指定数据进行查找的功能。
二、概要设计三、详细设计1、建立结构体struct student{int num;char name[10],sex[10];int Class,math,english,computer;struct student * next;};int n;2、成绩单建立模块YN YNstruct student *creat(void){struct student *head,*p1,*p2;n=0;p1=p2=(struct student *)malloc(LEN);printf("请输入学生信息(按学号顺序输入)\n");printf("学号:"); scanf("%d",&p1->num);printf("姓名:"); scanf("%s",p1->name);printf("性别:"); scanf("%s",p1->sex);printf("班级:"); scanf("%d",&p1->Class);printf("数学:"); scanf("%d",&p1->math);printf("英语:"); scanf("%d",&p1->english);printf("计算机:"); scanf("%d",&p1->computer);head=NULL;while(1){n=n+1;if(n==1) head=p1;else p2->next=p1;p2=p1;p1=(struct student *)malloc(LEN);printf("\n请输入学生信息(按学号顺序输入)[当不再输入时在学号处输入\"0\"结束]\n");printf("学号:");scanf("%d",&p1->num);if(p1->num==0)break;elseprintf("姓名:"); scanf("%s",p1->name);printf("性别:"); scanf("%s",p1->sex);printf("班级:"); scanf("%d",&p1->Class);printf("数学:"); scanf("%d",&p1->math);printf("英语:"); scanf("%d",&p1->english);printf("计算机:"); scanf("%d",&p1->computer);}p2->next=NULL;return(head);}3、数据增加模块struct student *insert(struct student *head,struct student *stud) {struct student *p0,*p1,*p2;p1=head; p0=stud;if(head==NULL) {head=p0; p0->next=NULL;}else{while((p0->num>p1->num)&&(p1->next!=NULL)){p2=p1; p1=p1->next;}if(p0->num<=p1->num){if(head==p1) head=p0;else p2->next=p0;p0->next=p1;}else {p1->next=p0; p0->next=NULL;}}n++;printf("\n增加成功!\n");return(head);}4、数据删除模块YYNstruct student *del1(struct student *head,int num){struct student *p1,*p2;if(head==NULL) {printf("\n表格不存在!\n"); return(head);} p1=head;while((num!=p1->num)&&(p1->next!=NULL)){p2=p1; p1=p1->next;}if(num==p1->num){if(p1==head) head=p1->next;else p2->next=p1->next;printf("\n删除成功!\n");n--;}else printf("\n找不到该数据!\n");return(head);}struct student *del2(struct student *head,char *name){struct student *p1,*p2;if(head==NULL) {printf("\n表格不存在!\n"); return(head);} p1=head;while((strcmp(name,p1->name)!=0)&&(p1->next!=NULL)){p2=p1; p1=p1->next;}if(strcmp(name,p1->name)==0){if(p1==head) head=p1->next;else p2->next=p1->next;printf("\n删除成功!\n");n--;}else printf("\n找不到该数据!\n");return(head);}5、数据查找模块NYYNYvoid find1(struct student *head,int num){struct student *p=head;if(head!=NULL){do{if(num==p->num){printf("\n学号姓名性别班级数学英语计算机\n");printf("\n");printf("%d %-6s %s %d %-3d %-3d %-3d\n",p->num,p->nam e,p->sex,p->Class,p->math,p->english,p->computer);break;}else p=p->next;}while(p!=NULL);if(p==NULL) printf("\n未找到相应信息!\n");}else printf("\n成绩单为空!\n");}void find2(struct student *head,char *name){struct student *p=head;if(head!=NULL){do{if(strcmp(name,p->name)==0){printf("\n学号姓名性别班级数学英语计算机\n");printf("\n");printf("%d %-6s %s %d %-3d %-3d %-3d\n",p->num,p->nam e,p->sex,p->Class,p->math,p->english,p->computer);break;}else p=p->next;}while(p!=NULL);if(p==NULL) printf("\n未找到相应信息!\n");}else printf("\n成绩单为空!\n");}void print(struct student *head){struct student *p;p=head;if(head!=NULL){printf("学号姓名性别班级数学英语计算机\n");printf("\n");do{printf("%d %-6s %s %d %-3d %-3d %-3d\n",p->num,p-> name,p->sex,p->Class,p->math,p->english,p->computer);p=p->next;}while(p!=NULL);}else printf("无信息!\n");}6、数据显示模块YNYNvoid print(struct student *head){struct student *p;p=head;if(head!=NULL){printf("学号姓名性别班级数学英语计算机\n");printf("\n");do{printf("%d %-6s %s %d %-3d %-3d %-3d\n",p->num,p-> name,p->sex,p->Class,p->math,p->english,p->computer);p=p->next;}while(p!=NULL);}else printf("无信息!\n");}7、成绩对比模块NYYNYNYvoid compare(struct student *head){struct student *p;p=head;floatsum1=0,sum2=0,sum3=0,average1,average2,average3,n1=0,n2=0,n3=0;printf(" ◎数学班级平均分◎ \n");printf("--\n");while(p!=NULL){if(p->Class==1) {sum1=sum1+p->math; n1++;}if(p->Class==2) {sum2=sum2+p->math; n2++;}if(p->Class==3) {sum3=sum3+p->math; n3++;}p=p->next;}average1=sum1/n1; average2=sum2/n2; average3=sum3/n3;if((average1>=average2)&&(average1>=average3)){if(average2>=average3)printf("1班:%.2f 2班:%.2f 3班:%.2f\n",average1,average2,average3);elseprintf("1班:%.2f 3班:%.2f 2班:%.2f\n",average1,average3,average2);}else{if((average2>=average1)&&(average2>=average3)){if(average1>=average3)printf("2班:%.2f 1班:%.2f 3班:%.2f\n",average2,average1,average3);elseprintf("2班:%.2f 3班:%.2f 1班:%.2f\n",average2,average3,average1);}else{if(average1>=average2)printf("3班:%.2f 1班:%.2f 2班:%.2f\n",average3,average1,average2);elseprintf("3班:%.2f 2班:%.2f 1班:%.2f\n",average3,average2,average1);}}p=head;sum1=0;sum2=0;sum3=0;n1=0;n2=0;n3=0;printf("\n ◎英语班级平均分◎ \n");printf("--\n");while(p!=NULL){if(p->Class==1) {sum1=sum1+p->english; n1++;}if(p->Class==2) {sum2=sum2+p->english; n2++;}if(p->Class==3) {sum3=sum3+p->english; n3++;}p=p->next;}average1=sum1/n1; average2=sum2/n2; average3=sum3/n3;if((average1>=average2)&&(average1>=average3)){if(average2>=average3)printf("1班:%.2f 2班:%.2f 3班:%.2f\n",average1,average2,average3);elseprintf("1班:%.2f 3班:%.2f 2班:%.2f\n",average1,average3,average2);}else{if((average2>=average1)&&(average2>=average3)){if(average1>=average3)printf("2班:%.2f 1班:%.2f 3班:%.2f\n",average2,average1,average3);elseprintf("2班:%.2f 3班:%.2f 1班:%.2f\n",average2,average3,average1);}elseif(average1>=average2)printf("3班:%.2f 1班:%.2f 2班:%.2f\n",average3,average1,average2);elseprintf("3班:%.2f 2班:%.2f 1班:%.2f\n",average3,average2,average1);}}p=head;sum1=0;sum2=0;sum3=0;n1=0;n2=0;n3=0;printf("\n ◎计算机班级平均分◎ \n");printf("--\n");while(p!=NULL){if(p->Class==1) {sum1=sum1+p->computer; n1++;}if(p->Class==2) {sum2=sum2+p->computer; n2++;}if(p->Class==3) {sum3=sum3+p->computer; n3++;}p=p->next;}average1=sum1/n1; average2=sum2/n2; average3=sum3/n3;if((average1>=average2)&&(average1>=average3)){if(average2>=average3)printf("1班:%.2f 2班:%.2f 3班:%.2f\n",average1,average2,average3);elseprintf("1班:%.2f 3班:%.2f 2班:%.2f\n",average1,average3,average2);}{if((average2>=average1)&&(average2>=average3)){if(average1>=average3)printf("2班:%.2f 1班:%.2f 3班:%.2f\n",average2,average1,average3);elseprintf("2班:%.2f 3班:%.2f 1班:%.2f\n",average2,average3,average1);}else{if(average1>=average2)printf("3班:%.2f 1班:%.2f 2班:%.2f\n",average3,average1,average2);elseprintf("3班:%.2f 2班:%.2f 1班:%.2f\n",average3,average2,average1);}}}8、数据保存模块void save(struct student *head){struct student *p;FILE *fp;fp=fopen("myfile.txt","wb");p=head;while(p!=NULL) {fwrite(p,LEN,1,fp); p=p->next;} fclose(fp);printf("保存成功!\n");}9、数据读取模块struct student *load(){struct student *head,*p1,*p2;FILE *fp;n=0; head=NULL;fp=fopen("myfile.txt","rb");head=p2=p1=(struct student *)malloc(LEN);while(fread(p1,LEN,1,fp)==1){p2=p1;p1=(struct student *)malloc(LEN);p2->next=p1;n++;}p2->next=NULL;fclose(fp);printf("读取成功!\n");return(head);}10、主函数void main(){system("color 0B");struct student *head=NULL,*stu;int num,choice;char name[10];while(1){system("pause");system("cls");printf("# # # # # # # # # # # # # # # # # # # # # # # #\n");printf("# #\n");printf("# ☆★☆学生成绩管理系统菜单☆★☆ #\n");printf("##\n");printf("# 1.创建学生成绩单 #\n");printf("##\n");printf("# 2.增加学生信息 #\n");printf("##\n");printf("# 3.删除学生信息 #\n");printf("##\n");printf("# 4.查看学生信息 #\n");printf("##\n");printf("# 5.显示所有学生信息 #\n");printf("##\n");printf("# 6.班级成绩对比 #\n");printf("##\n");printf("# 7.保存至文件 #\n");printf("##\n");printf("# 8.从文件中读取信息 #\n");printf("##\n");printf("# 9.退出系统 #\n");printf("# #\n");printf("# # # # # # # # # # # # # # # # # # # # # # # #\n");printf("\n请选择所需功能:");scanf("%d",&choice);printf("\n");switch(choice){case 1: head=creat(); break;case 2: stu=(struct student *)malloc(LEN);printf("请输入学生信息\n");printf("学号:"); scanf("%d",&stu->num);printf("姓名:"); scanf("%s",stu->name);printf("性别:"); scanf("%s",stu->sex);printf("班级:"); scanf("%d",&stu->Class);printf("数学:"); scanf("%d",&stu->math);printf("英语:"); scanf("%d",&stu->english);printf("计算机:"); scanf("%d",&stu->computer);while(1){head=insert(head,stu);printf("请继续输入学生信息(按\"0\"退出)\n");stu=(struct student *)malloc(LEN);printf("学号:"); scanf("%d",&stu->num);if(stu->num==0) break;printf("姓名:"); scanf("%s",stu->name);printf("性别:"); scanf("%s",stu->sex);printf("班级:"); scanf("%d",&stu->Class); printf("数学:"); scanf("%d",&stu->math);printf("英语:"); scanf("%d",&stu->english); printf("计算机:"); scanf("%d",&stu->computer);break;case 3: printf("1.按学号删除 2.按姓名删除\n请选择:"); scanf("%d",&choice);switch(choice){case 1: printf("输入要删除的学生学号(按\"0\"退出):");scanf("%d",&num);while(num!=0){head=del1(head,num);printf("输入要删除的学生学号(按\"0\"退出):");scanf("%d",&num);}break;case 2: printf("输入要删除的学生姓名(按\"0\"退出):");scanf("%s",name);while(strcmp(name,"0")!=0){head=del2(head,name);printf("输入要删除的学生姓名(按\"0\"退出):");scanf("%s",name);}break;default: break;break;case 4: printf("1.按学号查找 2.按姓名查找\n请选择:"); scanf("%d",&choice);switch(choice){case 1: printf("输入要查找的学生学号:");scanf("%d",&num);find1(head,num);break;case 2: printf("输入要查找的学生姓名:");scanf("%s",name);find2(head,name);break;default: break;}break;case 5: print(head); break;case 6: compare(head); break;case 7: save(head); break;case 8: head=load(); break;default: break;}if(choice==9) {printf("谢谢使用!\n"); break;}}}四、调试分析过程描述1、主菜单2、创建成绩单3、增加学生记录4、删除学生记录5、显示所有学生记录6、班级成绩对比7、查找学生记录8、保存学生记录9、读取文件信息调试过程中的问题与反思:此次编写的程序盖内容量很大,在编写过程中采用的是写好一个模块测试一个模块的方法,但是将各个模块组合到一起后仍旧出现了许多小问题,经过多次调试才达到各个模块协调工作。