C语言综合实验题目.doc
C语言综合实验题目(说明:每位同学必须按时完成所指定的综合实验题目,并提交详细的实验报告。如果没有完成本次综合实验,总实验成绩以0分计,实验题目不能随意更改。综合实验报告提交截止时间7月7号,其他实验提交截止时间7月3号)一基本题目1航班售票系统(请学号末尾位为0和5的同学完成) 航班售票系统,要求完成以下功能:1)假设该民航有若干航班,要求实现增加航班和取消某个航班的功能。2)查询:根据用户提出的终到站查询航班号、售票情况等航班信息;也可根据航班号,列出该航班已订票的乘客名单。 3)订票:根据航班号为客户订票,如该航班有余票,则为客户订票;如该航班已满员,则显示相应信息。4)退票:按乘客要求退出已预定的机票。提示:数据结构:可以使用链表表示航线表,对每个航班应包括以下信息:航班号、到达港、总座位数、余票额、乘客名单等;其中乘客名单应为一个单链表,每个乘客的信息有:乘客姓名、证件号码、座位号等,为方便查找,可考虑按乘客姓名排序;相应数据类型示范如下:struct cnode char name20; /*乘客姓名*/ char idcard30; /*证件号码*/ int seatno; /*座位号*/ struct cnode *clink; /*下一乘客指针*/ ;struct pnode int no; /*航班号*/ char destin30; /*终到站*/ int limit,rest; /*总座位数、余票额*/ struct cnode *clist; /*乘客名单*/ struct pnode *plink; /*下一航班指针*/ ; 2银行帐户管理(请学号末尾位为1和6的同学完成) 要求建立二进制文件存储银行帐户信息,其中每个用户帐户信息中要求保存帐号、用户身份证号码、用户姓名、用户地址、帐户金额等,完成以下功能: 1)录入新帐户; 2)查询帐户情况,根据输入的帐号查询用户情况和帐户金额; 3)修改帐户信息,要求用户输入帐号,根据用户需要修改除了帐号之外的其余信息; 4)删除帐户:根据输入的帐号找到要删除的帐号信息以后,经确认后删除该帐号信息; 提示:程序中定义用户帐户结构体:struct account char accountid10; char customerid30; char name20; char address30; float balance; ; 其中存储用户帐户信息的二进制文件中每个数据类型应为struct account,在操作之前可以考虑先将文件中的用户帐户信息读出并建立成一个链表,然后进行查询、删除等操作,可节省读写文件的时间;当录入新帐户信息、修改帐户信息之后,同时更新相应文件的内容; 3学生信息管理系统(请学号末尾位为2和7的同学完成) 用户可以选择1-7可以分别进行学生信息的查看、添加、删除,修改,计算平均成绩,保存,退出系统操作。提示:用一个结构体类型表示学生信息typedef struct node /*定义结构体*/ char sex9; int age; int num; char name15; int money; int english; int math; int computer; int average; struct node *next;student_info;运行过程中采用一个结构体链表存储学生信息。退出系统时可以采用文件存储用户输入的信息,再次运行的时候从文件中读取。4长整数运算(请学号末尾位为3和8的同学完成) C中的long int所能表示的数据范围有限,现要求编程完成超过long int所能表示的数据范围以上的十进制正的长整数的加法和乘法运算; 提示:两个参与运算的长整数可用char a256, b256表示,整个程序中要求完成以下几个函数的编写: 1) int readlongint(char * x); 此函数用于读入一个正的长整数到x中,函数返回长整数的实际长度;要求输入时检查所读入的字符串是否是合法的长整数,如不是提示用户直到输入合法的长整数为止; 2) char *addition(char *x,char *y); 此函数用于实现用字符串表示的长整数的加法运算,其计算结果保存在一个动态申请的字符数组空间(其长度为参与加法运算的两个长整数中较长的一个的长度加1)中,函数返回该数组的指针。 3) char *multiplacation(char * x,char *y);此函数用于实现用字符串表示的两个长整数的乘法运算,可考虑先将乘数的从个位到最高位的每一位与被乘数相乘(这一步可利用addition函数实现),再进行向左偏移后相加完成;注意:此程序设计最关键的问题是对字符数组的下标定位和动态申请恰当的内存空间以保存计算结果,注意在乘法运算中回收不再使用的内存空间。5计算器(请学号末尾位为4和9的同学完成) 编程实现计算器程序,完成实数的加、减、乘、除运算。注意运算符优先级别。表达式要求采用中缀形式,例如:2.3+7.2*7 提示:表达式处理可参考“逆波兰表达式”范例。 按 END键退出算术计算器程序检测是否有键按下,需要调用kbhit()库函数。kbhit的原数原型: int kbhit(void);kbhit函数功能:检测是否有键按下,如果有,则返回非0值(即真),否则返回0(即假)。 调用kbhit()函数的源程序必须包含conio.h文件。具有延时功能的函数是delay(unsigned milliseconds)。 包含在dos.h头文件中。Delay()函数的功能是:将程序挂起milliseconds毫秒,即程序暂停或延时milliseconds毫秒。当kbhit函数返回非0时,还要检测是否是End键。这需要调用bioskey库函数。但参数必须是1,不能是0。因为bioskey(1)虽然返回用户所按键值,但没有接受键盘输入,不会影响其它函数(如scanf函数)接受有效输入。END的键值定义为: #define END 0X4F00bioskey(1)判断是否是END的用法:if (bioskey(1)= =END) 相关操作二可选题目(如果你对下面题目有兴趣,可另行选择,欢迎多选)1发牌 一付扑克牌52张共4种花色,用户可选择“1-发牌”将这52张牌随机发成4敦;或选择“0-退出”退出程序。 提示:用一个具有52个元素的数组(如char p525)存放这52张牌的内容,如P_i表示黑桃、H_i表示红桃、C_i表示梅花、D_i表示方块;程序中可以首先初始化该数组,然后显示菜单等待用户选择输入,用户选择“发牌”,程序调用“发牌”函数;在发牌函数中,可使用TC 中的产生随机数的函数(参看rand(),srand(),random()等函数的使用说明)一个随机数m,选取一张牌pm,将其与最前面的牌交换位置,即将选取的牌放在最前面;然后对数组p余下的牌重复选取操作,直到所有牌均重排列;最后按13行*4列输出发牌结果。2时钟模拟 图形化界面,屏幕上显示圆形的模拟时钟表盘,显示12个刻度。时钟上有秒针、分针和时针指示,随着时间推移,秒针、分针和时针在表盘上移动。提示:在dos.h头文件中定义有如下结构类型struct time unsigned char ti_min; /* Minutes */ unsigned char ti_hour; /* Hours */ unsigned char ti_hund; /* Hundredths of seconds */ unsigned char ti_sec; /* Seconds */;可直接利用该类型表示时间类型。在dos.h头文件中定义库函数gettime(struct time *),该函数返回系统时钟。此程序可通过读取系统时钟调整秒针、分针和时针位置。3俄罗斯方块游戏 用C语言实现常见的游戏-俄罗斯方块。应包含初始化新游戏,累积方块,消除方块,方块移动与变形,计分和调速等功能,方块界面和容器都可以自己设计。提示:可用以下数据结构记录一个点和一个方块形状: typedef struct int x,y; Point;typedef struct Point a; Point b; Point c; Point d; int FkColor; FkType; /*方块类型*/ 然后用一个m*n的长方形区域作为容器。通过C的图形函数库画出界面。采用延时函数使方块自动下降,并采取相应算法实现方块叠加、消除整行,计分的功能。4模拟指法练习程序(统计正确率及输入速度) 模拟指法测试程序:完成输入N行文字后,统计输入的正确率和输入速度。要求: 程序运行后,屏幕首先输出提示信息,提示进入测试系统; 先从键盘输入原文,自己定义原文最大长度;原文输入完成后,给出提示信息开始测试; 依照原文从键盘输入,程序中统计输入的正确率和输入速度。 输入完成后,屏幕显示最后统计结果。5C语言实现艺术清屏 我们在编制程序时,经常要用到清屏处理(清除屏幕上的内容),如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,并未显示其清屏规律。但有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏。为此,要求用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观。 提示:程序运行后,屏幕上输出满屏字符用于演示程序;主函数中调用几个清屏子函数,要求给出5个子函数:中心清屏(从中间向两边),矩形边清屏(从两边向中间),开屏式清屏(类似于展开扇形),闭幕式清屏(扇形收拢),自下清屏。调用一个子函数后,要恢复满屏再调用另一个,要求中间稍有延时。6五子棋游戏图形化界面,玩家可以输入F1-F5选择人机对战模式,双人对战模式,保存当前游戏信息,读取游戏信息以及退出游戏选项。程序画出棋盘,可以通过键盘选择位置,进行下子。如果是人机对战模式,在玩家下完子后,电脑自动算出位置进行下子。当某一方到五子连成一线,能提示玩家某方获胜。提示:棋盘位置行列等信息可以定义成常量。下子可以数组表示。首先编写相应程序画出棋盘棋子等。然后实现响应键盘输入,定位下子。最后实现将棋盘上的棋子位置信息写入文件以及从文件中读出。