C++课程设计实验题目信科.docx
- 文档编号:29265771
- 上传时间:2023-07-21
- 格式:DOCX
- 页数:20
- 大小:64.13KB
C++课程设计实验题目信科.docx
《C++课程设计实验题目信科.docx》由会员分享,可在线阅读,更多相关《C++课程设计实验题目信科.docx(20页珍藏版)》请在冰豆网上搜索。
C++课程设计实验题目信科
课程名称:
C++课程设计
课程编号:
一、本课程学时、学分:
实验时间:
2周(上机30学时)学分:
2学分
二、本实验课配套教材
三、本实验课任务、性质、与目的
为增强学生对C++应用实际的感性认识,初步培养学生的运用数学和计算机软件知识分析和解决各种实际问题的能力。
使学生对所学的新知识有自己的认识,进一步激发学生学习的自觉性和积极性,培养学生动手能力和创新能力。
本设计提供一个独立实践的机会,将课本上的理论知识和实际有机的结合起来,提高学生适应实际问题,提高编程的能力。
四、本实验课的基本知识
1.C++程序设计语言;VC2005运行环境
五、实验要求
运用所学知识对所给题目进行分析,提出能描述实际问题的恰当的数学模型,并利用C++程序设计语言编程,完成这一模的算法并进行求解。
通过布置具有一定难度的程序设计题目,帮助学生熟悉程序编写,及时查究错误,独立完成,鼓励创新。
2020年C++课程设计实验题目
(在下面的基础题中至少完成10道题,综合题完成一道,按学号顺序循环选题)
实验题:
基础题
1、输入两个矩阵,根据选择进行加、减、乘运算。
应能判断能否进行相应运算,并输出运算结果。
2、输入一个十进制数(整数或小数均可),根据选择转换为二进制、八进制、16进制,并输出相应结果。
3、输入10个整数,找出其中最大的数并与最后一个数对换。
写三个函数:
(1)输入10个数;
(2)进行处理;
(3)输出10个数。
要求:
在主函数中,用一个函数指针来访问这三个函数。
4、有10个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入10个学生的数据,要求打印出3门课的总、平均成绩,并计算出每人的平均成绩,将原有数据和计算出的平均分数存放在磁盘文件stu.txt中。
5、完善程序
程序功能:
将一个十六进制数字的字符串转换成与它等价的十进制整数值。
十六进制允许的字符是从0-9和a-f(A-F)。
主函数负责收集字符,并判别它们是否为十六进制,htoi函数负责转换工作。
#include
Usingnamespacestd;
#defineMAXLINE100
#defineEOF–1
#defineYES1
#defineNO0
inthtoi();
main()
{
intc,i,isdigit;
chart[MAXLINE];
i=0;
isdigit=_____1______;
while((c=___2____)!
=EOF&&i {if(c>=’0’&&c<=’9’||c>=’a’&&c<=’f’||c>=’A’&&c<=’F’) { isdigit=YES; t[i++]=____3____; } else if(isdigit==YES) { isdigit=____4____; t[i]=______5_____; cout<<_____6_____; i=0; } } } inthtoi(char____7____) { inti,n; n=0; for(i=0;s[i]! =’\0’;i++) { if(s[i]>=’0’&&s[i]<=’9’)n=n*16+s[i]-___8_____; if(s[i]>=’a’&&s[i]<=’f’)n=n*16+s[i]-_____9_____; if(s[i]>=’A’&&s[i]<=’F’)n=n*16+s[i]-_____10______; } return(n); } 7、编写一个程序,将用户输入的由数字字符和非数字字符组成的字符串中的数字字符提取出来,例如输入“asd123rt456,fg789”,则产生的数字分别是123456789。 提示: 用一个函数接收用户输入的字符串,然后逐一判断每个字符是否数字,将其存入数组中。 8、编程实现函数fun的功能是: 查找字符串str中值为x的元素,返回找到值为x的元素个数,并把这些值为x的下标依次保存在数组bb中。 例如,在“abcdefahij”中查找‘a’,结果为: 2个‘a’,下标依次为0、6。 9、大数计算问题 大数是超过整数表示范围的整数,针对正整数运算,定义一个大数类,并编写两个大数类对象的加法和减法函数。 基本要求: (1)编写大数类对象的构造函数和输入输出函数 (2)编写大数类对象的加法和减法运算函数 设计主函数时,可指定测试数据。 10、成绩排序 假设某年级有4个班,每班有45名同学。 本学期有5门课程考试,每门课程成绩是百分制。 假定每个同学的成绩记录包含: 学号、姓名各门课程的成绩共7项,其中学号是一个10位的字符串,每个学生都有唯一的学号,并且这4个班的成绩分别放在4个数组中,完成以下操作要求: ⑴编写一个成绩生成函数,使用随机数方法,利用随机函数生成学生的各门课程的成绩(每门课程的成绩都是0∽100之间的整数),通过调用该函数生成全部学生的成绩; ⑵编写一个平均成绩计算函数,计算每个同学的平均成绩并保存在成绩数组中; ⑶用冒泡排序法对4个班的成绩按每个同学的平均成绩的以非递增方式进行班内排序; ⑷用选择排序法对4个班的成绩按每个同学的平均成绩的以非递增方式进行班内排序; ⑸对已按平均成绩排好序的4个班的同学的构造一个所有按平均成绩的以非递增方式排列的新的单链表; ⑹设计一个菜单,至少具有上述操作要求的基本功能。 11、线性方程组求解 由于一般线性方程在使用Gauss消去法求解时,从求解的过程中可以看到,若 =0,则必须进行行交换,才能使消去过程进行下去。 有的时候即使 0,但是其绝对值非常小,由于机器舍入误差的影响,消去过程也会出现不稳定得现象,导致结果不正确。 因此有必要进行列主元技术,以最大可能的消除这种现象。 这一技术要寻找行r,使得 并将第r行和第k行的元素进行交换,以使得当前的 的数值比0要大的多。 这种列主元的消去法的主要步骤如下: (1)消元过程 对k=1,2,…,n-1,进行如下步骤。 1)选主元,记 若 很小,这说明方程的系数矩阵严重病态,给出警告,提示结果可能不对。 2)交换增广阵A的r,k两行的元素。 (j=k,…,n+1) 3)计算消元 (i=k+1,…,n;j=k+1,……,n+1) (2)回代过程 对k=n,n-1,…,1,进行如下计算 至此,完成了整个方程组的求解。 12、n阶方阵求逆 输入是一个n(n<256)阶方阵A,输出是它的逆矩阵,要求还要再将得到的逆矩阵与原来的矩阵相乘,验证其结果是单位矩阵。 13、有n人围坐成一圈(假设他们的编号沿顺时针方向依次为1到n)。 编程序,使用数组来存放各数据(人员编号),而后从1号人员开始数起(沿顺时针方向),当数到k时(其中k>1由用户通过cin输入指定),则该号人员被“淘汰出局”;接着仍沿顺时针方向从被淘汰出局者的下一人员又重新从1开始数起,数到k后,淘汰第2个人;如此继续,直到最后剩下一个人时停止。 请输出先后被“淘汰”的人的编号。 14、编写程序对八皇后问题进行求解: 在8行8列的棋盘上放置8个皇后,使任一个皇后都不能吃掉其他的7个皇后(注: 皇后可吃掉与她处于同行或同列或同一对角线上的其他棋子),并将结果以某种方式显示出来。 例如,当求出下述的一个解时,可输出如下信息来表示该解(输出了表示摆放皇后的坐标位置以及“棋盘状态”—棋盘中有皇后的位置放一个“Q”字符,其他位置为“+”字符)。 (1,1)(5,2)(8,3)(6,4)(3,5)(7,6)(2,7)(4,8) Q+++++++ ++++++Q+ ++++Q+++ +++++++Q +Q++++++ +++Q++++ +++++Q++ ++Q+++++ 提示: (1)通过“intLineNum[9];boola[9],b[15],c[15];”说明具有全局作用域的4个数组。 其中的: LineNum[i]表示第i列的皇后要放的行位置(只用其中的列号1到8); a[i]为true(i=1,2,…,8)表示第i行上尚未放皇后; b[i]为true(i=0,1,2,…,14)表示第i条斜对角线上尚未放皇后(斜对角线指的是“/”状对角线,该对角线上各点的行列号之和i+j为一个常数); c[i]为true(i=0,1,2,…,14)表示第i条反斜对角线上尚未放皇后(反斜对角线指的是“\”状对角线,该对角线上各点的行列号之差i-j为一个常数)。 从而当使用语句“if(a[j]&&b[i+j-2]&&c[i-j+7])LineNum[i]=j;”时,可用于判断并实现: 如果在第j行的第i列上放置皇后安全的话,则将一枚皇后放置到那儿。 (2)编制一个具有如下原型的递归函数solve,它负责往第i列开始的连续8-i+1列上均放上皇后,若成功则通过引用参数ok返回true(否则返回false)。 voidsolve(inti,bool&ok); 摆放皇后之后,若i=8即已放满时则递归出口;否则通过solve(i+1,ok);进行递归调用。 (3)编制主函数,首先初始化一个“空棋盘”,即将a、b、c数组的各元素均置为true(表示当前棋盘的8个行、15条斜对角线以及15条反斜对角线上都尚未摆放皇后)。 而后执行调用语句“solve(1,ok);”,它负责往第1列开始的连续8列上均放上皇后,若成功则通过引用参数ok返回true(否则返回false)。 点评: (1)可改用非递归方法设计并编写solve函数,那样的话,通常要设置数组来记录皇后的摆放位置信息,还要记录这些皇后所产生的“影响面”(所建立的“势力范围”)—使得哪些行列位置不可再摆放皇后。 当在新的行列位置摆放了皇后、但此时又无法进一步摆放其他的皇后时,要回退(回溯)到上一个位置接着去考虑另外的“行走”方法(若还有的话)等等。 但注意,“回退”一步后,要同时“撤销”由于该步的回退而关联的那些“影响面”(释放“势力范围”)。 (2)本程序只是找到了某一种“摆放方案”而终止,还可进一步考虑寻找其他各种不同的“摆放方案”(实际上共有92种)。 (3)也可用同样的方法去处理其他“阶数”的皇后问题,如求解四皇后问题等。 15、企业发放的奖金根据利润提成。 利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数? 实验题: 综合题 1、设计一个年历系统 问题描述: 年历系统首先对于输入的任一年,能够给出该年每月的日期及实际周几的对应情况,并与实际的星期数垂直对齐,如下表所示(当输入2004时显示如下): Inputtheyear: 2004 Thecalendaroftheyear2004. Januray1February2 ============================================================ SunMonTueWedThuFriSatSunMonTueWedThuFriSat 1231234567 45678910891011121314 1112131415161715161718192021 1819202122232422232425262728 2526272829303129 ============================================================ March3April4 ============================================================ SunMonTueWedThuFriSatSunMonTueWedThuFriSat 123456123 7891011121345678910 1415161718192011121314151617 2122232425262718192021222324 28293031252627282930 ============================================================ 功能要求: ⑴输入任一年将显示出该年的所有月份日期,对应的星期,输出的格式如上表要求(注意闰年情况); ⑵输入任意日期(包括年、月、日,格式有yyy/mm/dd、dd/mm/yyyy、mm/dd/yyyy、和yyyy,mm,dd、mm,dd,yyyy、dd,mm,yyyy六种基本情况),要求能够显示出该日期是本年的哪一周,是星期几。 2、学生成绩管理 问题描述: 设学生信息包括: 学号、姓名、学期、每门课程的成绩(每学期的课程门数是不一样的),对学生的成绩信息进行管理。 实现要求: 实现: 学生信息的录入;修改;删除和查询,按学期、学号、成绩不及格等查询。 ⑴输入学生的成绩信息,包含学号、姓名、性别等基本信息和各课成绩 ⑵显示全部学生各科成绩信息; ⑶对各科成绩统计分析(总分、平均分、最高分、最低分、及格率等); ⑷统计各科各分数段人数; ⑸按学号或姓名查找并显示某个学生的各科成绩; ⑹按课程成绩或总分由高到低排序显示; ⑺更新某个学生的基本信息或课程成绩; ⑻设计一个菜单,具有上述规定的操作要求、退出系统等最基本的功能。 3、通讯录管理 问题描述: 建立一个学生通讯录主要功能包括: (1)通讯录包含的信息有: 姓名、性别、出生日期、工作单位、籍贯、电话号码等 (2)能建立、修改和增删学生通讯录; (3)能够按多种方式进行查询 显示学生信息时,要求可以按照学号或姓名的升序或降序分别进行显示 (4)该系统的首页信息如下 学生通讯录管理系统 请选择要进行的操作: 1.添加新学生信息 2.查询学生信息 3.修改学生信息 4.删除学生信息 5.显示通讯录中的所有信息 6.退出系统 4、数据汇总 问题描述: 在数据处理中经常需要对大量数据进行汇总,将相同关键字记录的某些数据项的值叠加起来,生成一个分类汇总表。 假设某超级市场销售有m种商品(假设商品的编号为1,2,3,┅┅,m),有n台前台收款机(假设收款机的编号为1,2,3,┅┅,n)进行收款,以记录的形式提供给计算机,每个记录表示某台收款机的一种商品一次交易的数量和销售额。 记录由4个域组成: 收款机编号、商品编号、销售数量、销售金额。 构造一个结构体类型,每次销售数据以一个结构体变量保存在一个数据文件中。 实现要求: ⑴编写实现将数据记录插入到数据文件的最后的函数; ⑵编写以收款机为单位的数据分类处理函数。 构造n个单链表,每个链表保存一台收款机的销售记录,这n个单链表的头指针存放在一个指针数组中,通过数组的下标就可以知道是哪台收款机。 读取数据文件的记录,将所有的销售记录(数据文件中的全部记录)分解插入到n个单链表; ⑶编写以商品为单位的数据分类处理函数。 构造m个单链表,每个链表保存一种商品的销售记录,这m个单链表的头指针存放在一个指针数组中,通过数组的下标就可以知道是哪种商品。 读取数据文件的记录,将所有的销售记录(数据文件中的全部记录)分解插入到m个单链表; ⑷统计每台收款机的销售总额; ⑸以收款机为单位,将所有收款机按销售总额的非递减顺序构造一个单链表并输出; ⑹以商品为单位,统计每种商品的销售总额; ⑺以商品为单位,将所有销售的商品按销售总额的非递减顺序构造一个单链表并输出; ⑻设计一个菜单,具有上述要求的所有功能、退出系统等最基本的功能。 5、学生选修课系统 (一)、系统的主要功能 1.选修课系统学生端 完成学生选课、学生情况、选课情况、退出系统等功能的设计与实现。 2.选修课系统管理端 完成增加学生、增加课程、删除学生、删除课程、填写成绩、更改学分、学生情况、选课情况、保存数据、退出系统等功能的设计与实现。 (二)、系统总框架图 6、工资管理系统 开发一个小型的管理信息系统,至少具有如下功能: 工资录入,按人名、基本工资、实发工资、个人所得税进行查询和按部门进行分类统计。 工资记录包括: 姓名、部门单位、基本工资、津贴、补贴、所得税、实发工资等,系统功能主要包括六大模块: 1)职工个人说得税的计算模块,根据工资多余5000,在1000—5000之间,少余1000三种情况进行计算(税率自己设定)。 2)添加职工的工资信息模块,用户根据输入职工编号后,对工资信息进行录入。 3)职工工资查询模块,根据用户输入职工编号后,方可进行查询。 4)职工工资修改模块,用户输入职工编号后,对以前的信息进行修改。 5)数据输出模块,输出其相应的模块功能。 6)职工工资统计模块,根据输入的职工信息进行统计。 7、仓库管理系统(小超市) 记录包括: 品名,单价,库存数量,编号,入库时间,入库数量,出库时间,出库数量等。 系统实现下面功能: (1)实现数据录入、数据输出、数据查询等功能。 (2)可以对货物的存入、取出等操作记录 (3)货物信息的查询 (4)简单的计算统计功能 8、用C++设计一个简单的计算器 输入是一个带有括号的四则运算表达式,输出是计算得出的正确计算结果。 例如: 输入: 123+213-67*34+345/23*45*(34+34-345+245+567)回车,然后程序计算得出结果为: 359183 要求能够对输入的数: 1.进行+,-,*,/,运算; 2.可以带括号(); 3.不限定运算式的输入长度. 4、能够进行判断输入的正确性。 9、商品销售统计 问题描述 编写商品销售统计程序,商品的信息有: 商品的名称,计量单位(重量或件),单价。 所有商品的信息事先已存入计算机,屏幕上显示所有商品的名称,选择商品名,输入商品计量单位(如重量,件数等),根据单价算出总价。 客户一次购物可能购买多种商品,程序应计算出客户应付的钱款数。 基本要求 程序分为两个部分: 第一部分用于输入商品的信息并允许修改和删除;第二部分实现销售统计。 程序运行时由用户选择进入哪一部分功能,并能在运行时在两部分之间切换。 第二部分运行时,首先显示所有商品名称及代码(商品数目较多时,应考虑分屏显示),用户输入商品代码及商品重量或件数,用户一次操作可输入若干商品的购买信息,然后输入一个特殊的代码(如-1)表示本次购物结束。 此时。 程序计算出应付钱款数并显示。 测试数据 程序应输入不少于10种商品的信息,并进行模拟运行。 实现提示 本程序的商品信息管理可采用与课程设计题目二类似的数据结构,既定义一个商品类,每种商品作为商品类的实例(对象)存储在链表节点中。 选做内容 程序在营业结束时统计每种商品的销售量,销售金额及总营业额。 因此第二部分应有营业结束的选择,当用户选择此项时屏幕上显示当天营业的每种商品的销售量,销售金额及总营业额。 注意,商品类的数据成员应增加有商品的销售量和销售金额。 总营业额是所有商品的营业额之和,可用静态数据成员实现。 或可由原商品类派生出一个特殊的类,增加上面的数据成员及相应的成员函数。 10、研究生初试录取 问题描述 研究生考试课程为4门,其中数学、外语、政治为统一命题,而专业基础课则根据不同的专业由招生学校自行命题。 国家对初试录取分数有总分要求(如某一年要求4门课总分应达到310分),另外还有对每门课的最低分数要求(如总分为100的试卷最低应达到40分,总分为150的试卷最低应达到65分)。 编程统计初试合格的人数,并按总分由高到低的顺序输出合格考生的信息。 基本要求 程序运行时首先要求输入: 考生姓名,准考证号,报考专业,是否应届生,4门课程(政治、数学、外语、专业基础课)成绩。 这些原始数据应保存到一个文件中。 然后输入: 录取的总分要求,各课程的最低分数要求。 输出要求: 过线考生的姓名,准考证号,报考专业,是否应届生,4门课程(政治、数学、外语、专业基础课)成绩及总分,这些信息应存放到另一个文件中。 测试数据 程序应输入不少于10名考生的信息,其中应届生和历届生分别有若干名,并且都有合格和不合格的情况。 实现提示 可定义一个考生类存放有关信息和实现相应的操作。 分数线数据(总分要求和各门课程的要求)可定义另外的类来存放,但应能被考生类及其派生类直接访问。 选做内容 初试合格的考生应经过复试才能决定是否录取,复试成绩合格(大于一给定分值)可以录取,否则被淘汰。 而录取的顺序假设是按照专业基础课和复试成绩的平均值来确定的(因为这涉及到是计划内还是委培问题)。 因此,应首先输入初试合格考生的复试成绩及复试的合格线分数,然后按上面要求排序输出并标明被淘汰的学生。 11、足球联赛积分 问题描述 足球联赛采用主客场双循环赛制,胜一场得3分,平局各得1分,负一场得0分,联赛排名以积分多者在前,当两队(或多队)积分相同时,则净胜球(即进球数与失球数之差)多者在前,若净胜球相同,则进球数多者在前,若仍相同,则抽签或踢附加赛决定名次(这在联赛结束后进行,联赛未结束则两队名次并列,本程序不做这方面要求)。 试编一程序统计最近一轮比赛后,各队积分及排名。 基本要求 设积分表结构如下: 队名(不超过15个字符),已比赛的场数,赢的场数,平的场数,负的场数,进球数,失球数,积分。 积分表放在正文文件中。 最近一轮的结果从键盘输入,其形式为: 主队名(可用代码),客队名(可用代码),主队得分(即进球数),客队得分(即进球数)。 程序应根据此轮结果修改各队的积分和名次,所得的最新记分表仍在原积分文件中并同时在屏幕上显示。 测试数据 可选择我国当年的甲A或甲B联赛的数据输入,并检查与报章公布的数据是否一致。 实现提示 定义一个球队类,每个球队是均是此类的对象。 由于联赛中参赛的队伍数是固定的,因此可用对象数组来实现(当然也可以用链表结构)。 每输入两个队的比赛成绩,则相应的队的有关数据(比赛场数,赢的场数,平的场数,负的场数,进球数,失球数,积分等)即可进行修改,比赛成绩录入完成,调用联赛排序方法(对象数组作为参数)排出名次并输出。 选做内容 篮球联赛(如NBA)往往采用胜率来决定名次,胜率就是取胜的场数比赛场数之比。 若胜率相同,再由净胜球及进球数来决定名次,通过继承性完成上述要求。 12、银行账户管理程序 问题描述 设计一个银行账户管理程序,账户的信息有账号(唯一)、姓名、余额、身份证号码、单位、电话号码、地址等,允许用户进行如下操作: 开户、销户、存款、取款、转账、查询,一个用户可以有多个户头,账户的数值没有上限。 基本要求 程序运行时,可以由用户选择进行何种操作,开户操作要求输入用户信息后自动获取账号,用户销户后账号被回收,并且该账
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+课程设计实验题目 信科 C+ 课程设计 实验 题目