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

合集下载

简易计算器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. 学生能够掌握C语言基本语法和数据类型,特别是整型、浮点型的运用。

2. 学生能够理解并运用顺序结构、选择结构和循环结构进行程序设计。

3. 学生能够运用C语言的算术运算符,实现基本的数学运算功能。

技能目标:1. 学生能够编写简单的C程序,实现加、减、乘、除等基本计算功能。

2. 学生能够通过键盘输入数据,并处理输入异常。

3. 学生能够运用调试工具检查并修正程序中的错误。

情感态度价值观目标:1. 学生培养编程的兴趣,认识到编程在解决问题中的重要性。

2. 学生在学习过程中形成合作意识,培养团队精神。

3. 学生通过编程解决实际问题,体验成就感,增强自信心。

分析课程性质、学生特点和教学要求:本课程针对的是高一年级学生,他们对C语言已有一定的基础知识,具备基本的编程能力。

课程性质为实践性较强的编程课程,旨在让学生通过动手实践,掌握C语言编程技巧。

教学要求注重培养学生的实际编程能力,将理论知识与实际应用相结合。

课程目标分解:1. 学生能够独立完成一个简单的计算器程序,实现加、减、乘、除功能。

2. 学生能够运用所学知识对程序进行优化,提高计算器的运算效率和用户体验。

3. 学生通过课程学习,培养良好的编程习惯和解决问题的能力。

二、教学内容本课程教学内容紧密结合课程目标,确保学生能够系统地学习和掌握C语言编程计算器的制作。

1. C语言基本语法和数据类型复习:回顾整型、浮点型等基本数据类型,强调其在计算器程序中的应用。

2. 运算符和表达式:详细介绍C语言的算术运算符,如加、减、乘、除等,并讲解表达式的构成和计算规则。

3. 控制结构:- 顺序结构:巩固顺序执行的概念,并应用于计算器程序。

- 选择结构:讲解if语句,实现计算器的不同运算功能。

- 循环结构:介绍for和while循环,实现重复计算功能。

4. 输入输出函数:教授scanf和printf函数的使用,实现用户与计算器程序的交互。

c简单计算器课程设计

c简单计算器课程设计

c 简单计算器课程设计一、课程目标知识目标:1. 让学生掌握简单计算器的基本操作,包括开机、关机、清除屏幕、输入数字和运算符号。

2. 使学生理解加、减、乘、除四则运算的基本概念,并能够在简单计算器上进行正确的运算操作。

3. 帮助学生识别计算器上各个按键的功能,了解其对应的数学意义。

技能目标:1. 培养学生运用简单计算器解决实际问题的能力,如购物找零、计算面积等。

2. 提高学生进行四则运算的速度和准确性,提高计算效率。

3. 引导学生掌握计算器使用技巧,如连续计算、顺序计算等。

情感态度价值观目标:1. 培养学生对计算器的正确态度,认识到计算器是学习数学的工具,而非替代品。

2. 激发学生学习数学的兴趣,让学生在轻松愉快的氛围中体验数学计算的乐趣。

3. 培养学生的合作意识,使学生在小组讨论和互助学习中提高沟通能力,培养团队精神。

本课程针对小学三年级学生设计,结合学生年龄特点,注重激发兴趣和培养动手操作能力。

课程内容紧密联系教材,将目标分解为具体的学习成果,便于后续教学设计和评估。

通过本课程的学习,学生将能够熟练运用简单计算器,提高数学计算能力,培养良好的学习习惯和团队协作能力。

二、教学内容1. 计算器的基本结构:引导学生认识计算器的外观、各部分名称及其功能。

- 教材章节:第三章第1节《认识计算器》- 内容列举:计算器按键布局、显示屏、开机与关机、清除键等。

2. 四则运算操作:讲解加、减、乘、除四则运算在计算器上的操作方法。

- 教材章节:第三章第2节《计算器的四则运算》- 内容列举:按键输入、运算顺序、连续运算、计算结果读取等。

3. 计算器使用技巧:教授计算器的高级使用技巧,提高计算效率。

- 教材章节:第三章第3节《计算器使用技巧》- 内容列举:百分比计算、乘方运算、记忆功能等。

4. 实践应用:结合实际生活场景,让学生运用计算器解决实际问题。

- 教材章节:第三章第4节《计算器在实际生活中的应用》- 内容列举:购物找零、计算面积、体积、速度等。

C课程设计(计算器)[转载]

C课程设计(计算器)[转载]
循环结构可以简化代码,提高程序的可读性和可维护性。
04
C语言函数
函数的定义和声明
函数定义:函数是完成特定任务的独立代码块,可以重复使用 函数声明:在函数定义之前,需要先声明函数,以便编译器知道函数的存在 函数参数:函数可以接受参数,参数可以是变量、常量或其他表达式 函数返回值:函数可以返回一个值,返回值可以是任何类型的数据
2010年代,全球科学家共 同研发了第一台量子计算

计算器的应用场景
家庭日常计算:如购物、做饭等 学校教育:如数学、物理等学科的教学和练习 商业计算:如财务、会计等业务的计算和统计 科研计算:如科学研究、工程计算等数据的处理和分析
02
C语言基础
C语言概述
C语言是一种高级 编程语言,广泛应 用于系统编程、嵌 入式系统、驱动程 序等领域。
01
计算器概述
计算器的基本功能
加减乘除运算 平方、开方、求余等高级运算 存储和读取数据
计算器模式切换(如科学计算器、工 程计算器等)
单位转换(如长度、重量、温度等)
计算器设置(如时间、日期、闹钟等)
计算器的发展历程
1820年,英国数学家查尔 斯·巴比奇发明了第一台差
分机
1960年代,日本科学家发 明了第一台便携式电子计
执行流程:函 数被调用后, 会按照函数体 中的代码顺序
执行
返回值:函数 执行完成后,
可以通过 return语句返
回一个值
结束调用:函 数执行完成后, 会返回到调用 函数的位置, 继续执行后面
的代码
05
计算器功能实现
输入输出处理
输入:键盘输入,支持数字、运算符号等 输出:显示屏显示计算结果 处理:计算器内部进行计算,包括加减乘除等基本运算 错误处理:输入错误时,给出提示信息,如“输入错误,请重新输入”

C语言程序设计-第四章简单计算器小程序-分支程序设计

C语言程序设计-第四章简单计算器小程序-分支程序设计

P1 逻辑运算符 P2

逻辑运算符 P2
课堂练习: 求下面逻辑表达式的值: 2>1 && 4 && 7<3+!0
值为0
等价于((2>1)&&4)&&(7<(3+(!
1 条件运算符和条件表达式 1.2 逻辑运算—逻辑运算的重要规则
a&&b:当a为0时,不管b为何值,结果为0
课堂练习:有下面定义的语句和逻辑表达式: int a=0,b=10,c=0,d=0 a && b && (c=a+10,d=100) 逻辑表达式执行后,a,b,c,d的值各为多少?
任务实现效果演示 例题源代码:switchcalculator.c
相关知识 1. switch语句 2. break语句
1 switch多分支选择结构
❖ 尽管用if…else if结构可以实现多分支,注但意当:分常支量较表多达时式,必程须序是结整构型较、复字杂符。型或枚举类型,不能是 实型表达式,每个case关键字后的常量表达式应互不相同
值为0 等价于i==(k>j),值为1
1 条件运算符和条件表达式 1.2 逻辑运算—逻辑运算符与逻辑表达式
&&(逻辑与)、||(逻辑或)、!(逻辑非)(单目)
逻辑表达式的一般形式:
优先级: 1.由低到高: ||→ && → !; 2.多种运算符一起: = →|| →&& →关系运算符 →算术运算符→ !。
【】 简单计算器小程序:由用户输入运算数和四则运算符(+、-、*、/),输出计算结果。
【】

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

c语言程序设计-简单的计算器

c语言程序设计-简单的计算器

C语言程序设计-简单的计算器(总18页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--《程序设计基础(C)》课程设计报告简易计算器设计学生姓名:学号:班级:指导老师:日期:309工作室设计目录一、设计目标 (1)二、总体设计 (2)三、详细设计 (4)四、调试与测试 (8)五、分析及结论 (9)六、参考文献 (10)【附录】 (10)一、设计目标设计一个C语言程序(简单计算器设计)具体要求:在功能上功能尽量模拟windows操作系统中的计算器,系统界面不做强制要求。

主要功能:进行+、-、*、/、三角函数、对数、幂等各项数学运算,能够进行进制间的相互转换与计算。

二、总体设计1、程序设计组成框图2、设计思路简单计算器的设计的程序中主要调用的函数有:数学函数的定义和I/O函数;设计思路和理念在于一切追求简便易操作原理,通过个人的构思和设计以及调试运行设计出这一款简单的计算器。

3、程序设计流程图三、详细设计1、功能函数①函数的功能:两数的+、-、*、/计算、求平均函数的入口:从main()的if(flag==1)开关结构中进入,即flag的值为1时进入该函数,从而进行该功能函数的计算。

函数调用关系:被主函数调用,由if()开关结构中进入。

函数的出口:函数的出口为printf("是否继续运算(Y/N) :"),此时输入“Y”,继续前面的结构。

2、功能函数②函数的功能: x的y次方的计算、两数的求余、以x为底y的对数函数的入口:从main()的if(flag==2)开关结构中进入,即flag的值为2时进入该函数,从而进行该功能函数的计算。

函数调用关系:被主函数调用,由if()开关结构中进入。

函数的出口:函数的出口为printf("是否继续运算(Y/N) :"),此时输入“Y”,继续前面的结构。

3、功能函数③函数的功能: 单个数值sin、cos、tan的计算,以e为底的指数、求绝对值函数的入口:从main()的if(flag==3)开关结构中进入,即flag的值为3时进入该函数,从而进行该功能函数的计算。

c简易计算器课程设计

c简易计算器课程设计

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

C语言实现简易计算器(可作加减乘除)

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();}参考⽂献链接如下[参考⽂献]()。

vc计算器课程设计

vc计算器课程设计

描写童年趣事作文600字高二描写童年趣事作文600字高二6篇童年是七色的,是热忱的、可爱的、好玩的,布满笑声的。

共享一下你的童年趣事吧。

下面是我为大家收集的描写童年趣事作文600字高二例文,期望你宠爱。

描写童年趣事作文600字高二(篇1)一进教室,映入眼帘的就是讲台上的那几个易拉罐和几根“专业”的钓鱼竿。

我一下子就呆住了,心里不禁猜想起老师葫芦里卖的是什么药?“莫非是去钓鱼,不对,要易拉罐干什么?莫非里面装的是鱼食?不对,不对”“下面我们来玩一个叫‘钓旱鱼’的玩耍吧!”老师的一句话打断了我的猜想,也点破了我的困惑。

首先,江老师将我们分成四个大组,每个大组有六名“钓鱼者”。

老师为了让我们生疏玩耍规章,便让我们先进行练习。

在练习的过程中,我渐渐把握了要领,能在十五秒之内钓起一条“旱鱼”了。

在为自己的成绩窃喜时,我才发觉真是“人外有人,天外有天”啊!———有些同学格外娴熟,不出十秒就能钓起一条“旱鱼”,这使我不由得站在一旁观看起其他人的动作。

不一会儿,练习结束,老师让各组前来抽签。

令我欣喜的是:我们组竟幸运的抽到了第5号,这样我们就有机会进行训练了。

这时,老师让每组选出2名队员来参赛。

然而,在参赛问题上,大家竟不约而同的推选了我和刘宇欣,这是我颇感意外的。

竞赛最终开头了。

首先上场的是闵耀东和王涵,他们或许是由于第一个上场产生了恐惊心理,或许是由于不太娴熟,所以显得有些力不从心,连续2次都使“鱼儿”顺当脱钩,最终才钓起了2次。

我和队友们马上对他们报以了“鼓舞”的掌声。

最精彩的也是最使人感到意外的,是第四个上场的李亦桐和方菁如一组。

她们一开头上场的表现是顺风顺水,一连钓起了2个,但到中间的时候,不知是谁顺手将竿一抖,两根鱼竿就像热恋情人一般纠缠在一起了,害得同学们费了九牛二虎之力才将难分难舍的它们分开。

“哈!哈!哈!”的笑声始终萦绕在我的耳畔,它不仅使我的童年丰富多彩,更使它意义非凡。

描写童年趣事作文600字高二(篇2)每个人的童年生活都是丰富多彩的,布满了无穷的乐趣。

c设计计算器课程设计

c设计计算器课程设计

c 设计计算器课程设计一、课程目标知识目标:1. 学生能理解计算器的基本原理和功能,掌握计算器的基本操作方法。

2. 学生能够运用计算器解决基本的数学运算问题,如加减乘除、百分比计算等。

3. 学生能够理解并运用计算器上的科学计算功能,如平方根、指数运算等。

技能目标:1. 学生能够熟练操作计算器,快速进行数值输入、计算和结果读取。

2. 学生能够运用计算器进行实际问题的计算,如购物找零、时间计算等。

3. 学生能够通过计算器解决一些简单的数学问题,培养解决问题的能力和逻辑思维能力。

情感态度价值观目标:1. 学生培养对计算器的正确使用态度,明白计算器是辅助工具,提高计算效率的同时,不应过度依赖。

2. 学生在合作交流中使用计算器,培养团队合作意识和分享精神。

3. 学生通过计算器的运用,增强对数学学科的兴趣,认识到数学与生活的紧密联系。

课程性质:本课程属于实践操作类课程,注重培养学生的动手操作能力和实际问题解决能力。

学生特点:学生处于小学高年级阶段,对计算器有一定了解,好奇心强,喜欢动手操作。

教学要求:教师应引导学生通过实践操作,掌握计算器的使用方法,将计算器与实际生活问题相结合,提高学生的数学应用能力。

同时,注重培养学生的团队合作意识和正确使用计算器的态度。

在教学过程中,关注学生的学习成果,及时进行教学评估和调整。

二、教学内容1. 计算器的基本结构:介绍计算器的各个部分及其功能,如显示屏、键盘、电源等。

教材章节:《计算器与计算法则》第一章内容列举:计算器按键的功能及操作方法。

2. 计算器的基本操作:教授加减乘除、百分比、平方根、指数等基本运算。

教材章节:《计算器与计算法则》第二章内容列举:各类运算的操作步骤及注意事项。

3. 计算器在生活中的应用:通过实例教授计算器解决实际问题,如购物找零、时间计算等。

教材章节:《计算器与计算法则》第三章内容列举:实际案例及解决方法。

4. 科学计算器的使用:针对高年级学生,介绍科学计算器的拓展功能,如三角函数、对数等。

c课程设计简易计算器

c课程设计简易计算器

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

c计算器课课程设计

c计算器课课程设计

c计算器课课程设计一、教学目标本节课的教学目标是让学生掌握C语言编程的基础知识,了解C语言的特点和用途,学会使用C语言编写简单的程序。

具体来说,知识目标包括:了解C语言的基本语法、数据类型、运算符、控制结构等;技能目标包括:能够使用C语言编写并运行简单的程序,能够阅读和理解简单的C语言程序;情感态度价值观目标包括:培养学生对计算机编程的兴趣和热情,提高学生解决问题的能力。

二、教学内容本节课的教学内容主要包括C语言的基本语法、数据类型、运算符、控制结构等。

具体来说,教学大纲如下:1.C语言的基本语法:介绍C语言的变量、常量、语句、注释等基本元素。

2.数据类型:介绍整型、浮点型、字符型等基本数据类型,以及枚举类型和指针类型。

3.运算符:介绍算术运算符、关系运算符、逻辑运算符等。

4.控制结构:介绍顺序结构、选择结构、循环结构等。

三、教学方法为了激发学生的学习兴趣和主动性,本节课将采用多种教学方法,包括讲授法、讨论法、案例分析法、实验法等。

具体来说:1.讲授法:教师通过讲解C语言的基本语法、数据类型、运算符、控制结构等知识,帮助学生建立知识体系。

2.讨论法:教师引导学生分组讨论编程问题,培养学生的团队协作能力和解决问题的能力。

3.案例分析法:教师通过分析典型程序案例,引导学生学会阅读和理解C语言程序。

4.实验法:教师安排编程实验,让学生动手编写C语言程序,巩固所学知识。

四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,我们将选择和准备以下教学资源:1.教材:选用《C程序设计语言》作为主要教材,介绍C语言的基本语法、数据类型、运算符、控制结构等。

2.参考书:推荐学生阅读《C Primer Plus》等参考书,加深对C语言的理解。

3.多媒体资料:制作PPT课件,展示C语言的基本语法、数据类型、运算符、控制结构等知识。

4.实验设备:准备计算机实验室,让学生进行编程实验。

五、教学评估为了全面、客观、公正地评估学生的学习成果,本节课的教学评估将采用多种方式,包括平时表现、作业、考试等。

计算器c语言课程设计

计算器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语言课程设计设计计算器一、课程目标知识目标:1. 让学生掌握C语言基础语法,包括变量声明、数据类型、运算符等;2. 让学生了解并运用顺序结构、选择结构和循环结构进行程序设计;3. 使学生掌握函数的定义和调用,理解模块化编程思想。

技能目标:1. 培养学生运用C语言编写简单计算器程序的能力;2. 培养学生分析问题、设计算法和解决问题的能力;3. 提高学生调试程序、查找并解决问题的能力。

情感态度价值观目标:1. 培养学生对编程的兴趣,激发学生的学习热情;2. 培养学生团队合作意识,提高沟通与协作能力;3. 培养学生面对问题积极思考、勇于克服困难的精神。

课程性质:本课程为实践性较强的课程,要求学生在掌握C语言基础知识的基础上,运用所学知识设计计算器程序。

学生特点:学生为初中生,具备一定的逻辑思维能力,对编程有一定的好奇心,但实践经验不足。

教学要求:结合学生特点,注重理论与实践相结合,引导学生通过动手实践掌握C语言编程技能,培养解决问题的能力。

在教学过程中,注重激发学生兴趣,鼓励学生积极参与讨论和交流,提高学生的编程素养。

通过本课程的学习,使学生能够独立完成一个简单的计算器程序设计。

二、教学内容1. C语言基础知识回顾:变量、数据类型、运算符、表达式等;2. 程序控制结构:顺序结构、选择结构(if-else)、循环结构(for、while);3. 函数的定义和调用:理解函数的作用,学会编写和调用函数;4. 模块化编程:按照功能模块划分,编写独立的函数,提高程序可读性和可维护性;5. 计算器功能需求分析:加、减、乘、除等基本运算,以及括号支持;6. 算法设计:根据功能需求,设计相应的算法;7. 编程实践:根据算法,编写计算器程序,并进行调试优化;8. 测试与评估:对计算器程序进行测试,评估程序的正确性、健壮性。

教学内容安排和进度:1. 第1课时:C语言基础知识回顾;2. 第2课时:程序控制结构;3. 第3课时:函数的定义和调用;4. 第4课时:模块化编程;5. 第5课时:计算器功能需求分析;6. 第6课时:算法设计;7. 第7-8课时:编程实践;8. 第9课时:测试与评估。

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

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算法描述 (8)第4章调试分析 (10)4.1程序设计中所遇到的错误及犯错的原因 (10)4.2错误的解决⽅法 (10)第5章⽤户⼿册 (11)总结 (15)参考⽂献 (16)附录(程序清单) (17)第1章需求分析1.1 设计要求(1)⽤ C 语⾔数据结构实现程序设计;(2)利⽤结构体、栈、进⾏相关信息处理;(2)系统的各个功能模块要求⽤函数的形式实现;(4)界⾯简单,可操作性⾼。

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

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

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

系统界⾯不做牵制要求。

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

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

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

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

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

波兰逻辑学家 J.Lukasiewicz 于 1929 年提出了另⼀种表⽰表达式的⽅法。

按此⽅法,每⼀运算符都置于其运算对象之后,故称为后缀表达式。

vc课程设计计算器

vc课程设计计算器

vc 课程设计计算器一、教学目标本课程旨在让学生掌握计算器的基本使用方法,理解计算器在数学和科学计算中的应用,培养学生的逻辑思维能力和解决问题的能力。

具体目标如下:知识目标:使学生了解计算器的各种功能及其应用场景,掌握计算器的基本操作方法。

技能目标:能够运用计算器进行简单的数学计算、科学计算和数据处理,提高计算准确性和效率。

情感态度价值观目标:培养学生对科学技术的兴趣和好奇心,激发学生探索未知、创新思维的精神。

二、教学内容本课程的教学内容主要包括以下几个部分:1.计算器的基本结构:介绍计算器的各种按键功能及其对应的操作。

2.计算器的使用方法:讲解如何使用计算器进行数学计算、科学计算和数据处理。

3.计算器在实际应用中的案例分析:通过实际案例,使学生了解计算器在日常生活和学习中的重要作用。

4.计算器的维护与保养:教授学生如何正确使用和维护计算器,延长其使用寿命。

三、教学方法为了提高教学效果,本课程将采用多种教学方法相结合的方式:1.讲授法:教师讲解计算器的基本原理、功能及使用方法。

2.讨论法:分组讨论计算器在实际应用中遇到的问题,培养学生解决问题的能力。

3.案例分析法:分析实际案例,使学生了解计算器在生活和学习中的重要作用。

4.实验法:让学生亲自动手操作计算器,进行实际计算,巩固所学知识。

四、教学资源为了支持本课程的教学,我们将准备以下教学资源:1.教材:选用内容丰富、适合学生年龄特点的计算器教材。

2.参考书:提供相关的计算器使用手册和资料,供学生课后自学。

3.多媒体资料:制作课件、教学视频等,以生动形象的方式展示计算器的使用方法。

4.实验设备:为学生提供足够的计算器,以便进行实际操作和实验。

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

2.作业:布置适量的课后作业,检查学生对课堂所学知识的掌握程度。

c计算器课程设计

c计算器课程设计

c 计算器课程设计一、课程目标知识目标:1. 学生能够理解计算器的基本原理和功能;2. 学生掌握计算器的基本操作,包括开机、关机、清屏、基本运算等;3. 学生能够运用计算器进行简单的数学运算,如加减乘除、百分比计算等;4. 学生了解计算器在日常生活和学习中的应用。

技能目标:1. 学生能够熟练操作计算器,提高计算速度和准确性;2. 学生通过计算器解决实际问题,培养解决问题的能力和创新思维;3. 学生学会使用计算器进行数据统计和分析,为后续学习打下基础。

情感态度价值观目标:1. 学生培养对计算器的兴趣,认识到计算器在科技发展中的重要性;2. 学生养成使用计算器辅助学习的习惯,提高学习效率;3. 学生在合作交流中,学会尊重他人,培养团队协作精神;4. 学生通过计算器课程,认识到数学与生活的紧密联系,增强学习数学的信心。

课程性质:本课程为实用技能类课程,旨在让学生掌握计算器的使用方法,提高计算速度和准确性,培养解决实际问题的能力。

学生特点:学生处于小学高年级阶段,对新鲜事物充满好奇,具备一定的数学基础,但操作技能和问题解决能力有待提高。

教学要求:结合学生特点,采用讲解与实践相结合的教学方法,注重培养学生的动手能力和实际应用能力。

在教学过程中,关注学生的个体差异,因材施教,确保每位学生都能达到课程目标。

通过课程学习,使学生能够将计算器作为学习工具,提高学习效果。

二、教学内容本课程教学内容主要包括以下几部分:1. 计算器概述:介绍计算器的发展历程、分类及基本功能,让学生了解计算器在科技发展中的作用。

2. 计算器操作方法:详细讲解计算器的开关机、清屏、基本运算(加减乘除、百分比计算等)的操作步骤,让学生熟练掌握计算器的使用。

3. 实际应用:结合教材内容,设计实际应用场景,如购物、预算等,让学生学会运用计算器解决生活中的问题。

4. 数据统计与分析:教授学生使用计算器进行数据统计(如平均数、总和等)和分析(如线性方程求解等),为后续学习打下基础。

C语言课程设计(计算器)

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

课程设计名称: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算法描述 (8)第4章调试分析 (10)4.1程序设计中所遇到的错误及犯错的原因 (10)4.2错误的解决方法 (10)第5章用户手册 (11)总结 (15)参考文献 (16)附录(程序清单) (17)第1章需求分析1.1 设计要求(1)用 C 语言数据结构实现程序设计;(2)利用结构体、栈、进行相关信息处理;(2)系统的各个功能模块要求用函数的形式实现;(4)界面简单,可操作性高。

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

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

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

系统界面不做牵制要求。

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

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

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

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

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

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

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

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

后缀表达式比前缀表达式更加易于转换,并且它的最左面一定为数字,这一点在实际编程的时候就会体会到它的好处了。

逆波兰表达式有一个更大的优点,就是拆括号,根据运算符的级别将中缀表达式转换成逆波兰表达式后,运算顺序就已经替代了运算符的级别,这样也避免了括号提高运算级别的特殊处理。

2.2功能模块层次图将算术表达式转化为逆波兰表达式计算逆波兰表达式的值第3章详细设计3.1栈的定义与使用首先定义两个栈,一个字符型,一个双精度型,程序代码如下:Struct{char data[MaxSize]; // 存放表达式的字符数组int top; //栈顶指针}Sym; /*符号*/ //作为存放运算表达式的栈使用struct{double data[MaxSize]; //存放运算结果的数组int top; //栈顶指针}Num; /*数*/ 存储逆波兰表达式(后缀式)计算器的运算数//作为存放运算结果的栈使用void InitStack(){ Sym.top=Num.top=-1; } //栈的初始化void SymPush() //压栈{if(Sym.top<MaxSize-1){ Sym.data[++Sym.top]=calc[i++]; }else{ printf("Sym 栈满\n"); return; }}void SymPop() //出栈{if(Sym.top>=0){ expr[++t]=Sym.data[Sym.top--];}else{ printf("Sym 栈空\n"); return; }}void NumPush() //压栈{If(Num.top<MaxSize-1){Num.data[++Num.top]=ston(expr,&i);}else{printf("Num 栈满\n"); return;}}定义逆波兰(后缀式)表达式的计算函数(出栈)void NumPop(){if(Num.top>=0){if(expr[i]!=' '){switch(expr[i]){case'+':Num.data[Num.top-1]=Num.data[Num.top-1]+Num.data[Num.top];break;case '-':Num.data[Num.top-1]=Num.data[Num.top-1]-Num.data[Num.top];break;case '*':Num.data[Num.top-1]=Num.data[Num.top-1]*Num.data[Num.top];break;case '/':Num.data[Num.top-1]=Num.data[Num.top-1]/Num.data[Num.top];break;}Num.top--;}}else{ printf("Num 栈空\n"}}定义一个对逆波兰表达式中,数字的处理函数double ston(char x[],int *p){int j=*p+1,i;double n=0;char sign=x[*p];if(sign=='+'||sign=='-')*p=*p+1;while(x[j]>='0'&&x[j]<='9'){ j++; }for(i=*p;i<j;i++){ n=n*10+(x[i]-'0'); }if(x[j]=='.'){*p=++j;while(x[j]>='0'&&x[j]<='9'){j++;}for(i=*p;i<j;i++){ n=n+pow(0.1,i-*p+1)*(x[i]-'0'); }}*p=j;if(sign=='-')return(-n);return(n);}3.2功能模块流程图(以下有简易图与详细图)3.3 由(后缀)逆波兰表达式计算中缀表达式原理计算机处理(后缀)逆波兰表达式求值问题是比较方便的,即将遇到的操作数暂存于一个操作数栈中,凡是遇到操作数,便从栈中pop 出两个操作数,并将结果存于操作数栈中,直到对(后缀)逆波兰表达式中最后一个操作数处理完,最后压入栈中的数就是后最表达式的计算结果。

中缀表达式转换为等价的(后缀)逆波兰表达式,中缀表达式不方便与计算机处理,通常要讲中缀表达式转换为一个与之等价的(后缀)逆波兰表达式。

等价是指两个表达式的计算顺序和计算结果完全相同。

中缀表达式:0.3/(5*2+1)=的等价(后缀)逆波兰表达式是:0.3 5 2 * 1 + /= 仔细观察这两个等价的表达式可知,操作数的出现次序是相同的,但运算符的出现次序是不同的。

在(后缀)逆波兰表达式中,运算符的出现次序是实际进行操作的次序;在中追表达式中,由于受到操作符的优先级和括号的影响,操作符出现次序与实际进行操作的次序很可能是不一样的。

3.3.1算法描述将中缀表达式转换为等价的(后缀)逆波兰表达式的过程要使用一个栈放“(”,具体可以按照下面的方式进行。

(1)从左到右一次扫描中缀表达式的每一个字符,如果是数字字符和圆点“.”则直接将它们写入(后缀)逆波兰表达式中。

(2)如果遇到的是开括号“(”,则将它们压入一个操作符栈(不需要与栈顶操作符相比较),它表明一个新的计算层次的开始,在遇到和它匹配的闭括号“)”时,将栈中的元素弹出来并放入(后缀)逆波兰表达式中,直到栈顶元素为“(”时,将栈顶元素“(” 弹出(不需要加入(后缀)逆波兰表达式),表明这一层括号内的操作处理完毕。

(3)如果遇到的是操作符,则将该操作符和操作符栈顶元素比较:a 当所遇到的操作符的优先级小于或等于栈顶元素的优先级时,则取出栈顶元素放入(后缀)逆波兰表达式,并弹出该栈顶元素,反复执行直到栈顶元素的优先级小于当前操作符的优先级;b、当所遇到的操作符的优先级大于栈顶元素的优先级的时则将它压入栈中。

(4)重复上述步骤直到遇到中缀表达式的结束符标记“=”,弹出栈中的所有元素并放入(后缀)逆波兰表达式中,转换结束。

第4章调试分析4.1 程序设计中所遇到的错误及犯错的原因(1)在编辑程序时,往往需要输入汉字作为提示信息,而此时,忘记切换输入法,导致用搜狗输入法输进去的字符使得程序无法编译成功。

(2)在编辑程序时,将关键字输入错误,如:else打成else,printf打成print.........(3)调试程序时,运行界面还未关闭,有点击运行,致使程序无法运行。

(4)清屏函数不会使用。

(5)运行程序之后,输入时,因输入法的问题可能会出现运算错误。

4.2 错误的解决方法(1)先找到错误出现的大概区域,然后仔细盘查,最终发现问题所在。

(2)解决方法同上。

(3)请教同学,在同学的指导下解决了此错误。

(4)用手机上网百度搜索并请教同学,从而解决了问题。

(5)进行多次调试后发现问题所在,并独立解决。

第5章用户手册5.1对于此“计算器程序”,操作简单方便,能快速算出您所需的计算结果。

5.2开始时,进入运行界面,根据程序运行提示进行输入,如图所示:图5.1要输入正常运算表达式,如:12*23—34/15*(26.5+3.4)=注意:在输入表达式时,切记使用电脑原自带输入法,不要使用搜狗等输入法,否则程序可能无法正确读取字符,从而使运算结果出错!如图所示:图5.2输入之后请按回车键,之后程序便自动会将表达式转化为逆波兰表达式(后缀式),并输出计算结果!如图所示:图5.3继续计算请输入y ,退出请输入n 。

如图所示:输入y 的显示界面图5.4输入n 的显示界面切记:运行程序时,请客户务必按照程序运行提示,进行一系列的相关操作,否则,程序可能会运行出错,所以,请用户谨慎操作!总结经过了两个多星期的C语言程序设计,终于在老师的细心指导和同学的热情帮助下基本完成了计算器课题的设计任务!虽然有些地方不尽如人意但是初步达到了对自己的要求!刚开始设计的时候找不到头绪,不知道该从哪里下手!通过向同学询问和查找资料找走进了设计的门槛!通过网上查找到很多成功的计算器程序,通过对那些已经成功地程序进行分析找到自己的设计思路,制定设计流程。

相关文档
最新文档