华中科技大学计算机学院C语言课设实验报告

合集下载

华中科技大学计算机学院C语言课设实验报告参考模板

华中科技大学计算机学院C语言课设实验报告参考模板

华中科技大学计算机科学与技术学院《C语言程序设计》课程设计实验报告题目:科研项目信息管理系统专业:计算机班级:学号:姓名:成绩:指导教师:李开完成日期:2009年10 月20 日科研项目信息管理系统一、系统功能结构模块图二、数据结构设计及其用法说明typedef struct lakey{char name[30];/*团队名称*/int total;/*自然科学基金的科研项目数*/float dudu;/*经费数*/struct lakey *next;}*plakey;/*统计3中用到的数据结构*/typedef struct emmey{char name[30];/*团队名称*/int teacher;/*老师人数*/int harden;/*项目数*/float bizhi;/*比值*/struct emmey *next;}*pemmey;/*统计4中用到的数据结构*/typedef struct kPro{char code[15];/*项目编号*/char sort;/*项目种类*/int aking1;char time[8];/*项目时间*/float dudu;/*项目经费*/int aking2;char beiler[15];/*负责人*/int aking3;char keynoName[30];/*所在团队名称*/struct kPro *next;}harden,*pHarden;typedef struct Komo{int teacher;/*老师人数*/char name[20];/*院系名称*/int student;/*学生人数*/float bizhi;/*二者比值*/struct Komo *next;}*pKomo;/*统计1中用到的数据结构,统计结果放在这个数据结构中*/typedef struct kTea{char name[30];/*团队名称*/char beiler[15];/*负责人*/int stuNum;/*学生人数*/int aking2;int coco;/*老师人数*/char colName[20];/*所在院系的名称*/int aking1;struct kTea *next;pHarden child;}keyno,*pKeyno;typedef struct edward{char name[20];/*院系名称*/int totalnum;/*项目总数*/int num973;/*973项目数*/int num863;/*863项目数*/float amount;/*经费数*/struct edward *next;}*pedward;/*统计2中用到的数据结构*/typedef struct kCol{char name[20];/*院系名称*/int aking;char beiler[15];/*院系负责人*/struct kCol *next;char call[15];/*负责人电话号码*/pKeyno child;}kekey,*pKekey;三、程序结构四、各模块的功能1、pKekey Charge(pKekey alpha)/*这个函数将文件中的内容写入链表中*/2、pKekey temption(int aking,int aking1,int aking2,pKekey item1,pKeynoitem2,pHarden item3,pKekey alpha,int sort)/*这个函数用于向指定位置(aking)添加指定节点(item),alpha是头结点。

华中科技大学C语言课程设计实验报告

华中科技大学C语言课程设计实验报告

华中科技大学计算机科学与技术学院《C语言程序设计》课程设计基础部分实验报告题目:科技成果信息管理系统专业:计算机科学与技术班级:1204学号:姓名:成绩:指导教师:目录一、系统功能结构设计 (1)二、数据结构设计 (1)三、程序结构 (4)四、函数原型及功能 (9)五、试验结果 (13)六、实验体会 (29)七、附录1:参考文献 (31)八、附录2:程序清单 (31)一、系统功能结构设计航科技成果信息管理系统由五大功能模块组成:文件模块,编辑模块,查询模块,统计模块,帮助模块。

如下图所示:二、数据结构设计1.单位信息链结点结构(DEPT_NODE)及用法typedef struct dept_node{char number[8];/*单位编号*/char name[30];/*单位名称*/char PIC[20];/*负责人*/struct dept_node *next;/*指向下一结点*/struct archs_node *achs;/*指向科技成果信息链结点的指针*/GtkTreeIter iter;/*treeview 中对应treeiter*/}DEPT_NODE;2.科技成果信息链结点结构(ACHS_NODE)及用法typedef struct achs_node {char number[12];/*成果编号*/char name[50];/*成果名称*/char field[20];/*所属技术领域*/char first_dept_name[30];/*第一完成单位*/char first_dept_number[8];/*第一完成单位编号*/char first_member_name[20];/*第一完成人*/char award_name[30];/*获奖名称*/char award_level[10];/*获奖档次*/char award_grade[10];/*获奖等级*/struct arhs_node *next;/*指向下一节点*/struct member_node *members;/*指向完成人员信息结点的指*/GtkTreeIter iter;/*treeview 中对应treeiter*/}ACHS_NODE;中文字段名类型及长度变量名举例成果编号char[12]numbe 200703150001成果名称char[40]name The_method_of_study 所属技术领域char[20]fieldcomputer第一完成单位char[30]first_dept_name Huazhong_university_of _sci&tech 第一完成单位编号first_dept_numberfirst_dept_number 43007401第一完成人char[20]first_member_name Lu_zhengding获奖名称char[30]award_name Natural_science_of_hub ie_province 获奖档次char[10]award_levelprovince/*省级*/中文字段名类型及长度变量名举例单位编号char[8]number 43007401单位名称char[30]name Huazhong_university_of_sci&tech 负责人char[20]PICLi_peigeng获奖等级int award_grade1/*一等奖*/3.完成人员信息链结点结构(MEMBER_NODE)及用法typedef struct member_node{char number[18];/*身份证号*/char name[20];/*姓名*/char dept_name[30];/*工作单位*/char sex[4];/*性别*/int age;/*年龄*/char title[15];/*职称*/int rank;/*成果排名*/char achs_name[40];/*所属成果名称*/struct member_node*next;/*指向下一个结点*/GtkTreeIter iter;/*treeview中对应treeiter*/}MEMBER_NODE;中文字段名类型及长度举例姓名char[20]number Lu_zhengding身份证号char[18]name420111************工作单位char[30]dept_name Huazhong_university_of_sci&tech 性别char sex m年龄int age60职称char[15]title professor成果排名int rank1所属成果名称char[40]achs_name The_method_of_study4.三方向的十字交叉链表结构……5.登陆窗体控件结构体(wgt)及用法struct login_widget{GtkWidget*window;//主窗体GtkWidget*label_tips;//用于信息提示的标签GtkWidget*button_login;//两个按钮,一个点击后登录,一个点击后退出GtkWidget*button_exit;GtkWidget*entry_username;//两个文本框,用于输入用户名和密码GtkWidget*entry_pwd;GtkWidget*label_username;//两个标签用于显示username文本框和password文本框提示GtkWidget*label_pwd;GtkWidget*vbox;//垂直布局盒子,包含以下三个水平布局盒子GtkWidget*hbox_username;//包含用户名提示标签和用户名文本框,下面的HBOX作用类似GtkWidget*hbox_pwd;GtkWidget*hbox_button;}wgt;说明:将登陆窗体相关控件独立成一个结构体6.指向3种节点的指针联合及用法typedef union nodep{struct dept_node*dept;struct achs_node*achs;struct member_node*member;}nodep;说明:用于3种结构都会用到但不会同时用到的情形7.两个传递参数的结构及其用法struct nodecreate{GtkWidget*window;GtkWidget*entry[9];nodep unp;int type;};struct query_judge{GtkWidget*entry;int flag;};说明:GTK信号连接g_signal_connected将函数与信号链接后之内传递一个参数给函数,所以定义这两个结构分别将几个参数结合在一起传递三、程序结构1.主程序运行流程开始登陆框出现输入用户名与密码主界面初始化加载数据或重新添加系统功能模块的选择及运行退出系统前提示保存链表数据清理内存中的缓存信息,关闭系统结束2.数据保存流程YNYNYN开始打开航班,经停机场,经停航班信息文件P1==NULL在文件1写入一条单位信息P2==NULLP1=P1->next在文件2写入一条科技成果信息P2=p2->nextP3==NULL关闭文件退出系统在文件3写入一条完成人员信息P3=p3->next结束3.添加流程4.单位查询流程5.统计50岁以下第一完成人流程Y NY NNNY开始调用统计函数statis_func3创建一个GtkListStore ,P1=gp_headP1==NULLP1=p1->next 获取第二级链表的链头指针p2=p1->achsP2==NULLP2=p2->next P3=MEMBER_search(p2->first_member_name,p2->members)P3->age<50插入liststore结束将ListStore 传递给Statis_info 展示出来四、函数原型及功能(所有GtkWidget*button参数均为与消息链接用)1.登陆模块//功能:登录框初始化函数//输入参数://返回值:无void init_login_widget()//功能:登录验证函数,点击login按钮时调用//输入参数://返回值:无void login(GtkWidget*widget,gpointer data)2.图形界面模块/**初始化部分变量,再依次调用各函数初始化界面各部分*/int main(int argc,char*argv[])/**初始化菜单栏*/void init_menubar(GtkWidget*menubar)/**初始化目录*/void create_view_and_model(void)/**初始化显示栏*/void init_show(GtkWidget*list)/**改变状态栏及显示栏*/void on_changed(GtkWidget*widget,gpointer statusbar)//功能:将选中的节点信息在显示栏中显示出来//输入参数:iter//返回值:无int Show_Node(GtkTreeIter iter)//值传递不影响selectediter/**对应3个节点显示的3个函数,返回对应GtkListStore*/ GtkListStore*Show_Dept(char*name);GtkListStore*Show_Achs(char*name,char*P_name);GtkListStore*Show_Member(char*name,char*P_name,char*PP_name);3.文件模块//功能:读取数据文件//输入参数://返回值:re的二进制前3位记录了三个数据文件是否成功打开,1为成功int LoadData(GtkWidget*button)//功能:读取数据文件中数据到链表中//输入参数:phead单位节点头指针的地址//返回值:re的二进制前3位记录了三个数据文件是否成功打开,1为成功int LoadList(DEPT_NODE**phead)//功能:将链表中节点添加到左侧树状列表中//输入参数://返回值:void rebuildtree()//功能:存储数据文件//输入参数://返回值:flag的二进制前3位记录了三个数据文件是否成功打开,1为成功int SaveData(GtkWidget*button)//功能:将链表中数据存储在数据文件中//输入参数:phead单位节点头指针//返回值:flag的二进制前3位记录了三个数据文件是否成功打开,1为成功int SaveList(DEPT_NODE*phead)//功能:推出前提示保存//输入参数://返回值:void quit_save(GtkWidget*button)4.查询模块//功能:根据type弹出一个查询框,再分别调用对应的Query函数//输入参数:type对应枚举的几种类型//返回值:无void Query_info(GtkWidget*button,int type)//功能:查询学院//输入参数:in包含iter和名称的结构//返回值:无void Query_Dept(GtkWidget*button,struct query_judge*in)//功能:根据type弹出一个查询框,再分别调用对应的Query函数//输入参数:type对应枚举的几种类型//返回值:无void Query_info(GtkWidget*button,int type)//功能:查询完成人员//输入参数:in包含iter和名称的结构//返回值:无void Query_Member(GtkWidget*button,struct query_judge*in)//功能:展开并跳转至指定iter//输入参数:iter treeview中的一个目标iter//返回值:无void expand_select(GtkTreeIter iter)//功能:按名称搜索单位//输入参数:D_name单位名称//返回值:单位节点指针DEPT_NODE*DEPT_search(char*D_name)//功能:按名称搜索科技成果节点//输入参数:A_name科技成果节点名称,ACHS所在学院头科技成果节点指针//返回值:科技成果节点节点指针ACHS_NODE*ACHS_search(char*A_name,ACHS_NODE*ACHS)//功能:按名称搜索完成人员节点//输入参数:M_name完成人员节点名称,ACHS所属科技成果头完成人员节点指针//返回值:完成人员节点节点指针MEMBER_NODE*MEMBER_search(char*M_name,MEMBER_NODE*MEMBER)5.添加模块//功能:弹出一个输入框//输入参数:type对应枚举的几种类型//返回值:无void entry_info(GtkWidget*button,int type)//功能:添加3种节点统一函数,由entry_info确定按钮调用//输入参数://返回值:无void Add_node(GtkWidget*button,struct nodecreate*nodec)//功能:插入科技成果节点函数,由Add_Node中情况3调用//输入参数:pNew指向新节点的指针//返回值:对应单位节点指针DEPT_NODE*insert_ACHS(ACHS_NODE*pNew)//功能:插入完成人员节点函数,由Add_Node中情况4调用//输入参数:pNew指向新节点的指针//返回值:对应科技成果节点指针ACHS_NODE*insert_MEMBER(MEMBER_NODE*pNew)6.删除模块//功能:删除3种节点统一函数,由“删除”按钮调用//输入参数://返回值:无void Del_Node(GtkWidget*button)//功能:删除单位节点,由Del_Node函数case2调用//输入参数:name单位名称//返回值:int1为有错,0为正常int Del_Dept(char*name)//功能:删除科技成果节点,由Del_Node函数case2调用//输入参数:name科技成果名称,P_name对应单位名称//返回值:int1为有错,0为正常int Del_Achs(char*name,char*P_name)//功能:删除完成人员节点,由Del_Node函数case4调用//输入参数:name完成人员名称,P_name对应科技成果名称,PP_name对应单位名称//返回值:int1为有错,0为正常int Del_Member(char*name,char*P_name,char*PP_name)7.编辑模块//功能:弹出一个编辑框//输入参数://返回值:无int Edit_info(GtkWidget*button)//功能:编辑节点//输入参数://返回值:无void Edit_Node(GtkWidget*button,struct nodecreate*nodec)8.统计模块//功能:弹出一个统计框,由传入参数设置具体内容//输入参数:title统计框标题,col1第一列标题,col2第二列标题,in传入的model//返回值:无void Statis_info(char*title,char*col1,char*col2,GtkListStore*in)//功能:统计各单位科技成果数量,调用Statis_info显示统计结果//输入参数://返回值:无void statis_func1(GtkWidget*button)//功能:统计各单位完成人员成果排名,调用Statis_info显示统计结果//输入参数://返回值:无void statis_func2(GtkWidget*button)//功能:统计所有50岁以下第一完成人,调用Statis_info显示统计结果//输入参数://返回值:无void statis_func3(GtkWidget*button)9.帮助模块//功能:弹出软件信息及作者信息//输入参数://返回值:无void help_about(GtkWidget*button)五、试验结果编译环境:Ubuntu linux64位Mingw Gcc(源代码配置好后可跨平台编译)GTK版本:GTK+2.41开发IDE:Codeblocks12.111.系统登陆输对自动进入输错显示错误2.登陆成功进入主界面3.全屏模式4.读取数据5.读取成功6.添加单位(添加成功提示)7.添加科技成果8.添加完成人员9.添加错误返回信息(选中节点后点击左下角编辑按钮)弹出确认框12.查询单位查询成功,左侧已跳转至并展开机械学院查询成功,左侧已跳转至并展开网络磁盘阵列未查询到时弹出提示14.查询完成人员从头查询,跳转至并展开第一个张江点击查询,跳转至并展开第二个张江15.统计各单位科技成果总数及各类成果数16.统计各单位成果排名17.统计50岁以下第一完成人18.软件信息及作者信息19.退出前提示保存六、实验体会首先我看了一下实验书上的编程规范和几个基本模块的实现思想,但当我开始做的时候我发现光用face.c自己看不懂文本菜单操作肯定会有很多问题的,于是我想同样是学,不如直接学图形界面的开发。

C语言程序设计实习报告

C语言程序设计实习报告

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语言实习报告3篇

c语言实习报告3篇

c语言实习报告3篇c语言实习报告1在这个星期里,我们专业的学生在专业老师的带领下进行了c语言程序实践学习。

在这之前,我们已经对c语言这门课程学习了一个学期,对其有了一定的了解,但是也仅仅是停留在了解的范围,对里面的好多东西还是很陌生,更多的在运用起来的时候还是感到很棘手,毕竟,万事开头难嘛。

由于时间的关系,我们的这次实践课程老师并没有给我们详细的介绍,只是给我们简单的介绍了几个比较重要的实际操作。

包括了程序模块处理.简单界面程序.高级界面程序.程序的添加修改.用程序做一元线性回归处理以及用c语言程序来画粒度分布图等这几样比较重要的时间操作。

上机实验是学习程序设计语言必不可少的实践环节,特别是c语言灵活、简洁,更需要通过编程的实践来真正掌握它。

对于程序设计语言的.学习目的,可以概括为学习语法规定、掌握程序设计方法、提高程序开发能力,这些都必须通过充分的实际上机操作才能完成。

学习c程序设计语言除了课堂讲授以外,必须保证有不少于课堂讲授学时的上机时间。

因为学时所限,课程不能安排过多的上机实验,所以希望学生有效地利用课程上机实验的机会,尽快掌握用c语言开发程序的能力,为今后的继续学习打下一个良好的基础。

为此,我们结合课堂讲授的内容和进度,安排了12次上机实验。

课程上机实验的目的,不仅仅是验证教材和讲课的内容、检查自己所编的程序是否正确,课程安排的上机实验的目的可以概括为如下几个方面:1.加深对课堂讲授内容的理解课堂上要讲授许多关于c语言的语法规则,听起来十分枯燥无味,也不容易记住,死记硬背是不可取的。

然而要使用c语言这个工具解决实际问题,又必须掌握它。

通过多次上机练习,对于语法知识有了感性的认识,加深对它的理解,在理解的基础上就会自然而然地掌握c语言的语法规定。

对于一些内容自己认为在课堂上听懂了,但上机实践中会发现原来理解的偏差,这是由于大部分学生是初次接触程序设计,缺乏程序设计的实践所致。

学习c语言不能停留在学习它的语法规则,而是利用学到的知识编写c语言程序,解决实际问题。

华中科技大学C语言课程设计实验报告及源代码

华中科技大学C语言课程设计实验报告及源代码

课程设计报告题目:航班时刻表信息查询系统课程名称: C语言程序设计专业班级:学号:姓名:指导教师:报告日期:计算机科学与技术学院毕业设计[论文]任务书姓名:班号:专业:计算机科学与技术同组姓名:指导教师:一、课题名称航班时刻表查询系统二、主要内容建立航班时刻表查询系统,提供创建、编辑和查询等基本功能和服务。

三、任务要求收集与阅读相关文献资料,确定系统目标与范围,分析系统需求,确定系统功能;设计系统方案,完成系统实现;提交《课程设计报告》。

四、系统功能系统主要提供航班信息的快速查询、检索和统计。

应该具有①按航班、按机场等查询信息的功能;②模糊条件检索航班信息;③统计航班座次情况等。

五、系统数据系统主要涉及“航班”、“经停机场”和“经停航班” 3类信息。

六、基本要求1)、只能使用C语言,源程序要有适当的注释,使程序容易阅读;2)、要有用户界面,要求至少采用教材p215-p216类似的简易菜单,鼓励采用文本菜单界面甚至采用图形菜单界面;3)、必须使用结构和十字交叉链表等数据结构;4)、使用文件保存数据;5)、至少输出一份报表(屏幕输出即可),鼓励自行增加新功能;6)、设计测试的模拟数据,完成系统测试;7)、写实验报告(要求正规打印,A4幅面)。

前言本C语言程序课程设计报告是由wt编写的。

本课程设计主要内容包括,内容中文摘要、Abstract(英文摘要)、正文、致谢、参考文献以及附录,其中: 正文主要内容有:一、系统功能模块,主要介绍该课程设计的航班时刻表查询系统的组成功能模块有哪些;二、数据结构设计及用法说明,主要是介绍说明本航班时刻表查询系统设计时用到的一些数据信息结构的设计思路和用法;三、程序结构流程图,用流程图的方式解释本课程设计中一些功能函数的设计思路和实现方法;四、各模块的功能,主要展示了本系统最终功能的解释说明;五、试验结果,主要展示了本航班时刻表查询系统最终功能的实现效果;六、体会,讲述作者在制作过程中的一些心得体会。

华中科技大学计算机系统基础实验报告

华中科技大学计算机系统基础实验报告

课程实验报告课程名称:计算机系统基础专业班级:学号:姓名:指导教师:报告日期:2016年5月24 日计算机科学与技术学院目录实验1:数据表示1.1 实验概述本实验的目的是更好地熟悉和掌握计算机中整数和浮点数的二进制编码表示。

实验中,你需要解开一系列编程“难题”——使用有限类型和数量的运算操作实现一组给定功能的函数,在此过程中你将加深对数据二进制编码表示的了解。

实验语言:c; 实验环境: linux1.2 实验内容需要完成 bits.c 中下列函数功能,具体分为三大类:位操作、补码运算和浮点数操作。

1.3 实验设计源码如下:/** lsbZero - set 0 to the least significant bit of x* Example: lsbZero(0x87654321) = 0x87654320* Legal ops: ! ~ & ^ | + << >>* Max ops: 5* Rating: 1*/int lsbZero(int x) {//x右移一位再左移一位实现把最低有效位置0x = x>>1;x = x<<1;return x;}/** byteNot - bit-inversion to byte n from word x* Bytes numbered from 0 (LSB) to 3 (MSB)* Examples: getByteNot(0x12345678,1) = 0x1234A978* Legal ops: ! ~ & ^ | + << >>* Max ops: 6* Rating: 2*/int byteNot(int x, int n) {//x第n个字节每位都和1异或实现取反int y = 0xff;n = n<<3;y = y<<n;x = (x^y);return x;}/** byteXor - compare the nth byte of x and y, if it is same, return 0, if not, return 1* example: byteXor(0x12345678, 0x87654321, 1) = 1* byteXor(0x12345678, 0x87344321, 2) = 0* Legal ops: ! ~ & ^ | + << >>* Max ops: 20* Rating: 2*/int byteXor(int x, int y, int n) {//把x和y的第n个字节取出来异或,再转换为逻辑的0和1n = n<<3;x = x>>n;y = y>>n;x = x&(0xff);y = y&(0xff);return !!(x^y);}/** logicalAnd - x && y* Legal ops: ! ~ & ^ | + << >>* Max ops: 20* Rating: 3*/int logicalAnd(int x, int y) {//把x和y分别转化为逻辑的0和1,再相与x = (!(!x))&(!(!y));return x;}/** logicalOr - x || y* Legal ops: ! ~ & ^ | + << >>* Max ops: 20* Rating: 3*/int logicalOr(int x, int y) {//把x和y分别转化为逻辑的0和1,再相或x = (!(!x))|(!(!y));return x;}/** rotateLeft - Rotate x to the left by n* Can assume that 0 <= n <= 31* Examples: rotateLeft(0x87654321,4) = 0x76543218* Legal ops: ~ & ^ | + << >> !* Max ops: 25* Rating: 3*/int rotateLeft(int x, int n) {//先构造低n位为1,高(32-n)位为0的数z,x左移n位后的数加上x右移(32-n)位的数&z即可int z;z = ~(((1<<31)>>31)<<n);x = ((x>>(32+(~n+1)))&z)+(x<<n);return x;}/** parityCheck - returns 1 if x contains an odd number of 1's* Examples: parityCheck(5) = 0, parityCheck(7) = 1* Legal ops: ! ~ & ^ | + << >>* Max ops: 20* Rating: 4*/int parityCheck(int x) {//每次将数的低半数位与高半数位比较,再把y右移31位,最后把y转化为逻辑的0和1int y;y = x<<16;y = y^x;y = y^(y<<8);y = y^(y<<4);y = y^(y<<2);y = y^(y<<1);y = y>>31;return !(!y);}/** mul2OK - Determine if can compute 2*x without overflow* Examples: mul2OK(0x30000000) = 1* mul2OK(0x40000000) = 0** Legal ops: ~ & ^ | + << >>* Max ops: 20* Rating: 2*/int mul2OK(int x) {//把x第31位和30位分别和1做按位与,再异或,再和1异或int m;m = ((x>>31)&0x1)^((x>>30)&0x1);return m^0x1;}/** mult3div2 - multiplies by 3/2 rounding toward 0,* Should exactly duplicate effect of C expression (x*3/2),* including overflow behavior.* Examples: mult3div2(11) = 16* mult3div2(-9) = -13* mult3div2(1073741824) = -536870912(overflow)* Legal ops: ! ~ & ^ | + << >>* Max ops: 12* Rating: 2*/int mult3div2(int x) {//左移一位再+x即x*3,右移一位的时候,当y的最高位和最低位都为0时还要+1int y = (x<<1)+x;y = (y>>1)+(((y>>31)&1)&(((y<<31)>>31)&1));return y;}/** subOK - Determine if can compute x-y without overflow* Example: subOK(0x80000000,0x80000000) = 1,* subOK(0x80000000,0x70000000) = 0,* Legal ops: ! ~ & ^ | + << >>* Max ops: 20* Rating: 3*/int subOK(int x, int y) {//x的最高有效位和y的最高有效位不同且x和(x-y)的最高位不同才能判断溢出int m = (x>>31)&1;int n = (y>>31)&1;x = (m^n)&(m^(((x+(~y+1))>>31)&1));return (!x);}/** absVal - absolute value of x* Example: absVal(-1) = 1.* You may assume -TMax <= x <= TMax* Legal ops: ! ~ & ^ | + << >>* Max ops: 10* Rating: 4*/int absVal(int x) {//x最高位为0时就是x,最高位为1时是~x+1int y = x>>31;x = (y&(~x+1))+((~y)&x);return x;}/** float_abs - Return bit-level equivalent of absolute value of f for * floating point argument f.* Both the argument and result are passed as unsigned int's, but* they are to be interpreted as the bit-level representations of* single-precision floating point values.* When argument is NaN, return argument..* Legal ops: Any integer/unsigned operations incl. ||, &&. also if, while* Max ops: 10* Rating: 2*/unsigned float_abs(unsigned uf) {int x=uf&(~(1<<31));if(x>0x7f800000){return uf;}else return x;}/** float_f2i - Return bit-level equivalent of expression (int) f* for floating point argument f.* Argument is passed as unsigned int, but* it is to be interpreted as the bit-level representation of a* single-precision floating point value.* Anything out of range (including NaN and infinity) should return * 0x80000000u.* Legal ops: Any integer/unsigned operations incl. ||, &&. also if, while* Max ops: 30* Rating: 4*/int float_f2i(unsigned uf) {unsigned num=0x80000000;int x=(uf&0x007fffff)^0x00800000;int order=0;order=(uf&0x7f800000)>>23;if(order>158){return num;}if(order<127) return 0;else if(((uf>>31)&1)==1){if(order>150){return ~(x<<(order-150))+1;}else return ~(x>>(150-order))+1;}else{if(order>150) return x<<(order-150); else return x>>(150-order);}}1.4 实验过程编写源码,运行btest,得出实验结果。

C语言课程设计报告2

C语言课程设计报告2

华中科技大学计算机科学与技术学院C语言课程设计报告题目: 模拟器和汇编程序的设计专业:计算机科学与技术班级:学号:姓名:成绩:指导教师:李开完成日期:2012年10月15日目录一、系统需求分析 (1)二、总体设计 (6)三、数据结构设计 (7)四、详细设计 (9)五、系统实现 (13)六、运行测试与结果分析 (42)七、总结 (44)八、参考文献 (45)九、指导教师评语 (46)一、系统需求分析Simulator and Assembler1. 用C语言编制汇编程序,将此简单计算机的汇编源程序翻译成目标代码,即机器码。

为了测试所编制汇编程序的正确性,需用以上介绍的指令集编写两个汇编源程序,汇编源程序的功能要求为:求1+2+3+…+100,并输出运算结果。

②求将” Simulator and Assembler”拷贝复制到新串并输出运算结果。

串并输出运算结果。

其中,32条指令以及伪指令和它们的功能如下:(1) 停机指令:HLT功能:终止程序运行。

(2) 无条件转移指令:JMP label功能:将控制转移至标号label处,执行标号label后的指令。

(3) 比较运算转移指令:CJMP label功能:如果程序状态字中比较标志位c的值为1(即关系运算的结果为真),则将控制转移至标号label处,执行标号label后的指令;否则,顺序往下执行。

(4) 溢出转移指令:OJMP功能:如果程序状态字中比较标志位o的值为1(即算术运算的结果发生溢出),则将控制转移至标号label处,执行标号label后的指令;否则,顺序往下执行。

(5) 调用子程序指令:CALL label功能:将通用寄存器A~G、程序状态字PSW、程序计数器PC中的值保存到ES,然后调用以标号label开始的子程序,将控制转移至标号label处,执行标号label后的指令。

(6) 子程序返回指令:RET功能:将ES中保存的通用寄存器A~Z、程序状态字PSW和程序字数器PC的值恢复,控制转移到子程序被调用的地方,执行调用指令的下一条指令。

C语言课程设计报告1

C语言课程设计报告1

华中科技大学计算机科学与技术学院C语言课程设计报告题目: C输入/输出库函数的程序设计专业:计算机科学与技术班级:学号:姓名:成绩:指导教师:完成日期:2012年10月15日目录一、系统需求分析 (1)二、总体设计 (1)三、详细设计 (3)四、系统实现 (6)五、运行测试与结果分析 (16)六、总结 (117)七、参考文献 (118)八、指导教师评语 (119)一、系统需求分析C输入/输出库函数的程序设计(1) 给定getchar和putchar函数,实现其它C输入输出库函数。

如:gets,puts,printf,scanf等。

并且在原函数名前加my构成新函数名。

如:mygets,myputs,myprintf,myscanf等。

对myprintf函数,其功能与printf函数相同。

但只要求支持简单的%c,%d,%s,%f,%lf格式说明。

不要求域宽控制。

对myscanf函数,其功能与scanf函数相同。

但只要求支持简单的%c,%d,%s,%f,%lf格式说明。

(2) 鼓励实现参考书[1]p241 APPENDIX B:Standard Library中B1 Input and Output: <stdio.h>中的其它库函数。

(3) 创建mylibrary.lib库,将自己实现的库函数加入到该库中。

(4) 对自行设计的每个库函数,编写实验程序,调用mylibrary.lib库自行设计的库函数,要求得到正确结果。

(5) 在设计报告中提交测试结果报告以说明调用结果。

(6) 提交详细注释的各个库函数清单,并且简短说明设计思路。

二、总体设计C输入输出库函数的程序设计(1)mygets函数用getchar函数循环依次读取输入缓冲区的字符,直到读取换行符' \n ' 后结束循环。

每读取一个字符就将该字符存到mygets函数的形参所指定的地址,同时形参指针值增加1。

读取换行符'\n' 后,存入字符'\0'。

c课程设计的实验报告

c课程设计的实验报告

c课程设计的实验报告一、教学目标本课程的教学目标是使学生掌握C语言的基本语法、数据结构和算法,培养学生编写简单程序的能力,使学生了解计算机编程的基本思维和方法,提高学生解决实际问题的能力。

具体分为以下三个部分:1.知识目标:学生能够理解并掌握C语言的基本语法、数据结构和算法,了解程序设计的基本概念和原理。

2.技能目标:学生能够运用C语言编写简单的程序,解决实际问题,培养学生的编程能力和解决问题的能力。

3.情感态度价值观目标:培养学生对计算机科学的兴趣和热情,使学生认识到计算机技术在现代社会中的重要地位和作用,提高学生学习的积极性和主动性。

二、教学内容根据教学目标,本课程的教学内容主要包括C语言的基本语法、数据结构和算法。

具体安排如下:1.C语言的基本语法:包括变量、数据类型、运算符、表达式、语句等基本概念和用法。

2.数据结构:包括数组、链表、栈、队列等基本数据结构及其操作。

3.算法:包括排序算法、查找算法、递归算法等基本算法及其实现。

三、教学方法为了实现教学目标,本课程将采用多种教学方法,包括讲授法、讨论法、案例分析法和实验法等。

1.讲授法:通过讲解C语言的基本语法、数据结构和算法,使学生掌握相关知识。

2.讨论法:学生进行小组讨论,引导学生主动思考和探索问题,提高学生的编程能力和解决问题的能力。

3.案例分析法:通过分析典型程序案例,使学生了解编程的实际应用,提高学生的编程能力和解决问题的能力。

4.实验法:安排实验室实践环节,让学生亲自动手编写程序,培养学生的编程能力和解决问题的能力。

四、教学资源为了支持教学内容和教学方法的实施,本课程将准备以下教学资源:1.教材:《C程序设计语言》(K&R)作为主教材,辅助以《C PrimerPlus》等参考书籍。

2.多媒体资料:制作课件、教学视频等,以直观展示C语言的基本语法、数据结构和算法。

3.实验设备:计算机实验室,配备必要的编程软件和调试工具,为学生提供实践编程的环境。

华中科技大学C语言实验与课程设计上机实验报告汇总(1~8全部)

华中科技大学C语言实验与课程设计上机实验报告汇总(1~8全部)

华中科技大学C语言实验与课程设计实验报告计算机科学与技术学院指导老师:目录1 表达式和标准输入输出实验 (3)2 流程控制实验 (11)3 函数程序与结构实验 (20)4 编译预处理实验 (28)5 数组实验 (35)6 指针实验 (42)7 结构与联合实验 (52)8 文件实验 (61)华中科技大学C语言实验与课程设计实验报告CS1408赵晓雁1 表达式和标准输入与输出实验1.1 实验目的(1) 熟练掌握各种运算符的运算功能,操作数的类型,运算结果的类型及运算过程中的类型转换,重点是C语言特有的运算符,例如位运算符,问号运算符,逗号运算符等;熟记运算符的优先级和结合性。

(2)掌握scanf 和printf 函数的用法。

(3)掌握简单C程序(顺序结构程序)的编写方法。

1.2 实验内容及结果1.2.1.源程序改错下面给出了一个简单C语言程序例程,用来完成以下工作:(1)输入华氏温度f,将它转换成摄氏温度C后输出;(2)输入圆的半径值r,计算并输出圆的面积s;(3)输入短整数k、p,将k的高字节作为结果的低字节,p的高字节作为结果的高字节,拼成一个新的整数,然后输出;在这个例子程序中存在若干语法和逻辑错误。

要求参照2.1.3和2.1.4的步骤对下面程序进行调试修改,使之能够正确完成指定任务。

程序代码:#include<stdio.h>#define PI 3.14159;voidmain( void ){int f ;short p, k ;double c , r , s ;/* for task 1 */printf(“Input Fahrenheit:” ) ;scanf(“%d”, f ) ;c = 5/9*(f-32) ;printf( “ \n %d (F) = %.2f (C)\n\n ”, f, c ) ;/* for task 2 */printf("input the radius r:");scanf("%f", &r);s = PI * r * r;printf("\nThe acreage is %.2f\n\n",&s);/* for task 3 */printf("input hex int k, p :");scanf("%x %x", &k, &p );3处的语句,使之实现两数对调的操作。

华中科技大学计算机学院C 实验报告 实验五

华中科技大学计算机学院C  实验报告 实验五

课程实验报告课程名称:面向对象程序设计实验名称:面向对象的整型队列编程院系:计算机科学与技术专业班级:CS1209班学号:姓名:指导教师:李春花2015年01月22日一、需求分析1.题目要求整型队列是一种先进后出的存储结构,对其进行的操作通常包括判断队列是否为空、向队列顶添加一个整型元素、出队列等。

整型队列类型及其操作函数采用面向对象的C++语言定义,请将完成上述操作的所有函数采用C++编程,然后写一个main函数对队列的所有操作函数进行测试。

注意,请用实验三的SATCK组合形成新的类QUEQUE。

请说明如果删掉virtual有什么不同。

class QUEUE{STACK s1,s2;public:QUEUE(int m);//初始化队列:每个栈最多m个元素QUEUE(const QUEUE&s);//用队列s拷贝初始化队列virtual operator int()const;//返回队列的实际元素个数virtual QUEUE&operator<<(int e);//将e入队列,并返回队列virtual QUEUE&operator>>(int&e);//出队列到e,并返回队列virtual QUEUE&operator=(const QUEUE&s);//赋s给队列,并返回被赋值的队列virtual void print()const;//打印队列virtual~QUEUE();//销毁队列};2.需求分析采用面向对象的C++语言定义,构建整型队列并对其进行的操作通常包括判断队列是否为空、向队列顶添加一个整型元素、出队列等,再写一个main函数对队列的所有操作函数进行测试。

二、系统设计用两个栈实现队列,先判栈S2是否为空,如果为空,对S1进行入栈操作,如果不是空,栈S2数据元素倒入到S1,然后对S1进行入栈操作。

出队列时。

华中科技大学计算机学院C 实验报告 实验二

华中科技大学计算机学院C  实验报告 实验二

void print( ) const;
//打印栈
~STACK( );
//销毁栈
};
2. 需求分析
采用面向对象的 C++语言定义整型栈,对其进行的操作通常包括判断栈是否为空、向栈顶 添加一个整型元素、出栈等。
二、系统设计
概要设计
介绍设计思路、原理。将一个复杂系统按功能进行模块划分、建立模块的层次结构及调 用关系、确定模块间的接口及人机界面等。
STACK& push(int e); //将 e 入栈,并返回栈
STACK& pop(int &e); //出栈到 e,并返回栈
STACK& assign(const STACK&s); //赋 s 给栈,并返回被赋值的栈
void print()const;
//打印栈
~STACK();
//销毁栈
};
-6-
面向对象程序设计实验报告
int t,x,x2,e,e3,e4; cout<<"请输入栈的最大容量 m:\n"; cin>>m; STACK st1(m); STACK st2(st1); cout<<"初始化栈:最多"<<m<<"个元素完成\n 用栈 s 拷贝初始化栈完成\n";
Sleep(3000); do { system("cls"); menu(); cout<<"请输入序号:\n"; cin>>op; switch(op) { case 1: t=st1.size(); cout<<"当前栈的大小为: "<<t; getchar();getchar(); break; case 2:

(完整版)C语言课程设计报告34031157

(完整版)C语言课程设计报告34031157

华中科技大学计算机科学与技术学院《C语言程序设计》课程设计实验报告题目:C语言学生信息管理系统专业:计算机技术班级: 11级学号:姓名:指导教师:甘早斌说明1、设计的目的1)复习巩固C语言的基础知识,进一步加深对C语言编程的理解和掌握;2)利用所学知识,理论和实际结合,利用资源,采用模块化的结构,使用模仿修改自主设计相结合的方法,锻炼学生综合分析解决实际问题的编程能力;3)培养学生在项目开发中团队合作精神、创新意识及实战能力。

2、设计的任务根据学生的实际情况,进行分组选题。

主要的课程设计题目如下(学生也可自主选题):1.同学之间的通讯录2、学生信息管理系统3、设计要求与设计报告设计要求:1、任选上述题目之一,或自选题目。

2、模块化的程序设计3、锯齿形的程序书写格式。

4、必须通过编译连接运行设计报告:1、设计目的和任务2、总体设计:包括程序设计组成框图、流程图。

3、详细设计:包括模块功能说明:函数功能、入口及出口参数说明,函数调用关系描述等。

4、调试与测试:包括调试方法,测试结果分析与讨论,测试过程中遇到的主要问题及采取的解决措施。

5、源程序清单和执行结果:清单中应有足够的注释。

设计目的和任务设计目的:(1)基本掌握面向过程程序设计的基本思路和方法;(2)达到熟练掌握C语言的基本知识和技能;(3)能够利用所学的基本知识和技能,解决简单的程序设计问题程序功能:(1). 学生基本信息及成绩所选科目成绩的录入。

(2). 基本信息的查询与修改。

(3). 对学生成绩进行排序(4) 对所开课程的成绩分析(求其平均成绩,最高分和最低分);(5). 对学生考试成绩进行排名;(6). 保存于读取文件(7). 对学生成绩的追加与删除对应子函数与流程图void creatlist();*调用创建链表函数*/void loadlist();/*从文件调入记录函数*/void searchlist() /*调用成绩查询函数*/void dellist()/*调用删除学生资料函数*/void addlist();break/*调用追加学生资料函数*/ void printlist(head) /*调用显示学生资料函数*/ void statisticslist(head);/*调用统计函数*/void savelist()/*调用保存函数*/void taxislist()/*调用排序函数*/exit(0)/*退出系统,返回主界面*/运行界面主界面保存界面成绩查询界面显示个人各科成绩对成绩的统计按总分与平均分删除界面排序界面(可按学号姓名以及各科成绩排序)对学生的追加源代码#include <malloc.h>#include <stdio.h>#include <stdlib.h>#define LEN sizeof(struct scorenode)#define DEBUG#include <string.h>struct scorenode /*====构造结构开始======*/{int number;char name[10];float C;float Math;float English;struct scorenode *next;};typedef struct scorenode score;int n,k;/*=============================================================== ===============================*/score *creatlist(void)/*函数creatlist,功能:创建链表,此函数带回一个指向链表头的指针*/{score*head;score *p1,*p2,*p3,*max;int i,j;float fen;char t[10];n=0;p1=p2=p3=(score *)malloc(LEN);head=p3; /*开辟一个新单元*/printf("请输入学生资料,输0退出!\n");repeat1:printf("请输入学生学号(学号应大于0):");/*输入学号,学号应大于0*/scanf("%d",&p1->number);while(p1->number<0){getchar();printf("输入错误,请重新输入学生学号:");scanf("%d",&p1->number);}if(p1->number==0)goto end;/*当输入的学号为0时,转到末尾,结束创建链表*/else{p3=head;if(n>0){for(i=0;i<n;i++){if(p1->number!=p3->number)p3=p3->next;else{printf("学号重复,请重输!\n");goto repeat1;/*当输入的学号已经存在,程序报错,返回前面重新输入*/}}}}printf("请输入学生姓名:");scanf("%s",&p1->name);printf("请输入c成绩(0~100):"); /*0-100*/scanf("%f",&p1->C);while(p1->C<0||p1->C>100){getchar();printf("输入错误,请重新输入c成绩");scanf("%f",&p1->C);}printf("请输入高数成绩(0~100):");scanf("%f",&p1->Math);while(p1->Math<0||p1->Math>100){getchar();printf("输入错误,请重新输入高数成绩");scanf("%f",&p1->Math);}printf("请输入英语成绩(0~100):");scanf("%f",&p1->English);while(p1->English<0||p1->English>100){getchar();printf("输入错误,请重新输入英语成绩");scanf("%f",&p1->English);}head=NULL;while(p1->number!=0){n=n+1;if(n==1)head=p1;elsep2->next=p1;p2=p1;p1=(score *)malloc(LEN);printf("请输入学生资料,输0退出!\n");repeat2:printf("请输入学生学号(学号应大于0):");scanf("%d",&p1->number);/*输入学号,学号应大于0*/ while(p1->number<0)getchar();printf("输入错误,请重新输入学生学号:");scanf("%d",&p1->number);}if(p1->number==0)goto end;/*当输入的学号为0时,转到末尾,结束创建链表*/ else{p3=head;if(n>0){for(i=0;i<n;i++){if(p1->number!=p3->number)p3=p3->next;else{printf("学号重复,请重输!\n");goto repeat2;/*当输入的学号已经存在,程序报错,返回前面重新输入*/}}}printf("请输入学生姓名:");scanf("%s",&p1->name);/*输入学生姓名*/printf("请输入c成绩(0~100):");scanf("%f",&p1->C);/*输入各科成绩,成绩应在0-100,并直到输入正确为止*/while(p1->C<0||p1->C>100){getchar();printf("输入错误,请重新输入c成绩");scanf("%f",&p1->C);}printf("请输入高数成绩(0~100):");scanf("%f",&p1->Math);while(p1->Math<0||p1->Math>100){getchar();printf("输入错误,请重新输入高数成绩");scanf("%f",&p1->Math);}printf("请输入英语成绩(0~100):");scanf("%f",&p1->English);while(p1->English<0||p1->English>100){getchar();printf("输入错误,请重新输入英语成绩");scanf("%f",&p1->English);}}end: p1=head;p3=p1;for(i=1;i<n;i++){for(j=i+1;j<=n;j++){max=p1;p1=p1->next;if(max->number>p1->number){k=max->number;max->number=p1->number;p1->number=k;/*交换前后结点中的学号值,使得学号大者移到后面的结点中*/strcpy(t,max->name);strcpy(max->name,p1->name);strcpy(p1->name,t);/*交换前后结点中的姓名,使之与学号相匹配*/fen=max->C;max->C=p1->C;/*交换前后结点中的c成绩,使之与学号相匹配*/fen=max->Math;max->Math=p1->Math;p1->Math=fen;/*交换前后结点中的高数成绩,使之与学号相匹配*/fen=max->English;max->English=p1->English;p1->English=fen;/*交换前后结点中的英语成绩,使之与学号相匹配*/}}max=head;p1=head;/*重新使max,p指向链表头*/}p2->next=NULL;/*链表结尾*/printf("输入的学生数为:%d个!\n",n);return(head);}/*=============================================================== =================================*//*=============================================================== ==================================*/score *loadlist(score *head)/*函数loadlist,功能:从文件读入学生记录*/{score *p1,*p2;int m=0;char filepn[10];FILE *fp;printf("请输入文件路径及文件名:");scanf("%s",filepn);if((fp=fopen(filepn,"r+"))==NULL){printf("不能打开文件!\n");return 0;}fscanf(fp," 学习成绩管理系统\n");fscanf(fp,"作者: 班级:11级计算机学号:\n");fscanf(fp," -----\n");fscanf(fp,"|学号\t|姓名\t|C\t|高数\t|英语\t|\n");fscanf(fp," -----\n");/*读入表格域*/printf(" 学生成绩管理系统\n");printf(" 作者: 班级:11级计算机学号:\n");printf("-----\n");printf("|学号\t|姓名\t|C\t|高数\t|英语\t|\n");printf("-----\n");/*打印表格域*/m=m+1;if(m==1){p1=(score *)malloc(LEN); /*开辟一个新单元*/fscanf(fp,"%d%s%f%f%f",&p1->number,p1->name,&p1->C,&p1->Math,&p1->En glish);printf("|%d\t|%s\t|%.1f\t|%.1f\t|%.1f\t|\n",p1->number,p1->name,p1->C,p1->Math,p 1->English);/*文件读入与显示*/head=NULL;do{n=n+1;if(n==1) head=p1;else p2->next=p1;p2=p1;p1=(score *)malloc(LEN); /*开辟一个新单元*/fscanf(fp,"%d%s%f%f%f\n",&p1->number,p1->name,&p1->C,&p1->Math,&p1->E nglish);printf("|%d\t|%s\t|%.1f\t|%.1f\t|%.1f\t|\n",p1->number,p1->name,p1->C,p1->Math,p 1->English);}while(!feof(fp));p2->next=p1;p1->next=NULL;n=n+1;}printf("-----\n");/*表格下线*/fclose(fp);/*结束读入,关闭文件*/return (head);}/*=============================================================== ===============================*//*=============================================================== ===============================*/score *addlist(score *head,score *stu)/*函数addlist,功能:追加学生资料,并且将所有学生资料按学号排序*/{score *p0,*p1,*p2,*p3,*max;int i,j;float fen;char t[10];p3=stu=(score *)malloc(LEN);/*开辟一个新单元*/printf("\n输入要增加的学生的资料!");repeat4:printf("请输入学生学号(学号应大于0):");scanf("%d",&stu->number);while(stu->number<0)/*输入学号,学号应大于0*/{getchar();printf("输入错误,请重新输入学生学号:");scanf("%d",&stu->number);}/*输入错误,重新输入学号*/if(stu->number==0)goto end2;/*当输入的学号为0时,转到末尾,结束追加*/ else{p3=head;if(n>0){for(i=0;i<n;i++){if(stu->number!=p3->number)p3=p3->next;else{printf("学号重复,请重输!\n");goto repeat4;/*当输入的学号已经存在,程序报错,返回前面重新输入*/}}}}/******************************************************/printf("输入学生姓名:");scanf("%s",stu->name); /*输入学生姓名*/printf("请输入c成绩(0~100):");scanf("%f",&stu->C); /*输入各科成绩,成绩应在0-100,直到输入正确*/ while(stu->C<0||stu->C>100){getchar();printf("输入错误,请重新输入c成绩");scanf("%f",&stu->C);}printf("请输入高数成绩(0~100):");scanf("%f",&stu->Math);while(stu->Math<0||stu->Math>100){getchar();printf("输入错误,请重新输入高数成绩");scanf("%f",&stu->Math);}printf("请输入英语成绩(0~100):");。

华中科技大学c语言课程设计

华中科技大学c语言课程设计

华中科技大学c语言课程设计一、课程目标知识目标:1. 理解C语言的基本语法结构,掌握变量定义、数据类型、运算符和表达式;2. 学会使用C语言进行顺序、选择和循环结构编程;3. 掌握函数定义、声明和调用的方法,理解局部变量和全局变量的作用域;4. 理解数组、字符串、指针的使用,并能运用这些知识解决实际问题。

技能目标:1. 能够编写简单的C程序,实现输入输出、数据处理和逻辑控制等功能;2. 能够阅读和分析C程序代码,理解程序结构和执行过程;3. 学会使用调试工具,如GDB,对程序进行调试和排错;4. 培养良好的编程习惯,如代码规范、注释清晰等。

情感态度价值观目标:1. 培养学生对计算机编程的兴趣,激发学生的创造力和创新精神;2. 培养学生面对编程挑战时的耐心、细心和毅力,增强解决问题的信心;3. 培养学生团队合作意识,学会与他人分享、讨论和协作;4. 强化学生的信息安全意识,遵循法律法规,遵循道德规范,养成良好的网络素养。

课程性质:本课程为华中科技大学计算机科学与技术专业的专业基础课程,旨在使学生掌握C语言的基本知识和编程技能,为后续课程打下坚实基础。

学生特点:学生具备一定的计算机操作能力和逻辑思维能力,但对编程知识尚处于起步阶段,需要通过实践和案例教学逐步提高。

教学要求:结合课本内容,注重理论与实践相结合,以案例驱动、任务导向的方式进行教学,提高学生的编程能力和实际应用能力。

同时,关注学生的个体差异,因材施教,激发学生的学习兴趣和潜能。

通过课后作业、上机实践和项目开发等环节,评估学生的学习成果,确保课程目标的实现。

二、教学内容本课程教学内容依据课程目标,结合教材《C程序设计》进行如下安排:1. C语言概述:介绍C语言的发展历程、特点和应用领域,理解C语言在计算机编程中的地位和作用。

教学内容:第一章 C语言概述2. 基本语法和数据类型:讲解变量定义、数据类型、常量和变量、运算符和表达式。

教学内容:第二章 基本数据类型和运算符;第三章 表达式与语句3. 控制结构:学习顺序、选择(if、switch)和循环(for、while、do-while)结构。

计算机c语言实训报告(通用3篇)

计算机c语言实训报告(通用3篇)

计算机c语言实训报告(通用3篇)计算机c语言实训报告篇1一、课题名称:简单计算器设计一个简单的程序来模拟计算器的功能。

二、设计目的:1、通过理论知识与实际需求相结合,编辑解决一些日常中的实际问题,培养初步的独立分析和设计能力。

2、了解应用程序设计解决实际问题的具体过程和实现方法,掌握应用C语言进行程序设计的基本规范;3、重点掌握C语言的程序编写、函数设计、算法设计和程序调试方法;4、初步掌握系统开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能。

三、设计任务:1、通过结构体数组和共用体数组来存放输入的每一数字或运算符号的记录(包括1、2、3等数字,+、--、_、等运算符号),然后将其信息存入文件中。

输入一个算术计算式,就在屏幕上显示结果。

2、输入简单的加减乘除算术计算式,并在屏幕上显示计算结果;四、设计要求:1、用C语言实现程序设计并进行调试;2、画出查询模块的流程图;3、系统的各个功能模块要求用函数的形式实现;4、界面友好(良好的人机互交)。

5、完成设计(A4)。

五、代码设计:#include "stdio.h" main { float x,y;char operator;printf("x,yun suan fu ,y: "); scanf("%f%c%f",&x,&operator,&y); switch(operator){case '+': printf("%.2f+%.2f=%.2f",x,y,x+y); break; case '-':printf("%.2f-%.2f=%.2f",x,y,x-y); break; case '_':printf("%.2f_%.2f=%.2f",x,y,x_y); break; case '/': if(y==0) printf("chushushilingwuyiyi"); elseprintf("%.2f/%.2f=%.2f",x,y,x/y); break;default: printf("yunsunfuwuxiao"); } }?七、设计总结:学习C程序这门课一个学期了,这是我们学的第一门专业课,所以作为我这个计算机系的学生来说当然十分重要,老师在第一节课说过,C语言是计算机的基础,大多数软件都需要用C语言来编写,通过一个学期的学习,使我初步掌握了一些关于这门课的知识这次的课程设计是对我们一个学期来所学的知识的综合考察,里面涉及到了我们大多数所学知识。

华中科技大学标准C语言程序设计上机试题答案及报告格式

华中科技大学标准C语言程序设计上机试题答案及报告格式

《标准C语言程序设计》上机报告实验七指针及函数结构体初步程序设计专业:班级:学号:姓名:完成日期:1一、实验目的1.进一步理解指针的概念,掌握指针变量间接地址访问的本质;2.掌握利用指向数组的指针变量表示一维数组元素及元素地址的方法;3.掌握利用指向二维数组的行指针变量表示二维数组元素及其地址的方法;4.掌握字符串的指针和指向字符串的指针变量;5.掌握指针数组和二级指针;6.熟悉通过动态内存分配实现动态数组,并体会指针在其中的作用。

7.理解函数定义、原型和调用,掌握函数参数的传递(传值、传指针和传引用)二、实验内容及要求(鼓励一题多解)1.深入理解《上机实践训练教程》2.6实验六案例示范和有关概念文字描述中的知识点,给出你的理解。

定义指针时一定要给指针分配好应有的类型和内存空间,防止出现野指针,造成程序不能运行甚至系统崩溃。

数组名不能作为左值,它实际上是一个常量指针,不能通过str=“comrade”给字符数组str赋值。

2.输入每个学生的姓名和线性代数、通信原理和C语言课程成绩,统计每人的平均值,并按平均值降序排列,输出排列后的名次、姓名、课程名(成绩)和平均值。

(注:平均值相同者按姓名的字母表顺序排列)(要求用结构体数据类型实现)#include <stdio.h>#include <math.h>#include <stdlib.h>#define N 3struct student{int rank;char name[20];double score[3];double aver;};void input(struct student *p,int n);void sort(struct student *p,int n);double average (struct student *p,int n);void output(struct student *p,int n,double aver);void main(){struct student stu[N];double aver;input(stu,N);sort(stu,N);aver=average(stu,N);output(stu,N,aver);}void input(struct student *p,int n){int i,j;double a;char str[20];for(i=0;i<n;i++,p++){printf("请输入考生姓名:\n");gets(p->name);printf("请依次输入学生线性代数、通信原理、c语言分数:\n");for(a=0,j=0;j<3;j++){gets(str);p->score[j]=atof(str);a+=p->score[j];}p->aver=a/3;}return;}void sort(struct student *p,int n){struct student temp;int i,j;for(i=0;i<n-1;i++){for(j=0;j<n-1-i;j++){if(p[j].aver<p[j+1].aver){temp=p[j];p[j]=p[j+1];p[j+1]=temp;}}}}double average(struct student *p,int n){int i;double temp;for(i=0,temp=0;i<n;i++)temp=temp+p[i].aver;return temp/n;}void output(struct student *p,int n,double aver){int i;printf("姓名线性代数通信原理c语言平均分\n");printf("-----------------------------------------\n");for(i=0;i<n;i++){printf("%-10s%8.2lf%8.2lf%8.2lf%8.2lf\n",p[i].name,p[i].score[0],p[i].score[1],p[i].score[2],p[i].aver);}}运行结果:3.利用指向指针的指针方法对N个整数排序并输出。

C语言课程设计报告40888

C语言课程设计报告40888

一、设计思想首先建立主函数实现功能的选择,然后通过调用函数来分别实现;1.学生信息录入功能(以文件方式保存);2.学生信息浏览功能;3.学生信息查询功能(可以按学号,班级,性别分别进行查询,用子菜单,可显示多条记录);4.学生信息删除功能(按学号进行删除);5.学生信息修改功能(按学号修改);6.不及格学生成绩汇总功能。

二.概要设计1.模块介绍程序由十一个模块组成,分别是:主菜单模块、录入信息模块、保存信息模块、浏览信息模块、查询菜单模块、按学号查询模块、按姓名查询模块、按性别查询模块、修改信息模块、删除信息模块、不及格学生信息汇总模块。

2.函数功能lr()函数是实现信息录入功能的函数;bc()函数是将录入的信息保存到文件中额函数;ll()是实现浏览功能的函数;cx()是实现信息查询功能的函数,在cx()函数调用了xuehao(); xingming(); xingbie()这三个函数,这三个函数分别实现按学号查找、按姓名查找、按性别查找学生信息的功能;sc()函数是实现删除学生信息的功能;页脚内容1xg()实现信息修改功能;hz()实现不及格学生汇总的功能3、系统流程页脚内容2页脚内容3三.详细设计1、代码#include <stdio.h>#include <string.h>#include<stdlib.h>struct student{char num[13];char name[15];char cla[10];int age;char sex[4];char bir[8];char addr[15];页脚内容4char tele[15];char course[10];int score;};int n=0;struct student stu[100]; //定义变量struct student *p;FILE *fp;void lr();void ll();void cx();void sc();void xg();void hz();void bc();void xuehao();void xingming();页脚内容5void xingbie(); //定义函数void main() //主函数{int z;printf("+---------------------------+\n");printf("| 欢迎使用学生信息管理系统|\n");printf("+---------------------------+\n");printf("提示:为保证您的操作得到保存,请按正常顺序退出系统^_^\n");do{printf("\n\t\t\t--------------------------------\n");printf("\t\t\t+ 主菜单|\n");printf("\t\t\t--------------------------------\n");printf("\t\t\t+ [1]----录入学生信息|\n");printf("\t\t\t+ [2]----浏览学生信息|\n");printf("\t\t\t+ [3]----查询学生信息|\n");页脚内容6printf("\t\t\t+ [4]----删除学生信息|\n"); printf("\t\t\t+ [5]----修改学生信息|\n"); printf("\t\t\t+ [6]----不及格学生成绩汇总|\n"); printf("\t\t\t+ [0]----退出系统|\n"); printf("\t\t\t--------------------------------\n");printf("请输入您的选择:");scanf("%d", &z);switch(z){case 0 : break;case 1 :lr();break;case 2 :ll();break;case 3 :cx();break;case 4 :sc();break;case 5 :xg();break;case 6 :hz();break; //函数调用default:printf("\n无效选项!");页脚内容7}}while(z!= 0);}void lr() //录入函数{ int y;if(n==0)p=stu;printf("--------------------\n");printf("\n\t\t请输入学生的学号:");scanf("%s",&stu[n].num);printf("\n\t\t请输入学生的姓名:");scanf("%s",&stu[n].name);printf("\n\t\t请输入学生的班级:");scanf("%s",&stu[n].cla);printf("\n\t\t请输入学生的年龄:");页脚内容8scanf("%d",&stu[n].age);printf("\n\t\t请输入学生的性别:");scanf("%s",&stu[n].sex);printf("\n\t\t请输入学生的出生年月:");scanf("%s",&stu[n].bir);printf("\n\t\t请输入学生的地址:");scanf("%s",&stu[n].addr);printf("\n\t\t请输入学生的电话:");scanf("%s",&stu[n].tele);printf("\n\t\t请输入学生的课程:");scanf("%s",&stu[n].course);printf("\n\t\t请输入学生的成绩:");scanf("%d",&stu[n].score); //输入学生的信息n++;p++;printf("请输入0以保存信息:");scanf("%d",&y);页脚内容9if(y==0)bc(); //调用函数elseprintf("无效选项");return;}void bc()/*保存函数*/{int i;if ((fp=fopen("fstudent.txt","wb"))==NULL) //打开一个只写文件,将要打开的文件的指针赋给fp,使fp 与文件相联系{printf("\n\t\t文件打开失败");exit(0);}for (i=0;i<100;i++){ fwrite(&stu[i],sizeof(struct student),1,fp);//把信息输出大奥fp所指向的文件中,返回值为写到fp文件中页脚内容10的数据项的个数}fclose(fp); //关闭fp所指的文件,有错返回非0,否则返回0 printf("\n\t\t通讯录文件已保存");printf("\n\t\t按回车键退出程序\n\t\t");}void ll()/*浏览函数*/{int i;if(n!=0){printf("\n\t\t*************** 以下为学生管理系统所有信息************");for (i=0;i<n;i++){页脚内容11printf("\n\t\t学号:%s",stu[i].num);printf("\n\t\t姓名:%s",stu[i].name);printf("\n\t\t班级:%s",stu[i].cla);printf("\n\t\t年龄:%d",stu[i].age);printf("\n\t\t性别:%s",stu[i].sex);printf("\n\t\t出生年月:%s",stu[i].bir);printf("\n\t\t地址:%s",stu[i].addr);printf("\n\t\t电话:%s",stu[i].tele);printf("\n\t\t课程:%s",stu[i].course);printf("\n\t\t成绩:%d",stu[i].score);printf("\t\t\n");}printf("\n\t\t************************************************"); }}void cx()/*查询函数*/页脚内容12{int c;do{ printf("\n");printf("+--------------------+\n");printf("| 按学号查询请按1 |\n");printf("| 按姓名查询请按2 |\n");printf("| 按性别查询请按3 |\n");printf("| 取消请按0 |\n");printf("+--------------------+\n");printf("请输入您的选择:");scanf("%d", &c);switch(c){case 0:break;case 1:xuehao();break;case 2:xingming();break;页脚内容13case 3:xingbie();break; //调用函数default:printf("\n提示:无效选项!");break;}}while(c!= 0);}void xingming()//按姓名查询{int i;int j=0;char name[15];printf("\n\t\t****************** 按姓名查找******************"); printf("\n\t\t请输入要查学生的姓名:");scanf("%s",name);页脚内容14for(i=0;i<n;i++)if(strcmp(name,stu[i].name)==0) //比较两个字符串,若相等,返回0 {j++;printf("\n\t\t************** 以下是您查找的学生信息**********"); printf("\n\t\t学号:%s",stu[i].num);printf("\n\t\t姓名:%s",stu[i].name);printf("\n\t\t班级:%s",stu[i].cla);printf("\n\t\t年龄:%d",stu[i].age);printf("\n\t\t性别:%s",stu[i].sex);printf("\n\t\t出生年月:%s",stu[i].bir);printf("\n\t\t地址:%s",stu[i].addr);printf("\n\t\t电话:%s",stu[i].tele);printf("\n\t\t课程:%s",stu[i].course);printf("\n\t\t成绩:%d",stu[i].score);printf("\n\t\t************************************************"); printf("\n\t\t是否继续查询?(y/n)");页脚内容15getchar(); //输入选择if (getchar()=='y')xingming(); //函数的递归调用return ;}if(j==0){printf("\n\t\t未查找该学生信息:");printf("\n\t\t按回车键返回菜单:");getchar();getchar();return;}printf("\n\t\t按回车键返回主菜单:");getchar();getchar();}页脚内容16void xuehao()//*按学号查询{int i;int j=0;char num[13];printf("\n\t\t****************** 按学号查找******************"); printf("\n\t\t请输入要查学生的学号:");scanf("%s",&num);for(i=0;i<n;i++)if(strcmp(num,stu[i].num)==0){j++;printf("\n\t\t************** 以下是您查找的学生信息**********"); printf("\n\t\t学号:%s",stu[i].num);printf("\n\t\t姓名:%s",stu[i].name);printf("\n\t\t班级:%s",stu[i].cla);页脚内容17printf("\n\t\t年龄:%d",stu[i].age);printf("\n\t\t性别:%s",stu[i].sex);printf("\n\t\t出生年月:%s",stu[i].bir);printf("\n\t\t地址:%s",stu[i].addr);printf("\n\t\t电话:%s",stu[i].tele);printf("\n\t\t课程:%s",stu[i].course);printf("\n\t\t成绩:%d",stu[i].score);printf("\n\t\t************************************************"); printf("\n\t\t是否继续查询?(y/n)");getchar();if (getchar()=='y')xuehao(); //函数的递归调用return ;}if(j==0){printf("\n\t\t未查找该学生信息:");页脚内容18printf("\n\t\t按回车键返回菜单:");getchar();getchar();return;}printf("\n\t\t按回车键返回主菜单:");getchar();getchar();}void xingbie()//按性别查询{int i;int j=0;char sex[4];printf("\n\t\t****************** 按性别查找******************"); printf("\n\t\t请输入要查学生的性别:");页脚内容19scanf("%s",&sex);for(i=0;i<n;i++){for(i=0;i<n;i++)if(strcmp(sex,stu[i].sex)==0){j++;printf("\n\t\t************** 以下是您查找的学生信息**********"); printf("\n\t\t学号:%s",stu[i].num);printf("\n\t\t姓名:%s",stu[i].name);printf("\n\t\t班级:%s",stu[i].cla);printf("\n\t\t年龄:%d",stu[i].age);printf("\n\t\t性别:%s",stu[i].sex);printf("\n\t\t出生年月:%s",stu[i].bir);printf("\n\t\t地址:%s",stu[i].addr);printf("\n\t\t电话:%s",stu[i].tele);printf("\n\t\t课程:%s",stu[i].course);printf("\n\t\t成绩:%d",stu[i].score);页脚内容20printf("\n\t\t************************************************"); }printf("\n\t\t是否继续查询?(y/n)");getchar();if (getchar()=='y')xingbie(); //函数的递归调用return;}if(j==0){printf("\n\t\t未查找该学生信息:");printf("\n\t\t按回车键返回菜单:");getchar();getchar();return;}printf("\n\t\t按回车键返回主菜单:");页脚内容21getchar();getchar();}void xg()/*修改函数*/{char num[13];char name[15];char cla[10];int age;char sex[4];char bir[8];char addr[15];char tele[15];char course[10];char score;int i,j,c;页脚内容22if(n!=0){printf("请输入您要修改的学生的学号:");scanf("%s", &num);printf("\n");for(i=0;i<n;i++)if(strcmp(num,stu[i].num)==0){j=i;printf("请选择您要修改的学生的信息内容:\n");printf("+--------------------------+\n");printf("| 姓名请按1 |\n");printf("| 班级请按2 |\n");printf("| 年龄请按3 |\n");printf("| 性别请按4 |\n");printf("| 出生年月请按5 |\n");printf("| 地址请按6 |\n");printf("| 电话请按7 |\n");页脚内容23printf("| 课程请按8 |\n");printf("| 成绩请按9 |\n");printf("| 取消请按0 |\n");printf("+--------------------------+\n");printf("请输入您的选择:");scanf("%d", &c);printf("\n");switch(c){case 0:break;case 1:printf("请输入新姓名:");scanf("%s",stu[j].name);strcpy(name,stu[j].name); //复制字符串,返回namebreak;case 2:printf("请输入新班级:");scanf("%s",stu[j].cla);页脚内容24strcpy(cla,stu[j].cla);break;case 3:printf("请输入新年龄:");scanf("%d",&stu[j].age);strcpy(age,stu[j].age);break;case 4:printf("请输入新性别:");scanf("%s",stu[j].sex);strcpy(sex,stu[j].sex);break;case 5:printf("请输入新出生年月:");scanf("%s",stu[j].bir);strcpy(bir,stu[j].bir);break;case 6:printf("请输入新地址:");scanf("%s",stu[j].addr);strcpy(addr,stu[j].addr);break;case 7:printf("请输入新电话:");scanf("%s",stu[j].tele);strcpy(tele,stu[j].tele);break;页脚内容25case 8:printf("请输入新课程:");scanf("%s",stu[j].course);strcpy(course,stu[j].course);break;case 9:printf("请输入新成绩:");scanf("%d",stu[j].score);strcpy(score,stu[j].score);break;default:printf("\n无效选项!");break;}}printf("\n\t\t按回车键返回主菜单:");getchar();getchar(); //输入回车键return;}elseprintf("提示:无学生数据,请输入数据!");页脚内容26}void sc()/*删除函数*/{int e=0;char name[15];int j;int i;char id[20];printf("\n\t\t请输入要删除联系人姓名:");scanf("%s",name);getchar();for (i=0;i<n;i++){if (strcmp(stu[i].name,name)==0){printf("\n\t\t以下是您要删除的学生纪录:");页脚内容27e++;printf("\n\t\t****************************");printf("\n\t\t学号:%s",stu[i].num);printf("\n\t\t姓名:%s",stu[i].name);printf("\n\t\t班级:%s",stu[i].cla);printf("\n\t\t年龄:%d",stu[i].age);printf("\n\t\t性别:%s",stu[i].sex);printf("\n\t\t出生年月:%s",stu[i].bir);printf("\n\t\t地址:%s",stu[i].addr);printf("\n\t\t电话:%s",stu[i].tele);printf("\n\t\t课程:%s",stu[i].course);printf("\n\t\t成绩:%d",stu[i].score);printf("\n\t\t****************************");printf("\n\t\t是否删除?(y/n)");if (getchar()=='y'){for (j=i;j<n;j++)页脚内容28stu[j]=stu[j+1];n--;printf("\n\t\t删除成功");printf("\n\t\t是否继续删除?(y/n)");getchar();if (getchar()=='y')sc();}}}if (e==0){printf("\n\t\t没有该学生的纪录");printf("\n\t\t是否继续删除?(y/n)");if (getchar()=='y')sc(); //函数的递归调用}页脚内容29}void hz()/*汇总函数*/{int score;int i;int *p;for(i=0;i<n;i++){for(p=&stu[i].score;p<(stu[i].score+n);p++) //用指针变量指向数组元素printf("%d",*p); //*p即为学生的成绩if(*p<60){printf("\n\t\t************** 以下是不及格学生的信息**********"); printf("\n\t\t学号:%s",stu[i].num);printf("\n\t\t姓名:%s",stu[i].name);printf("\n\t\t班级:%s",stu[i].cla);printf("\n\t\t年龄:%d",stu[i].age);printf("\n\t\t性别:%s",stu[i].sex);页脚内容30printf("\n\t\t出生年月:%s",stu[i].bir);printf("\n\t\t地址:%s",stu[i].addr);printf("\n\t\t电话:%s",stu[i].tele);printf("\n\t\t课程:%s",stu[i].course);printf("\n\t\t成绩:%d",stu[i].score);printf("\n\t\t************************************************"); }}}四、总结页脚内容31在这为期一周的课程设计中,我发现了很多问题,也正是因为发现了问题,我也学到了很多东西。

华科C语言课程设计报告

华科C语言课程设计报告

华中科技大学计算机科学与技术学院C语言课程设计报告题目:菜市场商品销售管理系统专业:计算机科学与技术专业班级:学号:姓名:成绩:指导教师:完成日期:2016年10月7日目录一、系统需求分析 (1)1.1数据维护功能 (1)1.2数据查询功能 (1)1.3数据统计功能 (1)1.4数据存取功能 (2)1.5辅助功能 (2)二、总体设计 (2)2.1文件模块 (2)2.2数据维护模块 (3)2.3数据查询模块 (4)2.4数据统计模块 (5)2.5帮助 (6)三、数据结构设计 (6)四、详细设计与系统实现 (11)4.0主程序 (11)4.1数据维护 (11)4.1.1分类信息维护 (12)4.1.2基本信息维护 (15)4.1.3销售信息维护 (19)4.2数据查询 (22)4.2.1分类信息查询 (22)4.2.2基本信息查询: (23)4.2.3销售信息查询 (25)4.3数据统计 (28)4.3.1按类别统计: (28)4.3.2按品种统计 (31)4.3.3按客户名称统计 (36)五、运行测试与结果分析 (40)5.1输入数据 (40)5.2初始化界面 (42)5.3系统主界面 (42)5.4数据维护界面 (43)5.5数据查询界面: (52)5.6数据统计界面 (57)5.7帮助模块界面 (62)六、总结 (64)七、参考文献 (65)附录1 程序源代码 (66)头文件:market.h (66)main.c文件: (74)一、系统需求分析菜市场商品销售管理系统用于管理人员对于菜市场的各类商品销售信息进行管理,主要包括商品分类信息,商品基本信息,商品销售信息等三类信息,以帮助商场管理人员及时了解产品销售情况和变化。

菜市场商品销售管理系统要求实现以下几方面的基本功能:1.1数据维护功能菜市场商品销售管理系统的基本信息主要包括以下三类:(1)商品分类信息:分类编码、分类名称等数据项。

(2)商品基本信息:商品编号、商品名称、分类码、产地、单价、售出数量等数据项。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

华中科技大学计算机科学与技术学院《C语言程序设计》课程设计实验报告题目:科研项目信息管理系统专业:计算机班级:学号:姓名:成绩:指导教师:李开完成日期:2009年10 月20 日科研项目信息管理系统一、系统功能结构模块图二、数据结构设计及其用法说明typedef struct lakey{char name[30];/*团队名称*/int total;/*自然科学基金的科研项目数*/float dudu;/*经费数*/struct lakey *next;}*plakey;/*统计3中用到的数据结构*/typedef struct emmey{char name[30];/*团队名称*/int teacher;/*老师人数*/int harden;/*项目数*/float bizhi;/*比值*/struct emmey *next;}*pemmey;/*统计4中用到的数据结构*/typedef struct kPro{char code[15];/*项目编号*/char sort;/*项目种类*/int aking1;char time[8];/*项目时间*/float dudu;/*项目经费*/int aking2;char beiler[15];/*负责人*/int aking3;char keynoName[30];/*所在团队名称*/struct kPro *next;}harden,*pHarden;typedef struct Komo{int teacher;/*老师人数*/char name[20];/*院系名称*/int student;/*学生人数*/float bizhi;/*二者比值*/struct Komo *next;}*pKomo;/*统计1中用到的数据结构,统计结果放在这个数据结构中*/typedef struct kTea{char name[30];/*团队名称*/char beiler[15];/*负责人*/int stuNum;/*学生人数*/int aking2;int coco;/*老师人数*/char colName[20];/*所在院系的名称*/int aking1;struct kTea *next;pHarden child;}keyno,*pKeyno;typedef struct edward{char name[20];/*院系名称*/int totalnum;/*项目总数*/int num973;/*973项目数*/int num863;/*863项目数*/float amount;/*经费数*/struct edward *next;}*pedward;/*统计2中用到的数据结构*/typedef struct kCol{char name[20];/*院系名称*/int aking;char beiler[15];/*院系负责人*/struct kCol *next;char call[15];/*负责人电话号码*/pKeyno child;}kekey,*pKekey;三、程序结构四、各模块的功能1、pKekey Charge(pKekey alpha)/*这个函数将文件中的内容写入链表中*/2、pKekey temption(int aking,int aking1,int aking2,pKekey item1,pKeynoitem2,pHarden item3,pKekey alpha,int sort)/*这个函数用于向指定位置(aking)添加指定节点(item),alpha是头结点。

sort控制3种添加类型*/3、pKekey reserv(int aking1,int aking2,int aking3,pKekey alpha,intsort)/*删除指定位置的节点,sort控制删除的类型*/4、pKekey tab(pKekey alpha)/*这个函数修改文本,使用时先将链表中的对象修改掉,再调用这个函数将文本库中的内容修改掉*/5、pKekey seamood(char *boss,char *name,pKekey alphaer,pKekeyresult,int sort)/*查询,sort为1表示利用院系负责人来查询,输入:char *boss,pKekey alphaer,pKekey result,int sort,sort为2表示用院系名的一部分来查询,输入:char *name,pKekey alphaer,pKekey result,int sort*/6、pKeyno foward (char *name,int num,pKekey alphaer,pKeyno result,intsort)/*查询,sort为1表示利用团队名称查询,输入:char *name,pKekey alphaer,pKeyno result,int sort,sort为2表示利用教师人数查询,输入:nt num,pKekey alphaer,pKeyno result,int sort*/7、pHarden codyssed (char *code,pKekey alphaer,pHarden result,intsort)/*查询,sort 为1表示由序列号查,此时code表示序列号,sort为2表示由名字来查,此时code表示名字*/8、void awesome(pKekey alpha,pKomo *result1,pedward *result2,plakey*result3,pemmey *result4,char *year,int sort)/*统计:sort取1,2,3,4时分别按课设是上的要求统计,其中year在2时输入*/五、试验结果1、主菜单页面2、数据处理之输入3、查询功能4、统计功能六、体会这是我第一次做这么大型的且比较复杂的一个C程序,从暑假开始边看书边慢慢尝试到如今全部做出来花费了许多时间与精力。

以前接触到的C程序设计都是最简单、最基本的编程,就连最后的期末考试也只是一些小程序,并不像课程设计这样庞大复杂。

小程序是考察我们对基本概念的熟识,而这种大程序则是考察了我们对整体构架的设计以及各种小程序的拼接,看似不难,实则会遇到许多意想不到的困难,当然,这过程当中我学到了许多。

刚开始接到任务书的时候我感到无从下手,知道应该注重链表但是仍旧无法从整体上设计出这个程序,后来经过网上的搜索资料以及和其他同学的讨论,对这个科研项目信息管理系统进行一些列分块,拆成几个部分,然后再逐个突破,这样显得有条理且方便。

接下来是真正开始动手写程序,随之而来的是一些列的问题,其中最困扰我的是十字链表,过去我们使用的一般是单向链表,虽然在此基础上建立十字链表并不困难,但是如何保存则成了一个难题,后来经过对书本的钻研解决了次问题,从中我更加了解各种文件操作函数的用法。

在所有内核做好之后,接下来就是界面的问题,最开始的时候我考虑做图形界面,但是由于时间比较紧迫,不得不放弃,只好做了一个简易菜单,菜单设计容易,可是将界面和程序内核结合起来却又是一个难题。

最后将这些函数和文件组合在一起后,终于形成了一个完整的可以运行的系统。

由于我只是C语言初学者,虽然啃过书本,但是仍能力有限,所以界面不够漂亮,有些功能也不够完善,但是我能够做出一个可以正确运行的科研项目信息管理系统已是很有成就感,尽管它不完善。

这次课程设计,巩固了我的C语言的知识,锻炼了我的动手能力,让我在这一方面有了进一步的提升。

其实,让我感触最深刻的是,学好C语言,不仅仅在于啃光书本上的知识,考试能得高分,最重要的是实践!俗语云:实践出真知。

只有动手了才会更快发现自己的错误,以便于及时改正,才能更快的提升自己的能力,纸上谈兵终究只是一段段空话,毫无实际意义!当然,不仅仅是在学习这一门语言方面有了认知,在其他方面也有了一些认识,最大的收获是写课设让我更加细心,我往往由于一个符号的错误导致程序无法运行,所以,注重细节是非常重要的。

最后,我觉得,其实C语言和其他中文、英语、日语等语言一样,虽然是由一些枯燥的字母字符组成,但是经过我们人为的设计排列,可以组成精美的东西,就像各国都有文学名作一样,C语言亦可以写出庞大复杂实用的程序系统,便于大家使用!七、参考文献《C语言程序设计》李开曹计昌卢萍著科学出版社《C语言程序设计(第二版)》谭浩强著清华大学出版社附录#include "string.h"#include "stdio.h"#include "stdlib.h"#include "conio.h"typedef struct kNod{char c;struct kNod *next;}kame,*pKame;/*辅助性数据结构*/typedef struct lakey{char name[30];/*团队名称*/int total;/*自然科学基金的科研项目数*/ float dudu;/*经费数*/struct lakey *next;}*plakey;/*统计3中用到的数据结构*/typedef struct emmey{char name[30];/*团队名称*/int teacher;/*老师人数*/int harden;/*项目数*/float bizhi;/*比值*/struct emmey *next;}*pemmey;/*统计4中用到的数据结构*/typedef struct kPro{char code[15];/*项目编号*/char sort;/*项目种类*/int aking1;char time[8];/*项目时间*/float dudu;/*项目经费*/int aking2;char beiler[15];/*负责人*/int aking3;char keynoName[30];/*所在团队名称*/ struct kPro *next;}harden,*pHarden;typedef struct Komo{int teacher;/*老师人数*/char name[20];/*院系名称*/int student;/*学生人数*/float bizhi;/*二者比值*/struct Komo *next;}*pKomo;/*统计1中用到的数据结构,统计结果放在这个数据结构中*/typedef struct kTea{char name[30];/*团队名称*/char beiler[15];/*负责人*/int stuNum;/*学生人数*/int aking2;int coco;/*老师人数*/char colName[20];/*所在院系的名称*/int aking1;struct kTea *next;pHarden child;}keyno,*pKeyno;typedef struct edward{char name[20];/*院系名称*/int totalnum;/*项目总数*/int num973;/*973项目数*/int num863;/*863项目数*/float amount;/*经费数*/struct edward *next;}*pedward;/*统计2中用到的数据结构*/typedef struct kCol{char name[20];/*院系名称*/int aking;char beiler[15];/*院系负责人*/struct kCol *next;char call[15];/*负责人电话号码*/pKeyno child;}kekey,*pKekey;FILE* orgive(FILE *in,pKekey pointer1,pKeyno pointer2,pHarden pointer3,int sort) {int c,i=0;if(sort==1){while((c=fgetc(in))!=';'){pointer1->name[i]=c;i++;}for(;i<20;i++)pointer1->name[i]='\0';i=0;while((c=fgetc(in))!=';') {pointer1->beiler[i]=c;i++;}for(;i<15;i++)pointer1->beiler[i]='\0';i=0;while((c=fgetc(in))!=';') {pointer1->call[i]=c;i++;}for(;i<15;i++)pointer1->call[i]='\0'; }else if(sort==2){while((c=fgetc(in))!=';') {pointer2->name[i]=c;i++;}for(;i<30;i++)pointer2->name[i]='\0';i=0;while((c=fgetc(in))!=';') {pointer2->beiler[i]=c;i++;}for(;i<15;i++)pointer2->beiler[i]='\0';i=0;pointer2->coco=0;c=fgetc(in);while(c!=';'&&c!='-'){pointer2->coco=pointer2->coco*10+c-'0';c=fgetc(in);}if(c=='-'){fgetc(in);fgetc(in);pointer2->coco=-1;}pointer2->stuNum=0;c=fgetc(in);while(c!=';'&&c!='-'){pointer2->stuNum=pointer2->stuNum*10+c-'0';c=fgetc(in);}if(c=='-'){fgetc(in);fgetc(in);pointer2->stuNum=-1;}while((c=fgetc(in))!=';'){pointer2->colName[i]=c;i++;}for(;i<20;i++)pointer2->colName[i]='\0';}else if(sort==3){while((c=fgetc(in))!=';'){pointer3->code[i]=c;i++;}for(;i<15;i++)pointer3->code[i]='\0';pointer3->sort=fgetc(in);fgetc(in);i=0;while((c=fgetc(in))!=';'){pointer3->time[i]=c;i++;}for(;i<8;i++)pointer3->time[i]='\0';{int k=-1;c=fgetc(in);i=0;pointer3->dudu=0;if(c!='-'){while(c!=';'){if(c!='.')pointer3->dudu=pointer3->dudu*10+c-'0';elsei=1;if(i)k++;c=fgetc(in);}while(k&&i){pointer3->dudu/=10;k--;}}else{pointer3->dudu=-1;fgetc(in);fgetc(in);fgetc(in);fgetc(in);}}i=0;while((c=fgetc(in))!=';'){pointer3->beiler[i]=c;i++;}for(;i<15;i++)pointer3->beiler[i]='\0';i=0;while((c=fgetc(in))!=';'){pointer3->keynoName[i]=c;i++;}for(;i<30;i++)pointer3->keynoName[i]='\0';}return in;}pKekey Charge(pKekey alpha)/*将文件中的内容写入链表中*/ {int position[3]={0,0,0};int input;pKekey colCurrent,colPre;FILE *in=fopen("py.txt","r");if(in==NULL){printf("Open Error!");getchar();exit(-1);}alpha=NULL;fgetc(in);while((input=fgetc(in))!=')'){pKeyno teaCurrent,teaPre;colCurrent=(pKekey)malloc(sizeof(struct kCol));colCurrent->next=NULL;colCurrent->child=NULL;if(position[0]==0)alpha=colCurrent;elsecolPre->next=colCurrent;position[0]++;in=orgive(in,colCurrent,NULL,NULL,1);colCurrent->aking=position[0];position[1]=0;while((input=fgetc(in))!='}'){pHarden proCurrent,proPre;teaCurrent=(pKeyno)malloc(sizeof(struct kTea)); teaCurrent->next=NULL;teaCurrent->child=NULL;in=orgive(in,NULL,teaCurrent,NULL,2);if(position[1]==0)colCurrent->child=teaCurrent;elseteaPre->next=teaCurrent;position[1]++;teaCurrent->aking1=colCurrent->aking;teaCurrent->aking2=position[1];position[2]=0;while((input=fgetc(in))!=']'){proCurrent=(pHarden)malloc(sizeof(struct kPro)); proCurrent->next=NULL;in=orgive(in,NULL,NULL,proCurrent,3);if(position[2]==0)teaCurrent->child=proCurrent;elseproPre->next=proCurrent;position[2]++;proCurrent->aking1=colCurrent->aking;proCurrent->aking2=teaCurrent->aking2; proCurrent->aking3=position[2];proPre=proCurrent;fgetc(in);}teaPre=teaCurrent;}colPre=colCurrent;}fclose(in);return alpha;}pKekey temption(int aking,int aking1,int aking2,pKekey item1,pKeyno item2,pHarden item3,pKekey alpha,int sort)/*这个函数用于向指定位置(aking)添加指定节点(item),alpha是头结点。

相关文档
最新文档