首页 > 毕业论文 > 关于c语言的本科毕业论文

关于c语言的本科毕业论文

发布时间:

关于c语言的本科毕业论文

对于许多初尝文献综述的科研工作者而言,在写作的时候,常常不知如何动笔,建议你多看看计算机科学与应用这本期刊,,然后自己写吧,

.......论文.....源程序...... 一般不会有人给```

论文写作,先不说内容,首先格式要正确,一篇完整的毕业论文,题目,摘要(中英文),目录,正文(引言,正文,结语),致谢,参考文献。学校规定的格式,字体,段落,页眉页脚,开始写之前,都得清楚的,你的论文算是写好了五分之一。然后,选题,你的题目时间宽裕,那就好好考虑,选一个你思考最成熟的,可以比较多的阅读相关的参考文献,从里面获得思路,确定一个模板性质的东西,照着来,写出自己的东西。如果时间紧急,那就随便找一个参考文献,然后用和这个参考文献相关的文献,拼出一篇,再改改。正文,语言必须是学术的语言。一定先列好提纲,这就是框定每一部分些什么,保证内容不乱,将内容放进去,写好了就。参考文献去中国知网搜索,校园网免费下载。 合适采纳

你得说写什么C语言程序呀?大哥!我大二了,写了《学生档案管理》C语言程序,《职工工资管理》C语言程序等等~~就是不知道你要什么哩~`

关于C语言客户管理系毕业论文

C51语言应用编程的若干问题

摘 要   简要介绍了Franklin C51交叉编译器的特点,较详细地讨论了C51语言程序设计的基本技巧及其与汇编语言程序的混合编程、中断处理过程等实际问题,并给出了相应的处理程序。

关键词   Franklin    C51编译器    汇编语言    结构化设计    模块    中断

--------------------------------------------------------------------------------

在研制单片机应用系统时,汇编语言是一种常用的软件工具。它能直接操作硬件,指令的执行速度快。但其指令系统的固有格式受硬件结构的限制很大,且难于编写与调试,可移植性也差。随着单片机硬件性能的提高,其工作速度越来越快,因此在编写单片机应用系统程序时,更着重于程序本身的编写效率。而Franklin C51交叉编译器是专为80C51系列单片机设计的一种高效的C语言编译器,使用它可以缩短开发周期,降低开发成本,而且开发出的系统易于维护,可靠性高,可移植性好,即使在代码的使用效率上,也完全可以和汇编语言相比,因此目前它已成为开发80C51系列单片机的流行工具。

1 C51语言程序设计的基本技巧

C语言是一种高级程序设计语言,它提供了十分完备的规范化流程控制结构。因此采用C51语言设计单片机应用系统程序时,首先要尽可能地采用结构化的程序设计方法,这样可使整个应用系统程序结构清晰,易于调试和维护。对于一个较大的程序,可将整个程序按功能分成若干个模块,不同的模块完成不同的功能。对于不同的功能模块,分别指定相应的入口参数和出口参数,而经常使用的一些程序最好编成函数,这样既不会引起整个程序管理的混乱,还可增强可读性,移植性也好。

在程序设计过程中,要充分利用C51语言的预处理命令。对于一些常用的常数,如TRUE,FALSE,PI以及各种特殊功能寄存器,或程序中一些重要的依据外界条件可变的常量,可采用宏定义"#define"或集中起来放在一个头文件中进行定义,再采用文件包含命令"#include"将其加入到程序中去。这样当需要修改某个参量时,只须修改相应的包含文件或宏定义,而不必对使用它们的每个程序文件都作修改,从而有利于文件的维护和更新。现举例说明如下:

例1 对于不同的单片机晶振,程序取不同的延时时间,而且可根据外界条件的变化修改延时时间的长短。对于这样的程序,可利用宏定义和条件编译来实现。程序如下:

#define     flag 1

#ifdef     flag==1

#define  fosc  6M

delay=10;

#elif     flag = = 0

#define   fosc    8M

delay=12;

#else

#define    fosc   12M

delay=20;

#endif

main()

{

for(I=0;I

}

这样源程序不作任何修改就可适用于不同时钟频率的单片机系统,并可根据情况的不同取不同的delay值,完成不同的目的。

2 C51语言与汇编语言程序的混合编程

C51编译器能对C语言源程序进行高效率的编译,生成高效简洁的代码,在绝大多数场合采用C语言编程即可完成预期的目的。但有时为了编程直观或某些特殊地址的处理,还须采用一定的汇编语言编程。而在另一些场合,出于某种目的,汇编语言也可调用C语言。在这种混合编程中,关键是参数的传递和函数的返回值。它们必须有完整的约定,否则数据的交换就可能出错。下面就以力源公司的10位串行A/D转换器TLC1549 为例说明C语言程序与汇编语言程序的调用。

图1 TLC1549管脚图

1549的管脚图和时序图分别如图1和图2所示,假定DATA OUT接,  接,CLOCK接。

1549的具体特性请查阅有关资料。

图2 TLC1549时序图

例2 C语言程序与汇编语言程序的调用,其子程序如下:

PUBLIC AD     ;入口地址

SEG_AD SEGMENT CODE;程序段

RSEG SEG_AD

USING 0

AD:  MOV R6,#00

MOV R7,#00

SETB 

ACALL DELAY

CLR 

ACALL DELAY

MOV R0,#10

RR0: SETB 

NOP

CLR 

DJNZ R0,RR0

ACALL DELAY

MOV 30H,R6     ;A/D转换的高

;两位保存在R6中

ACALL CIR

MOV R6,30H

SETB 

NOP

CLR 

MOV 30H,R6

ACALL CIR

MOV R6,30H

MOV R0,#8     ;A/D转换的低

;8位保存在R7中

RR2: SETB 

NOP

CLR 

MOV 30H,R7

ACALL CIR

MOV R7,30H

DJNZ R0,RR2

RET

CIR: CLR C

MOV C,

MOV A,30H

RLC A

MOV 30H,A

RET

END

在以上程序中,函数的返回值为一无符号整型数,根据调用规则,返回值的高位必须在R6中,低位在R7中,这样才可保证数据的传递不出错。另外,在调用过程中,必须注意寄存器的入栈。这样在以后用到A/D转换时,在C语言中调用汇编语言子程序AD()即可。

3 C51中断处理过程

C51编译器支持在C源程序中直接开发中断过程,因此减轻了使用汇编语言的繁琐工作,提高了开发效率。中断服务函数的完整语法如下:

void函数名(void)[模式]

[再入]interrupt n [using r]

其中n(0~31)代表中断号。C51编译器允许32个中断,具体使用哪个中断由80C51系列的芯片决定。r(0~3)代表第r组寄存器。在调用中断函数时,要求中断过程调用的函数所使用的寄存器组必须与其相同。"再入"用于说明中断处理函数有无"再入"能力。C51编译器及其对C语言的扩充允许编程者对中断所有方面的控制和寄存器组的使用。这种支持能使编程者创建高效的中断服务程序,用户只须在C语言下关心中断和必要的寄存器组切换操作。

例3 设单片机的fosc=12MHz,要求用T0的方式1编程,在脚输出周期为2ms的方波。

用C语言编写的中断服务程序如下:

#include <>

sbit P1_0=P1^0;

void timer0(void)interrupt 1 using 1 {

/*T0中断服务程序入口*/

P1_0=!P1_0;

TH0=-(1000/256);      /*计数初值重装*/

TL0=-(1000%256);

}

void main(void)

{

TMOD=0x01;     /*T0工作在定时器方式1*/

P1_0=0;

TH0=-(1000/256);     /*预置计数初值*/

TL0=-(1000%256);

EA=1;            /*CPU开中断*/

ET0=1;           /*T0开中断*/

TR0=1;           /*启动T0*/

do{}while(1);

}

在编写中断服务程序时必须注意不能进行参数传递,不能有返回值。

4 结论

C51编译器不但可以缩短单片机控制系统的开发周期,而且易于调试和维护。此外,C51语言还有许多强大的功能,如提供丰富的库函数供用户直接调用,完整的编译控制指令为程序调试提供必要的符号信息等等。总之,C51语言是广大单片机开发人员的强有力的工具。

.......论文.....源程序...... 一般不会有人给```

只差界面设计。。。 最难的就是界面设计其实,如果你只是了解C语言,那基本上在编程上,可以是相当于小学毕业。MFC界面设计的层次大概打个比方就是“高中”,现在看MFC,它的难度会远远超过你的想象。 速成的话。。。没有很好的办法,界面设计在学校里基本上是不可能会教的,因为这些都是商业机密技术,QQ的界面,360的界面,都是专业的UI库做的,这些库随便就是上百万的授权费。继续回答你:这样的一个界面上,你看着简单,但其实用到的控件很多,按钮,列表,表格等等,你要想用MFC写这样的一个界面,那你几乎得把MFC全部学完,夜以继日地看,我个人感觉需要一个月的时间。还有如果你是用MFC的话,那么你会发现,你写控制台用的C语言和MFC的C语言,会完全不一样,微软封装了很多的数据结构,甚至连函数调用都封装了,看起来很头疼的。

机顶盒上游戏开发可以么,也是用C语言写的目 录第一章 绪论 机顶盒的产生背景 机顶盒的发展及其现状 游戏模块设计的必要性 模块设计需要解决的问题 3第二章 系统开发环境及相关技术介绍 XX-XX硬件平台 XX操作系统 内核 任务机制 消息队列 信号量 C语言的特点 7第三章 开发流程 功能需求分析 可行性分析 模块设计 编码 测试 11第四章 系统设计 游戏模块接口设计 游戏的初始化 游戏的按键读取和转化 游戏的暂停、恢复和退出 游戏算法设计 推箱子游戏设计 俄罗斯方块游戏设计 黑白棋游戏设计 14结 论 16谢 辞 17参 考 文 献 18附录 推箱子游戏源程序 19

有关c语言毕业论文的题目

计算机类毕业设计(论文)参考题目

马上就要进行毕业设计了,你是否还在为选题而烦恼呢?下面是我为大家收集的关于计算机类毕业设计(论 文)参考题目,希望能够帮到大家!

1、 ××大学学籍管理系统开发与设计

2、 ××公司固定资产管理系统的开发与设计

3、 ××局人事劳资管理信息系统分析与设计

4、 用POWERBUILDER实现工资管理系统

5、 ××省特种设备监督检验所仪器设备管理系统的开发与设计

6、 ××市电源空调集中监控系统报表管理及技术资料动态管理的实现

7、 ××县电信局通信线路工程管理系统

8、 ××学院毕业生就业管理系统的开发与设计

9、 本地网通信线路计算机管理系统的设计与实现

10、 长途交换机 S1240 呼叫局数据管理

11、 传输资料计算机管理系统的开发

12、 大客户管理系统的开发与设计

13、 电信集团(大)客户关系管理系统以及和电信97网的嵌入集成

14、 利用Dlephi开发电信大户管理系统

15、 地下线路资源图形、数据管理系统的设计和开发

16、 光缆线路维护资源管理系统的设计与实现

17、 电话卡业务管理系统

18、 电信管线资源管理系统的设计与实现

19、 电信机房综合管理系统的设计与实现

20、 电信接入网钥匙管理系统的设计与实现

21、 工程项目综合管理系统的设计与实现

22、 广告代码管理系统—基于WEB的应用系统设计实现

23、 基于BS结构的学籍管理系统的研制与开发

24、 基于GSM短消息的可WEB管理的客户调查系统

25、 基于INTERNET的'远程成绩查询管理系统的设计与实现

26、 基于Web的DMTF的网络管理软件的设计与实现

27、 基于WEB的教务管理系统

28、 教务在线系统教学计划管理子系统性

29、 联通193话费管理系统的设计与实现

30、 论企业生产管理ERP系统的设计与实现

31、 面向计算机应用领域—图书馆管理信息系统的开发与实现

32、 企业信息管理与发布—发布与访问控制子系统

33、 全国组织机构代码管理系统WWW技术建设方案

34、 商场电子类产品库存管理系统

35、 上海贝尔S1240程控交换机设备号管理系统

36、 数据维护管理Call center的设计

37、 图书馆管理信息系统的设计与实现

38、 网络信息管理系统

39、 无线寻呼营业微机管理系统

40、 校园信息管理系统——ASP动态网站建设

41、 移动网络硬件资源调配管理系统的总体设计

42、 邮政储蓄业绩管理信息系统

43、 远程成绩查询管理系统的设计与实现

44、 168声讯系统全省联网的开发与实现

45、 ××公司办公工作区域计算机局域网的设计

46、 ××区政府电子政务宽带网的建设规划

47、 基于 Intranet 的企业信息网络建设

48、 利用ASP实现OA网的设计——xx省通信光缆线路维护网

49、 利用ASP实现数据的传输和处理——电信大客户网上互动平台系统分析与设计

50、 企业局域网规划设计

51、 校园多媒体网络教学系统的设计和实现

52、 PSMS动力设备及环境集中监控系统

53、 ××市电源空调及接入网环境集中监控系统的设计与实施

54、 动力集中监控系统采集单元设备驱动软件设计

55、 在Web中的应用

56、 BMP图像的有损压缩和解压

57、 CLIENT/SERVER环境下数据库应用系统的开发

58、 C语言多媒体开发与设计--题库维护及抽题子系统

59、 IDEA 加密算法

60、 INTERNET网络协议的研究与实现

61、 INTRANET安全与防火墙的应用

62、 IP网络环境下的视频图像传输及播放

63、 JSP构建VOD(视频点播)网站

64、 LED矩阵式显示屏的设计

65、 LINUX网络编程----实现一个局域网的电子邮件系统

66、 Nokia移动交换子系统检测数据的采集及数据处理

67、 ORACLE数据库不同建表策略对移动计费系统的影响

68、 POWERBUIDER数据窗口技术动态报表的实现

69、 WEB服务器软件的设计与实现

70、 WEB环境下BBS的建立和主要功能

71、 ×× 通信针对电子政务提出的信息化解决方案

72、 ××本地交换网时间同步系统

73、 ××市电信公司营运数据存储备份系统建设方案

74、 ××银行接入INTERNET方案设计

75、 报刊分发电子显示系统的开发与设计

学术堂整理了十五个简单好写的毕业论文题目,供大家选择:1.计算机网络信息安全及其防护对策2.计算机网络犯罪对刑事诉讼的挑战与制度应对3.提高计算机网络可靠性的方法研究4.浅析计算机网络安全防范措施5.计算机网络安全问题及其防范措施6.创客教育视野下“计算机网络”课程实验设计7.计算机网络课程中的项目式实验教学8.计算机网络信息安全及防护策略研究9.浅谈计算机网络安全问题及其对策10.计算机网络中学生间社会性交互的规律11.计算机网络路由研究综述12.计算机网络实践教学体系与能力培养13.计算机网络信息管理及其安全防护策略14.计算机网络安全的研究与探讨15.计算机网络攻防建模仿真研究综述

C语言,感觉做一个嵌入式比较好因为很多驱动都用C语言编写的。所以建议你,做一个温度感应器什么的

要么是某某管理系统要么是某种常见软件。你可以做个根据人的照片做成表情包的,就像iphone x上那个相机一样。另外就是面部识别,跟踪,这个也比较新

c语言设计本科毕业论文

这个具体得知道你的专业呀,还有就是选的是什么题目,每个题目的要求和要的功能那些都是不一样的,总之计算机的就是这样,比较独立的。所以要知道你所学的方向才能确定的。

论文写作,先不说内容,首先格式要正确,一篇完整的毕业论文,题目,摘要(中英文),目录,正文(引言,正文,结语),致谢,参考文献。学校规定的格式,字体,段落,页眉页脚,开始写之前,都得清楚的,你的论文算是写好了五分之一。然后,选题,你的题目时间宽裕,那就好好考虑,选一个你思考最成熟的,可以比较多的阅读相关的参考文献,从里面获得思路,确定一个模板性质的东西,照着来,写出自己的东西。如果时间紧急,那就随便找一个参考文献,然后用和这个参考文献相关的文献,拼出一篇,再改改。正文,语言必须是学术的语言。一定先列好提纲,这就是框定每一部分些什么,保证内容不乱,将内容放进去,写好了就。参考文献去中国知网搜索,校园网免费下载。 合适采纳

要么是某某管理系统要么是某种常见软件。你可以做个根据人的照片做成表情包的,就像iphone x上那个相机一样。另外就是面部识别,跟踪,这个也比较新

数据挖掘人工智能方面

基于c语言的通讯录毕业论文

应该是要求你用C语言写一个关于通讯录和记事本的程序.然后围绕这个来写一篇论文.主要是看你们学校以及你的老师对你有什么具体要求.这个你必须要自己去问清楚.一般来说,现在的学生写毕业设计都是在网上找些相关的,然后再改写别人的论文变成自己的.现在论文网非常多,有的是免费的,有的是要给钱的,你先问清楚老师的要求.然后在网上查一下有没有这方面相关的,有就最好,弄下来,加入与之不同的,去掉不要的,再加入你自己的思想就可以了.这个不用急的,反正到时候,老师自然会帮你想方法的,你记住一定要和老师搞好关系,多勾通一下.有不懂的地方及时的问.这样才能保证你过关,因为写论文一是要搞清楚题目要求,二是要按要求写,比如用什么样的格式,写多少字等等.总之,你首先应该做的是问清具体的要求,然后不懂的就问老师,或者是和老师商量,具体怎么做.然后根据安排再查相关资料完全论文.

#include ""#include ""#include "" #include ""#include "" FILE *fp;int i; //i是全局变量 可代替length struct address { char postnum[10]; char a[40]; //家庭地址};struct birthday { int year; int month; int day; };struct ffriend { int num; //序号char name[20]; char sex; char telephone[13]; struct birthday birthday; struct address address; }friends[50]; void Load(){ int j;long k;fp=fopen("","a+"); //打开文件 if(fp!=NULL){ for(i=1;i<50;i++){ j=fgetc(fp);if(j==EOF) //判断是否到了文件尾return;k=i-1;fseek(fp,k*sizeof(struct ffriend),SEEK_SET);fread(&friends[i],sizeof(struct ffriend),1,fp); //从文件中读取一条记录}}else{ fp=fopen("","w");i=1;}}void Show(int j) {// friends[j].num=i;printf("\n\n\t编号-Nnumber: %3d",friends[j].num);printf("\n\t姓名-Name:%-20s",friends[j].name);printf("\n\t性别-Sex:%c",friends[j].sex);printf("\n\t联系电话-Telephone:%-13s",friends[j].telephone);printf("\n\t出生日期-Birthday:%4d-%2d-%3d",friends[j].[j].[j].);printf("\n\t邮编-Postnum:%-10s",friends[j].);printf("\n\t通信地址-address:%-40s",friends[j].);}void Append(int j) {fflush(stdin); //区内清除文件缓冲区,文件以写方式打开时将缓冲容写入文件//stdin是一个标准FILE*(文件型指针)指向通常是用键盘的输入的输入流friends[j].num=j;printf("\n\t\t\t序号-Number:%d",j);printf("\n\t\t\t姓名-Name:"); scanf("%s",friends[j].name);fflush(stdin); //为什么没有fflush(stdin); 的效果会自动跳过呢?printf("\t\t\t性别-Sex(m/w):"); //为什么输入汉字男女也会自动跳过联系电话呢 scanf("%c",&friends[j].sex);printf("\t\t\t联系电话-telephone:"); scanf("%s",friends[j].telephone);printf("\t出生日期-birthday"); printf("\n\t\t\t年份-year:");scanf("%d",&friends[j].);printf("\t\t\t月份-month:");scanf("%d",&friends[j].);printf("\t\t\t日-day:");scanf("%d",&friends[j].);printf("\t\t\t邮编-Postnumber:"); scanf("%s",friends[j].);printf("\t\t\t通信地址-Address:"); scanf("%s",friends[j].);getchar();}void Delete() {int k;printf("\n\tDelete 序号-Number:"); scanf("%d",&k);if(k<=i){for(int j=k;jk;j--) //插入功能{strcpy(friends[j].name,friends[j-1].name); //数据后移friends[j].sex=friends[j-1].sex;strcpy(friends[j].telephone,friends[j-1].telephone);friends[j].[j-1].;friends[j].[j-1].;friends[j].[j-1].;strcpy(friends[j].[j-1].);strcpy(friends[j].[j-1].);}Append(k);i++; printf("\n\t\t\t\t\t\t\t此次操作结束");printf("\n\t------------------------------------------------------------\t\t\n");break; case 'D': //删除功能 //增添随意删除多条记录的功能Delete();if(i<1)printf("\n没有记录-No records\n");printf("\n请按回车键继续!");getchar();getchar(); printf("\n\t\t\t\t\t\t\t此次操作结束");printf("\n\t------------------------------------------------------------\t\t\n");break;case 'E': //查询功能 printf("\n\t请输入要查询记录的相关姓名:"); //增添查询按列号的scanf("%s",searchname);for(j=1;j<=i;j++){if(strcmp(searchname,friends[j].name)==0) //比较字符串{ Show(j); break;}}if(i<1) {printf("\n 没有您所查询的记录-No records");printf("\n 请按回车键继续!");getchar();}printf("\n\t\t\t\t\t\t\t此次操作结束");printf("\n\t------------------------------------------------------------\t\t\n");getchar();break;case 'F': //修改功能 / /增添按序列号查询printf("\n\t请输入要修改记录的相关姓名:");gets(searchname);scanf("%s",searchname);for(j=1;j<=i;j++){if(strcmp(searchname,friends[j].name)==0) //比较字符串{ Modify(j); // getchar(); //加个输出确定修改吗}}if(i<1) //修改功能{ printf("\n 没有您所要修改的记录-No records");printf("\n 请按回车键继续!");getchar();getchar();}printf("\n\t\t\t\t\t\t\t此次操作结束");printf("\n\t------------------------------------------------------------\t\t\n");break;case 'G': Save(); //存盘功能 getchar();printf("\n\t\t\t\t\t\t\t此次操作结束"); printf("\n\t------------------------------------------------------------\t\t\n");break;case 'H': //退出功能char x;printf("是否保存?yes/no\n");scanf("%s",&x);//getchar();// getchar();if(x=='y') { Save();exit(0);}elseexit(0);default: printf("\n\t输入有误,请输入正确的序列号!");printf("\n请按回车键继续!");getchar();printf("\n\t\t\t\t\t\t\t此次操作结束");printf("\n\t------------------------------------------------------------\t\t\n");}}while(1);}

/*源程序*//******头文件(.h)***********/#include""/*I/O函数*/#include""/*标准库函数*/#include""/*字符串函数*/#include""/*字符操作函数*/#defineM50/*定义常数表示记录数*/typedefstruct/*定义数据结构*/{charname[20];/*姓名*/charunits[30];/*单位*/chartele[10];/*电话*/}ADDRESS;/******以下是函数原型*******/intenter(ADDRESSt[]);/*输入记录*/voidlist(ADDRESSt[],intn);/*显示记录*/voidsearch(ADDRESSt[],intn);/*按姓名查找显示记录*/intdelete(ADDRESSt[],intn);/*删除记录*/intadd(ADDRESSt[],intn);/*插入记录*/voidsave(ADDRESSt[],intn);/*记录保存为文件*/intload(ADDRESSt[]);/*从文件中读记录*/voiddisplay(ADDRESSt[]);/*按序号查找显示记录*/voidsort(ADDRESSt[],intn);/*按姓名排序*/voidqseek(ADDRESSt[],intn);/*快速查找记录*/voidcopy();/*文件复制*/voidprint(ADDRESStemp);/*显示单条记录*/intfind(ADDRESSt[],intn,char*s);/*查找函数*/intmenu_select();/*主菜单函数*//******主函数开始*******/main(){inti;ADDRESSadr[M];/*定义结构体数组*/intlength;/*保存记录长度*/clrscr();/*清屏*/for(;;)/*无限循环*/{switch(menu_select())/*调用主菜单函数,返回值整数作开关语句的条件*/{case0:length=enter(adr);break;/*输入记录*/case1:list(adr,length);break;/*显示全部记录*/case2:search(adr,length);break;/*查找记录*/case3:length=delete(adr,length);break;/*删除记录*/case4:length=add(adr,length);break;/*插入记录*/case5:save(adr,length);break;/*保存文件*/case6:length=load(adr);break;/*读文件*/case7:display(adr);break;/*按序号显示记录*/case8:sort(adr,length);break;/*按姓名排序*/case9:qseek(adr,length);break;/*快速查找记录*/case10:copy();break;/*复制文件*/case11:exit(0);/*如返回值为11则程序结束*/}}}/*菜单函数,函数返回值为整数,代表所选的菜单项*/menu_select(){chars[80];intc;gotoxy(1,25);/*将光标定为在第25行,第1列*/printf("pressanykeyentermenu\n");/*提示压任意键继续*/getch();/*读入任意字符*/clrscr();/*清屏*/gotoxy(1,1);printf("********************MENU*********************\n\n");printf("\n");printf("\n");printf("\n");printf("\n");printf("\n");printf("\n");printf("\n");printf("\n");printf("\n");printf("\n");printf("\n");printf("\n");printf("***********************************************\n");do{printf("\nEnteryouchoice(0~11):");/*提示输入选项*/scanf("%s",s);/*输入选择项*/c=atoi(s);/*将输入的字符串转化为整型数*/}while(c11);/*选择项不在0~11之间重输*/returnc;/*返回选择项,主程序根据该数调用相应的函数*/}/***输入记录,形参为结构体数组,函数值返回类型为整型表示记录长度*/intenter(ADDRESSt[]){inti,n;char*s;clrscr();/*清屏*/printf("\npleaseinputnum\n");/*提示信息*/scanf("%d",&n);/*输入记录数*/printf("pleaseinputrecord\n");/*提示输入记录*/printf("nameunittelephone\n");printf("------------------------------------------------\n");for(i=0;in-1)/*如果整数i值大于n-1,说明没找到*/printf("notfound\n");elseprint(t[i]);/*找到,调用显示函数显示记录*/}/*显示指定的一条记录*/voidprint(ADDRESStemp){clrscr();printf("\n\n********************************************\n");printf("nameunittelephone\n");printf("------------------------------------------------\n");printf("%-20s%-30s%-10s\n",);printf("**********************end***********************\n");}/*查找函数,参数为记录数组和记录条数以及姓名s*/intfind(ADDRESSt[],intn,char*s){inti;for(i=0;in-1)/*如果i>n-1超过了数组的长度*/printf("nofoundnotdeleted\n");/*显示没找到要删除的记录*/else{print(t[i]);/*调用输出函数显示该条记录信息*/printf("Areyousuredeleteit(1/0)\n");/*确认是否要删除*/scanf("%d",&ch);/*输入一个整数0或1*/if(ch==1)/*如果确认删除整数为1*/{for(j=i+1;j=i;j--)/*从最后一个结点开始向后移动一条*/{strcpy(t[j+1].name,t[j].name);/*当前记录的姓名拷贝到后一条*/strcpy(t[j+1].units,t[j].units);/*当前记录的单位拷贝到后一条*/strcpy(t[j+1].tele,t[j].tele);/*当前记录的电话拷贝到后一条*/}strcpy(t[i].name,);/*将新插入记录的姓名拷贝到第i个位置*/strcpy(t[i].units,);/*将新插入记录的单位拷贝到第i个位置*/strcpy(t[i].tele,);/*将新插入记录的电话拷贝到第i个位置*/n++;/*记录数加1*/returnn;/*返回记录数*/}/*保存函数,参数为结构体数组和记录数*/voidsave(ADDRESSt[],intn){inti;FILE*fp;/*指向文件的指针*/if((fp=fopen("","wb"))==NULL)/*打开文件,并判断打开是否正常*/{printf("cannotopenfile\n");/*没打开*/exit(1);/*退出*/}printf("\nSavingfile\n");/*输出提示信息*/fprintf(fp,"%d",n);/*将记录数写入文件*/fprintf(fp,"\r\n");/*将换行符号写入文件*/for(i=0;i=0&&id0)/*比较大小*/{flag=1;strcpy([j].name);/*交换记录*/strcpy([j].units);strcpy([j].tele);strcpy(t[j].name,t[j+1].name);strcpy(t[j].units,t[j+1].units);strcpy(t[j].tele,t[j+1].tele);strcpy(t[j+1].name,);strcpy(t[j+1].units,);strcpy(t[j+1].tele,);}if(flag==0)break;/*如果标志为0,说明没有发生过交换循环结束*/}printf("sortsucess!!!\n");/*显示排序成功*/}/*快速查找,参数为结构体数组和记录数*/voidqseek(ADDRESSt[],intn){chars[20];intl,r,m;printf("\nPleasesortbeforeqseek!\n");/*提示确认在查找之前,记录是否已排序*/printf("pleaseenternameforqseek\n");/*提示输入*/scanf("%s",s);/*输入待查找的姓名*/l=0;r=n-1;/*设置左边界与右边界的初值*/while(lr)/*如果左边界大于右边界时*/printf("notfound\n");/*显示没找到*/}/*复制文件*/voidcopy(){charoutfile[20];/*目标文件名*/inti,n;ADDRESStemp[M];/*定义临时变量*/FILE*sfp,*tfp;/*定义指向文件的指针*/clrscr();/*清屏*/if((sfp=fopen("","rb"))==NULL)/*打开记录文件*/{printf("cannotopenfile\n");/*显示不能打开文件信息*/exit(1);/*退出*/}printf("Enteroutfilename,forexamplec:\\f1\\:\n");/*提示信息*/scanf("%s",outfile);/*输入目标文件名*/if((tfp=fopen(outfile,"wb"))==NULL)/*打开目标文件*/{printf("cannotopenfile\n");/*显示不能打开文件信息*/exit(1);/*退出*/}fscanf(sfp,"%d",&n);/*读出文件记录数*/fprintf(tfp,"%d",n);/*写入目标文件数*/fprintf(tfp,"\r\n");/*写入换行符*/for(i=0;i

这个问题答案网上很多,这个地址就是或#include 我也答过#include "" #include "" #include "" #include "" #include "" #include "" /#include "" #define N 3 typedef struct z1 { char no[11]; char name[15]; int score[N]; float sum; float average; int order; struct z1 *next; }STUDENT;STUDENT *init(); STUDENT *create(); STUDENT *delete(STUDENT *h); void print(STUDENT *h); /* 显示所有记录*/void search(STUDENT *h); /*查找*/void save(STUDENT *h); /*保存*/STUDENT *load(); /*读入记录*/void computer(STUDENT *h); /*计算总分和均分*/STUDENT *insert(STUDENT *h); /*插入记录*/void append(); /*追加记录*/void copy(); /*复制文件*/STUDENT *sort(STUDENT *h); /*排序*/STUDENT *index(STUDENT *h); /*索引*/void total(STUDENT *h); /*分类合计*/int menu_select(); /*菜单函数*//******主函数开始*******/main(){ int i; STUDENT *head; /*链表定义头指针*/ head=init(); /*初始化链表*/ clrscr(); /*清屏*/ for(;;) /*无限循环*/ { switch(menu_select()) /*调用主菜单函数,返回值整数作开关语句的条件*/ { /*值不同,执行的函数不同,break 不能省略*/ case 0:head=init();break; case 1:head=create();break; case 2:head=delete(head);break; case 3:print(head);break; /*显示全部记录*/ case 4:search(head);break; /*查找记录*/ case 5:save(head);break; /*保存文件*/ case 6:head=load(); break; /*读文件*/ case 7:computer(head);break; /*计算总分和均分*/ case 8:head=insert(head); break; /*插入记录*/ case 9:copy();break; /*复制文件*/ case 10:head=sort(head);break; /*排序*/ case 11:append();break; /*追加记录*/ case 12:head=index(head);break; /*索引*/ case 13:total(head);break; /*分类合计*/ case 14:exit(0); /*如菜单返回值为14程序结束*/ } }}/*菜单函数,返回值为整数*/menu_select(){ char *menu[]={"***************MENU***************", /*定义菜单字符串数组*/ " 0. init list", /*初始化*/ " 1. Enter list", /*输入记录*/ " 2. Delete a record from list", /*从表中删除记录*/ " 3. print list ", /*显示单链表中所有记录*/ " 4. Search record on name", /*按照姓名查找记录*/ " 5. Save the file", /*将单链表中记录保存到文件中*/ " 6. Load the file", /*从文件中读入记录*/ " 7. compute the score", /*计算所有学生的总分和均分*/ " 8. insert record to list ", /*插入记录到表中*/ " 9. copy the file to new file", /*复制文件*/ " 10. sort to make new file", /*排序*/ " 11. append record to file", /*追加记录到文件中*/ " 12. index on nomber", /*索引*/ " 13. total on nomber", /*分类合计*/ " 14. Quit"}; /*退出*/ char s[3]; /*以字符形式保存选择号*/ int c,i; /*定义整形变量*/ gotoxy(1,25); /*移动光标*/ printf("press any key enter menu......\n"); /*压任一键进入主菜单*/ getch(); /*输入任一键*/ clrscr(); /*清屏幕*/ gotoxy(1,1); /*移动光标*/ textcolor(YELLOW); /*设置文本显示颜色为黄色*/ textbackground(BLUE); /*设置背景颜色为蓝色*/ gotoxy(10,2); /*移动光标*/ putch(0xc9); /*输出左上角边框┏*/ for(i=1;i<44;i++) putch(0xcd); /*输出上边框水平线*/ putch(0xbb); /*输出右上角边框 ┓*/ for(i=3;i<20;i++) { gotoxy(10,i);putch(0xba); /*输出左垂直线*/ gotoxy(54,i);putch(0xba); } /*输出右垂直线*/ gotoxy(10,20);putch(0xc8); /*输出左上角边框┗*/ for(i=1;i<44;i++) putch(0xcd); /*输出下边框水平线*/ putch(0xbc); /*输出右下角边框┛*/ window(11,3,53,19); /* 制作显示菜单的窗口,大小根据菜单条数设计*/ clrscr(); /*清屏*/ for(i=0;i<16;i++) /*输出主菜单数组*/ { gotoxy(10,i+1); cprintf("%s",menu[i]); } textbackground(BLACK); /*设置背景颜色为黑色*/ window(1,1,80,25); /*恢复原窗口大小*/ gotoxy(10,21); /*移动光标*/ do{ printf("\n Enter you choice(0~14):"); /*在菜单窗口外显示提示信息*/ scanf("%s",s); /*输入选择项*/ c=atoi(s); /*将输入的字符串转化为整形数*/ }while(c<0||c>14); /*选择项不在0~14之间重输*/ return c; /*返回选择项,主程序根据该数调用相应的函数*/}STUDENT *init(){ return NULL;}/*创建链表*/STUDENT *create(){ int i; int s; STUDENT *h=NULL,*info; /* STUDENT指向结构体的指针*/ for(;;) { info=(STUDENT *)malloc(sizeof(STUDENT)); /*申请空间*/ if(!info) /*如果指针info为空*/ { printf("\nout of memory"); /*输出内存溢出*/ return NULL; /*返回空指针*/ } inputs("enter no:",info->no,11); /*输入学号并校验*/ if(info->no[0]=='@') break; /*如果学号首字符为@则结束输入*/ inputs("enter name:",info->name,15); /*输入姓名,并进行校验*/ printf("please input %d score \n",N); /*提示开始输入成绩*/ s=0; /*计算每个学生的总分,初值为0*/ for(i=0;iscore[i]); if(info->score[i]>100||info->score[i]<0) printf("bad data,repeat input\n"); }while(info->score[i]>100||info->score[i]<0); s=s+info->score[i]; } info->sum=s; info->average=(float)s/N; info->order=0; info->next=h; h=info; } return(h); /*返回头指针*/}/*输入字符串,并进行长度验证*/inputs(char *prompt, char *s, int count){ char p[255]; do{ printf(prompt); /*显示提示信息*/ scanf("%s",p); if(strlen(p)>count)printf("\n too long! \n"); }while(strlen(p)>count); strcpy(s,p); }void print(STUDENT *h){ int i=0; /* 统计记录条数*/ STUDENT *p; /*移动指针*/ clrscr(); /*清屏*/ p=h; /*初值为头指针*/ printf("\n\n\n****************************STUDENT********************************\n"); printf("|rec|nO | name | sc1| sc2| sc3| sum | ave |order|\n"); printf("|---|----------|---------------|----|----|----|--------|-------|-----|\n"); while(p!=NULL) { i++; printf("|%3d |%-10s|%-15s|%4d|%4d|%4d| % | % | %3d |\n", i, p->no,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order); p=p->next; } printf("**********************************end*********************************\n");}/*删除记录*/STUDENT *delete(STUDENT *h){ STUDENT *p,*q; /*p为查找到要删除的结点指针,q为其前驱指针*/ char s[11]; /*存放学号*/ clrscr(); /*清屏*/ printf("please deleted no\n"); /*显示提示信息*/ scanf("%s",s); /*输入要删除记录的学号*/ q=p=h; /*给q和p赋初值头指针*/ while(strcmp(p->no,s)&&p!=NULL) /*当记录的学号不是要找的,或指针不为空时*/ { q=p; /*将p指针值赋给q作为p的前驱指针*/ p=p->next; /*将p指针指向下一条记录*/ } if(p==NULL) /*如果p为空,说明链表中没有该结点*/ printf("\nlist no %s student\n",s); else /*p不为空,显示找到的记录信息*/ { printf("*****************************have found***************************\n"); printf("|no | name | sc1| sc2| sc3| sum | ave |order|\n"); printf("|----------|---------------|----|----|----|--------|-------|-----|\n"); printf("|%-10s|%-15s|%4d|%4d|%4d| % | % | %3d |\n", p->no, p->name,p->score[0],p->score[1],p->score[2],p->sum, p->average,p->order); printf("********************************end*******************************\n"); getch(); /*压任一键后,开始删除*/ if(p==h) /*如果p==h,说明被删结点是头结点*/ h=p->next; /*修改头指针指向下一条记录*/ else q->next=p->next; /*不是头指针,将p的后继结点作为q的后继结点*/ free(p); /*释放p所指结点空间*/ printf("\n have deleted No %s student\n",s); printf("Don't forget save\n");/*提示删除后不要忘记保存文件*/ } return(h); /*返回头指针*/}/*查找记录*/void search(STUDENT *h){ STUDENT *p; char s[15]; clrscr(); printf("please enter name for search\n"); scanf("%s",s); /*输入姓名*/ p=h; /*将头指针赋给p*/ while(strcmp(p->name,s)&&p!=NULL) /*当记录的姓名不是要找的,或指针不为空时*/ p=p->next; /*移动指针,指向下一结点*/ if(p==NULL) /*如果指针为空*/ printf("\nlist no %s student\n",s); /*显示没有该学生*/ else /*显示找到的记录信息*/ { printf("\n\n*****************************havefound***************************\n"); printf("|nO | name | sc1| sc2| sc3| sum | ave |order|\n"); printf("|----------|---------------|----|----|----|--------|-------|-----|\n"); printf("|%-10s|%-15s|%4d|%4d|%4d| % | % | %3d |\n", p->no,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order); printf("********************************end*******************************\n"); }}/*插入记录*/STUDENT *insert(STUDENT *h){ STUDENT *p,*q,*info; /*p指向插入位置,q是其前驱,info指新插入记录*/ char s[11]; /*保存插入点位置的学号*/ int s1,i; printf("please enter location before the no\n"); scanf("%s",s); /*输入插入点学号*/ printf("\nplease new record\n"); /*提示输入记录信息*/ info=(STUDENT *)malloc(sizeof(STUDENT)); /*申请空间*/ if(!info) { printf("\nout of memory"); /*如没有申请到,内存溢出*/ return NULL; /*返回空指针*/ } inputs("enter no:",info->no,11); /*输入学号*/ inputs("enter name:",info->name,15); /*输入姓名*/ printf("please input %d score \n",N); /*提示输入分数*/ s1=0; /*保存新记录的总分,初值为0*/ for(i=0;iscore[i]); if(info->score[i]>100||info->score[i]<0) printf("bad data,repeat input\n"); }while(info->score[i]>100||info->score[i]<0); s1=s1+info->score[i]; /*计算总分*/ } info->sum=s1; /*将总分存入新记录中*/ info->average=(float)s1/N; /*计算均分*/ info->order=0; /*名次赋值0*/ info->next=NULL; /*设后继指针为空*/ p=h; /*将指针赋值给p*/ q=h; /*将指针赋值给q*/ while(strcmp(p->no,s)&&p!=NULL) /*查找插入位置*/ { q=p; /*保存指针p,作为下一个p的前驱*/ p=p->next; /*将指针p后移*/ } if(p==NULL) /*如果p指针为空,说明没有指定结点*/ if(p==h) /*同时p等于h,说明链表为空*/ h=info; /*新记录则为头结点*/ else q->next=info; else if(p==h) { info->next=p; h=info; } else { info->next=p; q->next=info; } printf("\n ----have inserted %s student----\n",info->name); printf("---Don't forget save---\n"); /*提示存盘*/ return(h); /*返回头指针*/}/*保存数据到文件*/void save(STUDENT *h){ FILE *fp; /*定义指向文件的指针*/ STUDENT *p; /* 定义移动指针*/ char outfile[10]; /*保存输出文件名*/ printf("Enter outfile name,for example c:\\f1\\:\n"); /*提示文件名格式信息*/ scanf("%s",outfile); if((fp=fopen(outfile,"wb"))==NULL) /*为输出打开一个二进制文件,如没有则建立*/ { printf("can not open file\n"); exit(1); } printf("\nSaving file......\n"); /*打开文件,提示正在保存*/ p=h; /*移动指针从头指针开始*/ while(p!=NULL) /*如p不为空*/ { fwrite(p,sizeof(STUDENT),1,fp);/*写入一条记录*/ p=p->next; /*指针后移*/ } fclose(fp); /*关闭文件*/ printf("-----save success!!-----\n"); /*显示保存成功*/}/* 从文件读数据*/STUDENT *load(){ STUDENT *p,*q,*h=NULL; /*定义记录指针变量*/ FILE *fp; /* 定义指向文件的指针*/ char infile[10]; /*保存文件名*/ printf("Enter infile name,for example c:\\f1\\:\n"); scanf("%s",infile); /*输入文件名*/ if((fp=fopen(infile,"rb"))==NULL) /*打开一个二进制文件,为读方式*/ { printf("can not open file\n"); /*如不能打开,则结束程序*/ exit(1); } printf("\n -----Loading file!-----\n"); p=(STUDENT *)malloc(sizeof(STUDENT)); /*申请空间*/ if(!p) { printf("out of memory!\n"); /*如没有申请到,则内存溢出*/ return h; /*返回空头指针*/ } h=p; /*申请到空间,将其作为头指针*/ while(!feof(fp)) /*循环读数据直到文件尾结束*/ { if(1!=fread(p,sizeof(STUDENT),1,fp)) break; /*如果没读到数据,跳出循环*/ p->next=(STUDENT *)malloc(sizeof(STUDENT)); /*为下一个结点申请空间*/ if(!p->next) { printf("out of memory!\n"); return h; } q=p; p=p->next; } q->next=NULL; /*最后一个结点的后继指针为空*/ fclose(fp); /*关闭文件*/ printf("---You have success read data from file!!!---\n"); return h; /*返回头指针*/}/*追加记录到文件*/void append(){ FILE *fp; /*定义指向文件的指针*/ STUDENT *info; /*新记录指针*/ int s1,i; char infile[10]; /*保存文件名*/ printf("\nplease new record\n"); info=(STUDENT *)malloc(sizeof(STUDENT)); /*申请空间*/ if(!info) { printf("\nout of memory"); /*没有申请到,内存溢出本函数结束*/ return ; } inputs("enter no:",info->no,11); /*调用inputs输入学号*/ inputs("enter name:",info->name,15); /*调用inputs输入姓名*/ printf("please input %d score \n",N); /*提示输入成绩*/ s1=0; for(i=0;iscore[i]); /*输入成绩*/ if(info->score[i]>100||info->score[i]<0)printf("bad data,repeat input\n"); }while(info->score[i]>100||info->score[i]<0); /*成绩数据验证*/ s1=s1+info->score[i]; /*求总分*/ } info->sum=s1; /*保存总分*/ info->average=(float)s1/N; /*求均分*/ info->order=0; /*名次初始值为0*/ info->next=NULL; /*将新记录后继指针赋值为空*/ printf("Enter infile name,for example c:\\f1\\:\n"); scanf("%s",infile); /*输入文件名*/ if((fp=fopen(infile,"ab"))==NULL) /*向二进制文件尾增加数据方式打开文件*/ { printf("can not open file\n"); /*显示不能打开*/ exit(1); /*退出程序*/ } printf("\n -----Appending record!-----\n"); if(1!=fwrite(info,sizeof(STUDENT),1,fp)) /*写文件操作*/ { printf("-----file write error!-----\n"); return; /*返回*/ } printf("-----append sucess!!----\n"); fclose(fp); /*关闭文件*/}/*文件拷贝*/void copy(){ char outfile[10],infile[10]; FILE *sfp,*tfp; /*源和目标文件指针*/ STUDENT *p=NULL; /*移动指针*/ clrscr(); /*清屏*/ printf("Enter infile name,for example c:\\f1\\:\n"); scanf("%s",infile); /*输入源文件名*/ if((sfp=fopen(infile,"rb"))==NULL) /*二进制读方式打开源文件*/ { printf("can not open input file\n"); exit(0); } printf("Enter outfile name,for example c:\\f1\\:\n"); /*提示输入目标文件名*/ scanf("%s",outfile); /*输入目标文件名*/ if((tfp=fopen(outfile,"wb"))==NULL) /*二进制写方式打开目标文件*/ { printf("can not open output file \n"); exit(0); } while(!feof(sfp)) /*读文件直到文件尾*/ { if(1!=fread(p,sizeof(STUDENT),1,sfp)) break; /*块读*/ fwrite(p,sizeof(STUDENT),1,tfp); /*块写*/ } fclose(sfp); /*关闭源文件*/ fclose(tfp); /*关闭目标文件*/ printf("you have success copy file!!!\n"); /*显示成功拷贝*/}/*排序*/STUDENT *sort(STUDENT *h){ int i=0; /*保存名次*/ STUDENT *p,*q,*t,*h1; /*定义临时指针*/ h1=h->next; /*将原表的头指针所指的下一个结点作头指针*/ h->next=NULL; /*第一个结点为新表的头结点*/ while(h1!=NULL) /*当原表不为空时,进行排序*/ { t=h1; /*取原表的头结点*/ h1=h1->next; /*原表头结点指针后移*/ p=h; /*设定移动指针p,从头指针开始*/ q=h; /*设定移动指针q做为p的前驱,初值为头指针*/ while(t->sumsum&&p!=NULL) /*作总分比较*/ { q=p; /*待排序点值小,则新表指针后移*/ p=p->next; } if(p==q) /*p==q,说明待排序点值大,应排在首位*/ { t->next=p; /*待排序点的后继为p*/ h=t; /*新头结点为待排序点*/ } else /*待排序点应插入在中间某个位置q和p之间,如p为空则是尾部*/ { t->next=p; /*t的后继是p*/ q->next=t; /*q的后继是t*/ } } p=h; /*已排好序的头指针赋给p,准备填写名次*/ while(p!=NULL) /*当p不为空时,进行下列操作*/ { i++; /*结点序号*/ p->order=i; /*将名次赋值*/ p=p->next; /*指针后移*/ } printf("sort sucess!!!\n"); /*排序成功*/ return h; /*返回头指针*/}/*计算总分和均值*/void computer(STUDENT *h){ STUDENT *p; /*定义移动指针*/ int i=0; /*保存记录条数初值为0*/ long s=0; /*总分初值为0*/ float average=0; /*均分初值为0*/ p=h; /*从头指针开始*/ while(p!=NULL) /*当p不为空时处理*/ { s+=p->sum; /*累加总分*/ i++; /*统计记录条数*/ p=p->next; /*指针后移*/ } average=(float)s/i;/* 求均分,均分为浮点数,总分为整数,所以做类型转换*/ printf("\n--All students sum score is:%ld average is %\n",s,average);}/*索引*/STUDENT *index(STUDENT *h){ STUDENT *p,*q,*t,*h1; /*定义临时指针*/ h1=h->next; /*将原表的头指针所指的下一个结点作头指针*/ h->next=NULL; /*第一个结点为新表的头结点*/ while(h1!=NULL) /*当原表不为空时,进行排序*/ { t=h1; /*取原表的头结点*/ h1=h1->next; /*原表头结点指针后移*/ p=h; /*设定移动指针p,从头指针开始*/ q=h; /*设定移动指针q做为p的前驱,初值为头指针*/ while(strcmp(t->no,p->no)>0&&p!=NULL) /*作学号比较*/ { q=p; p=p->next; } if(p==q) /*p==q, { t->next=p; h=t; } else { t->next=p; /*t的后继是p*/ q->next=t; /*q的后继是t*/ } } printf("index sucess!!!\n"); /*索引排序成功*/ return h; /*返回头指针*/}/*分类合计*/void total(STUDENT *h){ STUDENT *p,*q; /*定义临时指针变量*/ char sno[9],qno[9],*ptr; /*保存班级号的*/ float s1,ave; /*保存总分和均分*/ int i; clrscr(); /*清屏*/ printf("\n\n *******************Total*****************\n"); printf("---class---------sum--------------average----\n"); p=h; while(p!=NULL) { memcpy(sno,p->no,8); /*从学号中取出班级号*/ sno[8]='\0'; /*做字符串结束标记*/ q=p->next; /*将指针指向待比较的记录*/ s1=p->sum; /*当前班级的总分初值为该班级的第一条记录总分*/ ave=p->average; /*当前班级的均分初值为该班级的第一条记录均分*/ i=1; /*统计当前班级人数*/ while(q!=NULL) /*内循环开始*/ { memcpy(qno,q->no,8); /*读取班级号*/ qno[8]='\0'; /*做字符串结束标记*/ if(strcmp(qno,sno)==0) /*比较班级号*/ { s1+=q->sum; /*累加总分*/ ave+=q->average; /*累加均分*/ i++; /*累加班级人数*/ q=q->next; /*指针指向下一条记录*/ } else break; } printf("%s % %\n",sno,s1,ave/i); if(q==NULL) break; else p=q; } printf("---------------------------------------------\n");}

  • 索引序列
  • 关于c语言的本科毕业论文
  • 关于C语言客户管理系毕业论文
  • 有关c语言毕业论文的题目
  • c语言设计本科毕业论文
  • 基于c语言的通讯录毕业论文
  • 返回顶部