简易计算器 高级语言课程设计

合集下载

简易计算器c课程设计

简易计算器c课程设计

简易计算器c 课程设计一、课程目标知识目标:1. 让学生掌握简易计算器C的基本结构,包括算术表达式、运算符和操作数。

2. 使学生了解计算器C中的数据类型及其在内存中的存储方式。

3. 让学生理解顺序结构程序设计的原理,并能够运用到简易计算器C的开发中。

技能目标:1. 培养学生运用计算器C编写简单程序的能力,如加减乘除运算。

2. 培养学生分析问题、解决问题的能力,能够针对特定需求设计相应的计算器功能。

3. 提高学生的编程实践能力,通过动手编写代码,实现简易计算器的功能。

情感态度价值观目标:1. 培养学生对编程的兴趣和热情,激发他们主动探索新知识的欲望。

2. 培养学生团队协作意识,学会与他人共同分析问题、解决问题,共同进步。

3. 培养学生严谨、细致的学习态度,养成良好的编程习惯,为今后的学习打下基础。

课程性质:本课程属于编程启蒙课程,以实践操作为主,结合理论讲解,让学生在动手实践中掌握编程基础。

学生特点:本课程面向的学生为具有一定计算机操作基础,对编程感兴趣的年级学生。

教学要求:教师需结合学生特点,以实例为主线,引导学生主动参与课堂,注重培养学生的动手实践能力和团队协作精神。

通过本课程的学习,使学生在掌握计算器C基本知识的同时,提高编程技能和综合素质。

二、教学内容1. 计算器C基本语法:介绍计算器C的数据类型、变量、常量的定义及使用,让学生掌握基本语法规则。

- 教材章节:第一章 计算器C概述- 内容列举:数据类型、变量定义、常量定义、运算符、表达式。

2. 算术表达式:讲解算术表达式的构成,以及加减乘除运算符的使用方法。

- 教材章节:第二章 算术表达式- 内容列举:算术表达式构成、运算符优先级、括号的使用。

3. 顺序结构程序设计:引导学生学习顺序结构程序设计,掌握程序的基本执行流程。

- 教材章节:第三章 程序结构与控制流程- 内容列举:顺序结构、程序执行流程、输入输出语句。

4. 简易计算器C程序设计:结合前面的知识,设计一个简易计算器C程序,实现加减乘除运算。

c简单计算器课程设计

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语言课程设计-简易计算器

c语言课程设计-简易计算器

C语言课程设计学院:地球物理与测控技术学院专业:测控技术与仪器姓名:***学号:************目录第一章选题的意义 (3)1.1 课题研究的背景 (3)1.2 自己设计的优势 (3)1.3 设计上功能上的不足 (3)第二章研究的基础 (4)2.1 涉及的主要知识点 (4)第三章研究的可行性 (5)3.1 技术的可行性 (5)3.2 经济效益和社会效益的可行性 (5)第四章研究的具体部分 (6)4.1 研究的主要流程图 (6)4.2 研究的具体代码 (7)4.3程序运行结果图表 (13)第五章总结 (16)第一章选题的意义①通过本项课程设计,可以培养独立思考、综合运用所学有关相应知识的能力,能更好的巩固《C语言程序设计》课程学习的内容,掌握工程软件设计的基本方法,强化上机动手编程能力,闯过理论与实践相结合的难关!更加了解了c语言的好处和其可用性!同时增加了同学之间的团队合作精神!更加也体会到以后在工作中团队合作的重要性和必要性!②通过C语言课程设计,使学生了解高级程序设计语言的结构,掌握基本的程序设计过程和技巧,掌握基本的分析问题和利用计算机求解问题的能力,具备初步的高级语言程序设计能力。

为后续各门计算机课程的学习和毕业设计打下坚实基础。

1.1 课题研究的背景计算器是现代日常生活中使用较为频繁的工具之一,常用的计算器有简易版和科学计算器两种模式。

简易版的计算器不支持表达式运算,每次只能输入一个数据或者运算符来计算,而科学计算器除了容纳简易版计算器的功能外,还支持表达式运算,用户可以输入一个合法的算术表达式来得到所需的结果。

计算器对我们每一的学生都很熟悉,从初中到高中再到大学。

但是我们只知道按下几个按钮计算器便会显示出结果,很少有学生分析过计算器究竟是如何运行的。

C语言课程设计便是一个很好的机会,让我去亲自写计算器的运行代码,尽管是简单计算器的设计,但其背后的知识那是相当多的,对我是个挑战,我接受!1.2 自己设计的优势现时学习生活中,常会遇到一些数目较大数据繁杂的数值运算,徒手运算起来很困难,这时候我们就必须用到计算器。

C语言课程设计简单计算器程序文件

C语言课程设计简单计算器程序文件

课程设计名称:C语言课程设计课程设计题目:简单计算器程序目录第1章需求分析 (1)1.1设计要求 (1)1.2任务 (1)第2章总体设计 (2)2.1设计简介及设计方案论述 (2)2.2功能模块层次图 (2)第3章详细设计 (3)3.3由(后缀)逆波兰表达式计算中缀表达式原理 (8)3.3.1算法描述 (9)第4章调试分析 (11)4.1程序设计中所遇到的错误及犯错的原因 (11)4.2错误的解决方法 (11)第5章用户手册 (12)总结 (16)参考文献 (17)附录(程序清单) (18)第1章需求分析1.1 设计要求(1)用 C 语言数据结构实现程序设计;(2)利用结构体、栈、进行相关信息处理;(2)系统的各个功能模块要求用函数的形式实现;(4)界面简单.可操作性高。

1.2 任务(1)定义一个结构体类型数组.输入 0~9 及+、--、*等符号的信息.将其信息存储起来;(2)输入简单的加减乘除算术计算式.并在屏幕上显示逆波兰(后缀式)表达式和计算结果;(3)编写代码;(4)程序分析与调试。

说明:本课程设计将实现一个简单计算器。

在功能上尽量模仿 windows 的计算器。

系统界面不做牵制要求。

该程序能实现标准型中+、-、*、/、(、)、.、的混合运算表达式(一般意义上的中缀表达式).将其转换成逆序波兰表达式(后缀表达式)并计算输出结果。

在进行运算后可以选择继续运算或者结束当前运算。

即时准确地获得需要的计算的结果.充分降低了数字计算的难度和节约了时间.对人们的生活有一定的帮助。

第2章 总体设计2.1设计简介及设计方案论述逆波兰表达式又叫做后缀表达式。

在通常的表达式中.二元运算符总是置于与之相 关的两个运算对象之间.所以.这种表示法也称为中缀表达式。

波兰逻辑学家 J.Lukasiewicz 于 1929 年提出了另一种表示表达式的方法。

按此方法.每一运算符都置 于其运算对象之后.故称为后缀表达式。

后缀表达式的优点是显而易见的. 编译器在处理时候按照从左至右的顺序读取逆波 兰表达式.遇到运算对象直接压入堆栈.遇到运算符就从堆栈提取后进的两个对象进行计算.这个过程正好符合了计算机计算的原理。

51简易计算器课程设计

51简易计算器课程设计

51简易计算器课程设计一、课程目标知识目标:1. 学生能理解并掌握51简易计算器的基本原理和功能。

2. 学生能够运用所学的编程知识,编写出具备加、减、乘、除基本运算功能的51简易计算器程序。

3. 学生能够理解并运用51单片机的内外部中断,实现计算器按键识别与功能调用。

技能目标:1. 学生能够熟练使用51单片机的开发环境和编程工具。

2. 学生通过实践操作,掌握51单片机的I/O口编程,提高动手实践能力。

3. 学生能够通过团队协作,解决编程过程中遇到的问题,提升问题解决能力。

情感态度价值观目标:1. 学生培养对单片机编程的兴趣,增强学习计算机科学的热情。

2. 学生在课程实践中,养成动手操作、观察问题、思考问题的良好习惯。

3. 学生通过团队协作,培养沟通与协作意识,增强团队荣誉感。

本课程针对五年级学生设计,课程性质为实践性较强的信息技术课程。

结合学生特点,课程目标注重培养学生的学习兴趣和动手能力,同时考虑教学要求,将目标分解为具体的学习成果,为后续的教学设计和评估提供依据。

二、教学内容1. 51单片机基本原理与结构:介绍51单片机的组成、工作原理及特点,让学生对51单片机有整体的认识。

- 教材章节:第一章 51单片机概述2. 51单片机开发环境与编程工具:学习如何搭建51单片机开发环境,掌握编程工具的使用。

- 教材章节:第二章 51单片机开发环境与编程工具3. I/O口编程:学习51单片机I/O口的基本操作,实现计算器按键输入与LED显示。

- 教材章节:第三章 I/O口编程与应用4. 基本运算程序编写:学习编写加、减、乘、除基本运算的程序,掌握运算逻辑。

- 教材章节:第四章 算术运算程序设计5. 中断编程与应用:学习51单片机中断原理,运用外部中断实现按键识别与功能调用。

- 教材章节:第五章 中断系统及其应用6. 简易计算器程序设计与实现:将所学知识综合运用,设计并实现具备基本运算功能的简易计算器。

- 教材章节:第六章 综合应用实例教学内容根据课程目标进行科学性和系统性组织,制定详细的教学大纲,确保教学内容的安排和进度。

c简单计算器课程设计报告

c简单计算器课程设计报告

c 简单计算器 课程设计报告一、课程目标知识目标:1. 让学生掌握简单计算器的基本功能,包括加、减、乘、除等四则运算。

2. 使学生理解计算器操作规则,如先算乘除后算加减、括号的作用等。

3. 帮助学生掌握计算器上的其他功能键,如清除、取反、百分比等。

技能目标:1. 培养学生运用计算器进行四则运算的能力,提高计算速度和准确性。

2. 培养学生运用计算器解决实际问题的能力,如购物找零、计算面积等。

3. 培养学生通过观察、思考、提问等方式,发现计算器使用过程中的问题,并尝试解决。

情感态度价值观目标:1. 培养学生对待计算器等电子设备的正确态度,爱护设备,遵守使用规范。

2. 培养学生在合作学习中互相帮助、共同进步的精神,增强团队意识。

3. 通过计算器教学,激发学生对数学学科的兴趣,提高学生的自信心和自主学习能力。

本课程针对年级学生的特点,注重培养学生的学习兴趣和实践能力。

课程性质为实践操作类,强调学生在动手实践中掌握知识。

在教学过程中,教师需关注学生的学习需求,及时调整教学策略,确保学生能够达到课程目标。

课程目标分解为具体学习成果,以便于后续教学设计和评估。

在教学结束后,学生应能独立使用计算器完成四则运算,解决实际问题,并在学习过程中培养良好的情感态度和价值观。

二、教学内容1. 计算器基本结构认知:让学生了解计算器各部分名称及其功能,如数字键、运算符号键、等于键、清除键等。

2. 四则运算操作方法:教学加、减、乘、除四则运算的计算器操作方法,以及运算顺序和括号的使用。

- 加法和减法运算- 乘法和除法运算- 混合运算及括号应用3. 计算器其他功能键使用:介绍取反、百分比、开方等特殊功能键的操作方法。

4. 实践应用:设计实际应用场景,让学生运用计算器解决购物找零、计算面积、计算速度等问题。

- 购物找零问题- 长度、面积、体积计算- 速度、时间、路程计算教学内容参考教材相关章节,结合课程目标进行整合。

教学大纲安排如下:第一课时:计算器基本结构认知、四则运算操作方法(加法和减法运算)第二课时:四则运算操作方法(乘法和除法运算)第三课时:四则运算操作方法(混合运算及括号应用)第四课时:计算器其他功能键使用第五课时:实践应用(购物找零问题)第六课时:实践应用(长度、面积、体积计算)第七课时:实践应用(速度、时间、路程计算)教学内容注重科学性和系统性,确保学生能够循序渐进地掌握计算器的使用方法,并在实际应用中巩固所学知识。

C语言课程设计(简易计算器设计)带所有代码

C语言课程设计(简易计算器设计)带所有代码

《C语言课程设计》报告For personal use only in study and research; not for commercial useFor personal use only in study and research; not for commercial use For personal use only in study and research; not for commercial use 设计题目:______________ 简单计算器设计____________For personal use only in study and research; not for commercial use学院名称:电子与信息工程学院专业:计算机科学与技术班级:计科姓名:学号指导教师:定稿日期:2013-5-28、设计题目简单计算器设计、设计要求在功能上功能尽量模拟windows操作系统中的计算器,系统界面不做强制要求。

二、设计目的①通过本项课程设计,可以培养独立思考、综合运用所学有关相应知识的能力,能更好的巩固《C语言程序设计》课程学习的内容,掌握工程软件设计的基本方法,强化上机动手编程能力,闯过理论与实践相结合的难关!更加了解了c语言的好处和其可用性!同时增加了同学之间的团队合作精神!更加也体会到以后在工作中团队合作的重要性和必要性!②通过C语言课程设计,使学生了解高级程序设计语言的结构,掌握基本的程序设计过程和技巧,掌握基本的分析问题和利用计算机求解问题的能力, 具备初步的高级语言程序设计能力。

为后续各门计算机课程的学习和毕业设计打下坚实基础。

四、设计思想及过程①由于需要使功能尽量模仿Windows下的计算器,而很多功能要以图形界面实现,故用Borland C++ Builder编写。

所以用的是面向对象程序设计。

但因为这是C语言的课程设计,所以除了面向对象的使用以外,所有语法都是按照C语言的格式编写。

简单计算器java课程设计

简单计算器java课程设计

简单计算器java课程设计一、课程目标知识目标:1. 学生能理解简单计算器的功能需求,掌握Java语言的基本语法和编程结构。

2. 学生能运用Java编程实现加、减、乘、除等基本运算,并掌握相关运算符的使用方法。

3. 学生了解面向对象编程的基本概念,能够使用类和对象构建简单计算器程序。

技能目标:1. 学生能运用所学知识,独立完成简单计算器程序的编写和调试。

2. 学生掌握使用条件语句和循环语句进行程序流程控制,实现计算器的逻辑功能。

3. 学生能够运用调试工具,分析并解决简单计算器程序中可能出现的错误。

情感态度价值观目标:1. 培养学生编程的兴趣,激发他们探究计算思维和解决问题的热情。

2. 培养学生团队协作意识,让他们在合作开发过程中学会沟通与分享。

3. 培养学生面对困难勇于挑战的精神,提高他们独立解决问题的能力。

课程性质:本课程为实践性较强的学科课程,结合学生年级特点和教学要求,注重培养学生动手操作能力和编程思维。

学生特点:学生具备一定的Java基础,了解基本语法和编程结构,但对面向对象编程和实际项目开发尚处于初级阶段。

教学要求:结合学生特点,通过本节课的学习,使学生能够将所学知识应用于实际项目开发中,提高编程实践能力。

同时,关注学生情感态度价值观的培养,激发学习兴趣,增强合作意识。

将课程目标分解为具体学习成果,便于后续教学设计和评估。

二、教学内容1. 简单计算器功能需求分析:介绍计算器的基本功能,引导学生明确项目目标。

- 加、减、乘、除四则运算- 清除、退出等辅助功能2. Java基本语法回顾:复习Java基本语法,为编写计算器程序打下基础。

- 数据类型- 运算符- 控制语句(条件语句、循环语句)3. 面向对象编程基础:引入面向对象概念,指导学生构建简单的计算器类。

- 类的定义- 对象的创建- 方法的编写4. 简单计算器程序设计:详细讲解计算器各功能模块的实现。

- 界面设计- 事件处理- 运算逻辑5. 编程实践:指导学生动手编写简单计算器程序,并进行调试。

c简易计算器课程设计

c简易计算器课程设计

c 简易计算器课程设计一、课程目标知识目标:1. 学生能理解简易计算器的基本原理,掌握加、减、乘、除四则运算的操作方法。

2. 学生能够运用所学知识,解决生活中简单的数学问题。

3. 学生了解计算器的发展历程,认识到科技对生活的影响。

技能目标:1. 学生能够熟练操作简易计算器,进行基本的四则运算。

2. 学生通过实际操作,培养动手能力和问题解决能力。

3. 学生能够运用计算器辅助学习,提高数学学习效率。

情感态度价值观目标:1. 学生培养对数学学习的兴趣,树立正确的数学观念。

2. 学生在合作交流中,培养团队意识和沟通能力。

3. 学生通过计算器的使用,认识到科技发展的成果,增强民族自豪感。

课程性质:本课程为信息技术与数学学科的整合课程,旨在通过简易计算器的学习,提高学生的数学素养和信息技术能力。

学生特点:四年级学生具备一定的数学基础和信息技术能力,好奇心强,善于合作交流。

教学要求:教师需结合学生的特点,采用启发式教学,引导学生主动探究,注重培养学生的动手能力和问题解决能力。

在教学过程中,关注学生的情感态度,激发学生的学习兴趣,使学生在轻松愉快的氛围中学习。

通过本课程的学习,使学生达到预期的学习成果。

二、教学内容1. 计算器的历史与原理:介绍计算器的发展简史,探讨计算器的工作原理,让学生了解计算器的演变过程,认识到科技对生活的改变。

2. 简易计算器操作方法:详细讲解加、减、乘、除四则运算的操作步骤,让学生熟练掌握计算器的使用方法。

3. 实践应用:结合数学课本中的实际例题,指导学生运用计算器进行计算,解决实际问题,提高计算速度和准确性。

4. 计算器在数学学习中的应用:探讨计算器在辅助数学学习中的作用,如:简化计算过程、提高解题效率等。

教学内容安排和进度:第一课时:计算器的历史与原理,计算器的简单操作。

第二课时:四则运算的操作方法,实践练习。

第三课时:计算器在数学学习中的应用,解决实际问题。

教材章节:《信息技术》第四章:计算器与计算机。

C语言简单计算器的编写课程设计

C语言简单计算器的编写课程设计

C语言简单计算器的编写课程设计This model paper was revised by the Standardization Office on December 10, 20202013-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设计结果与分析系统测试结果如下:根据电脑所给的提示出现语法错误,缺少变量的定义大多的语法错误在通过书本参考下能够修改。

c课程设计简易计算器

c课程设计简易计算器

c 课程设计简易计算器一、课程目标知识目标:1. 让学生掌握简易计算器的基本功能与操作,包括加、减、乘、除等四则运算。

2. 使学生理解计算器的工作原理,了解显示屏、键盘等组成部分及其作用。

3. 帮助学生掌握计算器的使用规范,如开关机、输入输出等基本操作。

技能目标:1. 培养学生运用计算器解决实际问题的能力,提高计算速度和准确性。

2. 培养学生通过观察、尝试、探索等方法,自主发现计算器操作技巧和功能特点。

3. 培养学生合作交流的能力,学会在小组讨论中分享观点,共同解决问题。

情感态度价值观目标:1. 激发学生对计算器的学习兴趣,培养良好的学习习惯和探究精神。

2. 培养学生尊重科学、严谨求实的态度,树立正确的价值观。

3. 培养学生团队协作意识,增强合作解决问题的能力。

本课程针对小学四年级学生,结合教材内容,以实用性为导向,注重培养学生的动手操作能力和实际问题解决能力。

课程目标明确,易于衡量,为后续教学设计和评估提供依据。

在教学过程中,教师应关注学生个体差异,因材施教,确保每位学生都能在课程中收获知识和技能。

二、教学内容本章节教学内容主要包括以下几部分:1. 计算器的基本结构:介绍计算器的显示屏、键盘、电池等组成部分及其功能。

2. 四则运算操作:详细讲解加、减、乘、除四则运算在计算器上的操作步骤。

3. 计算器操作规范:教授计算器的开关机、清屏、输入输出等基本操作规范。

4. 实际问题解决:结合教材实例,引导学生运用计算器解决生活中的实际问题。

5. 操作技巧与功能探索:指导学生探索计算器的其他功能,如百分比、乘方等,并分享操作技巧。

教学内容安排如下:第一课时:计算器的基本结构及操作规范介绍。

第二课时:四则运算操作教学,以教材为例题进行讲解和实操。

第三课时:实际问题解决,分组讨论并运用计算器解决生活中的数学问题。

第四课时:操作技巧与功能探索,学生自主探究计算器其他功能并分享。

教学内容与教材紧密关联,确保科学性和系统性。

计算器-C语言课程设计

计算器-C语言课程设计

《高级语言程序设计》课程设计报告实验时间:2009年12月28日实验班级:08级计算机科学与技术4班实验报告总份(片)数: 1 份(片)实验教师:xxx、xxxxx、xxx、xx 设计团队湖南省吉首市吉首大学目录1.实验分工----------------------------------------------03 2.实验设计----------------------------------------------031.设计本次课题的目的---------------------------------------------------------032.本组课题选择------------------------------------------------------------------033.课题的现实意义---------------------------------------------------------------034.设计内容与要求---------------------------------------------------------------035.程序界面预览以及操作说明------------------------------------------------046.程序流程图---------------------------------------------------------------------083.关键代码----------------------------------------------09 4.源程序-------------------------------------------------12 5.实验测试----------------------------------------------19 6.设计体会与总结-------------------------------------20《高级语言程序设计》课程设计报告简单的计算器程序小组成员(姓名、学号): xx xxxxxxx xxxxx xxx一、实验分工二、实验设计1.设计本次课题的目的:《高级语言序设计》课程设计是计算机科学与技术专业和网络工程专业集中实践性环节之一,是学习完《高级语言程序设计》课程后进行的一次全面的综合练习。

c课程设计简单计算器

c课程设计简单计算器

c课程设计简单计算器一、教学目标本节课的学习目标包括:知识目标:学生需要掌握简单计算器的原理和基本操作,了解计算机内部是如何进行加减乘除等运算的。

技能目标:学生能够独立设计并实现一个简单计算器,提高逻辑思维能力和编程能力。

情感态度价值观目标:通过完成计算器设计,学生能够体会到编程的乐趣,增强对计算机科学的兴趣,培养创新精神和团队合作意识。

二、教学内容本节课的教学内容主要包括:1.简单计算器的原理介绍:讲解计算器的工作原理,让学生了解计算机是如何进行数学运算的。

2.编程语言的基本概念:介绍编程语言的基本语法和结构,为学生编写计算器程序打下基础。

3.计算器的设计与实现:引导学生通过编程实现一个简单计算器,培养学生的实际操作能力。

三、教学方法本节课采用多种教学方法,以激发学生的学习兴趣和主动性:1.讲授法:讲解计算器的原理和编程语言的基本概念,为学生提供理论支持。

2.案例分析法:分析已有的计算器程序,让学生从中学习编程技巧和方法。

3.实验法:学生动手编写计算器程序,培养实际操作能力和创新能力。

四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,我们将准备以下教学资源:1.教材:提供配套的教材,帮助学生学习计算器原理和编程语言。

2.多媒体资料:制作PPT等多媒体资料,生动形象地展示计算器原理和编程方法。

3.实验设备:准备计算机等实验设备,让学生能够顺利进行编程实践。

五、教学评估为了全面、客观、公正地评估学生的学习成果,我们将采用以下评估方式:1.平时表现评估:观察学生在课堂上的参与程度、提问回答等情况,了解学生的学习态度和积极性。

2.作业评估:通过学生提交的作业,评估学生的编程能力和对知识的理解程度。

3.考试评估:设置期末考试,测试学生对简单计算器原理和编程语言的掌握程度。

六、教学安排本节课的教学安排如下:1.教学进度:按照教材的章节安排,逐步讲解计算器原理和编程语言知识。

2.教学时间:安排在正常的上课时间,确保学生能够专心学习。

C语言课程设计报告【简易计算器设计】

C语言课程设计报告【简易计算器设计】

C语言课程设计报告【简易计算器设计】1000字一、设计目的本设计旨在通过设计一个简易计算器,使初学者通过该计算器,了解C语言基本语法并且巩固数学运算知识。

二、设计内容(一)需求分析本计算器,要求能够完成一般的数学运算(加、减、乘、除),以及开平方、自然对数、正弦等常用函数的计算。

(二)功能设计1. 实现加、减、乘、除基本运算符的计算功能,实现数值运算。

2. 实现开平方、自然对数、正弦等常用函数的计算功能。

3. 提供菜单界面,使用户可以选择所需要的计算功能。

4. 能够对输入的数字进行异常处理,如输入非数字字符等。

(三)技术实现本计算器的实现基于C语言,主要涉及基本输入输出和函数的应用。

1. 输入输出功能:本计算器通过scanf函数实现用户输入,通过printf函数将结果输出。

2. 函数应用:本计算器通过调用数学库函数实现对开平方、自然对数、正弦等常用函数的计算。

(四)算法设计本计算器的算法主要基于基本的数学运算原理以及数学库函数的应用。

1. 加法运算:\t输入要加的两个数a和b\t输出a+b的结果2. 减法运算:\t输入要减的两个数a和b \t输出a-b的结果3. 乘法运算:\t输入要乘的两个数a和b \t输出a*b的结果4. 除法运算:\t输入要除的两个数a和b \t如果b=0,输出错误信息\t否则,输出a/b的结果\t5. 开平方:\t输入要开平方的数a\t如果a<0,输出错误信息\t否则,输出a的平方根\t6. 自然对数:\t输入要求自然对数的数a \t如果a≤0,输出错误信息\t否则,输出a的自然对数\t7. 正弦:\t输入要求正弦的角度a\t输出a的正弦值(五)程序设计以下是本计算器的主体代码:。

C语言简单计算器编写课程设计

C语言简单计算器编写课程设计

2013-2014 学年第二学期学号《高级语言程序设计》课程设计报告题目:简单计算器专业:数字媒体技术班级:13级1班姓名:邢洪波指导教师:王辉成绩:计算机与信息工程系二 0 一四年二月二十天1设计内容及要求利用本学期所学的《 C语言程序设计》课程,运用有关知识,查阅相关资料,编写 C语言程序,设计一个简单计算器,要求编写的简单计算器能够模拟 windows 系统的计算器,用户能够用键盘输入有关数据,能够进行简单的加、减、乘、除运算,而且在程序运转过程中能够正常的退出程序。

?在计算器程序运转中,输入数据时假如碰到输入错误的状况,能够能过键盘上的退格键进行删除,而且从头输入正确的数据。

在数据输入达成后,假如需要放弃本次计算操作,能够利用程序中设置好的按键进行清零,并为下一次运算作准备。

运用有关知识,查阅有关资料,编写一个简单的计算器,能够实现简单的基本的加减乘除运算,在计算器工作时用户能利用键盘或鼠标进行相应操作。

程序基本功能要务实现完好,并有简单的考证。

程序还须有切合标准的程序设计报告。

2纲要设计系统流程图开始输入第一个操作数加法减法乘除法法清开零方乘方输入第二个操作数显示结果结束系统流程图主要功能表主要功能表序号文件名主要功能备注1+加法两个操作数2—减法两个操作数3*乘法两个操作数4/除法两个操作数5#开方一个操作数6^乘方两个操作数7Enter等于8Tab清零9q退出3设计过程或程序代码#include<>#include<>#include<>/*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,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;}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]=='-')/* 对减法的定义 */{{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设计结果与剖析系统测试结果以下:依据电脑所给的提示出现语法错误,缺乏变量的定义大多的语法错误在经过书籍参考下能够改正。

简易计算器高级语言课程设计

简易计算器高级语言课程设计

课程名称:C语言程序设计课题名称:简易计算器班级:学号:姓名:指导老师:成绩:一、课程设计目地1.通过这次地课程设计,巩固以前所学地知识:1)进一步熟悉了各种语句,如宏定义语句,语句地嵌套等等.2)对顺序,选择,循环结构地综合运用.3)进一步巩固了一些算法,如求四则混合运算,三角函数,指对数地算法.2.在课程设计地过程中,拓展了自己地知识面,知道我们所学过地C语言知识不过是很少地一部分.还有很多知识等待我们自己去学习.3.为了完善自己地程序,通过上网,查阅图书等途径学到了一些新地知识,如对C语言中一些常用图形函数地应用.4.通过课程设计,加深对结构化程序设计思想地理解,能进行一个系统功能需求分析,并设计合理地模块化结构.5.通过课程设计,提高程序开发能力,能运用合理地控制流编写清晰高效地程序.二、设计内容我设计地是一款简易计算器,界面清楚,操作方便,它能实现以下功能:1.查询当时时间2.简单地四则混合运算(支持小括号、优先级)3.正弦、余弦函数计算4.指对数计算三、总体设计简单计算器由六大模块组成,模块调用图如下:1.主函数 void main()功能:调用各个主要模块,实现简单计算器地整体功能.2.主界面函数void ZhuJieMian()功能:使用有关图形函数模拟出可视化地计算器外观界面,并提供用户输入窗口.3.时钟函数 int Time()功能:在模拟地可视化计算器中显示当时地时间.4.四则混合运算函数void SiZeHunHeYunSuan()功能:实现简单地加减乘除混合运算,并支持优先级和带括号地运算.5.三角运算函数void SanJiaoYunSuan()功能:实现基本地三角函数运算:sin(x)和cos(x).6.指对数函数void ZhiDuiShuYunSuan()功能:实现基本地指数和对数运算.四、详细设计a)数据结构设计:int priority(char left,char right){char option[]={'+','-','*','/','(',')','='};int i,le,ri;int l[]={4,4,6,6,2,10,0};int r[]={3,3,5,5,9,3,0};for(i=0;i<=7;i++){if(option[i]==left) le=l[i];if(option[i]==right) ri=r[i];}return(ri-le);}用两个数组模拟数据结构栈,其特点是数据先进后出.用两个数组分别保存操作数和运算符.从字符串中依次分离出操作数与运算符,分别存入对应数组.当操作符串为空时,直接存入(相当与栈元素地压入).当不为空时,与数组最后一个元素(相当于栈顶)比较优先级,若大于直接存入,否则弹出操作数最后两位进行运算,直到操作符栈顶元素优先级小于当前运算符,并将其存入.b)模块接口设计:1.时钟函数:int Time()包括地子函数地函数原型:void TimeJieMian();用于制作界面2.四则混合运算:void SiZeHunHeYunSuan()包括地子函数地函数原型:void SiZehunheYunSuanJieMian( );用于制作界面char* readstr();将输入地连续单个字符整合成一个完整地串,并返回其首地址double yunsuan(double shu1,double shu2,char option);对shu1和shu2地简单加减乘除运算,并返回运算结果Int priority(char left,char right);判断左符、右符地优先级谁高,若右大于左,返回正值,否则返回负值double compute(char *p);传入表达式串地首地址,返回表达式之值3.三角运算:void SanJiaoYunSuan()包括地子函数地函数原型:void SanJiaoJieMian(); 用于制作界面.double hudu(double x);把接受到地实数转化为弧度返回.double to_double(char *p); 将字符串转化为实数.double read(); 将连续输入地字符整合成一个浮点数并在屏幕上逆向输出将其返回.double sin(double x); 求sinx,实数型参数,返回实数型值.double cos(double x); 求cosx,实数型参数,返回实数型值.4.指对数运算:void ZhiDuiShuYunSuan()包括地子函数地函数原型:void ZhiDuiShuJieMian();用于制作界面.double read();将连续输入地字符整合成一个浮点数在屏幕上逆向输出将其返回.double exp(double x); 求e地x次方,返回双精度实数值.double lnx(double x); 求lnx地值,返回双精度实数值.c)流程图:1.主函数地流程图:2.优先级:五、调试与测试遇到地问题:1.计算器地界面不会做,有时数字显示在边框外面.2.时钟显示不出来.3.编写ln函数遇到困难.采取地解决措施:1.去图书馆借相关图书,上网查资料,通过自己地阅读,研究,不断地尝试,运行,修改,最终做出了简单地界面,但仍存在很多不足地地方,只能模拟出大体地外观,没能模拟出计算器中地各个键.2.查在界面显示地函数原型,对比自己地程序,不断修改,对比,调试,检查,反思,最后发现是语句顺序错误,显示写在了判断地后面,修改成功.3.在编写ln函数地时候,遇到很大困难,最后通过查阅资料,向别人请教编写出了函数.界面截图及相关说明:主界面:按1:进入时钟界面按2:进入四则混合运算界面按3:进入三角函数运算界面按4:进入指对数运算界面按5:退出程序时钟界面截图:先按一下s键,并输入表达式之后地四则混合运算界面截图:运算结果截图:先按一下s键,并输入数字地三角函数界面截图:运算结果截图:先按一下e键,并输入数字地指对数运算界面截图:运算结果截图:按空格键,再按l键,并输入数字地指对数运算界面截图:结果界面截图:#include <math.h>#include <dos.h>#include <stdio.h>#include <string.h>#include<graphics.h>#include<conio.h>#define QINGLING setfillstyle(1 ,15);bar(195,80,445,130);outtextxy(435,120,"0")#define SHUCHU setfillstyle(1,15);bar(195,80,445,130);setcolor(0);outtextxy(220,120,ch)#define JIEMIAN setfillstyle(1,7); bar(165,40,475,400); /*底板*/ setfillstyle(1,15); bar(195,80,445,130); /*工作区*/#define PI 3.1415926double hudu(double x); /*把输入地数转化为弧度*/void ZhuJieMian();void TimeJieMian();void SiZehunheYunSuanJieMian();void SanJiaoJieMian();void ZhiDuiShuJieMian();double to_double(char *p);double read(); /*将读到地数字整和成实数*/double sin(double x);double cos(double x);double exp(double x); /*e地次方*/float lnx(float x);char* readstr();double yunsuan(double shu1,double shu2,char option);int priority(char left,char right) ;double compute(char *p);int Time();void SiZehunheYunSuan();double sqrt(double x);void SanJiaoYunSuan();void ZhiDuiShuYunSuan();void main(){char c;ZhuJieMian();c=getch();while(c!='5'){switch(c){case '1':Time();break;case '2':SiZehunheYunSuan();break;case '3':SanJiaoY unSuan();break;case '4':ZhiDuiShuYunSuan();break;}ZhuJieMian();c=getch();}}double hudu(double x){return( x*PI/180.0);}void ZhuJieMian(){int gdriver=DETECT,gmode;initgraph(&gdriver,&gmode,"");JIEMIAN;outtextxy(200,160,"Welcome To Use This Caculator:"); outtextxy(200,170,"Its functions is as follows:"); outtextxy(200,210,"1 Current Time"); outtextxy(200,230,"2 Sizehunheyunsuan"); outtextxy(200,250,"3 Sanjiaoyunsuan"); outtextxy(200,270,"4 Zhiduishuyunsuan"); outtextxy(200,290,"5 Quit");outtextxy(200,310,"Please choose an order: ");}void TimeJieMian(){int gdriver=DETECT,gmode;initgraph(&gdriver,&gmode,"");JIEMIAN;outtextxy(200,200,"q represent Quit");}void SiZehunheYunSuanJieMian(){int gdriver=DETECT,gmode;initgraph(&gdriver,&gmode,"");setfillstyle(1,LIGHTGRAY);JIEMIAN;outtextxy(200,160,"Please input expressions "); outtextxy(200,215," s start"); outtextxy(200,240," spase to_zero"); outtextxy(200,265," q quit"); outtextxy(200,310,"Please choose an order ");}void SanJiaoJieMian(){int gdriver=DETECT,gmode;initgraph(&gdriver,&gmode,"");setfillstyle(1,LIGHTGRAY);JIEMIAN;outtextxy(200,160,"Please choose an order and then "); outtextxy(200,170,"input datas:");outtextxy(200,210," s sinx"); outtextxy(200,230," c cosx");outtextxy(200,250,"spase to_zero"); outtextxy(200,270," q quit"); outtextxy(200,310,"Please choose an order: ");}void ZhiDuiShuJieMian(){int gdriver=DETECT,gmode;initgraph(&gdriver,&gmode,"");JIEMIAN;outtextxy(200,160,"Please choose an order and then "); outtextxy(200,170,"input datas:");outtextxy(200,210," e exp(x)"); outtextxy(200,230," l ln(x)"); outtextxy(200,250,"spase to_zero"); outtextxy(200,270," q quit"); outtextxy(200,310,"Please choose an order: ");}double to_double(char *p){int i,sign=1;float t;double num;i=0;if(p[i]=='-') {sign=-1;i++;}num=0.0;for(;p[i]<='9'&&p[i]>='0';i++)num=num*10.0+p[i]-'0';if(p[i]=='.')for(i++,t=10.0;p[i]>='0'&&p[i]<='9';i++){num+=(p[i]-'0')/t;t*=10;}return(sign*num);}double read() /*将读到地数字整和成实数*/{char c,a[81],ch[34]; /*将读到地串先保存在a中*/int i=0;c=getch();while(c!='\r') /*getch()只读取回车键地第一个回车符*/{a[i++]=c;a[i]='\0';setfillstyle(1,WHITE);bar(195,80,445,130);sprintf(ch,"%28s",a);setcolor(BLACK);outtextxy(220,120,ch); /*不断刷系刷新屏幕以显现出逆向输出*/ c=getch();}return(to_double(a));}double sin(double x){double fz,fm,sinx=x,xiang;int sign=-1,t;xiang=x,fz=x,fm=1,t=1;while(fabs(xiang)>1e-8){fz*=x*x;fm*=(t+1)*(t+2); t+=2;xiang=sign*(fz/fm);sinx+=xiang;sign=sign*(-1);}return(sinx);}double cos(double x){double fz,fm,cosx=1,xiang;int sign=-1,t;xiang=x,fz=1,fm=1,t=0;while(fabs(xiang)>1e-8){fz*=x*x;fm*=(t+1)*(t+2); t+=2;xiang=sign*(fz/fm);cosx+=xiang;sign=sign*(-1);}return(cosx);}double exp(double x) /*e地次方*/ {double s=1.0,xiang=1.0;int t=1;do{xiang*=x/(t++);s+=xiang;}while(fabs(xiang)>1e-6) ;return(s); }float lnx(float x) /*ln(x)*/{ int s=-1,n=0;float y=0,t=0,m=1;if(x>0 && x<=1){ do{ y+=t;n++;s=-s;m*=(x-1);t=m*s/n;}while(fabs(t)>1e-6);}if(x>1){x=1/x;do{ y+=t;n++;s=-s;m*=(x-1);t=m*s/n;}while(fabs(t)>1e-6);return 0-y;}}char* readstr(){char c,a[81],ch[34]; /*将读到地串先保存在a中*/int i=0;c=getch();while(c!='\r') /*getch()只读取回车键地第一个回车符*/ {a[i++]=c;a[i]='=';a[i+1]='\0';setfillstyle(1,WHITE);bar(195,80,445,130);sprintf(ch,"%28s",a);setcolor(BLACK);outtextxy(220,120,ch);c=getch();}return(a);}double yunsuan(double shu1,double shu2,char option) { double re=0;switch(option){case '+':re=shu1+shu2;break;case '-':re=shu1-shu2;break;case '*':re=shu1*shu2;break;case '/':re=shu1/shu2;break;}return re;}int priority(char left,char right){char option[]={'+','-','*','/','(',')','='};int i,le,ri;int l[]={4,4,6,6,2,10,0};int r[]={3,3,5,5,9,3,0};for(i=0;i<=7;i++){if(option[i]==left) le=l[i];if(option[i]==right) ri=r[i];}return(ri-le);}double compute(char *p){ int i=0,j=0;double shu[20],num=0;char op[20],c;int l=0;c=p[l++];while(c){ if(c<='9'&&c>='0'||c=='.'){ while(c<='9'&&c>='0'){ num=num*10+(c-'0');c=p[l++];}if(c=='.'){int t=10;c=p[l++];while(c<='9'&&c>='0'){ num=num+(c-'0')/t;t*=10;c=p[l++];}}shu[i++]=num;num=0; /*截取一个数字*/}else if(j==0){op[j++]=c;c=p[l++];}else{ if(c==')'&&op[j-1]=='('){c=p[l++];j--;}else if(priority(op[j-1],c)>0){op[j++]=c;c=p[l++];}else { shu[i-2]=yunsuan(shu[i-2],shu[i-1],op[j-1]);i=i-1;j=j-1;}}}return shu[0];}void SiZehunheYunSuan(){char c,ch[50],*exp;SiZehunheYunSuanJieMian();c=getch();while(c!='q'){if(c==' ') {QINGLING;}else {exp=readstr(); sprintf(ch,"%28f",compute(exp));SHUCHU;} c=getch();}}void SanJiaoYunSuan(){char c,ch[80]; double shu;SanJiaoJieMian();c=getch();while(c!='q'){if(c==' ') {QINGLING; c=getch();if(c=='q') break;}shu=hudu(read());switch(c){case 's':sprintf(ch,"%28f",sin(shu));SHUCHU;break;case 'c':sprintf(ch,"%28f",cos(shu));SHUCHU;break;}c=getch();}}void ZhiDuiShuYunSuan(){char c,ch[80]; double shu;ZhiDuiShuJieMian();c=getch();while(c!='q'){if(c==' ') {QINGLING; c=getch();if(c=='q') break;}shu=read();switch(c){case 'e':sprintf(ch,"%28f",exp(shu));SHUCHU;break;case 'l':sprintf(ch,"%28f",lnx(shu));SHUCHU;break;}c=getch();}}int Time(){struct time t;char c;char ch[80];TimeJieMian();{gettime(&t);sprintf(ch,"The time is: %2d:%02d:%02d now",t.ti_hour, t.ti_min, t.ti_sec);SHUCHU;}c=getch();if(c=='q') return ; }。

C语言简易计算器课程设计

C语言简易计算器课程设计

C语⾔简易计算器课程设计C语⾔课程设计报告书题⽬:简易计算器院系:班级:学号:姓名:摘要该软件为⽤户提供在windows系统上的简易计算器,能进⾏简单的加、减、乘、除四则运算与混合运算。

⽬的是为了巩固和加深C语⾔课程的基本知识的理解和掌握,利⽤C语⾔进⾏基本的软件设计,掌握C语⾔的编程和程序调试的基本技能,掌握书写程序设计说明⽂档的能⼒,提⾼运⽤C语⾔解决实际问题的能⼒。

关键词:C;简易计算器;程序;基本算法;混合运算SUMMARYthe software provides a simple calculator in Windows system for users ,can be a simple add,subtract,multiply,divide.The purpose is to consolidate and deepen the basic knowledge of C language courses to understand and master, The use of C language for software design basic, To master the basic skills of C language programming and program debugging, Master the writing program design documentation ability,improve the ability to use C language to solve practical problems.⽬录1、概述 (1)1.1.简单计算器设计的意义 (1)1.2.系统的基本要求 (1)1.3.功能设计 (1)2、总体设计 (2)2.1系统模块机构框图 (2)2.2.功能模块框图 (2)2.3.系统流程图 (3)2.4.界⾯设计 (4)3、详细设计 (5)3.1.模块描述 (5)3.2.系统头⽂件 (5)3.3.函数声明 (5)4、调试分析 (8)5、总结 (8)6、参考⽂献 (10)7、致谢 (11)1、概述1.1.简单计算器设计的意义本课题的内容是设计⼀个简单的计算器。

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

课程名称:C语言程序设计课题名称:简易计算器班级:学号:姓名:指导老师:成绩:一、课程设计目的1.通过这次的课程设计,巩固以前所学的知识:1)进一步熟悉了各种语句,如宏定义语句,语句的嵌套等等。

2)对顺序,选择,循环结构的综合运用。

3)进一步巩固了一些算法,如求四则混合运算,三角函数,指对数的算法。

2.在课程设计的过程中,拓展了自己的知识面,知道我们所学过的C语言知识不过是很少的一部分。

还有很多知识等待我们自己去学习。

3.为了完善自己的程序,通过上网,查阅图书等途径学到了一些新的知识,如对C语言中一些常用图形函数的应用。

4.通过课程设计,加深对结构化程序设计思想的理解,能进行一个系统功能需求分析,并设计合理的模块化结构。

5.通过课程设计,提高程序开发能力,能运用合理的控制流编写清晰高效的程序。

二、设计内容我设计的是一款简易计算器,界面清楚,操作方便,它能实现以下功能:1.查询当时时间2.简单的四则混合运算(支持小括号、优先级)3.正弦、余弦函数计算4.指对数计算三、总体设计简单计算器由六大模块组成,模块调用图如下:1.主函数 void main()功能:调用各个主要模块,实现简单计算器的整体功能。

2.主界面函数void ZhuJieMian()功能:使用有关图形函数模拟出可视化的计算器外观界面,并提供用户输入窗口。

3.时钟函数 int Time()功能:在模拟的可视化计算器中显示当时的时间。

4.四则混合运算函数void SiZeHunHeYunSuan()功能:实现简单的加减乘除混合运算,并支持优先级和带括号的运算。

5.三角运算函数void SanJiaoYunSuan()功能:实现基本的三角函数运算:sin(x)和cos(x)。

6.指对数函数void ZhiDuiShuYunSuan()功能:实现基本的指数和对数运算。

四、详细设计a)数据结构设计:int priority(char left,char right){char option[]={'+','-','*','/','(',')','='};int i,le,ri;int l[]={4,4,6,6,2,10,0};int r[]={3,3,5,5,9,3,0};for(i=0;i<=7;i++){if(option[i]==left) le=l[i];if(option[i]==right) ri=r[i];}return(ri-le);}用两个数组模拟数据结构栈,其特点是数据先进后出。

用两个数组分别保存操作数和运算符。

从字符串中依次分离出操作数与运算符,分别存入对应数组。

当操作符串为空时,直接存入(相当与栈元素的压入)。

当不为空时,与数组最后一个元素(相当于栈顶)比较优先级,若大于直接存入,否则弹出操作数最后两位进行运算,直到操作符栈顶元素优先级小于当前运算符,并将其存入。

b)模块接口设计:1.时钟函数:int Time()包括的子函数的函数原型:void TimeJieMian();用于制作界面2.四则混合运算:void SiZeHunHeYunSuan()包括的子函数的函数原型:void SiZehunheYunSuanJieMian( );用于制作界面char* readstr();将输入的连续单个字符整合成一个完整的串,并返回其首地址double yunsuan(double shu1,double shu2,char option);对shu1和shu2的简单加减乘除运算,并返回运算结果Int priority(char left,char right);判断左符、右符的优先级谁高,若右大于左,返回正值,否则返回负值double compute(char *p);传入表达式串的首地址,返回表达式之值3.三角运算:void SanJiaoYunSuan()包括的子函数的函数原型:void SanJiaoJieMian(); 用于制作界面。

double hudu(double x);把接受到的实数转化为弧度返回。

double to_double(char *p); 将字符串转化为实数。

double read(); 将连续输入的字符整合成一个浮点数并在屏幕上逆向输出将其返回。

double sin(double x); 求sinx,实数型参数,返回实数型值。

double cos(double x); 求cosx ,实数型参数,返回实数型值。

4.指对数运算:void ZhiDuiShuYunSuan() 包括的子函数的函数原型:void ZhiDuiShuJieMian(); 用于制作界面。

double read (); 将连续输入的字符整合成一个浮点数在屏幕上逆向输出将其返回。

double exp(double x); 求e 的x 次方,返回双精度实数值。

double lnx(double x); 求lnx 的值,返回双精度实数值。

c )流程图:1. 主函数的流程图:2.优先级:五、调试与测试遇到的问题:1.计算器的界面不会做,有时数字显示在边框外面。

2.时钟显示不出来。

3.编写ln函数遇到困难。

采取的解决措施:1.去图书馆借相关图书,上网查资料,通过自己的阅读,研究,不断的尝试,运行,修改,最终做出了简单的界面,但仍存在很多不足的地方,只能模拟出大体的外观,没能模拟出计算器中的各个键。

2.查在界面显示的函数原型,对比自己的程序,不断修改,对比,调试,检查,反思,最后发现是语句顺序错误,显示写在了判断的后面,修改成功。

3.在编写ln函数的时候,遇到很大困难,最后通过查阅资料,向别人请教编写出了函数。

界面截图及相关说明:主界面:按1:进入时钟界面按2:进入四则混合运算界面按3:进入三角函数运算界面按4:进入指对数运算界面按5:退出程序时钟界面截图:先按一下s键,并输入表达式之后的四则混合运算界面截图:运算结果截图:先按一下s键,并输入数字的三角函数界面截图:运算结果截图:先按一下e键,并输入数字的指对数运算界面截图:运算结果截图:按空格键,再按l键,并输入数字的指对数运算界面截图:结果界面截图:#include <math.h>#include <dos.h>#include <stdio.h>#include <string.h>#include<graphics.h>#include<conio.h>#define QINGLING setfillstyle(1 ,15);bar(195,80,445,130);outtextxy(435,120,"0")#define SHUCHU setfillstyle(1,15);bar(195,80,445,130);setcolor(0);outtextxy(220,120,ch)#define JIEMIAN setfillstyle(1,7); bar(165,40,475,400); /*底板*/ setfillstyle(1,15); bar(195,80,445,130); /*工作区*/#define PI 3.1415926double hudu(double x); /*把输入的数转化为弧度*/void ZhuJieMian();void TimeJieMian();void SiZehunheYunSuanJieMian();void SanJiaoJieMian();void ZhiDuiShuJieMian();double to_double(char *p);double read(); /*将读到的数字整和成实数*/double sin(double x);double cos(double x);double exp(double x); /*e的次方*/float lnx(float x);char* readstr();double yunsuan(double shu1,double shu2,char option);int priority(char left,char right) ;double compute(char *p);int Time();void SiZehunheYunSuan();double sqrt(double x);void SanJiaoYunSuan();void ZhiDuiShuYunSuan();void main(){char c;ZhuJieMian();c=getch();while(c!='5'){switch(c){case '1':Time();break;case '2':SiZehunheYunSuan();break;case '3':SanJiaoY unSuan();break;case '4':ZhiDuiShuYunSuan();break;}ZhuJieMian();c=getch();}}double hudu(double x){return( x*PI/180.0);}void ZhuJieMian(){int gdriver=DETECT,gmode;initgraph(&gdriver,&gmode,"");JIEMIAN;outtextxy(200,160,"Welcome To Use This Caculator:"); outtextxy(200,170,"Its functions is as follows:"); outtextxy(200,210,"1 Current Time"); outtextxy(200,230,"2 Sizehunheyunsuan"); outtextxy(200,250,"3 Sanjiaoyunsuan"); outtextxy(200,270,"4 Zhiduishuyunsuan"); outtextxy(200,290,"5 Quit");outtextxy(200,310,"Please choose an order: ");}void TimeJieMian(){int gdriver=DETECT,gmode;initgraph(&gdriver,&gmode,"");JIEMIAN;outtextxy(200,200,"q represent Quit");}void SiZehunheYunSuanJieMian(){int gdriver=DETECT,gmode;initgraph(&gdriver,&gmode,"");setfillstyle(1,LIGHTGRAY);JIEMIAN;outtextxy(200,160,"Please input expressions "); outtextxy(200,215," s start"); outtextxy(200,240," spase to_zero"); outtextxy(200,265," q quit"); outtextxy(200,310,"Please choose an order ");}void SanJiaoJieMian(){int gdriver=DETECT,gmode;initgraph(&gdriver,&gmode,"");setfillstyle(1,LIGHTGRAY);JIEMIAN;outtextxy(200,160,"Please choose an order and then "); outtextxy(200,170,"input datas:");outtextxy(200,210," s sinx"); outtextxy(200,230," c cosx");outtextxy(200,250,"spase to_zero"); outtextxy(200,270," q quit"); outtextxy(200,310,"Please choose an order: ");}void ZhiDuiShuJieMian(){int gdriver=DETECT,gmode;initgraph(&gdriver,&gmode,"");JIEMIAN;outtextxy(200,160,"Please choose an order and then "); outtextxy(200,170,"input datas:");outtextxy(200,210," e exp(x)"); outtextxy(200,230," l ln(x)"); outtextxy(200,250,"spase to_zero"); outtextxy(200,270," q quit"); outtextxy(200,310,"Please choose an order: ");}double to_double(char *p){int i,sign=1;float t;double num;i=0;if(p[i]=='-') {sign=-1;i++;}num=0.0;for(;p[i]<='9'&&p[i]>='0';i++)num=num*10.0+p[i]-'0';if(p[i]=='.')for(i++,t=10.0;p[i]>='0'&&p[i]<='9';i++){num+=(p[i]-'0')/t;t*=10;}return(sign*num);}double read() /*将读到的数字整和成实数*/{char c,a[81],ch[34]; /*将读到的串先保存在a中*/int i=0;c=getch();while(c!='\r') /*getch()只读取回车键的第一个回车符*/{a[i++]=c;a[i]='\0';setfillstyle(1,WHITE);bar(195,80,445,130);sprintf(ch,"%28s",a);setcolor(BLACK);outtextxy(220,120,ch); /*不断刷系刷新屏幕以显现出逆向输出*/ c=getch();}return(to_double(a));}double sin(double x){double fz,fm,sinx=x,xiang;int sign=-1,t;xiang=x,fz=x,fm=1,t=1;while(fabs(xiang)>1e-8){fz*=x*x;fm*=(t+1)*(t+2); t+=2;xiang=sign*(fz/fm);sinx+=xiang;sign=sign*(-1);}return(sinx);}double cos(double x){double fz,fm,cosx=1,xiang;int sign=-1,t;xiang=x,fz=1,fm=1,t=0;while(fabs(xiang)>1e-8){fz*=x*x;fm*=(t+1)*(t+2); t+=2;xiang=sign*(fz/fm);cosx+=xiang;sign=sign*(-1);}return(cosx);}double exp(double x) /*e的次方*/ {double s=1.0,xiang=1.0;int t=1;do{xiang*=x/(t++);s+=xiang;}while(fabs(xiang)>1e-6) ;return(s); }float lnx(float x) /*ln(x)*/{ int s=-1,n=0;float y=0,t=0,m=1;if(x>0 && x<=1){ do{ y+=t;n++;s=-s;m*=(x-1);t=m*s/n;}while(fabs(t)>1e-6);}if(x>1){x=1/x;do{ y+=t;n++;s=-s;m*=(x-1);t=m*s/n;}while(fabs(t)>1e-6);return 0-y;}}char* readstr(){char c,a[81],ch[34]; /*将读到的串先保存在a中*/int i=0;c=getch();while(c!='\r') /*getch()只读取回车键的第一个回车符*/ {a[i++]=c;a[i]='=';a[i+1]='\0';setfillstyle(1,WHITE);bar(195,80,445,130);sprintf(ch,"%28s",a);setcolor(BLACK);outtextxy(220,120,ch);c=getch();}return(a);}double yunsuan(double shu1,double shu2,char option) { double re=0;switch(option){case '+':re=shu1+shu2;break;case '-':re=shu1-shu2;break;case '*':re=shu1*shu2;break;case '/':re=shu1/shu2;break;}return re;}int priority(char left,char right){char option[]={'+','-','*','/','(',')','='};int i,le,ri;int l[]={4,4,6,6,2,10,0};int r[]={3,3,5,5,9,3,0};for(i=0;i<=7;i++){if(option[i]==left) le=l[i];if(option[i]==right) ri=r[i];}return(ri-le);}double compute(char *p){ int i=0,j=0;double shu[20],num=0;char op[20],c;int l=0;c=p[l++];while(c){ if(c<='9'&&c>='0'||c=='.'){ while(c<='9'&&c>='0'){ num=num*10+(c-'0');c=p[l++];}if(c=='.'){int t=10;c=p[l++];while(c<='9'&&c>='0'){ num=num+(c-'0')/t;t*=10;c=p[l++];}}shu[i++]=num;num=0; /*截取一个数字*/}else if(j==0){op[j++]=c;c=p[l++];}else{ if(c==')'&&op[j-1]=='('){c=p[l++];j--;}else if(priority(op[j-1],c)>0){op[j++]=c;c=p[l++];}else { shu[i-2]=yunsuan(shu[i-2],shu[i-1],op[j-1]);i=i-1;j=j-1;}}}return shu[0];}void SiZehunheYunSuan(){char c,ch[50],*exp;SiZehunheYunSuanJieMian();c=getch();while(c!='q'){if(c==' ') {QINGLING;}else {exp=readstr(); sprintf(ch,"%28f",compute(exp));SHUCHU;} c=getch();}}void SanJiaoYunSuan(){char c,ch[80]; double shu;SanJiaoJieMian();c=getch();while(c!='q'){if(c==' ') {QINGLING; c=getch();if(c=='q') break;}shu=hudu(read());switch(c){case 's':sprintf(ch,"%28f",sin(shu));SHUCHU;break;case 'c':sprintf(ch,"%28f",cos(shu));SHUCHU;break;}c=getch();}}void ZhiDuiShuYunSuan(){char c,ch[80]; double shu;ZhiDuiShuJieMian();c=getch();while(c!='q'){if(c==' ') {QINGLING; c=getch();if(c=='q') break;}shu=read();switch(c){case 'e':sprintf(ch,"%28f",exp(shu));SHUCHU;break;case 'l':sprintf(ch,"%28f",lnx(shu));SHUCHU;break;}c=getch();}}int Time(){struct time t;char c;char ch[80];TimeJieMian();{gettime(&t);sprintf(ch,"The time is: %2d:%02d:%02d now",t.ti_hour, t.ti_min, t.ti_sec);SHUCHU;}c=getch();if(c=='q') return ; }。

相关文档
最新文档