c语言课程设计_简易计算器
C语言简易计算器的实现
目录一.课程设计目的 (1)二.设计环境 (1)三.设计内容 (1)四.设计说明 (2)五.设计程序流程图 (2)六.调试 (4)(1)错误原因分析一 (4)(2)语法错误 (5)(3)逻辑错误 (5)七. 调试结果图 (6)八. 结论与心得体会 (7)九.附录 (8)具体代码实现 (8)十.参考文献 (18)一.课程设计目的1.通过一个学期的学习,我认为要学号C语言程序这门课程,不仅要认真阅读课本知识,更重要的是要通过上机实践来巩固我们的知识,特别是学计算机专业的,我们更应该注重这一环节,只有这样我们才能成为一个合格的计算机人才。
通过这一个课程设计,进一步来巩固所学的语句,如:循环,和分支结构的运用。
还要熟悉四则运算和函数的算法。
2.通过这次课程设计扩展自己的知识面,课本上的东西是远远不够的,可以通过上网或去图书馆查资料等方式得到一些新的知识,3.通过课程设计,加深对课程化设计思想的理解,能进行一个系统功能分析,并设计一个合理的模块化结构,提高程序开发能力。
二.设计环境1.硬件:一台完整的电脑,包括键盘、鼠标,最小硬盘空间1GHz2.软件:安装有Microsoft visual c++6.0三.设计内容以简易计算器为例,通过对简单应用软件计算器的设计,编制、调试,实现简单的加,减,乘,除等运算,以学习应用MFC库类编写对话框的原理,加深对C++类的学习及应用。
(1)定义一个结构体类型数组,输入0~9及+、--、*等符号的信息,将其信息存入文件中;(2)输入简单的加减乘除算术计算式,并在屏幕上显示计算结果;(3)画出部分模块的流程图;(4)编写代码;(5)程序分析与调试。
四.设计说明1)包含的功能有:加、减、乘、除运算,开方、平方等功能。
(2)计算器上数字0—9为一个控件数组,加、减、乘、除为一个控件数组,其余为单一的控件。
(3)输入的原始数据、运算中间数据和结果都显示在窗口顶部的同一个标签中。
简易计算器 (1)
目录第一章:设计目的11.1课程设计目的.................................................................................. 错误!未定义书签。
1.2简易计算器设计的意义 (1)1.3系统的基本要求 (1)1.4功能设计 (3)第二章:功能描述 (3)2.1功能模块框图 (3)2.2相关功能介绍.................................................................................. 错误!未定义书签。
2.1系统模块机构框图 (4)第三章:总体设计 (5)3.1系统流程图 (3)3.2模块描述 (5)3.3函数声明 (5)第四章:程序实现 (5)4.1界面设计 (10)4.2计算界面 (11)4.3退出界面 (12)第五章:课程设计的结果展示 (13)第六章:参考文献................................................................................................. - 15 -第七章:课程设计总结......................................................................................... - 16 -第一章课程设计目的1.通过一个学期的学习,我认为要学好C语言程序这门课程,不仅要认真阅读课本知识,更重要的是要通过上机实践才能增强和巩固我的知识。
特别是作为本科生,更要注重实践这一环节,只有这样我们才能成为合格的计算机人材。
通过这次课程设计,进一步巩固所学的语句,如语句嵌套等;加深对循环,分支等结构的运用;最后还可以熟悉四则运算﹑三角函数等经典算法。
2.通过此次课程设计扩展自己的知识面,课本上的东西是远远不够的,可以通过去图书馆查资料,上网找资料等手段学到一些新知识,比如画图函数,颜色填充函等。
C课程设计-仿照Windows设计计算器
《可视化编程技术课程设计》报告题目仿照Windows系统计算器设计计算器1.引言计算器的产生和发展是建立在电子计算机基础之上的,现代社会很需要一个健全、高效率的计算器。
为了提高自己的实践能力和将来开发一个更实用更全能更智能的计算器,以设计与实现计算器为课题。
此次设计的计算器应用软件从visual studio 2012编程环境中开发,是一个简单的窗体应用程序,实现简单的计算器功能。
以微软自带的计算器为模板,设计了简单易懂的计算器。
这款计算器不仅实现了简单的四则运算的功能,还可以进行复杂数学运算,和进制转换(十进制转二进制、八进制、十六进制)。
具有简洁的外观,即时准确的获得所需要要计算的结果,充分降低了数字计算器的难度和所需要的时间,对人们生活和学习具有有很大的帮助。
2. 系统设计(1)功能设计本计算器由四大模块,分别为:1.标准计算器(即为主窗口)2.科学型计算器3.程序员计算器(进制转换)4.开发者介绍(2)界面设计主窗口界面(from1)科学型计算器界面(from2)程序员界面(from3)开发者介绍(from4)1.文本框的设置:textBox1.Text = "0";窗口启动前:Form1.x = 0;//point:1 ;nopoint: 0Form1.a = 0;//1:+ 2:- 3:* 4:/Form1.b = 0;//判D断?是否执行过运算执行过运算Form1.shu1 = 0;Form1.shu2 = 0;Form1.result = 0;2.按键的设置:数字键及小数点:public static void number(object sender, TextBox textBox1){Button btn = (Button)sender;if ( == "one"){if (x == 1)//判断有小数点Ì{textBox1.Text = textBox1.Text + '1';return;}if (b != 0){textBox1.Text = "0";b = 0;}if (double.Parse(textBox1.Text) == 0)textBox1.Text = " 1";elsetextBox1.Text = (textBox1.Text + '1').ToString(); }if ( == "two"){if (x == 1)//判断有无小数点{textBox1.Text = textBox1.Text + '2';return;}if (b != 0){textBox1.Text = "0";b = 0;}textBox1.Text = " 2";elsetextBox1.Text = (textBox1.Text + '2').ToString(); }if ( == "three"){if (x == 1)//判断有无小数点{textBox1.Text = textBox1.Text + '3';return;}if (b != 0){textBox1.Text = "0";b = 0;}if (double.Parse(textBox1.Text) == 0)textBox1.Text = " 3";elsetextBox1.Text = (textBox1.Text + '3').ToString(); }if ( == "four"){if (x == 1)//判断有无小数点{textBox1.Text = textBox1.Text + '4';return;}if (b != 0){textBox1.Text = "0";b = 0;}if (double.Parse(textBox1.Text) == 0)textBox1.Text = " 4";elsetextBox1.Text = (textBox1.Text + '4').ToString(); }if ( == "five"){if (x == 1)//判断有无小数点{textBox1.Text = textBox1.Text + '5';return;if (b != 0){textBox1.Text = "0";b = 0;}if (double.Parse(textBox1.Text) == 0)textBox1.Text = " 5";elsetextBox1.Text = (textBox1.Text + '5').ToString(); }if ( == "six"){if (x == 1)//判断有无小数点{textBox1.Text = textBox1.Text + '6';return;}if (b != 0){textBox1.Text = "0";b = 0;}if (double.Parse(textBox1.Text) == 0)textBox1.Text = " 6";elsetextBox1.Text = (textBox1.Text + '6').ToString(); }if ( == "seven"){if (x == 1)//判断有无小数点{textBox1.Text = textBox1.Text + '7';return;}if (b != 0){textBox1.Text = "0";b = 0;}if (double.Parse(textBox1.Text) == 0)textBox1.Text = " 7";elsetextBox1.Text = (textBox1.Text + '7').ToString(); }{if (x == 1)//判断有无小数点{textBox1.Text = textBox1.Text + '8';return;}if (b != 0){textBox1.Text = "0";b = 0;}if (double.Parse(textBox1.Text) == 0)textBox1.Text = " 8";elsetextBox1.Text = (textBox1.Text + '8').ToString(); }if ( == "nine"){if (x == 1)//判断有无小数点{textBox1.Text = textBox1.Text + '9';return;}if (b != 0){textBox1.Text = "0";b = 0;}if (double.Parse(textBox1.Text) == 0)textBox1.Text = " 9";elsetextBox1.Text = (textBox1.Text + '9').ToString(); }if ( == "zero"){if (x == 1)//判断有无小数点{textBox1.Text = textBox1.Text + '0';return;}if (b != 0)//两个数的界限判断?{textBox1.Text = "0";b = 0;if (double.Parse(textBox1.Text) == 0)textBox1.Text = " 0";elsetextBox1.Text = (textBox1.Text + '0').ToString();}}public void one_Click(object sender, EventArgs e){number(sender, textBox1);}public void Form1_Load(object sender, EventArgs e){textBox1.Text = "0";}public static void point(object sender, TextBox textBox1){if (double.Parse(textBox1.Text) == 0)x = 1;textBox1.Text = (textBox1.Text + '.').ToString();}public void xiaoshudian_Click(object sender, EventArgs e){point(sender, textBox1);}运算符号1(加减乘除、退格。
c简单计算器课程设计
c 简单计算器课程设计一、课程目标知识目标:1. 让学生掌握简单计算器的基本操作,包括开机、关机、清除屏幕、输入数字和运算符号。
2. 使学生理解加、减、乘、除四则运算的基本概念,并能够在简单计算器上进行正确的运算操作。
3. 帮助学生识别计算器上各个按键的功能,了解其对应的数学意义。
技能目标:1. 培养学生运用简单计算器解决实际问题的能力,如购物找零、计算面积等。
2. 提高学生进行四则运算的速度和准确性,提高计算效率。
3. 引导学生掌握计算器使用技巧,如连续计算、顺序计算等。
情感态度价值观目标:1. 培养学生对计算器的正确态度,认识到计算器是学习数学的工具,而非替代品。
2. 激发学生学习数学的兴趣,让学生在轻松愉快的氛围中体验数学计算的乐趣。
3. 培养学生的合作意识,使学生在小组讨论和互助学习中提高沟通能力,培养团队精神。
本课程针对小学三年级学生设计,结合学生年龄特点,注重激发兴趣和培养动手操作能力。
课程内容紧密联系教材,将目标分解为具体的学习成果,便于后续教学设计和评估。
通过本课程的学习,学生将能够熟练运用简单计算器,提高数学计算能力,培养良好的学习习惯和团队协作能力。
二、教学内容1. 计算器的基本结构:引导学生认识计算器的外观、各部分名称及其功能。
- 教材章节:第三章第1节《认识计算器》- 内容列举:计算器按键布局、显示屏、开机与关机、清除键等。
2. 四则运算操作:讲解加、减、乘、除四则运算在计算器上的操作方法。
- 教材章节:第三章第2节《计算器的四则运算》- 内容列举:按键输入、运算顺序、连续运算、计算结果读取等。
3. 计算器使用技巧:教授计算器的高级使用技巧,提高计算效率。
- 教材章节:第三章第3节《计算器使用技巧》- 内容列举:百分比计算、乘方运算、记忆功能等。
4. 实践应用:结合实际生活场景,让学生运用计算器解决实际问题。
- 教材章节:第三章第4节《计算器在实际生活中的应用》- 内容列举:购物找零、计算面积、体积、速度等。
简易计算器设计的课程设计
简易计算器设计的课程设计一、课程目标知识目标:1. 学生能够理解简易计算器的基本原理,掌握其设计流程。
2. 学生能够运用所学编程知识,实现简易计算器的功能。
3. 学生能够了解并掌握计算器界面设计的基本原则。
技能目标:1. 学生能够运用所学的编程技能,独立完成简易计算器的设计与开发。
2. 学生能够通过编写代码,实现计算器的加、减、乘、除等基本运算功能。
3. 学生能够运用调试工具,对计算器程序进行测试和优化。
情感态度价值观目标:1. 学生在课程学习中,培养对编程的兴趣和热情,增强信息素养。
2. 学生通过团队协作,培养沟通能力和团队精神,学会共同解决问题。
3. 学生在设计与开发简易计算器的过程中,体验创新实践的过程,培养创新思维和动手能力。
课程性质:本课程为信息技术课程,旨在帮助学生将所学的编程知识运用到实际项目中,提高学生的编程实践能力和创新能力。
学生特点:六年级学生具备一定的编程基础,对新鲜事物充满好奇心,喜欢动手实践。
教学要求:结合学生特点和课程性质,注重理论与实践相结合,强调动手实践,培养创新思维。
在教学过程中,关注学生的个体差异,鼓励学生相互交流、合作,共同完成学习任务。
通过本课程的学习,使学生能够将所学知识运用到实际项目中,提高解决问题的能力。
二、教学内容1. 计算器原理:介绍计算器的基本工作原理,包括算术运算逻辑、数据存储与处理等。
教材章节:第三章 计算机硬件基础2. 编程语言基础:回顾所学的编程语言(如Python),重点掌握变量定义、数据类型、运算符、条件语句和循环语句等。
教材章节:第二章 编程语言基础3. 界面设计:讲解计算器界面设计的原则和技巧,如布局、颜色、字体等。
教材章节:第四章 用户界面设计4. 编程实现计算器功能:引导学生运用所学知识,编写程序实现计算器的加、减、乘、除等基本运算功能。
教材章节:第五章 算法与程序设计5. 程序调试与优化:教授学生如何使用调试工具,对计算器程序进行测试、调试和优化。
c面向对象程序设计MFC简单计算器实验报告
c面向对象程序设计M F C简单计算器实验报告Standardization of sany group #QS8QHH-HHGX8Q8-GNHHJ8-HHMHGN#计算机与信息工程学院《程序设计基础》课程设计报告题目名称:60.编写一个能实现简单功能的计算器学生姓名:刘沛东学生学号:专业班级:电子信息工程(1)班指导教师:高攀1 课程设计的题目编写一个能实现简单功能的计算器2 题目要求1. 有一个计算器图形。
2. 能实现加、减、乘、除及乘方的运算。
3. 当输入题目时,屏幕上要在指定位置上显示出相应的题目内容,且相应的数字键要改变颜色例如:输入数字1 时,在计算器图形上的1键变为红色。
4. 屏幕、图形颜色、形状自定3 总体设计总体框架图1 系统框架系统功能说明在VC++中绘制计算器界面,各控件的设置对0~9控件设定相应的ID和其他属性:图2 “1”控件设置对“+、-、*、\”控件设定相应的ID和其他属性:图2 “+”控件设置对其它控件设定相应的ID和其他属性:图3 其它控件设置主要使用到Layout菜单中的Align功能对各个按钮进行对其,使界面更加整洁。
拖出的控件有上面的一个Edit控件用于显示数字,Button控件用于处理鼠标的消息。
4 程序详细设计系统主调模块图5 程序流程图各模块详细设计建立的变量,控件的命名,对应的消息处理函数对应表double poz; 按钮的处理函数void CCalcDlg::OnPt(){point_flag=TRUE; && buffer[i+1]==0)之前那位}m_Dis=strtod(buffer,NULL);整个大的程序的实现分8个功能,每个功能都通过一个相应的函数来实现.在调试时分别进行调试,使得调试更方便些.在编写各个函数只是按着题目要求的去完成,后来经指导老师指导后,发现了很多自己欠缺的地方,又一次将程序整体进行调试.最后把程序完善了许多。
用c语言设计一个多功能计算器
用C语言设计一个多功能计算器实现功能:1)具备整型数据、浮点型数据的算术(加、减、乘、除)运算功能。
依次输入第一个运算数、运算符(+,-,*,/),第二个运算数,然后输出结果。
结果可以作为下一个运算的第一运算数。
按‘C’清屏,按‘X’退出。
例如:输入:2+5输出:72)实现单运算符表达式计算的功能。
输入的操作数可以包含整数或浮点数。
如果遇到错误的表达式,应输出错误提示信息。
输入表达式如下:例如:输入:2+5输出:7目录摘要 (1)第一章引言 (3)1.1 计算器概述 (3)第二章设计任务及要求 (5)2.1 设计任务 (5)2.2 设计要求 (6)第三章计算器硬件设计 (7)3.1 方案说明 (7)3.2 设计单片机主体电路图 (8)第四章软件设计 (9)4.1 模块介绍 (9)4.2 程序流程图 (10)4.3 程序部分 (11)第五章总结 (16)参考文献 (17)摘要:[目录]一、课程设计题目及任务要求二、设计思路三、部分程序介绍四、程序框图五、汇编程序六、参考资料[原文]一、课程设计题目及任务要求请设计十进制加减法计算器。
要求能(不同时)显示3位输入和4位输出。
二、设计思路1、操作显示设备显示设备采用八片七段共阴极LED显示器,共设置16 个键,其中数字键0~9 共十个,接下来依次是加号键、减号键、等于号、清除键。
操作设备是两行八列共16键的简单键盘。
第一行从左至右分别为0、1、2、3、4、5、6、7,第二行分别为8、9、A(+)、B(-)、C(=)、D(清除键)、E (清除键)、F(清除键),“清除键”表示程序初始化,为下次输入准备。
2、程序实现功能(1)十进制加减法计算:输入范围为(1~999),该程序输入两个定点数,每个3位,输出4位;A为加,B为减,C为等于,输出为四位计算结果。
数据输入采用规范化输入,即必须输入3个数才算完成一个运算数的输入,两个运算数之间输入运算符A或者B,输入完成按C显示计算结果;(2)计算机复位功能:DEF均为清零重启,任何时候按下DEF中一个将重新开始;三、部分程序介绍(1)主程序(START)程序开始运行初始化程序,设置输入输出口PA、PB、PC,扫描键盘,输入两个待求数据和运算符,存入寄存器,等待输入等号同时显示第二个数,运行计算程序,并将计算结果分离,输出到显示器;(2)读键子程序(RD_KB)程序分别扫描两行键盘,若有键按下则通过移位的方式计算键码;若无键按下,则将键码缓存设置为10H,判断后进行相应的跳转。
C语言实现简易计算器(可作加减乘除)
C语⾔实现简易计算器(可作加减乘除)C语⾔实现简易计算器(加减乘除)计算器作为课设项⽬,已完成答辩,先将代码和思路(注释中)上传⼀篇博客已增添、修改、整理⾄⽆错且可正常运⾏虽使⽤了栈,但初学者可在初步了解栈和结构语法后理解代码#include <stdlib.h>#include <stdio.h>#include <string.h>#define IsDouble 0#define IsChar 1//_______________________________________________________________________________________________________________________________________________________ //1.⽀持浮点数和字符的栈typedef struct {char * buffer;int typesize;int top;int max;} stack;stack * CreateStack(int max, int typesize);//创建⼀个栈void DestroyStack(stack *);//释放栈的空间void ClearStack(stack *);//清空栈int Push(stack *, void *);//⼊栈int Pop(stack *, void *);//出栈int GetSize(stack *s);//得到栈的⼤⼩int GetTop(stack *, void *);//找到栈顶int IsEmpty(stack *);//判断是否为空栈,空则下溢int IsFull(stack *);//判断栈是否已满,满则溢出stack * CreateStack(int max, int typesize){stack * s = (stack*)malloc(sizeof(stack));//为栈s malloc内存if (!s) return 0;//为结构中buffer元素malloc内存s->buffer = (char *)malloc(sizeof(char) * max * typesize);if (!s->buffer) return 0;//初始化结构中的栈顶,最⼤值,类型⼤⼩s->top = -1;s->max = max;s->typesize = typesize;return s;}void DestroyStack(stack* s){free(s->buffer);//先释放buffer的空间free(s);//在释放s的空间}void ClearStack(stack * s){s->top = -1;//清空栈(栈头位置归零)}int Push(stack * s, void * data){if (IsFull(s)) return 0;//如果栈已满则return 0,防⽌溢出//栈未满则将栈头移动打动下⼀位置,并将data中的元素拷⼊栈中buffer的第top位置s->top++;memcpy(s->buffer + s->top*s->typesize, data, s->typesize);//⼊栈成功return 1return 1;}int Pop(stack * s, void * data){if (IsEmpty(s)) return 0;//出栈判断栈是否为空,若为空则return 0//栈未空则将buffer中top位置的字符拷⼊data记录,并让栈头向前移动⼀个位置memcpy(data, s->buffer + s->top*s->typesize, s->typesize);s->top--;//成功则return 1return 1;}int GetSize(stack *s){return s -> top+1;//栈头位置+1得到⼤⼩}int GetTop(stack *s, void * data){if (IsEmpty(s)) return 0;//如果栈空return 0//栈不为空则将top位置的字符拷回data记录,得到栈头memcpy(data, s->buffer + s->top*s->typesize, s->typesize);//成功则return 1;return 1;}int IsEmpty(stack * s){return s->top == -1;//如果top为-1则栈空}int IsFull(stack * s){return s->top == s->max-1;//如果top为max-1则栈满}//___________________________________________________________________________________________________________________________________________________ //2.定义⼀个cal类型,其中data存数时sign为IsDouble,存字符时,sign为Ischartypedef struct {double data;char sign;} cal;//3.查找对应符号(找到则返回该符号下标)(找不到则说明该部分为数字返回-1)int SearchCode(char ch){char * code = "+-*/()@";//@为终⽌符,算式输⼊结束int index = 0;//while (code[index]){if (code[index] == ch) return index;index++;}return -1;}//4.得到两个符号间的优先级//与SearchCode相对应,char GetPriority(char ch, char next){//创建⼀个perferen表,第i⾏(列)对应SearchCode函数中code中的第i个字符char perferen[7][7] = {">><<<>>",">><<<>>",">>>><>>",">>>><>>","<<<<<=E",">>>>E>>","<<<<<E="};//找到两个形参对应的字符int c = SearchCode(ch);int n = SearchCode(next);//如果找不到对应运算符(字符不是运算符⽽是为数字)return Eif (c==-1 || n==-1) return 'E';//如果找到两个对应运算符则按照优先级表返回两个运算符的优先级return perferen[c][n];}//5.四则运算double add(double a, double b) { return a+b; }double sub(double a, double b) { return a-b; }double mul(double a, double b) { return a*b; }double ddiv(double a, double b) { return a/b; }//整合四种运算double calcu(double a, char ch, double b){double (*calculation[4])(double,double) = {add,sub,mul,ddiv};return calculation[SearchCode(ch)](a,b);}//6.检测字符串int CheckStr(char * buffer){int n;//遍历字符串确保算式中⽆⾮法字符若检测到⾮法字符return 0,若都合法则return 1for (n = 0;buffer[n];n++){if ((SearchCode(buffer[n]) != -1 || buffer[n] == '.' || (buffer[n] >= '0' && buffer[n] <= '9')) && buffer[n] != '@') continue;else return 0;}buffer[n] = '@';//加上终⽌符,表⽰算式结束buffer[n+1] = '\0';return 1;}//7.得到数据转化为double类型存⼊rsint GetDigit(char * buffer, int * n, double * rs){char str[30];int i,j = 0;for (i = 0;SearchCode(buffer[*n]) == -1;i++){str[i] = buffer[*n];//从*n位置开始,将这⼀串数字字符存⼊str(*n)++;}str[i] = '\0';for (i = 0;str[i];i++){if (str[i] == '.') j++;}//如果⼀段⼩数有多个⼩数点或⼩数点在数字⾸尾,return 0if (j>1 || str[i-1] == '.' || str[0] == '.') return 0;//rs接收转化为double的数据*rs = atof(str);//操作成功return 1return 1;}//8.将⽤户输⼊的buffer字符串转化为可供程序运算的calstr数组int resolu(char * buffer, cal * calstr){int i = 0, j = 0;cal c;while (buffer[i]){if (SearchCode(buffer[i]) == -1){//如果得到数据不成功则return 0if (GetDigit(buffer,&i, &c.data) == 0) return 0;//如果成功得到数据则在c.sign标记为浮点数c.sign = IsDouble;//将c存⼊数组calstr中calstr[j++] = c;}else{//若符号为运算符//判断正负号if (buffer[i] == '-' && (buffer[i-1] == '('||buffer[i-1] == '+'||buffer[i-1] == '-'||buffer[i-1] == '*'||buffer[i-1] == '/') || (i==0 && buffer[0] == '-')){ i++;if (GetDigit(buffer,&i, &c.data) == 0) return 0;//在符号的下⼀位开始查找,若找不到数字return 0//否则,给数字取相反数,c.sign标记为浮点数,存⼊calstr中c.data = 0 - c.data;c.sign = IsDouble;calstr[j++] = c;} else//如果是正号,与符号处理⽅式同理if (buffer[i] == '+' && (buffer[i-1] == '('||buffer[i-1] == '+'||buffer[i-1] == '-'||buffer[i-1] == '*'||buffer[i-1] == '/') || (i==0 && buffer[0] == '+')){ i++;if (GetDigit(buffer, &i, &c.data) == 0) return 0;c.sign = IsDouble;calstr[j++] = c;}else{//如果不是正负号,则为运算符,先强制转换为double类型存在c.data⾥,然后c.sign标记为char类型,存⼊calstrc.data = (double)buffer[i++];c.sign = IsChar;calstr[j++] = c;}}}//操作蔡成功则return 1return 1;}//9.计算出结果int result(cal * calstr, double * rs){stack * pst = CreateStack(100,sizeof(char));//运算符栈stack * pnd = CreateStack(100,sizeof(double));//数据栈double num1,num2;int n = 0;char ch = '@';Push(pst, &ch);//在转换得到的calstr中遍历直到终⽌符'@"while(ch != '@' || !(calstr[n].sign == IsChar && (char)calstr[n].data == '@')){//如果calstr的n位上是浮点数,则将这个data压栈进⼊数据栈pnd中if (calstr[n].sign == IsDouble){Push(pnd, &(calstr[n].data));n++;}//反之,如果是运算符,则要检测优先级else{switch( GetPriority(ch, (char)calstr[n].data)){//如果运算符优先级较⼩,则让ch等于优先级⼤的符号并压⼊符号栈pst中case '<':ch = (char)calstr[n].data;Push(pst, &ch);n++;break;//如果结果为等号,让符号出栈暂存到ch中case '=':if (!Pop(pst, &ch)) return 0;n++;break;//如果ch优先级较⾼,则将前两个数字及运算符出栈,分别储存⾄num2,ch,num1中,进⾏运算,得到的结果再次压栈进⼊pnd中 case '>':if (!(Pop(pnd,&num2) && Pop(pst,&ch) && Pop(pnd,&num1))) return 0;num1 = calcu(num1,ch,num2);Push(pnd, &num1);break;//如果符号顺序出错,return 0case 'E':return 0;}}//检测是否可以得到栈顶符号,栈空则return 0if (!GetTop(pst, &ch)) return 0;}//如果栈中得到了最终结果,并且取出pnd中的最终结果到rs,return 1if (GetSize(pnd) == 1 && GetTop(pnd,rs)){DestroyStack(pst);DestroyStack(pnd);return 1;}//否则 return 0else{return 0;}}//10.⽤户交互函数void treatment(){char buffer[100];//⽤户输⼊的字符串(算式)cal calstr[50];//计算⽤的数组double rs = 0;//计算结果printf("Enter your equation:");gets(buffer);//让⽤户输⼊算式buffer//⽤户不输⼊"exit"就不退出while (!(buffer[0]=='e' && buffer[1]=='x' && buffer[2]=='i' && buffer[3]=='t')){//检查buffer中字符君合法,成功将buffer转化为⽤于计算的calstr数组,成功计算出结果存⼊rsif (CheckStr(buffer) && resolu(buffer,calstr) && result(calstr,&rs)){printf("\n%lf\n",rs);}else{printf("\nError!\n");}printf("Enter \"exit\"to quit");printf("\nEnter your equation:");gets(buffer);//再次让⽤户输⼊算式}printf("\nbye\n");}//11.主函数int main(){treatment();}参考⽂献链接如下[参考⽂献]()。
C语言简易计算器的实现
C语言简易计算器的实现C语言简易计算器是一种用于进行基本数学运算的程序。
实现一个简易计算器的关键是要能够解析用户输入的数学表达式,并将其转化为计算机可以理解的形式,然后进行计算,并输出结果。
下面是一个大约1200字以上的示例实现。
```c#include <stdio.h>#include <stdlib.h>#include <stdbool.h>#include <ctype.h>#define MAX_SIZE 100//定义操作符的优先级int getPriority(char op)if (op == '+' , op == '-')return 1;else if (op == '*' , op == '/')return 2;elsereturn 0;//进行四则运算int calculate(int a, int b, char op)switch (op)case '+': return a + b;case '-': return a - b;case '*': return a * b;case '/': return a / b;default: return 0;}//将中缀表达式转换为后缀表达式void infixToPostfix(char* infixExp, char* postfixExp) char stack[MAX_SIZE];int top = -1;int j = 0;for (int i = 0; infixExp[i] != '\0'; i++)if (isdigit(infixExp[i])) { // 数字直接输出到后缀表达式while (isdigit(infixExp[i]))postfixExp[j++] = infixExp[i++];}postfixExp[j++] = ' ';i--;}else if (infixExp[i] == '(') { // 左括号压入栈stack[++top] = infixExp[i];}else if (infixExp[i] == ')') { // 右括号弹出栈内所有操作符并输出到后缀表达式,直到遇到左括号while (top != -1 && stack[top] != '(')postfixExp[j++] = stack[top--];postfixExp[j++] = ' ';}top--; // 弹出栈顶的左括号}else { // 操作符while (top != -1 && getPriority(stack[top]) >=getPriority(infixExp[i]))postfixExp[j++] = stack[top--];postfixExp[j++] = ' ';stack[++top] = infixExp[i];}}while (top != -1) { // 将栈内剩余操作符弹出并输出到后缀表达式postfixExp[j++] = stack[top--];postfixExp[j++] = ' ';}postfixExp[j] = '\0';//计算后缀表达式的值int evaluatePostfix(char* postfixExp)char stack[MAX_SIZE];int top = -1;for (int i = 0; postfixExp[i] != '\0'; i++)if (isdigit(postfixExp[i])) { // 数字压入栈int num = 0;while (isdigit(postfixExp[i]))num = num * 10 + (postfixExp[i++] - '0');stack[++top] = num;i--;}else if (postfixExp[i] == ' ')continue;}else { // 操作符,弹出栈顶的两个数进行计算,并将结果压入栈int b = stack[top--];int a = stack[top--];int result = calculate(a, b, postfixExp[i]);stack[++top] = result;}}return stack[top];int maichar infixExp[MAX_SIZE];printf("请输入中缀表达式:");fgets(infixExp, sizeof(infixExp), stdin); // 读取用户输入//将中缀表达式转换为后缀表达式char postfixExp[MAX_SIZE];infixToPostfix(infixExp, postfixExp);printf("后缀表达式为:%s\n", postfixExp);//计算后缀表达式的值并输出int result = evaluatePostfix(postfixExp);printf("计算结果为:%d\n", result);return 0;```这个简易计算器的实现基于栈的数据结构。
C语言编程-简单的计算器
int i=0;
a[0]='$';
printf("请输入表达式,退出请输入q:\n\n");
scanf("%c",&x);
if(x=='q') break;
while(x!='\n')
{
a[++i]=x;
scanf("%c",&x);
}
a[i+1]='\0';
jieguo=jisuan(a);
}
j=j+1;
x=z;
if(a[j]=='.')
{
l=1;
i=j+1;
j=i+1;
while(a[j]>='0'&&a[j]<='9')
{j++;}
j--;
for(k=i;k<=j;k++)
{
n=pow(0.1,l);
l=l+1;
x=x+n*(a[k]-'0');
}
i=j+1;
}
else i=j;
shu.data[++shu.top].d1=x;
nibo[t1+1]='\0';
t2--;
}
zhan2[++t2]=a[i];
i++;
}
}
else if(a[i]=='*'||a[i]=='/')
C语言简单计算器的编写课程设计
2013-2014学年第二学期《高级语言程序设计》课程设计报告题目:简单计算器专业:数字媒体技术班级:13级1班姓名:邢洪波指导教师:王辉成绩:计算机与信息工程系二0一四年二月二十日1设计内容及要求1.1 利用本学期所学的《C语言程序设计》课程,运用相关知识,查阅相关资料,编写C语言程序,设计一个简单计算器,要求编写的简单计算器能够模拟windows系统的计算器,用户能够用键盘输入相关数据,能够进行简单的加、减、乘、除运算,并且在程序运行过程中能够正常的退出程序。
在计算器程序运行中,输入数据时如果遇到输入错误的情况,能够能过键盘上的退格键进行删除,并且重新输入正确的数据。
在数据输入完成后,如果需要放弃本次计算操作,可以利用程序中设置好的按键进行清零,并为下一次运算作准备。
1.2 运用相关知识,查阅相关资料,编写一个简单的计算器,能够实现简单的基本的加减乘除运算,在计算器工作时用户能利用键盘或鼠标进行相应操作。
程序基本功能要求实现完整,并有简单的验证。
程序还须有符合标准的程序设计报告。
2概要设计2.1系统流程图2.1 系统流程图2.2主要功能表2.2 主要功能表3设计过程或程序代码#include<stdio.h>#include<math.h>#include<malloc.h> /*malloc的头文件代表在内存中开辟存储空间*/double jisuan(char a[]){int i=1,j,k,m,cnt=0,t1=0,t2=0,t3=0;/*定义整型变量i,j,k,m,n,cnt,t1,t2,t3*/char nibo[50],zhan2[50];/*定义字符型数组*/double x,n,l,z=0,zhan3[50];/*定义双精度变量x,n,l,z,zhan3[50]*/typedef struct /*表示可以用con定义结构体变量*/{double d1;int d2;}dd;typedef struct{dd data[50];int top;}zhan1;zhan1 *shu;/*定义指针变量*/shu=(zhan1 *)malloc(sizeof(zhan1));shu->top=0;while(a[i]!='\0') /*外循环是用while语句*/{if(a[i]>='0'&&a[i]<='9') /*内循环使用if-else语句*/{z=0;j=i+1;while(a[j]>='0'&&a[j]<='9') /*内循环使用各种循环语句的嵌套*/{j++;}j--;for(k=i;k<=j;k++){z=z*10+a[k]-'0';}j=j+1;x=z;if(a[j]=='.'){l=1;i=j+1;j=i+1;while(a[j]>='0'&&a[j]<='9') /*内循环使用各种循环语句的嵌套*/{j++;}j--;for(k=i;k<=j;k++){n=pow(0.1,l);l=l+1;x=x+n*(a[k]-'0');}i=j+1;}else i=j;shu->data[++shu->top].d1=x;shu->data[shu->top].d2=++cnt;nibo[++t1]='0'+shu->data[shu->top].d2;nibo[t1+1]='\0';}else if(a[i]=='('){zhan2[++t2]=a[i];i++;}else if(a[i]==')'){j=t2;while(zhan2[j]!='('){nibo[++t1]=zhan2[j];nibo[t1+1]='\0';j--;}t2=j-1;i++;}else if(a[i]=='+') /*对加法的定义*/{while(t2>0&&zhan2[t2]!='(') /*定义当加号和括号同时出现时*/{nibo[++t1]=zhan2[t2];/*将zhan2[t2]赋给nibo[++t2]*/nibo[t1+1]='\0';t2--;}zhan2[++t2]=a[i];i++;}else if(a[i]=='-') /*对减法的定义*/{if(a[i-1]=='$'){a[0]='0';i=0;}else if(a[i-1]=='('){a[i-1]='0';a[i-2]='(';i=i-2;t2--;}else{while(t2>0&&zhan2[t2]!='(') /*对括号的定义*/{nibo[++t1]=zhan2[t2];nibo[t1+1]='\0';t2--;}zhan2[++t2]=a[i];i++;}}else if(a[i]=='*'||a[i]=='/') /*对乘法和除法的定义*/{while(zhan2[t2]=='*'||zhan2[t2]=='/'||zhan2[t2]=='^'||zhan2[ t2]=='#') /*逻辑运算*/{nibo[++t1]=zhan2[t2];nibo[t1+1]='\0';t2--;}zhan2[++t2]=a[i];i++;}else if(a[i]=='^'||a[i]=='#') /*逻辑运算中的或运算*/{while(zhan2[t2]=='^'||zhan2[t2]=='#'){nibo[++t1]=zhan2[t2];nibo[t1+1]='\0';t2--;}zhan2[++t2]=a[i];i++;}}while(t2>0){nibo[++t1]=zhan2[t2]; /*将的zhan2[t2]值赋给nibo[++t1]*/nibo[t1+1]='\0'; /*碰到'\0'结束部分程序的运算*/t2--;}j=1;t3=0;while(j<=t1){if(nibo[j]>='0'&&nibo[j]!='^'&&nibo[j]!='#'){for(i=1;i<=shu->top;i++){if((int)(nibo[j]-'0')==shu->data[i].d2){m=i;break;}}zhan3[++t3]=shu->data[m].d1;}else if(nibo[j]=='+') /*对加法的定义*/{zhan3[t3-1]=zhan3[t3-1]+zhan3[t3];t3--;}else if(nibo[j]=='-') /*对减法的定义*/{zhan3[t3-1]=zhan3[t3-1]-zhan3[t3];t3--;}else if(nibo[j]=='*')/*对乘法的定义*/{zhan3[t3-1]=zhan3[t3-1]*zhan3[t3];t3--;}else if(nibo[j]=='/') /*对除法的定义*/{zhan3[t3-1]=zhan3[t3-1]/zhan3[t3];t3--;}else if(nibo[j]=='^') /*对乘方的定义*/{zhan3[t3-1]=pow(zhan3[t3-1],zhan3[t3]);t3--;}else if(nibo[j]=='#') /*对开方的定义*/{zhan3[t3]=sqrt(zhan3[t3]);}j++;}return zhan3[t3];/*返回值*/}void main(){for(;;){char x,a[50];double jieguo;int i=0;a[0]='$';printf("#表示开方,^表示乘方(支持负数)\n");/*对乘方和开方的定义*/printf("请输入表达式无需输入 = 号直接回车可输出答案退出请输入q \n\n");scanf("%c",&x);if(x=='q') break;while(x!='\n') /*碰到'\0'结束部分程序的运算*/{a[++i]=x;scanf("%c",&x);}a[i+1]='\0';jieguo=jisuan(a);printf("\n");printf("结果为:%lf",jieguo);printf("\n\n\n");printf("退出请输入q 继续请直接输入\n\n");}}4设计结果与分析系统测试结果如下:根据电脑所给的提示出现语法错误,缺少变量的定义大多的语法错误在通过书本参考下能够修改。
简易计算器实验报告
简易计算器实验报告一、实验目的本次实验的目的是设计并实现一个简易计算器,能够进行基本的四则运算(加、减、乘、除),以及处理括号的优先级运算,提高对程序设计和逻辑思维的理解与应用能力。
二、实验原理1、四则运算的优先级规则在数学运算中,先计算括号内的表达式,然后按照先乘除后加减的顺序进行计算。
乘除法的优先级高于加减法,如果在同一级运算中,按照从左到右的顺序进行。
2、数据结构的选择使用栈(Stack)数据结构来存储操作数和运算符。
栈具有先进后出的特点,非常适合处理表达式中的括号和优先级。
3、算法思路首先,将输入的表达式进行解析,将数字和运算符分别存储到不同的栈中。
然后,根据运算符的优先级进行计算,将计算结果重新压入栈中,直到表达式计算完毕。
三、实验设备及环境1、编程工具:选择了 Python 语言作为主要的编程工具,使用PyCharm 集成开发环境进行代码编写和调试。
2、操作系统:Windows 10 操作系统。
四、实验步骤1、定义数据结构定义两个栈,一个用于存储操作数(operandStack),一个用于存储运算符(operatorStack)。
2、表达式解析遍历输入的表达式字符串,将数字转换为整数并压入操作数栈,将运算符压入运算符栈。
遇到左括号直接压入运算符栈,遇到右括号则进行括号内的运算。
3、运算处理当运算符栈不为空时,取出栈顶的运算符和两个操作数进行计算。
根据运算符的优先级进行相应的运算,将结果压入操作数栈。
4、最终结果当表达式解析完毕后,操作数栈中的唯一元素即为表达式的计算结果。
五、代码实现```pythonclass SimpleCalculator:def __init__(self):selfoperandStack =selfoperatorStack =def calculate(self, expression):for char in expression:if charisdigit():selfoperandStackappend(int(char))elif char in '+/()':if char =='(':selfoperatorStackappend(char)elif char ==')':while selfoperatorStack-1!='(':operator = selfoperatorStackpop()operand2 = selfoperandStackpop()operand1 = selfoperandStackpop()result = selfperformOperation(operand1, operand2, operator)selfoperandStackappend(result)selfoperatorStackpop()else:while selfoperatorStack and selfhasHigherPrecedence(selfoperatorStack-1, char):operator = selfoperatorStackpop()operand2 = selfoperandStackpop()operand1 = selfoperandStackpop()result = selfperformOperation(operand1, operand2, operator)selfoperandStackappend(result)selfoperatorStackappend(char)while selfoperatorStack:operator = selfoperatorStackpop()operand2 = selfoperandStackpop()operand1 = selfoperandStackpop()result = selfperformOperation(operand1, operand2, operator)selfoperandStackappend(result)return selfoperandStackpop()def hasHigherPrecedence(self, op1, op2):if op1 in '/' and op2 in '+':return Trueelif op1 in '+' and op2 in '+':return Falseelif op1 in '/' and op2 in '/':return Falsereturn Falsedef performOperation(self, operand1, operand2, operator):if operator =='+':return operand1 + operand2elif operator =='':return operand1 operand2elif operator =='':return operand1 operand2elif operator =='/':if operand2 == 0:raise ValueError("除数不能为 0")return operand1 / operand2if __name__ =="__main__":calculator = SimpleCalculator()expression ="2 + 3 (4 1) / 2"result = calculatorcalculate(expression)print("计算结果:", result)```六、实验结果与分析1、测试用例及结果输入表达式:"2 + 3 4",计算结果:14输入表达式:"(2 + 3) 4",计算结果:20输入表达式:"5 2 3",计算结果:-1输入表达式:"10 / 2 + 1",计算结果:62、结果分析对于简单的四则运算表达式,计算器能够正确计算出结果。
计算器c语言课程设计
计算器c语言课程设计一、教学目标本课程旨在通过学习计算器C语言,让学生掌握C语言编程的基础知识和技能,培养学生独立思考、解决问题的能力,并激发学生对计算机科学的兴趣。
1.了解C语言的发展历程和基本特点。
2.掌握C语言的数据类型、运算符、表达式等基本语法。
3.熟悉C语言的函数、数组、指针等编程技巧。
4.理解C语言的程序结构和编译过程。
5.能够使用C语言编写简单的程序,解决实际问题。
6.具备阅读和理解C语言程序的能力。
7.掌握C语言的调试技巧,能够找出和修复程序中的错误。
情感态度价值观目标:1.培养学生对计算机科学的热爱和好奇心,激发学生继续深入学习计算机科学的动力。
2.培养学生严谨、细致的编程习惯,提高学生的逻辑思维能力。
3.培养学生团队协作精神,增强学生的沟通能力。
二、教学内容本课程的教学内容主要包括C语言的发展历程、基本语法、编程技巧和实际应用等方面。
1.C语言的发展历程和基本特点。
2.数据类型、运算符、表达式等基本语法。
3.函数、数组、指针等编程技巧。
4.程序结构和编译过程。
5.C语言在实际应用中的案例分析。
三、教学方法本课程采用讲授法、案例分析法、实验法等多种教学方法,以激发学生的学习兴趣和主动性。
1.讲授法:通过讲解C语言的基本概念和语法,使学生掌握C语言的基础知识。
2.案例分析法:分析实际案例,让学生了解C语言在实际应用中的具体运用。
3.实验法:让学生动手编写C语言程序,培养学生的实际编程能力。
四、教学资源本课程的教学资源包括教材、参考书、多媒体资料和实验设备等。
1.教材:选用权威、实用的C语言教材,为学生提供系统的学习资料。
2.参考书:提供丰富的参考书籍,拓宽学生的知识面。
3.多媒体资料:制作精美的PPT课件,生动展示C语言的特点和应用。
4.实验设备:提供计算机实验室,让学生进行实际编程练习。
五、教学评估本课程的评估方式包括平时表现、作业、考试等多个方面,以全面、客观、公正地评价学生的学习成果。
C语言课程设计--计算器(图形界面)
C语言课程设计--计算器(图形界面)扬州大学C语言课程设计报告题目一个简易计算器的设计与实现班级学号姓名指导教师成绩老师评语:第 2 页共 14 页第 3 页共 14 页一、系统调试…………………………………………8,9,10,11二、课程设计体会总结………………………………8,9,10,111 课程设计目的(1).课程设计是一项综合性实践环节,是对平时实验的一个补充,课程设计内容包括课程的主要理论知识,但由于C语言对初学者较难掌握,因而对一个完整的C语言程序不适合平时实验。
通过课程设计可以达到综合设计C语言程序的目的。
(2)通过本课程设计,可以培养独立思考,综合运用所学有关相应知识的能力,能更好地使用C语言的知识,更好地了解C语言的好处和其可用性!掌握基本的程序设计过程和技巧,掌握基本的分析问题和利用计算机求解问题的能力,具备初步的高级程序设计能力。
为后续各门计算机课程的学习和毕业设计打下坚实基础!(3)通过本程序训练程序设计的基本技能,掌握字符串的表示方法和字符串函数的功能、自学掌握四则运算的算法及WIN-TC的图形操作的基本知识、键盘上特殊键的获取及图形方式下光标的显示。
2 课程设计内容目的:本课程的课程设计要求学生模拟实现一个简单计算器,要求(1)能够实现四则运算,并能支持优先级运算。
(2)三角与反三角运算:如sinx,cosx等。
(3)指数对数运算:如log(x),lnx,e的x次方等。
(4)其他运算:如X!,x 的累加等。
(4)不允许调用库函数,使用自行开发的程序实现常用函数运算。
(5)进一步考虑计算器外观设计,用可视化界面给出计算器外观、功能按键及输入界面。
使用说明:执行加法运算,'—'表示执行减法运算,表示执行乘法运算,'/'表第 4 页共 14 页示除法运算.‘Q’表示退出计算器‘C’表示清零,’=’表示得出结果'^'表示执行x的y次方,'e'表示执行e的x次方操作,'&'表示执行累加操作.,你可以可以用键盘上的上下左右键对光标进行移动,当光标移动到计算器按键上时,按ENTER即可执行该键的操作!最后按“=”则可得出结果。
C语言程序设计之简单计算器
C语言程序设计之简单计算器C语言是一种广泛应用于操作系统、嵌入式系统和各种应用程序的高级程序设计语言。
在学习C语言的过程中,我们可以通过编写简单的计算器程序来巩固所学的知识。
计算器程序的基本功能是接收用户输入的两个数字和一个运算符,然后根据用户的选择进行相应的运算,最后输出结果。
下面是一个简单的计算器程序的实现。
首先,我们需要包含头文件stdio.h和stdlib.h,以便使用标准输入输出函数和动态内存分配函数。
#include <stdio.h>#include <stdlib.h>接下来,我们定义一个函数menu,用于显示计算器的菜单选项。
用户可以选择进行加法、减法、乘法或除法运算,或者退出程序。
void menprintf("====================================\n");printf("简单计算器\n");printf("1. 加法\n");printf("2. 减法\n");printf("3. 乘法\n");printf("4. 除法\n");printf("5. 退出程序\n");printf("====================================\n");printf("请选择您要进行的运算:");然后,我们定义一个函数add,用于执行加法运算。
该函数接收两个参数:num1和num2,分别表示用户输入的两个数字。
float add(float num1, float num2)return num1 + num2;类似地,我们可以定义函数sub、mul和div,用于执行减法、乘法和除法运算。
float sub(float num1, float num2)return num1 - num2;float mul(float num1, float num2)return num1 * num2;float div(float num1, float num2)if (num2 != 0)return num1 / num2;} elseprintf("错误:除数不能为0!\n");return 0;}最后,我们在主函数中调用这些函数,实现计算器的功能。
计算器-C语言课程设计
沈阳航空航天大学课程设计任务书学院:专业:班级:学号:题目:一、课程设计时间2011~2012第2学期第16周,共计1周,20学时。
二、课程设计内容用C语言编写软件完成以下任务:在实数范围内支持加、减、乘、除运算,同时支持正弦、正切,及其反三角函数运算。
用户可以选择运算的类型,并可以在界面进行数据的输入和输出。
被运算的数据、运算的类型、运算的结果应能够保存到文件myfile.txt 中。
保存的形式可以参考如下所示:4*2=8;sin(0.5)=0.479426。
三、课程设计要求程序质量:✧贯彻结构化的程序设计思想。
✧用户界面友好,功能明确,操作方便。
✧用户界面中的菜单至少应包括“运算选项”、“数据输入”、“数据结果”、“退出”4项。
✧代码应适当缩进,并给出必要的注释,以增强程序的可读性。
课程设计说明书:✧课程结束后,上交课程设计说明书和源程序。
课程设计说明书的内容参见提供的模板。
四、指导教师和学生签字指导教师:________ 学生签名:________五、成绩六、教师评语目录一、程序设计题目 (1)二、需求分析 (1)三、程序流程图 (2)四、各操作对应的截图 (7)五、核心技术的实现方法、程序段及注释 (12)六、个人总结 (15)七、参考文献 (16)八、源程序 (16)一、程序设计题目计算器实现的简单功能,具体如下:1、加法运算;2、减法运算;3、乘法运算;4、除法运算;5、正弦运算;6、正切运算;7、反正弦运算;8、反正切运算;9、退出。
注:运算结果保存到D:\myfile.txt文件中。
二、需求分析经过对程序设计题目的分析可知,整个程序的设计实现大致分为两个大模块,他们的功能分别是:运算和保存。
运算中又分为八个小模块,其中每一个小模块对应一个函数,它们的功能分别是:数据作和函数(+),数据作差函数(-),数据作积函数(*),数据作商函数(/),数据作正弦函数运算(sin),数据作正切函数运算(tan),数据作反正弦函数运算(asin),数据作反正切函数运算(atan)模块。
C语言课程设计(计算器)
目录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 详细设计 (8)4.1分析和设计 (8)4.2具体代码实现 (9)5 课程设计总结 (25)参考文献 (25)致谢 (26)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所示。
图3.1系统流程图3.2查询函数流程图4 详细设计4.1分析和设计在程序的开头部分定义了结构替类型, 用来存放按钮信息struct s_button /*按键的结构体*/{int sx,sy,ex,ey;char *head;int press;}button[17]; /*图表按键数*/char far *vid_mem;static int tx=32,ty=3; /*静态变量*/float v1=0.0,v2=0.0;用输入函数input()来输入按键放在s_button数组中。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
荆楚理工学院学院:计算机工程学院专业:计算机科学与技术班级: 1 2级本二学生姓名:X X学号:*************设计题目:简易计算器指导老师:X X X X X目录第一章选题的意义 (3)1.1 课题研究的背景 (3)1.2 自己设计的优势 (3)1.3 设计上功能上的不足 (3)第二章研究的基础 (4)2.1 涉及的主要知识点 (4)第三章研究的可行性 (5)3.1 技术的可行性 (5)3.2 经济效益和社会效益的可行性 (5)3.3 法律的可行性 (5)第四章研究的具体部分 (6)4.1 研究的主要流程图 (6)4.2 研究的具体代码 (7)4.3程序运行结果图表 (13)第五章总结 (16)参考文献 (17)第一章选题的意义①通过本项课程设计,可以培养独立思考、综合运用所学有关相应知识的能力,能更好的巩固《C语言程序设计》课程学习的内容,掌握工程软件设计的基本方法,强化上机动手编程能力,闯过理论与实践相结合的难关!更加了解了c语言的好处和其可用性!同时增加了同学之间的团队合作精神!更加也体会到以后在工作中团队合作的重要性和必要性!②通过C语言课程设计,使学生了解高级程序设计语言的结构,掌握基本的程序设计过程和技巧,掌握基本的分析问题和利用计算机求解问题的能力,具备初步的高级语言程序设计能力。
为后续各门计算机课程的学习和毕业设计打下坚实基础。
1.1 课题研究的背景计算器是现代日常生活中使用较为频繁的工具之一,常用的计算器有简易版和科学计算器两种模式。
简易版的计算器不支持表达式运算,每次只能输入一个数据或者运算符来计算,而科学计算器除了容纳简易版计算器的功能外,还支持表达式运算,用户可以输入一个合法的算术表达式来得到所需的结果。
计算器对我们每一的学生都很熟悉,从初中到高中再到大学。
但是我们只知道按下几个按钮计算器便会显示出结果,很少有学生分析过计算器究竟是如何运行的。
C语言课程设计便是一个很好的机会,让我去亲自写计算器的运行代码,尽管是简单计算器的设计,但其背后的知识那是相当多的,对我是个挑战,我接受!1.2 自己设计的优势现时学习生活中,常会遇到一些数目较大数据繁杂的数值运算,徒手运算起来很困难,这时候我们就必须用到计算器。
人们对计算的要求不断提高,普通的功能简单的仅能进行加、减、乘、除运算的计算工具已经不能满足需要,需要一种能进行多种计算。
现在已经有一些功能较为强大、涵盖面较广的计算软件,而且各种平台的小工具仍不断出现。
这些大大方便了我们的生活给我们更多的选择和实现方式。
本程序实现了加、减、乘、除、求幂、求模,求平方根,求Sin,求Cos,求Log10,求阶乘,取整,求正切,以及进制之间的相互转换。
它可以直接输入数学表达式,不需要任何转换,就可以直接输出。
1.3 设计上功能上的不足本程序虽然在其他简易计算器的基础上新增加了很多类容,如:三角函数的求值、指数函数的计算、任意数的任意次方、进制之间的相互转换等;但是由于个人能力的限制,仍不能实现四则混合运算的功能,仅仅是能进行一个两个数或者一个数的计算,这是这个程序最为不足的地方。
但是我相信,随着学习的不断深入,这个功能在不久以后会被很好的实现。
第二章研究的基础C语言是一种结构化的程序设计语言。
它功能丰富、表现力强、使用灵活、应用面广、目标程序效率高、可移植性好,既具有高级语言的特点,有具有低级语言的功能,以此它成为当今的主流程序设计语言之一。
2.1 涉及的主要知识点本程序的知识点主要来源于任正云版的《C语言程序设计(第二版)》,其中包含了C 语言的数据类型与基本操作、顺序结构设计、选择结构程序设计、循环结构程序设计、函数、数组、指针等。
本程序通过不同类型数据间的转换实现了部分进制间的转换,如十进制转换为八、十六中printf("%o\n",a); printf("%x\n",a);直接把输入的十进制数转换成了八和十六进制。
对于控制程序进行什么样的计算方面,采用了输入的方法,根据提示的信息,输入不同的选项,可以实现不同的运算。
在选择结构程序设计方面,采用if语句来判断如在二级制数和十进制数的相互转换的过程中用if—else语句对数的正负进行判断,为其分情况研究提供帮助;又如在一般二次方程的求解上运用if—else if—else{if—else}语句对方程解的四种情况,即无解、两个相同实数根、两个不同实数根、和两个虚数根分别进行计算,以求出不同情况的解。
本程序大量运用switch case 语句;以实现本程序的不同功能。
如图(1):这里运用switch 语句,来选择你所以运用到的这个程序的不同的功能,这里共有六个,根据你要使用的功能,可以相应的输入数据,来实现自己所需要的的计算。
又如图(2)对于加减乘除的简单的四则混合运算也是运用的switch语句来实现的;通过switch来实现加减乘除的多级运算,而不是简单的两个数相加减,但是由于没有判断优先级的语句,所以此程序不能进行优先级的计算,只能从左到右的依次计算!本程序的循环结构用的是while和for。
对于需要逐级进行的表达式,就用了这些循环语句在x^y的for(i=1;i<=b;i++) c=c*x;,二级制十进制的转换while(a!=0){t=a%2;b[i]=t;i++;a=a/2;} { for(j=i-1;j>=0;j--) printf("%d",b[j]);},求最值并排序的输入过程、排序过程、输出过程等过程中都运用有这些语句!之所以运用循环,是由于要实现其功能,都要按照一定的条件重复执行同样的一段语句,所以运用循环语句来做到多次重复。
本程序采用的是函数调用的方法,该程序运用了6个自己声明的函数,通过这些函数来在一个程序上实现多种不同的功能void displaymain(); void YBys(); void TSys(); void PSys(); void jzzh1(); void jzzh2();void qfcz();这些就是就是笨晨曦的函数声明的部分内容。
关于数组方面,对于进制的处理方面就用的是数组,把每个数字分别储存在一个空间里,这样就可以更方便的对数的每一个位进行操作。
而不用分别去求每一位的数值,正是基于这个原因,本程序可以对多达80位的数来进行转换。
突破了只能对同一位数求解的限制。
第三章研究的可行性3.1 技术的可行性本程序是用C语言编写的一部功能相对全面的简易计算器,它通过程序,可以帮助我们解决一些复杂的运算。
其所运用的知识点也全部是《C语言程序设计(第二版)》上的知识。
对于一些不能解决的问题,都可以在百度上找到根据。
通过一个学期的学习,我认为要学号C语言程序这门课程,不仅要认真阅读课本知识,更重要的是要通过上机实践来巩固我们的知识,特别是学计算机专业的,我们更应该注重这一环节,只有这样我们才能成为一个合格的计算机人才。
通过这一个课程设计,进一步来巩固所学的语句,如:循环,和分支结构的运用。
还要熟悉四则运算和函数的算法。
通过这次课程设计扩展自己的知识面,课本上的东西是远远不够的,可以通过上网或去图书馆查资料等方式得到一些新的知识,加深对课程化设计思想的理解,能进行一个系统功能分析,并设计一个合理的模块化结构,提高程序开发能力。
3.2 经济效益和社会效益的可行性对于现在的科技发展的时代,机器代替了手工,人们越来越热衷于对能节时省事的机器依赖,而这个程序正好可以满足人们对于麻烦计算的需要,通过使用这个计算器,来节省花在计算上的时间,这也正好符合现代人的要求──省事!同时,其成本也很低,就这个程序而言,仅仅需要一部装有Visual C++ 6.0的计算机就可以做出来了。
而现在的电脑也普及于各个家庭了,所以也就对于大部分人来说,使用它不是问题,你仅仅只需要下载个Visual C++ 6.0就可以使用这个程序了,同时,你还可以通过Visual C++ 6.0来运行其他自己感兴趣的程序!3.3 法律的可行性在编制过程中,都是通过和同学讨论和协商进行的,同时也参考了几本教课书,可以说里面没有盗窃和抄袭的成分,这个计算器完全属于个人的开发设计,没有侵权行为,实属正常的课程的设计。
第四章研究的具体部分4.1 研究的主要流程图4.2 研究的具体代码/*主函数*/#include"stdio.h"#include"math.h"#define N 80#include "stdlib.h"#include"string.h"void main(){int choice,flag=0;void displaymain();void YBys();void TSys();void PSys();void jzzh1();void jzzh2();void qfcz();while(flag==0){displaymain();printf("please input a digital(1-7)\n");scanf("%d",&choice);if(choice>=1&&choice<=7)switch(choice){case 1:YBys();break;case 2:TSys();break;case 3: PSys();break;case 4:jzzh1();break;case 5: jzzh2();break;case 6: qfcz();break;default:printf("the progress is over!\n");}else{printf("your inputs is error!\n");flag=1;}}getch();}void displaymain()/*显示主菜单*/{printf("==============");printf("简易计算器");printf("==============\n");printf("请选择\n");printf(" 1-简单四则运算\n");printf(" 2-特殊数学运算\n");printf(" 3-对数进行排序并求最值\n");printf(" 4-十进制转化成N进制\n");printf(" 5-N进制转化成二进制\n");printf(" 6-求解一般二元一次方程组\n");printf(" 7-退出运算\n");}void YBys()/*简单的四则运算函数*/{float a,b;char c;printf("请输入运算数和四则运算如a+(-,*,/)b:");scanf("%f%c%f",&a,&c,&b);switch(c){case '+':printf("%f\n",a+b);break;case '-':printf("%f\n",a-b);break;case '*':printf("%f\n",a*b);break;case '/':printf("%f\n",a/b);break;default: printf("输入错误");}}void TSys()/*特殊的数学函数运算函数*/{float x;int a,b,i;printf("atan(x),acos(x),asin(x),sin(x),cos(x),tan(x),log(x),√(x),(x)^(x)\n"); printf("1-atan(x)\n");printf("2-acos(x)\n");printf("3-asin(x)\n");printf("4-sin(x)\n");printf("5-cos(x)\n");printf("6-tan(x)\n");printf("7-log(x)\n");printf("8-√(x)\n");printf("9-(x)^(x)\n");printf("请选择数学函数\n");scanf("%d",&a);printf("请输入数值\n");scanf("%f",&x);if(a>=1&&a<=9)switch(a){case 1:printf("atan(x)=%f",atan(x));break;case 2:printf("acos(x)=%f",acos(x));break;case 3:printf("asin(x)=%f",asin(x));break;case 4:printf("sin(x)=%f",sin(x));break;case 5:printf("cos(x)=%f",cos(x));break;case 6:printf("tan(x)=%f",tan(x));break;case 7:printf("log(x)=%f",log(x));break;case 8:printf("√(x)=%f",sqrt(x));break;case 9:{float c=1;printf("请再输入一个个数\n");scanf("%d",&b);for(i=1;i<=b;i++)c=c*x;printf("(x)^(x)=%f\n",c);};break;}elseprintf("your inputs is error!\n");}void PSys()/*找出最大值和最小值的函数*/ {float a[N],temp;int i,j,k,n;printf("请输入要比较数的个数\n");scanf("%f",&n);printf("请输入%d数",n);for(i=0;i<n;i++)scanf("%f",&a[i]);for(i=0;i<n;i++)printf("%f\n",a[i]);printf("\n\n");for(k=0;k<n-1;k++){for(j=1;j<=n-k-1;j++)if(a[j-1]>a[j]){temp=a[j-1];a[j-1]=a[j];a[j]=temp;}}for(i=0;i<n;i++)printf("%f\n",a[i]);printf("max=%f,min=%f",a[n-1],a[0]);printf("\n");}void jzzh1()/*十进制数转化成二、八、十六进制数*/{int a,t,b[N],i=0,j,choice;printf("1-二进制");printf("2-八进制");printf("3-十六进制");printf("请选择转化形式(1-3)\n");scanf("%d",&choice);printf("请输入十进制数\n");scanf("%d",&a);switch(choice){case 1:if(a>0){while(a!=0){ t=a%2;b[i]=t; i++;a=a/2;} /*正整数十进制转化二进制*/{ for(j=i-1;j>=0;j--)printf("%d",b[j]);}printf("\n");}else {while(a!=0){ a=labs(a);a=255-a;t=a%2;b[i]=t; i++;a=a/2;} /*负整数十进制转化二进制*/{ for(j=i-1;j>=0;j--)printf("%d",b[j]);};break;printf("\n");};break;case 2:printf("%o\n",a);break;case 3:printf("%x\n",a);break;}}void jzzh2()/*N进制数转化成十进制数的函数*/{long t1;int i,n,t,t3;char a[N];printf("请输入一串数字:\n");scanf("%s",a);strupr(a);t3=strlen(a);t1=0;printf("please input n(2or8or16):\n");scanf("%d",&n);for(i=0;i<t3;i++){if(a[i]-'0'>=n&&a[i]<'A'||a[i]-'A'+10>=n){printf("data error!!");}if(a[i]>='0'&&a[i]<='9')t=a[i]-'0';else if(n>=11&&(a[i]>='A'&&a[i]<='A'+n-10))t=a[i]-'A'+10;t1=t1*n+t;}printf("the decimal is %ld\n",t1);}void qfcz()/*求解二元一次方程组函数*/{float a,b,c,disc,x1,x2,realpart,imagpart;printf("请依次输入一般二次方程的系数a,b,c\n"); scanf("%f,%f,%f",&a,&b,&c);if(fabs(a)<=1e-6&&fabs(b)<=1e-6)printf("方程无解!\n");else if(fabs(a)<=1e-6&&fabs(b)>1e-6)printf("方程有单根是%8.4f\n",-c/b);else{disc=b*b-4*a*c;if(fabs(disc)<=1e-6||disc>1e-6){x1=(-b+sqrt(disc))/(2*a);x2=(-b-sqrt(disc))/(2*a);printf("方程有两个实数根!\n");printf("x1=%8.4f",x1);printf("x2=%8.4f",x2);}else{realpart=-b/(2*a);imagpart=sqrt(-disc)/(2*a);printf("方程有两个虚根!\n");printf("x1=%8.4f+%8.4fi\n",realpart,imagpart);printf("x2=%8.4f-%8.4fi\n",realpart,imagpart);}}}4.3程序运行结果图表第五章总结通过为期一周的课程设计,我们对《C语言》这门课程有了更深一步的了解。