计算器 c语言课程设计
- 格式:doc
- 大小:39.00 KB
- 文档页数:13
简易计算器c 课程设计一、课程目标知识目标:1. 让学生掌握简易计算器C的基本结构,包括算术表达式、运算符和操作数。
2. 使学生了解计算器C中的数据类型及其在内存中的存储方式。
3. 让学生理解顺序结构程序设计的原理,并能够运用到简易计算器C的开发中。
技能目标:1. 培养学生运用计算器C编写简单程序的能力,如加减乘除运算。
2. 培养学生分析问题、解决问题的能力,能够针对特定需求设计相应的计算器功能。
3. 提高学生的编程实践能力,通过动手编写代码,实现简易计算器的功能。
情感态度价值观目标:1. 培养学生对编程的兴趣和热情,激发他们主动探索新知识的欲望。
2. 培养学生团队协作意识,学会与他人共同分析问题、解决问题,共同进步。
3. 培养学生严谨、细致的学习态度,养成良好的编程习惯,为今后的学习打下基础。
课程性质:本课程属于编程启蒙课程,以实践操作为主,结合理论讲解,让学生在动手实践中掌握编程基础。
学生特点:本课程面向的学生为具有一定计算机操作基础,对编程感兴趣的年级学生。
教学要求:教师需结合学生特点,以实例为主线,引导学生主动参与课堂,注重培养学生的动手实践能力和团队协作精神。
通过本课程的学习,使学生在掌握计算器C基本知识的同时,提高编程技能和综合素质。
二、教学内容1. 计算器C基本语法:介绍计算器C的数据类型、变量、常量的定义及使用,让学生掌握基本语法规则。
- 教材章节:第一章 计算器C概述- 内容列举:数据类型、变量定义、常量定义、运算符、表达式。
2. 算术表达式:讲解算术表达式的构成,以及加减乘除运算符的使用方法。
- 教材章节:第二章 算术表达式- 内容列举:算术表达式构成、运算符优先级、括号的使用。
3. 顺序结构程序设计:引导学生学习顺序结构程序设计,掌握程序的基本执行流程。
- 教材章节:第三章 程序结构与控制流程- 内容列举:顺序结构、程序执行流程、输入输出语句。
4. 简易计算器C程序设计:结合前面的知识,设计一个简易计算器C程序,实现加减乘除运算。
课程设计说明书题目计算器程序设计起讫日期 2006 年 7月 3日至 2006 年 8月 6日所在院系软件学院专业机械+软件班级 04-2学生姓名偶偶哦学号指导教师2006年 8 月日摘要当今社会是信息社会,科技经济高速发展的社会!为了更方便人们的工作生活和加速人们处理信息的速度,计算器应运而生。
由于它体积小巧,携带方便,价格便宜,构造简单等诸多的优点成为人们生活中的必备品!随着科技的发展计算器的种类变得更多,功能变得更强大,体积变得更小!电脑的出现改变人们的生活习惯,很多事情都可以电脑来完成!电脑的更大一个优点就是可以通过软件的应用无限的延伸电脑功能的外延!下面我们将用我们学习的c语言编写一个简易的计算器程序!实现简单的初步的计算功能!本程序的编写基础是Tubro 汉化版,它在tubro c的原有基础上实现了多汉字的支持方便了我们的使用。
生成的程序可移植性强兼容性好稳定!现在只实现了加、减、乘、除、求幂、求模,求平方根,求Sin,求Cos,求Log10,以及一个时钟原代码。
这个系统是基于软件发展的生命周期来研制的,它可以直接输入数学表达式,不需要任何转换,就可以直接输出数学四则运算的结果。
但是,每次只能运算一个表达式。
不能运算多个表达式。
在程序里面在添加一组选择函数即可。
本论文主要介绍了本课题的开发背景,开发的过程和所要完成的功能。
重点的说明了系统设计思想,设计的步骤、难点技术和解决方案。
关键词:C语言 Tubro c 汉化版计算器时钟目录第一章综述 (1)1.1 课题的现实意义 (1)1.2 软件环境 (1)1.3 硬件环境 (1)第二章系统设计流程图 (2)2.1 系统流程图 (2)2.2 主要功能表 (2)第三章系统分析和设计 (3)3.1 图形的绘制和输出 (3)3.2 文本的输出显示 (3)3.3 计算函数的调用 (4)3.4 程序的运行和退出 (5)第四章系统测试 (6)4.1 系统测试 (6)4.2 调试 (6)4.3 错误原因分析一 (6)4.4 错误原因分析二 (6)第五章用户使用说明书 (8)5.1 运行Turbo C程序进入计算器界面 (8)5.2 计算器的使用 (9)5.3 退出程序 (9)第六章工作总结 (10)参考文献 (11)附录: 源代码第一章综述课题的现实意义现实学习生活中,常会遇到一些数目较大数据繁杂的数值运算,徒手运算起来很困难,这时候我们就必须用到计算器,所以便着手开发了这个计算器程序,以便用于自己的学习工作。
软件基础课程设计报告一、需求分析系统目标:设计的计算器至少能够进行简单的四则运算和求倒数求反以及开方运算。
主体功能:程序能实现:加,减,乘,除,开方,倒数等运算功能;还要实现数据的输入,输出,计算,显示及程序退出等功能。
另外还可以实现多种科学计算的功能,如:三角函数的计算,弧度与角度间的转换,对数指数的计算等。
开发环境:操作系统:Windows XP编程环境:Microsoft Visual C++ 6.0二、功能说明(1)包含的功能有:加、减、乘、除运算,开方、求倒数、三角函数、弧度与角度间的转换、对数指数的计算等功能。
(2)计算器上数字0—9为一个控件数组,加、减、乘、除为一个控件数组,其余为单一的控件。
(3)给对话框添加菜单。
(4)计算功能基本上是用系统内部函数。
(5)程序可以能自动判断输入数据的正确性,保证不出现多于一个小数点、以0开头等不正常现象。
(6)“CE”按钮可以清除所有已输入的数据从头计算,“Back”按钮可以实现退位功能。
(7)能够显示时间、日期。
三、详细设计(2)编辑资源(3)效果图四、程序附录计算器Dlg.cpp :#include "stdafx.h"#include "计算器.h"#include "计算器Dlg.h"#include "math.h"#include"FirstDlg.h"#include <windows.h>#define PI 3.14;#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////////////////// CAboutDlg dialog used for App Aboutclass CAboutDlg : public CDialog{public:CAboutDlg();// Dialog Data//{{AFX_DATA(CAboutDlg)enum { IDD = IDD_ABOUTBOX };//}}AFX_DATAprotected:virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL// Implementationprotected://{{AFX_MSG(CAboutDlg)//}}AFX_MSGDECLARE_MESSAGE_MAP()};CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD){//{{AFX_DATA_INIT(CAboutDlg)//}}AFX_DATA_INIT}void CAboutDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CAboutDlg)//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)//{{AFX_MSG_MAP(CAboutDlg)// No message handlers//}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CMyDlg dialogCMyDlg::CMyDlg(CWnd* pParent /*=NULL*/): CDialog(CMyDlg::IDD, pParent){//{{AFX_DATA_INIT(CMyDlg)m_result = 0.0;//}}AFX_DATA_INIT// Note that LoadIcon does not require a subsequent DestroyIcon in Win32m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);}void CMyDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CMyDlg)DDX_Control(pDX, IDC_EDIT1, m_EDIT);DDX_Text(pDX, IDC_EDIT1, m_result);//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CMyDlg, CDialog)//{{AFX_MSG_MAP(CMyDlg)ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_NUM0, OnNum0)ON_BN_CLICKED(IDC_NUM1, OnNum1)ON_BN_CLICKED(IDC_NUM2, OnNum2)ON_BN_CLICKED(IDC_NUM3, OnNum3)ON_BN_CLICKED(IDC_NUM4, OnNum4)ON_BN_CLICKED(IDC_NUM5, OnNum5)ON_BN_CLICKED(IDC_NUM6, OnNum6)ON_BN_CLICKED(IDC_NUM7, OnNum7)ON_BN_CLICKED(IDC_NUM8, OnNum8)ON_BN_CLICKED(IDC_NUM9, OnNum9)ON_BN_CLICKED(IDC_DOT, OnDot)ON_BN_CLICKED(IDC_CE, OnCe)ON_BN_CLICKED(IDC_jia, Onjia)ON_BN_CLICKED(IDC_jian, Onjian)ON_BN_CLICKED(IDC_cheng, Oncheng)ON_BN_CLICKED(IDC_chu, Onchu)ON_BN_CLICKED(IDC_dengyu, Ondengyu)ON_BN_CLICKED(IDC_daoshu, Ondaoshu)ON_BN_CLICKED(IDC_zhengfu, Onzhengfu)ON_BN_CLICKED(IDC_BACKSPACE, OnBackspace) ON_BN_CLICKED(IDC_Ln, OnLn)ON_BN_CLICKED(IDC_log, Onlog)ON_BN_CLICKED(IDC_RADIO2, OnRadio2)ON_BN_CLICKED(IDC_RADIO1, OnRadio1)ON_BN_CLICKED(IDC_sqrt, Onsqrt)ON_BN_CLICKED(IDC_sin, Onsin)ON_BN_CLICKED(IDC_cos, Oncos)ON_BN_CLICKED(IDC_tan, Ontan)ON_BN_CLICKED(IDC_pingfang, Onpingfang)ON_BN_CLICKED(IDC_lifang, Onlifang)ON_BN_CLICKED(IDC_mi, Onmi)ON_BN_CLICKED(IDC_Exp, OnExp)ON_BN_CLICKED(IDC_10demi, On10demi)ON_BN_CLICKED(IDC_jiecheng, Onjiecheng)ON_COMMAND(ID_TIME, OnTime)ON_COMMAND(ID_DATE, OnDate)ON_COMMAND(ID_EXIT, OnExit)ON_COMMAND(ID_HELP, OnHelp)//}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CMyDlg message handlersBOOL CMyDlg::OnInitDialog(){CDialog::OnInitDialog();ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL){CString strAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if (!strAboutMenu.IsEmpty()){pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);}}// Set the icon for this dialog. The framework does this automatically// when the application's main window is not a dialogSetIcon(m_hIcon, TRUE); // Set big iconSetIcon(m_hIcon, FALSE); // Set small icon// TODO: Add extra initialization hereCheckRadioButton(IDC_RADIO1,IDC_RADIO2,IDC_RADIO1);UpdateData(FALSE);quan2=1;dotflag=0;numflag=0;return TRUE; // return TRUE unless you set the focus to a control}void CMyDlg::OnSysCommand(UINT nID, LPARAM lParam){if ((nID & 0xFFF0) == IDM_ABOUTBOX){CAboutDlg dlgAbout;dlgAbout.DoModal();}else{CDialog::OnSysCommand(nID, lParam);}}// If you add a minimize button to your dialog, you will need the code below// to draw the icon. For MFC applications using the document/view model,// this is automatically done for you by the framework.void CMyDlg::OnPaint(){if (IsIconic()){CPaintDC dc(this); // device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;// Draw the icondc.DrawIcon(x, y, m_hIcon);}else{CDialog::OnPaint();}}// The system calls this to obtain the cursor to display while the user drags // the minimized window.HCURSOR CMyDlg::OnQueryDragIcon(){return (HCURSOR) m_hIcon;}void CMyDlg::OnNum0(){UpdateData();if(dotflag){quan2*=10;m_result+=0/(double)quan2;}else{if(numflag){m_result=m_result*10+0;}else m_result=0;}numflag=1;UpdateData(FALSE);}void CMyDlg::OnNum1(){UpdateData();if(dotflag){quan2*=10;m_result+=1/(double)quan2;}if(numflag){m_result=m_result*10+1;}else m_result=1;}numflag=1;UpdateData(FALSE);}void CMyDlg::OnNum2(){UpdateData();if(dotflag){quan2*=10;m_result+=2/(double)quan2;}else{if(numflag){m_result=m_result*10+2;}else m_result=2;}numflag=1;UpdateData(FALSE);}void CMyDlg::OnNum3(){UpdateData();if(dotflag){quan2*=10;m_result+=3/(double)quan2;}else{if(numflag){m_result=m_result*10+3;}else m_result=3;}numflag=1;UpdateData(FALSE);{UpdateData();if(dotflag){quan2*=10;m_result+=4/(double)quan2;}else{if(numflag){m_result=m_result*10+4;}else m_result=4;}numflag=1;UpdateData(FALSE);}void CMyDlg::OnNum5(){UpdateData();if(dotflag){quan2*=10;m_result+=5/(double)quan2;}else{if(numflag){m_result=m_result*10+5;}else m_result=5;}numflag=1;UpdateData(FALSE);}void CMyDlg::OnNum6(){UpdateData();if(dotflag){quan2*=10;m_result+=6/(double)quan2;}else{m_result=m_result*10+6;}else m_result=6;}numflag=1;UpdateData(FALSE);}void CMyDlg::OnNum7(){UpdateData();if(dotflag){quan2*=10;m_result+=7/(double)quan2;}else{if(numflag){m_result=m_result*10+7;}else m_result=7;}numflag=1;UpdateData(FALSE);}void CMyDlg::OnNum8(){UpdateData();if(dotflag){quan2*=10;m_result+=8/(double)quan2;}else{if(numflag){m_result=m_result*10+8;}else m_result=8;}numflag=1;UpdateData(FALSE);}UpdateData();if(dotflag){quan2*=10;m_result+=9/(double)quan2;}else{if(numflag){m_result=m_result*10+9;}else m_result=9;}numflag=1;UpdateData(FALSE);}void CMyDlg::OnDot(){UpdateData();dotflag=1;m_result+=0.0;UpdateData(FALSE);}void CMyDlg::OnCe(){UpdateData();m_EDIT.SetSel(0,-1);m_EDIT.ReplaceSel("");m_result=0;num1=0;num2=0;numflag=0;dotflag=0;quan2=1;UpdateData(FALSE);}void CMyDlg::Onjia(){UpdateData();num1=m_result;cal='+';numflag=0;dotflag=0;quan2=1;}UpdateData();num1=m_result;cal='-';numflag=0;dotflag=0;quan2=1;}void CMyDlg::Oncheng(){UpdateData();num1=m_result;cal='*';numflag=0;dotflag=0;quan2=1;}void CMyDlg::Onchu(){UpdateData();num1=m_result;cal='/';numflag=0;dotflag=0;quan2=1;}void CMyDlg::Ondengyu(){UpdateData();num2=m_result;switch(cal){case'+':m_result=num1+num2;break; case'-':m_result=num1-num2;break; case'*':m_result=num1*num2;break; case'/':m_result=num1/num2;break;case'x':m_result=pow(num1,num2);break; }numflag=0;dotflag=0;quan2=1;UpdateData(FALSE);}void CMyDlg::Ondaoshu(){UpdateData();m_result=1/m_result;numflag=0;UpdateData(FALSE);}void CMyDlg::Onzhengfu(){UpdateData();m_result=0-m_result;UpdateData(FALSE);}void CMyDlg::OnBackspace(){UpdateData();static int dotquan=quan2;long temp;if(dotflag&&numflag){if(dotquan>=10){temp=(long)(m_result*dotquan);m_result=(double)(temp/10);dotquan/=10;m_result=m_result/dotquan;}}else{//UpdateData();if(numflag&&m_result){m_result=(long)m_result/10;}}UpdateData(FALSE);}void CMyDlg::OnLn(){UpdateData();m_result=log(m_result);numflag=0;dotflag=0;quan2=1;UpdateData(FALSE);}void CMyDlg::Onlog(){UpdateData();m_result=log(m_result)/log(10);quan2=1;UpdateData(FALSE);}void CMyDlg::OnRadio2(){m_IsDegree=1;i=1;UpdateData(TRUE);}void CMyDlg::OnRadio1(){m_IsDegree=0;i=(2*3.1415926)/360;UpdateData(FALSE);}void CMyDlg::Onsqrt(){UpdateData();if(m_result<0){MessageBox("输入无效!");return;}m_result = sqrt(m_result); UpdateData(FALSE);}void CMyDlg::Onsin(){m_result=sin(m_result*i); UpdateData(FALSE);}void CMyDlg::Oncos(){m_result=cos(m_result*i); UpdateData(FALSE);}void CMyDlg::Ontan(){m_result=tan(m_result*i); UpdateData(FALSE);}void CMyDlg::Onpingfang() {UpdateData();m_result=m_result*m_result; UpdateData(FALSE);void CMyDlg::Onlifang(){UpdateData();m_result=m_result*m_result*m_result; UpdateData(FALSE);}void CMyDlg::Onmi(){UpdateData();num1=m_result;cal='x';numflag=0;dotflag=0;quan2=1;}void CMyDlg::OnExp(){m_result=exp(m_result); UpdateData(FALSE);}void CMyDlg::On10demi(){UpdateData();m_result=pow(10,m_result); UpdateData(FALSE);}void CMyDlg::Onjiecheng(){if(m_result<0){MessageBox("输入数据无效!");return;}int q;for(q=(int)m_result-1;q>=1;q--)m_result*=q;UpdateData(FALSE);}void CMyDlg::OnDate(){CFirstDlg dlg;dlg.DoModal();}void CMyDlg::OnTime(){UpdateData();TIME=1;tNow=CTime::GetCurrentTime();if(TIME){m_EDIT.SetSel(0,-1);m_EDIT.ReplaceSel("");CString sNow=tNow.Format("%I:%M:%S");m_EDIT.SetSel(0,-1);m_EDIT.ReplaceSel(sNow);}else{CString sNow=tNow.Format("%I:%M:%S");m_EDIT.SetSel(0,-1);m_EDIT.ReplaceSel(sNow);}}void CMyDlg::OnExit(){OnOK();}void CMyDlg::OnHelp(){MessageBox("班级:09通信一班组员:陈熙竹叶文晖周方"); }。
黑龙江东方学院C语言课程设计课题名称:电子计算器C语言编程专业:电子信息工程班级: 09级一班姓名:学号:指导教师:2010年12月23日目录第一章绪论.....................................1.1 概述............................ ...........1.2 电子计算器原理............................ .1.3 课题的意义及设计目标........................1.4 主要设计内容................................ 第二章软件设计相关基础知识介绍...............书写程序时应注意的相关事项..................基本类型的分类及特点........................结构简介....................................结构程序设计............................分支程序设计............................循环程序设计............................第三章软件设计流程............................主程序流程图................................数据输入子程序流程图........................电子计算器结果输出子程序....................第四章软件运行界面说明........................电子计算器四则运算结果......................附录A 常用函数及说明.......................... 附录 B C语言程序及讲解 ......................... 总结 ..............................................电子计算器程序设计第一章绪论概述17世纪初,西方国家的计算工具有了较大的发展。
目录1 前言 (2)2 需求分析 (2)2.1要求 (2)2.2任务 (2)2.3运行环境 (2)2.4开发工具 (2)3 概要设计 (2)3.1系统流程图 (3)3.2查询函数流程图 (4)4 详细设计 (6)4.1分析和设计 (6)4.2具体代码实现 (6)4.3程序运行结果 (14)5 课程设计总结 (14)参考文献 (15)致谢 (15)1 前言编写一个程序来实现算术计算器。
通过结构体数组和共用体数组来存放输入的每一数字或运算符号的记录(包括1、2、3等数字,+、--、*、等运算符号),然后将其信息存入文件中。
输入一个算术计算式,就在屏幕上显示结果。
2 需求分析2.1要求(1)用C语言实现程序设计;(2)利用结构体、共用体进行相关信息处理;(3)画出查询模块的流程图;(4)系统的各个功能模块要求用函数的形式实现;(5)界面友好(良好的人机互交),程序要有注释。
2.2任务(1)定义一个结构体类型数组,输入0~9及+、--、*等符号的信息,将其信息存入文件中;(2)输入简单的加减乘除算术计算式,并在屏幕上显示计算结果;(3)画出部分模块的流程图;(4)编写代码;(5)程序分析与调试。
2.3运行环境(1)WINDOWS2000/XP系统(2)TurboC2.0编译环境2.4开发工具C语言3 概要设计3.1系统流程图如图3.1所示。
w图3.1 系统流程图3.2查询函数流程图(1)边界画线函数流程图(2)图标按钮设置函数流程图4 详细设计4.1分析和设计(1)在程序的开头部分定义了结构体类型,用来存放按钮信息,使数据能够从键盘上输入。
用输入函数input()来输入按键放在button[]数组中。
再定义结构体栈:struct_stack() 用于数据的输入和存放。
(2)进而定义了表格窗口函数,窗口画线函数draw_win() 和边界线函数draw_border(),定义out_text_win()输出文本窗口,定义window_xy(32,3); 计算结果窗口。
《C++语言程序设计》课程设计报告姓名:指导学号:班级:10计本2班日期:2011年05月20日计算机科学与技术系课程设计评分表课程名称:面向对象程序设计分数计算器教师签名:日期:C++语言课程设计——简单计算器说明书目录一、设计目标 (4)二、设计图 (5)三、图解 (6)四、调试和测试 (11)五、分析及结论 (12)六、附录 (14)一、设计目标制作一个分数计算器,以完成分数之间,分数与整数之间的四则运算,以及求分数的指数。
系统界面不做牵制要求。
在进行运算后可以选择继续运算或者进行下一次新的运算,能实现返回功能。
二、设计图1、总体设计图2、详细图模块功能说明及调用关系说明:三、图解1、欢迎使用简单计算器2、等待系统进入主菜单在此选择计算类型【选择代码,回车确定】1、为选择分数与分数之间的四则运算、2、为选择分数与整数之间的四则运算3、为分数的指数运算0、为安全退出程序3、选择分数与分数之间的四则运算分数与分数的加法如:18/5+16/3=134/15分数与分数的减法如:1/6-/2=-1/3注:在此举例分数与分数的加法、减法计算完成后,按y或n,选择是否继续,y则继续本类运算,n为返回到主菜单,再次进行选择4、选择分数与整数之间的四则运算分数与整数的乘法如:1/2*2=1/1分数与整数的加法如:1/5+6=31/5注:在此举例分数与整数的乘法、加法计算完成后,按y或n,选择是否继续,y则继续本类运算,n为返回到主菜单,再次进行选择5、选择分数的指数运算如:1/3的2次方等于1/9如:2/3的2次方等于4/9注:计算完成后,按y或n,选择是否继续,y则继续本类运算,n为返回到主菜单,再次进行选择6、安全退出至此,以安全退出。
四、调试和测试<1>、调试方法:首先打开Microsoft Visual C++ 6.0 ,运行程序,出现错误修改再运行,直至运行结果0 error ,0 warning结束。
编号:课程设计说明书题目:简单计算器院(系):信息与通信学院专业:信息对抗学生姓名:孙浩宇刘剑学号: 1100250111 1100250106 指导教师:马杰2013年12 月4 日1. 题目与要求 (1)1.1 课程设计目的 (1)1.2本系统涉及的知识点 (1)1.3功能要求 (1)2.课程设计的基本过程 (1)2.1 功能需求 (1)3.总体设计 (1)3.1 系统模块机构框图 (1)3.2 功能模块框图 (2)3.3系统流程图 (3)3.4界面设计 (4)4.详细设计 (5)4.1模块描述 (5)4.2系统头文件 (5)4.3函数声明 (5)5.程序测试 (12)6.设计总结 (12)6.1谢辞 (12)6.2参考文献 (12)1. 题目与要求1.1 课程设计目的(1)巩固和加深C语言课程的基本知识的理解和掌握(2)掌握C语言编程和程序调试的基本技能(3)利用C语言进行基本的软件设计(4)掌握书写程序设计说明文档的能力(5)提高运用C语言解决实际问题的能力1.2 本系统涉及的知识点Goto loop循环 switch选择语句嵌套return退出语句格式化输入和输出If判断语句函数的调用2. 课程设计的基本过程课程设计的基本过程包括5个步骤,即功能需求,总体设计,详细设计,程序测试,结论。
每个步骤都有其特定的任务。
2.1 功能需求功能概述:该软件为用户提供一个在windows系统上运行的简单计算器,能进行简单的加、减、乘、除四则运算和一些常用特殊运算,包括余弦运算、正弦运算、正切运算、绝对值、平方根运算、以e为底的指数运算、以10为底的对数运算。
3.总体设计3.1 系统模块机构框图3.2功能模块框图3.3系统流程图3.4界面设计系统主界面四则运算界面特殊运算界面4. 详细设计基于系统需求分析与系统总体设计的结论,本系统采用Visual C++实现各模块的功能。
下面按照模块的划分来分别阐述系统的详细设计和实现过程。
c语言课程设计简易计算器 0 / 25 C语言课程设计 学院:地球物理与测控技术学院 专业:测控技术与仪器 姓名:邬博文 学号:2 c语言课程设计简易计算器
1 / 25 目录 第一章 选题的意义 .................................................................. 错误!未指定书签。
1.1 课题研究的背景 .......................................................... 错误!未指定书签。
1.2 自己设计的优势 .......................................................... 错误!未指定书签。
1.3 设计上功能上的不足 ................................................. 错误!未指定书签。
第二章 研究的基础 .................................................................. 错误!未指定书签。
2.1 涉与的主要知识点 ...................................................... 错误!未指定书签。
第三章 研究的可行性 .............................................................. 错误!未指定书签。
3.1 技术的可行性 .............................................................. 错误!未指定书签。
3.2 经济效益和社会效益的可行性 ................................. 错误!未指定书签。
第四章 研究的具体部分 .......................................................... 错误!未指定书签。
郑州师范学院信息科学与技术学院《简单计算器》课程设计报告设计题目:简单计算器班级: B15计科二班组长:组员:指导教师:完成日期: 2016 年 12 月 23 日成绩:摘要本次选做的课程设计是实现简单计算器的问题。
计算器是一个常用的运算工具,本次课题要求用程序语言的方式解决问题。
此问题仅使用数据结构中的栈操作就可以解决此问题。
而在为了方便使用,添加了easyx图形库实现了UI设计。
为了接近平常使用的计算器,特地创建死循环而且添加了“CE”清空输入和“<-”删除键来控制输入错误或者循环使用的问题。
在UI方面主要是实现按键和点击响应等交互,方便输入和修改,在程序框上面有输入和显示结果的文本框。
在计算过程中,以栈出栈进站的特性把中缀形式的算数表达式转化为计算机方便计算的后缀表达式,最后计算出结果以文本方式显示在结果输出框内。
目录摘要 (I)目录 (II)1需求分析 (3)1.1功能简介及分析 (3)1.2设计平台 (3)2概要设计 (3)2.1 Trans函数 (3)2.2 Compvalue 函数 (4)2.3 GetKey函数 (4)3详细设计和实现 (4)3.1转化为逆波兰式 (4)3.2计算逆波兰式 (6)3.3实现流程图 (7)3.3部分具体程序 (8)4调试与操作说明 (14)4.1调试情况 (14)4.2操作说明 (14)5设计总结 (15)参考文献 (17)1需求分析1.1功能简介及分析本次选做的课程设计是实现简单的计算器并且添加UI的交互。
此计算器是以软件的形式实现的计算器,运行在windows系统。
计算器在功能上分为三类,分别是:常见计算器,专用计算器,综合功能计算器。
常见的计算器又分为四种:①简单型计算器:只实现基本的加减乘除和括号运算。
②科学型计算器:可以进行乘方、开方、指数、对数、三角函数、统计等方面的运算,又称函数计算器。
③程序员计算器:专门为程序员设计的计算器, 主要特点是支持And, Or, Not, Xor:最基本的与或非和异或操作, 移位操作 Lsh, Rsh:全称是Left Shift和Right Shift,也就是左移和右移操作,你需要输入你要移动的位数(不能大于最大位数) RoL, RoR:全称是Rotate Left和Rotate Right,对于RoL来讲,就是向左移动一位,并将移出的那位补到最右边那位上,RoR类似。
C语言课程设计报告题目:计算器设计者:专业班级:软件工程.NET11-3班学号:311109070305指导老师:刘洁2012年 06月 25日河南理工大学计算机学院目录1.设计任务书 (1)1.1 课程设计题目 (1)1.2 课程设计的实验环境 (1)1.3 课程设计的预备知识 (1)1.4 课程设计要求 (1)2.本人课题及任务 (2)3.程序功能简介 (2)3.1程序功能介绍 (2)3.2程序整体设计说明 (2)4.主体内容 (2)4.1设计思路 (2)4.2数据结构设计及用法说明 (3)4.3程序结构(流程图) (3)4.4各模块的功能及程序说明 (5)4.5程序结果 (5)4.6程序源代码及注释 (8)4.7课程设计总结 (11)5.附录 (13)1.设计任务书1.1 课程设计目的本课程设计是计算机科学与技术专业重要的实践性环节之一,是在学生学习完《程序设计语言(C)》课程后进行的一次全面的综合练习。
本课程设计的目的和任务:1. 巩固和加深学生对C语言课程的基本知识的理解和掌握2. 掌握C语言编程和程序调试的基本技能3. 利用C语言进行基本的软件设计4. 掌握书写程序设计说明文档的能力5. 提高运用C语言解决实际问题的能力1.2 课程设计的实验环境硬件要求能运行Windows 2000/XP操作系统的微机系统。
C语言程序设计及相应的开发环境。
1.3 课程设计的预备知识熟悉C语言及C语言开发工具。
1.4 课程设计要求1. 分析课程设计题目的要求2. 写出详细设计说明3. 编写程序代码,调试程序使其能正确运行4. 设计完成的软件要便于操作和使用5. 设计完成后提交课程设计报告2.本人课题及任务2.1. 掌握C语言编程的基础知识。
2.2. 较熟练地编写C语言应用程序。
2.3. 了解C语言的常用标准函数、编程技巧、异常处理。
2.4. 联系已学过的内容,巩固所学的理论,增强独立工作能力。
2.5. 通过设计主要使学生有一个独立编写程序的过程,对理论学习及动手能力都有一个很大的提高。
1.目的与要求本次课程设计的题目是:一元多项式简单的计算器1主要功能:(1)输入并建立多项式;(2)输出多项式;(3)两个多项式相加,建立并输出和多项式;(4)两个多项式相减,建立并输出差多项式。
(5)算法的时间复杂度、另外可以提出算法的改进方法2要求:一元多项式简单计算器的基本功能本次课程设计目的是编写一个多项式的简单计算器,能够输入并建立多项式、输出多项式、进行两个多项式之间的简单加减运算并输出结果。
要求该程序能具有一元多项式计算器的基本功能,也就是要有灵活的可操作性和可视性。
由于一元多项式的项数无法预知,且一元多项式各个项具有多个参数(系数,幂指数),在设计的过程中考虑使用链表。
由于双向链表的设计难度和程序复杂度较大,从这方面考虑,最后决定使用单向链表,并以指针数组的形式储存多个链表的头指针,做到可以输入多个多项式,并选择其中任意两个多项式进行简单的加减运算,得到一个和多项式和差多项式。
同时,为了增强该程序的操作灵活性和可视性,在编辑一些运算类的函数之外,还要设计一些让程序能够进行指令操作和可视操作的函数和界面函数,让程序的界面友好,一些附带的文字说明也可以让程序使用者更方便地使用。
由于程序的功能相对较多,程序的功能模块数量也随着增加,对程序进行模块分区,可以增强程序设计的条理性,让程序代码的阅读者在阅读的过程中也相对容易,同时,也有利于以后的程序功能升级和算法的改进。
另外,由于本人是C语言初学者,在程序设计过程中难免出错,程序的功能函数模块化,也能让在设计过程中进行修改增加便利。
2.总体设计该程序的主线流程图:系统各个功能模块示意图:系统的各个功能函数包括:1.建立函数(将多项式的参数赋值到各个节点上)2.输出函数(以多项式的形式输出链表)3.相加函数(两个多项数幂相同的项数相加)4.取反函数(多项式项的系数取相反数)5.升序函数(或整理函数)(将多项式按项的幂升序排列)6.计数函数(计算出多项式的项数);7.最大幂函数(计算出多项式的最高次幂)8.最小幂函数(计算出多项式的最低次幂)9.界面函数(对程序的界面进行编辑)10.操作函数(使各项指令对应到相应的操作)3.详细设计3.1功能模块设计系统中的建立链表函数(creat)工作流程图:建立链表(creat)算法设计思路:链表输出函数(print)工作流程图:输出链表(print)算法设计思路:相加函数(add)的工作流程图:该函数(add)如下:struct multin *add(struct multin *mul_2,struct multin *mul_1){struct multin *p0_1,*p0_2,*p2,*p3,*p=NULL;int i,x,y,n;x=(powermin(mul_1)<powermin(mul_2)?powermin(mul_1):powermin(mul_2)); y=(powermax(mul_1)>powermax(mul_2)?powermax(mul_1):powermax(mul_2)); n=x;p2=p3=(struct multin *) malloc(sizeof(struct multin));for(i=x;i<=y;i++){p2->coef=0;p0_1=mul_1;while(p0_1->next!=NULL){if(p0_1->power==i){p2->coef=p2->coef+p0_1->coef;p2->power=p0_1->power;p2->c1=p0_1->c1;}p0_1=p0_1->next;}if(p0_1->next==NULL)if(p0_1->power==i){p2->coef=p2->coef+p0_1->coef;p2->power=p0_1->power;p2->c1=p0_1->c1;}p0_2=mul_2;while(p0_2->next!=NULL){if(p0_2->power==i){p2->coef=p2->coef+p0_2->coef;p2->power=p0_2->power;p2->c1=p0_2->c1;}p0_2=p0_2->next;}if(p0_2->next==NULL)if(p0_2->power==i){p2->coef=p2->coef+p0_2->coef;p2->power=p0_2->power;p2->c1=p0_2->c1;}if(p2->coef==0) continue;else{if(p2->power==n)p=p2;else p3->next=p2;p3=p2;p2=(struct multin *) malloc(sizeof(struct multin));} }p3->next=NULL;p->amount=count(p);return(p);}操作函数(operate)算法设计思路:(为了避免使用者重复输入数据要重启程序,本函数采用一个goto语句)由于函数模块较多,报告篇幅有限,其他的函数比较简单,该部分不过于详细介绍。
课程设计说明书题目计算器程序设计 _________ 起讫日期2006 年7月3日至2006年8月6日所在院系 ____________ 软件学院_______________专业机械+软件班级04-2学生姓名偶偶哦学号 ____________________指导教师___________________________________2006年8 月摘要当今社会是信息社会,科技经济高速发展的社会!为了更方便人们的工作生活和加速人们处理信息的速度,计算器应运而生。
由于它体积小巧,携带方便,价格便宜,构造简单等诸多的优点成为人们生活中的必备品!随着科技的发展计算器的种类变得更多,功能变得更强大,体积变得更小!电脑的出现改变人们的生活习惯,很多事情都可以电脑来完成!电脑的更大一个优点就是可以通过软件的应用无限的延伸电脑功能的外延!下面我们将用我们学习的 c 语言编写一个简易的计算器程序!实现简单的初步的计算功能!本程序的编写基础是Tubro 汉化版, 它在tubro c 的原有基础上实现了多汉字的支持方便了我们的使用。
生成的程序可移植性强兼容性好稳定!现在只实现了加、减、乘、除、求幕、求模,求平方根,求Sin,求Cos,求LoglO,以及一个时钟原代码。
这个系统是基于软件发展的生命周期来研制的,它可以直接输入数学表达式,不需要任何转换,就可以直接输出数学四则运算的结果。
但是,每次只能运算一个表达式。
不能运算多个表达式。
在程序里面在添加一组选择函数即可。
本论文主要介绍了本课题的开发背景,开发的过程和所要完成的功能。
重点的说明了系统设计思想,设计的步骤、难点技术和解决方案。
关键词:C语言Tubro c 汉化版计算器时钟目录第一章综述 (1)1. 1课题的现实意义 (1)1. 2软件环境 (1)1. 3硬件环境 (1)第二章系统设计流程图 (2)2. 1 系统流程图 (2)2. 2 主要功能表 (2)第三章系统分析和设计 (3)3. 1 图形的绘制和输出 (3)3. 2 文本的输出显示 (3)3. 3计算函数的调用 (4)3. 4 程序的运行和退出 (5)第四章系统测试 (6)4. 1 系统测试 (6)4. 2 调试 (6)4. 3错误原因分析一 (6)4. 4错误原因分析二 (6)第五章用户使用说明书 (8)5. 1 运行Turbo C程序进入计算器界面 (8)5. 2 计算器的使用 (9)5. 3 退出程序 (9)第六章工作总结 (10)参考文献 (11)附录: 源代码第一章综述课题的现实意义现实学习生活中,常会遇到一些数目较大数据繁杂的数值运算,徒手运算起来很困难,这时候我们就必须用到计算器,所以便着手开发了这个计算器程序,以便用于自己的学习工作。
. . 设计分析: 我做的是一个计算器程序,属于B级。题目要求如下: 1、完善计算器程序,改为可对实数操作。 2、完善程序,改为多个操作数基本四则运算,遇到z为止。 3、增加函数,完成四则混合运算,增加相应的主菜单选项 4、添加语句,使四则运算具有测试功能。 5、可扩充其功能。 所给的计算器源程序中已有基本的加、减、乘、除和开方运算,我所要做的就是添加一个可以进行四则混合运算功能的类。 本程序所要用到的头文件有如下几种: process,iostream,conio,stdlib,math和assert. 原程序中已经定义了加、减、乘、除和开方的运算,它用了类oopcalc将这几个基本运算进行封装。类中包含以下几个函数: void calcadd(); void calcsub(); void calcdiv(); void calcmult(); void calcfartocel(); void calcceltofar(); void calcsroot(); void exitprog(); void menu(); . . void badinput(); 每个函数的参数形式如下: int add(float x,float y); int sub(float x, float y); int div(float x, float y); int mult(float x, float y); int fartocel(float x); int celtofar(float x); int sqroot(float x); 原程序对这几个函数分别做了如下定义: int oopcalc::add(float x, float y) { val = x + y; return val; } int oopcalc::sub(float x,float y) { val = x - y; return val; } int oopcalc::div(float x, float y) { . . val = x / y; return val; } int oopcalc::mult(float x, float y) { val = x * y; return val; } int oopcalc::fartocel(float x) { int cel = ((x - 32) * 5) / 9; return cel; } int oopcalc::celtofar(float x) { int f; f = x * 9 / 5 + 32; return f; } int oopcalc::sqroot(float x) { int g = sqrt(x); . . return g; } 首先要把程序改为可对实数进行操作,由于原程序中的操作数类型都是整形,因此我所采用的办法就是把“int”依次改成“float”。这是最简单的修改办法,也是最有效的修改办法。 在menu()函数中使用了 switch()语句来对功能进行选择,以便于操作。不同的数字则对应不同的功能。 下面所要进行的修改就是添加四则运算功能。 首先在switch()语句中添加一个新的选项,以用于作为进行四则运算的入口。然后设计一个简单的计算器类,增加四则运算功能。 简单的运算只要求有两个操作数,如原程序中的加、减、乘除。而所增加的四则运算则要求输入多个操作数,有计算机自己通过程序来解决多个数字的运算。这就要求设计的程序能够自动辨别“+”,“-”,“*”,“/”的优先级和结合性。在这里,我运用了栈的功能进行对程序的修改。 设有表达式: a+b*c-d/e= 为实现运算符的优先级,采用两个栈:一个数栈,一个运算符栈。数栈暂时存放操作数,运算符栈暂时存放运算符。从左向右扫描算术表达式,遇到操作数,压入数栈;遇到运算符,则与运算符栈栈顶的运算符比较优先级。若新的运算符优先级高或运算符栈空,则压栈;否则,将栈顶运算符出栈,与数字栈出栈的两个数据进行运算,结果 . . 压入数栈,再将新运算符压栈。继续扫描,直到遇到=号,扫描结束。栈中数据继续按前面规则出栈。上面所列表达式运算过程如下图所示: (A) (B) (C) (D) (E) N O N O N O N O N O - - - - - - - - - - - - - - - - - - - - - - —> e - --> - - --> - - --> - - c - b*c->t1 d / d/e->t2 t2 - t1-t2->t3 - - a+t3->t4 - - b * t1 _ t1 _ t3 - - - a + a + a + a + - - 首先a入数栈,“+”入运算符栈,b入数栈,“*”入运算符栈,c入数栈,见图(A);再扫描到“-”号,则“*”和c、b出栈,b*c得t1压入数栈,“-”号压入运算符栈,“/’号压入运算符栈,e压入数栈,遇到=, . . 扫描结束,见图(B);”/“号弹出运算符栈,e、d弹出数栈,d/e得t2压数栈,见图C;”-“号出栈,t2、t1出栈,t1-t2得t3、t4压栈,见图(D);”+“号出栈,t3、a出栈,栈全空,a+t3得t4,即运算结果。 增加四则混合运算的功能要解决的问题是怎样使计算机能分辨出运算符的优先级。这里我想到了我们上课学的栈和链表的知识这题我用到了链栈。首先建立一个链栈的类模板和一个结点链表。 templateclass Stack; 这一行是类结点的声明。因为在类中也同样遵循“先声明后使用”的原则。 templateclass Node{ T info; Node*link; public: Node(T data=0,Node*next=NULL) { info=data; link=next; } friend class Stack; }; 这一段是结点模板的定义。Info是结点,“Node*link”是定义了一个结点指针。“friend class Stack;”定义了类Node的友元函数 . . Stack。“info=data;”设置第一个接点的值,“link=next;”把下一个指针的值赋给link指针。 templateclass Stack{ Node*top; public: Stack(){top=NULL;} ~Stack(); void Push(const T &data); T Pop(); T GetTop(); void MakeEmpty(); bool IsEmpty(){return top==NULL;} }; 这一段是类模板的定义。其中“Node*top”是栈顶指针的定义。“Stack()”是类的构造函数,在构造函数中把栈顶指针指向NULL.“~Stack()”是析构函数。“void Push(const T &data)”是用于压栈的函数。“T Pop()”是用于将数据弹出栈的函数。“T GetTop()”是用于取栈顶元素的函数。“void Makeempty()”是用于将栈中的元素清空的函数。 templatevoid Stack::MakeEmpty(){ Node*temp; while(top!=NULL){temp=top;top=top->link;delete temp;} } . . 这一段是对清空链表的函数进行定义。设置了一个指针temp,当头结点不等于NULL是进行while循环。循环是将头结点的值赋给temp,再把头结点的指针指向下一个结点。 templatevoid Stack::Push(const T &data){ top=new Node(data,top); } 链栈向前生成,新压栈的结点在链栈头 templateT Stack::Pop(){ assert(!IsEmpty()); Node *temp=top; T data=temp->info; top=top->link; delete temp; return data; } 这是对弹出函数的定义。“top=top->link;” 丢弃栈顶结点。“delete temp; ”释放栈顶结点。“return data; ”返回栈顶数据。 class Calculator{ Stack Nstack; Stack Ostack; public: Calculator(void){};