C课程设计报告

合集下载

C语言课程设计报告学生成绩管理系统(广工)

C语言课程设计报告学生成绩管理系统(广工)

一、课程设计题目:学生成绩管理二、需求分析给出n个学生的m门考试的成绩表,每个学生的信息由学号、姓名、性别以及各科成绩组成。

对学生的考试成绩进行有关统计:按总数高低次序,打印出名次表,分数相同的为同一名次;按名次打印出每个学生的学号、姓名、总分以及各科成绩,并打印统计表。

三、概要设计程序要有的功能:1。

输入记录2。

用指定格式显示全部记录3。

根据姓名查找记录4。

根据姓名删除记录5. 保存记录到文件6。

按序号显示记录7。

按姓名由小到大的顺序排序程序运行当中,通过选择对应的功能序号来实现所需功能。

对输入的数据要有事先的分析,如果用户输入的数据与实际不相符如输入成绩的数值为负,则程序应输出相应的提示:“您输入的数据有误,请核实!”。

再者就是,当再输入完相应的数据后,程序作出相应的提示,询问用户是否要保存数据。

在排列学生成绩时候,如果出现成绩相同的情况,程序自动作出处理。

最后,在程序可以正确运行的基础上,再增加一些功能,如在排列的时候,自动输出最高分与最低分。

与及格成绩作比较,输出及格人数等相关信息。

流程图:四、详细设计源程序:#include ”stdio。

h”#include "stdlib.h”#include "string。

h”int shoudsave=0;/* */struct student{char num[10];/*学号*/char name[20];char sex[4];int cgrade;int mgrade;int egrade;int totle;int ave;char neartime[10];/*最近更新时间*/};typedef struct node{struct student data;struct node *next;}Node,*Link;void menu(){printf(”*********************************主菜单*****************************************”);printf(”\t1登记学生资料\t\t\t\t\t2删除学生资料\n”);printf(”\t3查询学生资料\t\t\t\t\t4修改学生资料\n”);printf(”\t5保存学生资料\t\t\t\t\t0退出系统\n”);printf(”********************************************************************************\n");}void printstart(){printf(”-————---—-——————--——----———-—-—-————--————--—--—--—-————---—-—————--———\n”);}void Wrong(){printf(”\n=====>提示:输入错误!\n”);}void Nofind(){printf("\n=====〉提示:没有找到该学生!\n");}void printc()/*本函数用于输出中文*/printf(”学号\t 姓名性别英语成绩数学成绩C语言成绩总分平均分\n”); }void printe(Node *p)/* 本函数用于输出英文*/{printf("%—12s%s\t%s\t%d\t%d\t%d\t %d\t %d\n",p—〉data。

c课程设计实践报告1500字

c课程设计实践报告1500字

c 课程设计实践报告1500字一、教学目标本课程的教学目标是使学生掌握C语言的基本语法、数据结构及算法,培养学生运用C语言进行程序设计的能力。

具体目标如下:1.知识目标:–掌握C语言的基本语法,包括数据类型、运算符、表达式、语句等;–理解函数的定义和调用,掌握函数的参数传递和返回值;–学习常用的数据结构,如数组、链表、栈和队列;–掌握基本的算法思想,如排序、查找、递归等。

2.技能目标:–能够使用C语言编写简单的程序,解决实际问题;–熟练使用C语言的调试工具,分析程序的正确性和性能;–掌握常用的编程规范和技巧,提高代码的可读性和可维护性。

3.情感态度价值观目标:–培养学生的团队合作精神,能够与他人合作完成编程任务;–培养学生的问题解决能力,面对编程难题时能够积极寻找解决方案;–培养学生的创新意识,鼓励学生进行程序设计和创新实践。

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

具体安排如下:1.C语言的基本语法:–数据类型、运算符和表达式;–控制语句,包括条件语句和循环语句;–函数的定义和调用,参数传递和返回值。

2.数据结构:–数组的声明和使用;–链表的创建和操作;–栈和队列的实现和应用。

–排序算法,包括冒泡排序、选择排序和插入排序;–查找算法,包括线性查找和二分查找;–递归算法的概念和应用。

3.编程实践:–简单的数学计算程序;–数据结构的实现和应用;–解决实际问题的编程案例。

三、教学方法为了达到课程目标,将采用以下教学方法:1.讲授法:通过讲解和示范,使学生掌握C语言的基本语法和数据结构;2.讨论法:学生进行小组讨论,促进学生之间的交流和合作;3.案例分析法:通过分析实际的编程案例,使学生理解算法的应用和程序设计的方法;4.实验法:安排编程实验,让学生亲自动手编写程序,培养学生的实践能力。

四、教学资源为了支持教学内容和教学方法的实施,将选择和准备以下教学资源:1.教材:选用《C程序设计语言》作为主要教材,引导学生深入学习C语言的基本语法;2.参考书:提供《C Primer Plus》等参考书籍,供学生自主学习和拓展;3.多媒体资料:制作课件和教学视频,生动展示C语言的编程方法和技巧;4.实验设备:提供计算机实验室,让学生进行编程实验和实践。

c课程设计报告范文

c课程设计报告范文

c 课程设计报告范文一、教学目标本课程的教学目标是使学生掌握C语言的基本语法、数据结构和算法,培养学生具备基本的编程能力和逻辑思维能力。

具体分解为以下三个方面的目标:1.知识目标:学生需要掌握C语言的基本语法、数据类型、运算符、控制结构、函数、数组、指针、字符串、结构体等基本概念。

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

3.情感态度价值观目标:培养学生对编程的兴趣,增强学生的自信心和自主学习能力,培养学生的团队合作意识和创新精神。

二、教学内容根据教学目标,本课程的教学内容主要包括以下几个部分:1.C语言的基本语法和数据类型:变量、常量、数据类型、运算符、表达式等。

2.控制结构:条件语句、循环语句、分支语句等。

3.函数:函数的定义和声明、函数的调用、参数传递、返回值等。

4.数组和指针:一维数组、多维数组、指针的概念和应用等。

5.字符串:字符串的基本操作、字符串数组、字符串指针等。

6.结构体和文件操作等高级内容:结构体的定义和使用、文件的基本操作等。

三、教学方法为了达到教学目标,本课程将采用多种教学方法,包括:1.讲授法:通过讲解和演示,使学生掌握C语言的基本语法和概念。

2.讨论法:通过小组讨论和问题解答,培养学生的思考能力和问题解决能力。

3.案例分析法:通过分析实际案例,使学生了解C语言在实际编程中的应用。

4.实验法:通过编写和调试程序,使学生掌握C语言的编程技巧和调试方法。

四、教学资源为了支持教学内容和教学方法的实施,我们将选择和准备以下教学资源:1.教材:《C程序设计语言》(K&R)或《C Primer Plus》。

2.参考书:提供一些相关的参考书籍,如《C语言深度探索》、《C指针》等。

3.多媒体资料:制作课件、演示文稿等多媒体资料,以图文并茂地展示C语言的基本概念和编程技巧。

4.实验设备:提供计算机实验室,让学生能够进行编程实践和调试。

C语言课程设计报告(学生成绩管理系统)

C语言课程设计报告(学生成绩管理系统)

C语言课程设计报告:学生成绩管理系统系统需求一、当前学生信息:通过结构体struct student 来保存学生的姓名,学号,性别,语文,数学,英语和计算机等等相关信息,并且通过cin函数来进行给当前学生输入初始信息。

二、学生成绩查询: 输入一个学号,在文件中查找此学生, 若找到则输出此学生的全部信息和成绩;若找不到则输出查找失败的信息。

同时也可以全部把各科的平均成绩,最高和最低分输出.三、新生插入:通过给该生的学号来和原班上的学生的学号比较大小,若大就在后,若小则靠前排,将此生的信息保存下来.四、输出全部学生信息和全部学生成绩。

五、退出系统.六、附加说明:系统将来完善的功能有:可以通过性别来模糊查询,也可以通过姓名的姓来先进行模糊查询,以便后面精确查找。

总体设计一、仔细阅读系统要求,首先将此系统化分为如下模块(即如下函数)1、输入初始的学生信息:其中包括学生的姓名、学号和性别以及学生的语文、数学、英语和计算机等相关信息;可用函数cin(stu *p1)来实现此操作。

2、查询模块:可用stu *lookdata(stu *p1)来实现。

找到就输出此学生全部信息包括学生的语文、数学、英语和计算机等的成绩。

3、插入模块:可用insert( )函数来实现。

其中通过学号的大小来比较的,并且以此来排序.4、输出学生的信息以及成绩:通过学生的姓名来查看学生的语文、数学、英语和计算机等相关成绩,同时也可以分别通过caverage()、maverage()、eaverage() 和comaverage() 来输出语文、数学、英语和计算机等成绩的平均分数、最高和最低分数。

5、退出系统:可用一个函数exit()来实现,首先将信息保存到文件中,释放动态创建的内存空间,再退出此程序。

二、系统主模块结构图:详细设计一、界面设计此系统界面采用图形和数字化菜单设计。

主界面设计如下:学生成绩管理系统请选择相应的数字执行相应的功能:1:是否输入其他数据2:查看数据3:插入数据4:查找数据5:更新数据6:保留数据7:显示或打印数据8:语文成绩状况9:数学成绩状况10:英语成绩状况11:计算机成绩状况12:?13:退出系统二、数据结构设计:程序设计中用到的结构体类型:学生信息结构体类型:typedef struct student{char name[MAX];int num[MAX];char sex[MAX];int chinese;int mathematic;int english;int computer;struct student *next;}程序代码://原始密码是123456#include"stdio.h”#include"stddef.h"#include"stddef。

C语言程序设计课程设计报告

C语言程序设计课程设计报告

《C语言程序设计》课程设计报告(2011— 2012学年第 1 学期)专业:计算机科学与技术班级:姓名学号:指导教师:成绩:计算机科学与技术系2011 年12月31日目录一、课程设计的目的与要求 (3)二、方案实现与调试 (3)2.1 掷骰子游戏 (3)2.2 汽车加油 (6)2.3 大优惠 (8)2.4 金币 (9)2.5小型通讯录设计 (12)三、课程设计分析与总结 (14)附录程序清单 (14)一、课程设计的目的与要求(含设计指标)(1)实验目的C语言是一种编程灵活,特色鲜明的程序设计语言。

C语言除了学习必须的基本知识,如概念,方法和语法规则之外,更重要的是进行实训,以提高学习者的动手和编程能力,这是学习语言的最终目的。

结合多年来的教学经验,根据学生的学习情况,为配合教学过程,使“项目教学法”能在本质上促使学生有更大进步,特编写了该《C语言程序设计任务书》,以在实训过程中给学生提供帮助。

达到如下目的:1.在课程结束之前,让学生进一步了解C程序设计语言的编程功能;2.让学生扎实掌握C程序设计语言的相关知识;3.通过一些有实际意义的程序设计,使学生体会到学以致用,并能将程序设计的知识与专业知识有效地结合,更全面系统地了解行业知识。

(2)设计要求根据实验内容的要求自由选定题目。

编写程序要求遵循如下基本要求:●模块化程序设计●锯齿型书写格式●必须上机调试通过二、方案实现与调试2.1掷骰子游戏•2.1.1 题目内容的描述两人玩骰子,游戏规则如下:1) 两人轮流掷骰子,每次掷两个,每人最多掷10次。

2) 将每人每次的分值累加计分3) 当两个骰子点数都为6时,计8分;当两个点数相等且不为两个6时,计7分;当两个点数不一样时,计其中点数较小的骰子的点数。

4) 结束条件:当双方都掷10次或经过5次后一方累计分数为另一方的两倍。

最后显示双方分数并判定优胜者。

•2.1.2输入数据类型、格式和内容限制和输出数据的说明输入数据类型:整型数格式:srand(time(0));输入数=rand()%6+1;内容限制:产生最多十次随机数输出数据说明:掷骰子的获胜者•2.1.3主要模块的算法描述2.1.4调试过程及实验结果出现的问题:每次循环产生的随机数相同。

大学生c语言课程设计

大学生c语言课程设计

大学生c语言课程设计一、课程目标知识目标:1. 学生能理解C语言的基本语法和结构,掌握数据类型、运算符、控制语句等基本概念。

2. 学生能够运用C语言编写简单的程序,解决问题,并理解程序执行流程。

3. 学生能掌握数组、函数、指针等C语言核心知识,进行模块化编程。

技能目标:1. 学生具备使用C语言进行程序设计的能力,能够编写、调试和运行简单的C 程序。

2. 学生能够运用所学知识解决实际问题,培养编程思维和逻辑分析能力。

3. 学生通过课程项目实践,提高团队协作和沟通能力。

情感态度价值观目标:1. 学生培养对编程的兴趣和热情,认识到编程在现代社会中的重要性。

2. 学生在学习过程中,养成积极探究、自主学习的习惯,形成良好的学习态度。

3. 学生通过课程学习,认识到团队合作的重要性,培养集体荣誉感和责任感。

分析课程性质、学生特点和教学要求:本课程为大学生C语言课程设计,旨在帮助学生掌握C语言编程基础,培养编程能力和逻辑思维。

学生特点为具有一定的高等数学和计算机基础,对编程有一定兴趣,但实践经验不足。

教学要求注重理论与实践相结合,以项目驱动教学,提高学生的动手能力和实际应用能力。

课程目标分解为具体学习成果:1. 学生能够独立编写100行以上的C程序,完成课程项目。

2. 学生通过课程学习,掌握C语言基本语法和核心知识,能解决实际问题。

3. 学生在课程实践中,展示良好的团队协作和沟通能力,形成积极的情感态度。

二、教学内容本课程教学内容紧密结合课程目标,确保学生系统掌握C语言知识。

教学内容如下:1. C语言概述:介绍C语言的发展历程、特点和应用领域,使学生了解C语言的重要性。

教材章节:第1章 C语言概述2. 基本语法:讲解数据类型、变量、常量、运算符、表达式等基本概念,为学生编程打下基础。

教材章节:第2章 数据类型与表达式3. 控制语句:学习顺序结构、分支结构、循环结构等控制语句,培养学生逻辑思维能力。

教材章节:第3章 控制语句4. 函数:介绍函数定义、调用、参数传递等知识,使学生掌握模块化编程方法。

c语言课程设计报告学生成绩管理系统

c语言课程设计报告学生成绩管理系统

c语言课程设计报告学生成绩管理系统一、教学目标本课程旨在让学生掌握C语言的基本语法和编程技巧,通过实现一个学生成绩管理系统,培养学生运用C语言解决实际问题的能力。

具体目标如下:1.知识目标:–掌握C语言的数据类型、运算符、控制结构、函数等基本语法。

–理解结构体和文件操作等相关知识。

2.技能目标:–能够运用C语言编写简单的程序。

–学会使用C语言实现数据的输入、输出和处理。

–掌握使用结构体创建学生成绩数据结构,并实现对成绩的增删改查等操作。

3.情感态度价值观目标:–培养学生对编程的兴趣,增强自信心。

–培养学生的团队协作能力和解决问题的能力。

二、教学内容本课程的教学内容主要包括C语言的基本语法、数据结构、文件操作等。

具体安排如下:1.C语言基本语法:数据类型、变量、运算符、控制结构、函数等。

2.数据结构:结构体、数组、指针等。

3.文件操作:文件的打开、关闭、读写等。

4.学生成绩管理系统:实现一个学生成绩管理系统,包括学生的增删改查、成绩的排序、统计等功能。

三、教学方法本课程采用讲授法、案例分析法和实验法相结合的教学方法。

1.讲授法:用于讲解C语言的基本语法和概念。

2.案例分析法:通过分析实际案例,让学生学会运用C语言解决实际问题。

3.实验法:让学生动手实践,编写程序,培养实际编程能力。

四、教学资源1.教材:《C程序设计语言》或《C语言入门教程》。

2.参考书:《C Primer Plus》、《C语言编程思想》等。

3.多媒体资料:教学PPT、视频教程等。

4.实验设备:计算机、网络等。

五、教学评估本课程的评估方式包括平时表现、作业、考试等。

评估方式应客观、公正,能够全面反映学生的学习成果。

具体安排如下:1.平时表现:占课程总评的30%,包括课堂参与度、提问回答、小组讨论等。

2.作业:占课程总评的30%,包括课后练习、编程作业等。

3.考试:占课程总评的40%,包括期中考试和期末考试。

六、教学安排本课程的教学安排如下:1.教学进度:按照教材的章节进行教学,确保在有限的时间内完成教学任务。

c图书管理系统课程设计报告

c图书管理系统课程设计报告

c图书管理系统课程设计报告一、教学目标本课程的教学目标是使学生掌握C图书管理系统的基本概念、设计原理和实现方法。

通过本课程的学习,学生应能够:1.理解C图书管理系统的基本组成部分及其功能;2.掌握C图书管理系统的设计原理和实现方法;3.能够运用C图书管理系统进行图书管理;4.培养学生的信息素养和创新能力。

二、教学内容本课程的教学内容主要包括:1.C图书管理系统的基本概念:介绍C图书管理系统的发展历程、基本功能和应用场景;2.C图书管理系统的设计原理:讲解C图书管理系统的架构设计、模块划分和算法实现;3.C图书管理系统的实现方法:介绍C图书管理系统的开发环境、编程语言和开发工具;4.实践操作:通过案例分析法和实验法,使学生熟练掌握C图书管理系统的操作和使用。

三、教学方法本课程采用多种教学方法相结合的方式,包括:1.讲授法:讲解C图书管理系统的基本概念、设计原理和实现方法;2.案例分析法:分析典型实例,使学生更好地理解C图书管理系统的应用;3.实验法:让学生动手实践,熟练掌握C图书管理系统的操作和使用;4.讨论法:鼓励学生提问、发表见解,培养学生的独立思考能力。

四、教学资源为实现本课程的教学目标,我们将提供以下教学资源:1.教材:选用权威、实用的教材,为学生提供系统、全面的学习资料;2.参考书:推荐相关参考书籍,丰富学生的知识体系;3.多媒体资料:制作课件、演示文稿等多媒体教学资源,提高课堂教学效果;4.实验设备:为学生提供充足的实验设备,确保实验教学的顺利进行。

通过以上教学资源的支持,我们期望学生能够在本课程学习中取得良好的效果。

五、教学评估本课程的教学评估将采取多元化方式进行,以全面、客观、公正地评价学生的学习成果。

评估内容包括:1.平时表现:通过课堂参与、提问、讨论等环节,评估学生的学习态度和积极性;2.作业:布置适量作业,评估学生的理解和应用能力;3.考试:设置期中考试和期末考试,评估学生对课程知识的掌握程度;4.实践操作:通过实验报告和实际操作评估学生的动手能力和创新能力。

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

课程设计任务书课程设计报告课程:面向对象程序设计学号:02姓名:***班级:09030301教师:沈阳理工大学信息学院课程设计名称:小型特殊计算器1.设计内容:实现一个特殊的计算器,可以实现复数、有理数、矩阵和集合的特殊计算。

程序可以实现复数、有理数的加、减、乘、除,可以实现矩阵的加法、减法和乘法运算,也可以实现集合的求交集、并集、子集的运算。

2.设计目的与要求:2.1设计目的达到熟练掌握C++语言的基本知识和技能;基本掌握面向对象程序设计的基本思路和方法;能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。

2.2设计要求要求利用面向对象的方法以及C++的编程思想来完成系统的设计;要求在设计的过程中,建立清晰的类层次;在系统的设计中,至少要用到面向对象的一种机制。

3.系统分析与设计3.1主要知识点运算符重载增加了C++语言的可扩充性。

运算符的重载实际上就是一种函数调用的形式,可以用成员函数重载运算符,就是将运算符重载定义为一个类的成员函数的形式;也可以用友元函数重载。

用友元重载运算符的友元函数是独立于类以外的一般函数。

3.2关键技术程序中每一种数据类型用一个类来实现,共设计了4个类。

复数类complex,矩阵类matrix,有理数类rational以及集合类set。

每一种类都定义了相应的运算符重载函数。

具体定义如下所示:(1)类complex类complex中,成员变量image表示虚部,real表示实部。

成员函数print()用来显示数据。

运算符重载函数都是用友元函数来实现的。

分别重载+、-、*、/运算符。

(2)类matrix类matrix中,成员变量elems用来存放矩阵的所有元素,rows表示矩阵的行,cols表示矩阵的列。

成员函数SetElems()用来给矩阵中的每一个元素赋值,Disp()用来显示矩阵中的所有元素。

其它友元函数分别重载+、-、*、/运算符。

(3)类rational类rational中,有两个成员变量:denominator用来表示有理数的分母,numerator表示有理数的分子。

有理数成员函数print()用来显示有理数,optimization()用来优化有理数函数。

友元函数real()用来将有理数转换为实数,其它友元函数分别重载+、-、*、/运算符。

(4)类set类set中,有两个成员变量:elems用来存储集合中的元素,card表示集合中元素的个数。

成员函数print()用来输出集合中的元素,additem()用来给集合增加元素。

友元函数分别重载了&、==、!=、+、*、<、<=运算符。

程序中的运算符重载函数都用友元函数来实现。

①类complex的友元函数复数的表达形式为a+bi,对复数进行运算符重载不像对一般书进行运算那样简单,它的运输方法如下:加法:(a+bi)+(c+di)=(a+c)+(b+d)i减法:(a+bi)-(c+di)=(a-c)+(b-d)i乘法:(a+bi)*(c-di)=(ac-bd)+(ad+bc)i除法:(a+bi)/(c+di)=((a+bi)*(c-di))/(c2+d2)重载函数将以上算法用在了函数中。

②类matrix的友元函数矩阵类的赋值,实质上是给二维数组赋值;矩阵相加减就是两个行数列数相同的二维数组相加减;二维数组相乘,其实就是两个二维数组,其中一个的行数等于另一个的列数,按矩阵相乘的法则进行计算。

③类rational的友元函数对有理数类进行的操作有下面几种:有理数相加:当两个有理数a/b和c/d相加时,可得到这样的算式:a/b+c/d=(a*d+b*c)/(b*d)有理数相减:当两个有理数a/b和c/d相减时,得到的结果是:分子:a*d-b*c分母:b*d有理数相乘:当两个有理数a/b和c/d相乘时,得到的结果是:分子:a*c分母:b*d有理数相除:当两个有理数a/b和c/d相除时,得到的结果是:分子:a*d分母:b*c每次得到结果时,都需要对有理数进行优化。

④类set的友元函数集合类的运算符重载操作主要有以下几种:判定某一元素是否属于集合:此操作用重载运算符函数&实现,返回值只有两种情况true或者false,取bool类型。

判断两个集合是否相等:判定两个集合是否相等,需要看两个集合中所包含的元素是否相同,并且不管顺序如何。

用重载运算符==来实现。

判断两个集合是否不等:是相等操作的取反,用!=来实现两个集合的交集:即求出两个集合中的公共元素,用运算符*实现。

两个个集合的并集:即两个集合相合并,合并以后去掉重复的元素,用运算符+来实现。

判定一个集合是否是另一个集合的子集:用运算符<=来实现判定一个集合是否是另一个集合的纯子集:用运算符<实现3.3基本功能要求(1)功能选择可以用菜单来实现例如:请选择您的计算内容:1.复数计算2.有理数计算3.矩阵计算4.集合计算0.退出用户通过输入不同的数字进入不同的菜单。

次级菜单主要显示本程序的功能,主要的功能有加法、减法、乘法和除法以及集合的求交集、求并集、求子集。

(2)运行时给出明确的提示信息。

比如,输入一个什么类型的数据。

根据用户的输入计算输出结果。

由于数据类型比较多,可以一次输入第一个复数的实部,第一个复数的虚部,再输入第二个复数的实部、虚部。

矩阵运算需要先输入矩阵的行数和列数,然后依次输出矩阵的第一行第一列的元素、第一行第二列的元素等等,依次类推。

有理数运算需要一次输入有理数的分子、分母。

集合运算需要输入集合的元素个数,然后依次输入集合中的每一个元素。

4.系统总体设计(确定程序功能模块)本程序的功能结构如1所示:图1程序功能结构图5.源程序代码/*****************************************************************************/#include<iostream.h>#include <math.h>#include <iomanip.h>/**************************************************************** *************///定义有理数类class rational{public:void print(); //输出函数rational(int x=0,int y=0);virtual ~rational();friend rational operator + (rational num1,rational num2); //重载运算符+friend rational operator - (rational num1,rational num2); //重载运算符-friend rational operator * (rational num1,rational num2); //重载运算符*friend rational operator / (rational num1,rational num2); //重载运算符/friend bool operator ==(rational num1,rational num2); //重载运算符==friend double real(rational x); //声明转换函数private:void optimization(); //优化有理数函数int denominator; //分母int numerator; //分子};/**************************************************************** *************/// 定义矩阵类class matrix{public:void Disp(); //显示矩阵所有元素int matrix::operator ()(short row, short col); //重载运算符成员函数()void SetElem(short row,short col,int val); //将元素(row,col)设置为valmatrix();matrix(short r,short c){rows= r;cols= c;elems= new int[rows*cols];}virtual ~matrix();friend matrix operator +(matrix p,matrix q); //重载运算符+friend matrix operator -(matrix p,matrix q); //重载运算符-friend matrix operator *(matrix p,matrix q); //重载运算符×private:int * elems; //存放矩阵的所有元素short cols; //矩阵的列short rows; //矩阵的行};/**************************************************************** *************///定义集合类enum errcode {noerr,overflow};class set{public:void print(); //显示输出集合元素set(){card=0;}virtual ~set();errcode additem(int); //增加集合元素friend bool operator &(int,set); //声明重载运算符&,判断某一整数是否属于某一集合friend bool operator ==(set,set); //声明重载运算符==,判断两个集合是否相等friend bool operator !=(set,set); //声明重载运算符!=,判断两个集合是否不等friend set operator *(set,set); //声明重载运算符*,求两个集合的交friend set operator +(set,set); //声明重载运算符+,求两个集合的并friend bool operator <(set,set); //声明重载运算符<,判断某一集合是否为另一集合的纯子集friend bool operator <=(set,set); //声明重载运算符<=,判断某一集合是否为另一集合的子集private:int elems[16];int card;};/*****************************************************************************/// 有理数类的各个成员函数的具体定义rational::rational(int x,int y){numerator= x;denominator= y;optimization(); //有理数优化}rational::~rational(){}/**************************************************************** *************//*函数名称:optimization功能描述:定义有理数优化函数修改记录:*/void rational::optimization(){int gcd;if(numerator==0) //如果分子为零,则分母为1后返回{denominator= 1;return;}//取分子分母中较小的数作为公约数极限gcd=(abs(numerator)>abs(denominator))?abs(numerator):abs(denominator);if(gcd==0)return; //若为0,则返回for(int i= gcd;i>1;i--) //用循环找最大公约数if((numerator%i==0)&& (denominator%i==0))break;numerator/=i; //i为最大公约数,将分子分母整除它,重新赋值denominator/=i;//若分子分母均为负数,则结果为正if(numerator<0 && denominator<0){numerator= -numerator;denominator= -denominator;}//若分子分母只有一个为负数,则调整为分子取负,分母取正else if(numerator<0 || denominator<0){numerator= -abs(numerator);denominator=abs(denominator);}}/**************************************************************** *************//*函数名称:print功能描述:显示复数修改记录:*/void rational::print(){cout<<numerator;if(numerator!=0 && denominator!=1)cout<<"/"<<denominator<<"\n";elsecout<<"\n";}/**************************************************************** *************//*函数名称:operator +功能描述:重载运算符+修改记录:*/rational operator + (rational num1,rational num2){rational temp;temp.denominator =num1.denominator *num2.denominator ;temp.numerator = num1.numerator *num2.denominator+num1.denominator *num2.numerator ;temp.optimization ();return temp;}/**************************************************************** *************//*函数名称:operator -功能描述:重载运算符-修改记录:*/rational operator - (rational num1,rational num2){rational temp;temp.denominator =num1.denominator *num2.denominator ;temp.numerator = num1.numerator *num2.denominator-num1.denominator *num2.numerator ;temp.optimization ();return temp;}/**************************************************************** *************//*函数名称:operator *功能描述:重载运算符*修改记录:*/rational operator * (rational num1,rational num2){rational temp;temp.denominator =num1.denominator *num2.denominator ;temp.numerator = num1.numerator *num2.numerator ;temp.optimization ();return temp;}/**************************************************************** *************//*函数名称:operator /功能描述:重载运算符/修改记录:*/rational operator / (rational num1,rational num2){rational temp;temp.denominator =num1.denominator *num2.numerator ;temp.numerator = num1.numerator *num2.denominator ;temp.optimization ();return temp;}/**************************************************************** *************//*函数名称:operator ==功能描述:重载运算符==修改记录:*/bool operator ==(rational num1,rational num2){if(num1.numerator ==num2.numerator && num1.denominator==num2.denominator )return true;elsereturn false;}/**************************************************************** *************//*函数名称:print功能描述:声明转换函数,将有理数对象转换为实数修改记录:*/double real(rational x){return(double(x.numerator ))/(double(x.denominator ));}/**************************************************************** *************/// 矩阵类的各个成员函数的具体定义matrix::matrix(){}matrix::~matrix(){}/**************************************************************** *************//*函数名称: matrix::operator ()(short row, short col)功能描述:重载运算符成员函数修改记录:*/int matrix::operator ()(short row, short col){if(row>=1 && row<=rows && col>=1 && col<=cols)return elems[(row-1)*cols + (col-1)];elsereturn 0;}/**************************************************************** *************//*函数名称: matrix::SetElem(short row, short col,int val)功能描述:将元素(row,col)设置为val修改记录:*/void matrix::SetElem(short row, short col,int val){if(row>=1 && row<=rows && col>=1 && col<=cols)elems[(row-1)*cols+(col-1)]= val;}/**************************************************************** *************//*函数名称: matrix::Disp()功能描述:显示矩阵元素修改记录:*/void matrix::Disp(){for(int row=1;row<=rows;row++){for(int col=1;col<=cols;col++)cout<<setw(2)<<(*this)(row,col)<<" ";cout<<endl;}}/**************************************************************** *************//*函数名称: operator +(matrix p,matrix q)功能描述:重载运算符+修改记录:*/matrix operator +(matrix p,matrix q){matrix m(p.rows,p.cols);if(p.rows!=q.rows || p.cols!=q.cols)return m;for(int r=1;r<=p.rows;r++)for(int c=1;c<=p.cols;c++)m.SetElem(r,c,p(r,c)+q(r,c));return m;}/**************************************************************** *************//*函数名称: operator -(matrix p,matrix q)功能描述:重载运算符-修改记录:*/matrix operator -(matrix p,matrix q){matrix m(p.rows,p.cols);if(p.rows!=q.rows || p.cols!=q.cols)return m;for(int r=1;r<=p.rows;r++)for(int c=1;c<=p.cols;c++)m.SetElem(r,c,p(r,c)-q(r,c));return m;}/**************************************************************** *************//*函数名称: operator *(matrix p,matrix q)功能描述:重载运算符*修改记录:*/matrix operator *(matrix p,matrix q){matrix m(p.rows,p.cols);if(p.cols!=q.rows)return m;for(int r=1;r<=p.rows;r++)for(int c=1;c<=p.cols;c++){int s=0;for(int i=1;i<=p.cols;i++)s+=p(r,i)*q(i,c);m.SetElem(r,c,s);}return m;}/*****************************************************************************/// 集合类的各个成员函数的具体定义set::~set(){}/**************************************************************** *************//*函数名称:print功能描述:显示复数修改记录:*/void set::print(){cout<<"{";for(int i=0;i<card-1;i++)cout<<elems[i]<<",";if(card>0)cout<<elems[card-1]<<"}\n";}/**************************************************************** *************//*函数名称:additem功能描述:增加集合元素修改记录:*/errcode set::additem(int elem){for(int i=0;i<card;i++)if(elems[i]==elem)return noerr;if(card<16){elems[card++]=elem;return noerr;}elsereturn overflow;}/**************************************************************** *************//*功能描述:声明重载运算符&,判断某一整数是否属于某一集合修改记录:*/bool operator &(int elem,set set1){for(int i=0;i<set1.card ;++i)if(set1.elems[i]==elem)return true;return false;}/**************************************************************** *************//*函数名称:operator ==功能描述:声明重载运算符==,判断两个集合是否相等修改记录:*/bool operator ==(set set1,set set2){if(set1.card !=set2.card ) //两个集合个数不等,必不相等return false;for(int i=0;i<set1.card;i++)if(!(set1.elems [i]& set2)) //调用&定义return false;return true;}/**************************************************************** *************//*函数名称:operator !=功能描述:声明重载运算符!=,判断两个集合是否不等修改记录:*/bool operator !=(set set1,set set2){if(set1== set2)return false;elsereturn true;}/**************************************************************** *************//*功能描述:声明重载运算符*,求两个集合的交修改记录:*/set operator *(set set1,set set2){set res;for(int i=0;i<set1.card ;i++)for(int j=0;j<set2.card ;j++)if(set1.elems [i]==set2.elems [j]){res.elems [res.card ++]= set1.elems [i];break;}//取set1中的每一个元素判断是否属于set2,若属于则加入到res中return res;}/**************************************************************** *************//*函数名称:operator +功能描述:声明重载运算符+,求两个集合的并修改记录:*/set operator +(set set1,set set2){set res=set1;for(int i=0;i<set2.card ;i++)res.additem (set2.elems [i]); //将set2中的元素追加到res中return res;}/**************************************************************** *************//*函数名称:operator <功能描述:声明重载运算符<,判断某一集合是否为另一集合的纯子集修改记录:*/bool operator <(set set1,set set2){if(set1.card<set2.card && set1<=set2)return true;elsereturn false;}/**************************************************************** *************//*函数名称:operator <=功能描述:声明重载运算符<=,判断某一集合是否为另一集合的子集修改记录:*/bool operator <=(set set1,set set2){if(set1.card >set2.card )return false;for(int i=0;i<set1.card ;i++)if(!(set1.elems [i] & set2))return false;return true;}/**************************************************************** *************/void jiemian();void tuichu();void complexcompute();void rationalcompute();void matrixcompute();void setcompute();/**************************************************************** ********//* main函数*//**************************************************************** ********/int main(){jiemian();return 0;}/**************************************************************** ********//* 主界面函数,实现了界面及函数调用*//************************************************************************/void jiemian(){int i;cout<<endl<<endl;cout<<"---------------------------------------------------------------"<<endl;cout<<"**"<<endl;cout<<" 欢迎进入用运算符重载实现特殊计算器程序"<<endl;cout<<"**"<<endl;cout<<"----------------------------------------------------------------"<<endl;while(i){cout<<endl<<endl;cout<<"请选择您的计算类型:"<<endl<<endl;cout<<" 1.有理数计算;"<<endl;cout<<" 2.矩阵计算;"<<endl;cout<<" 3.集合计算;"<<endl;cout<<" 0.退出;"<<endl;cout<<"请选择按键(0-4):";cin>>i;cout<<endl;//判断输入,0退出if(i>=0 && i<=4){switch(i){case 1:rationalcompute();break;case 2:matrixcompute();break;case 3:setcompute();break;case 0:tuichu();break;}}elsecout<<"输入错误!";cout<<"重新输入"<<endl;}}}/**************************************************************** ********//* 退出函数*//**************************************************************** ********/void tuichu(){cout<<"---------------------------------------------------------------"<<endl;cout<<"**"<<endl;cout<<" 谢谢使用运算符重载实现特殊计算器程序,再见!"<<endl;cout<<"**"<<endl;cout<<"----------------------------------------------------------------"<<endl;}/**************************************************************** ********//* 有理数计算函数*//**************************************************************** ********/void rationalcompute(){int j;cout<<"请选择您的有理数计算内容:"<<endl<<endl;cout<<" 1.两个有理数相加;"<<endl;cout<<" 2.两个有理数相减;"<<endl;cout<<" 3.两个有理数相乘;"<<endl;cout<<" 4.两个有理数相除;"<<endl;cout<<" 0.返回主界面;"<<endl;cout<<"请选择按键(0-4):";cin>>j;cout<<endl;{//判断输入,0退出if(j>=0 && j<=4){int r1,j1,r2,j2;cout<<"请输入第一个有理数的分子:";cin>>r1;cout<<"请输入第一个有理数的分母:";cin>>j1;cout<<"请输入第二个有理数的分子:";cin>>r2;cout<<"请输入第二个有理数的分母:";cin>>j2;rational c1(r1,j1);rational c2(r2,j2);rational c3;switch(j){//case1:有理数相加case 1:c3=c1+c2;c1.print ();c2.print ();c3.print ();break;case 2:c3=c1-c2;c1.print ();c2.print ();c3.print ();break;case 3:c3=c1*c2;c1.print ();c2.print ();c3.print ();break;case 4:c3=c1/c2;c1.print ();c2.print ();c3.print ();break;}}elsecout<<"按键错误,请重新选择!"<<endl;cout<<endl;cout<<"请选择您的有理数计算内容:"<<endl<<endl;cout<<" 1.两个有理数相加;"<<endl;cout<<" 2.两个有理数相减;"<<endl;cout<<" 3.两个有理数相乘;"<<endl;cout<<" 4.两个有理数相除;"<<endl;cout<<" 0.返回主界面;"<<endl;cout<<"请选择按键(0-4):";cin>>j;cout<<endl;}}/**************************************************************** ********//* 矩阵计算函数*//**************************************************************** ********/void matrixcompute(){int j;cout<<"请选择您的矩阵计算内容:"<<endl<<endl;cout<<" 1.两个矩阵相加;"<<endl;cout<<" 2.两个矩阵相减;"<<endl;cout<<" 3.两个矩阵相乘;"<<endl;cout<<" 0.返回主界面;"<<endl;cout<<"请选择按键(0-3):";cin>>j;cout<<endl;while(j){//判断输入,0退出if(j>=0 && j<=3){int r1,j1,r2,j2,val;cout<<"请输入第一个矩阵的行数:";cin>>r1;cout<<"请输入第一个矩阵的列数:";cin>>j1;cout<<"请输入第二个矩阵的行数:";cin>>r2;cout<<"请输入第二个矩阵的列数:";cin>>j2;matrix c1(r1,j1);matrix c2(r2,j2);matrix c3;cout<<"请输入第一个矩阵的元素:"<<endl;for(int m=1;m<=r1;m++)for(int n=1;n<=j1;n++){cout<<"第"<<m<<"行"<<n<<"列:";cin>>val;c1.SetElem (m,n,val);}c1.Disp();cout<<"请输入二个矩阵的元素:"<<endl;for(int h=1;h<=r2;h++)for( int k=1;k<=j2;k++){cout<<"第"<<h<<"行"<<k<<"列:";cin>>val;c2.SetElem (h,k,val);}c2.Disp();switch(j){case 1:c3=c1+c2;cout<<"第一个矩阵为:"<<endl;c1.Disp();cout<<"第二个矩阵为:"<<endl;c2.Disp();cout<<"第三个矩阵为:"<<endl;c3.Disp();break;case 2:c3=c1-c2;cout<<"第一个矩阵为:"<<endl;c1.Disp();cout<<"第二个矩阵为:"<<endl;c2.Disp();cout<<"第三个矩阵为:"<<endl;c3.Disp();break;case 3:c3=c1*c2;cout<<"第一个矩阵为:"<<endl;c1.Disp();cout<<"第二个矩阵为:"<<endl;c2.Disp();cout<<"第三个矩阵为:"<<endl;c3.Disp();break;}}elsecout<<"按键错误,请重新选择!"<<endl;cout<<endl;cout<<"请选择您的矩阵计算内容:"<<endl<<endl;cout<<" 1.两个矩阵相加;"<<endl;cout<<" 2.两个矩阵相减;"<<endl;cout<<" 3.两个矩阵相乘;"<<endl;cout<<" 0.返回主界面;"<<endl;cout<<"请选择按键(0-3):";cin>>j;cout<<endl;}}/**************************************************************** ********//* 集合计算函数*//**************************************************************** ********/void setcompute(){int j;cout<<"请选择您的集合计算内容:"<<endl<<endl;cout<<" 1.两个集合的交集;"<<endl;cout<<" 2.两个集合的并集;"<<endl;cout<<" 3.一个集合是否为另一个集合的子集;"<<endl;cout<<" 0.返回主界面;"<<endl;cout<<"请选择按键(0-3):";cin>>j;cout<<endl;while(j){//判断输入,0退出if(j>=0 && j<=3){int r1,r2,val;set set1,set2,set3;cout<<"请输入第一个集合的元素个数:";cin>>r1;cout<<"请输入第二个集合的元素个数:";cin>>r2;cout<<"请输入第一个集合的元素:"<<endl;for(int n=1;n<=r1;n++){cout<<"第"<<n<<"个元素为:";cin>>val;set1.additem (val);}set1.print ();cout<<"请输入二个集合的元素:"<<endl;for(n=1;n<=r2;n++){cout<<"第"<<n<<"个元素为:";cin>>val;set2.additem (val);}set2.print ();switch(j){//case1:并集case 1:set3=set1*set2;cout<<"第一个集合为:"<<endl;set1.print ();cout<<"第二个集合为:"<<endl;set2.print ();cout<<"交集为:"<<endl;set3.print ();break;case 2:set3=set1+set2;cout<<"第一个集合为:"<<endl;set1.print ();cout<<"第二个集合为:"<<endl;set2.print ();cout<<"并集为:"<<endl;set3.print ();break;case 3:cout<<"第一个集合为:"<<endl;set1.print ();cout<<"第二个集合为:"<<endl;set2.print ();if(set1<set2)cout<<"第一个集合为第二个集合的子集!"<<endl;break;}}elsecout<<"按键错误,请重新选择!"<<endl;cout<<endl;cout<<"请选择您的集合计算内容:"<<endl<<endl;cout<<" 1.两个集合的交集;"<<endl;cout<<" 2.两个集合的并集;"<<endl;cout<<" 3.一个集合是否为另一个集合的子集;"<<endl;cout<<" 0.返回主界面;"<<endl;cout<<"请选择按键(0-3):";cin>>j;cout<<endl;}}6.运行结果程序运行时,首先出现主界面菜单,由用户进行功能选择,选择不同的数字,进入不同的功能区。

相关文档
最新文档