当前位置:文档之家› C语言简易计算器的实现

C语言简易计算器的实现

C语言简易计算器的实现
C语言简易计算器的实现

目录

一.课程设计目的 (1)

二.设计环境 (1)

三.设计内容 (1)

四.设计说明 (2)

五.设计程序流程图 (2)

六.调试 (4)

(1)错误原因分析一 (4)

(2)语法错误 (5)

(3)逻辑错误 (5)

七. 调试结果图 (6)

八. 结论与心得体会 (7)

九.附录 (8)

具体代码实现 (8)

十.参考文献 (18)

一.课程设计目的

1.通过一个学期的学习,我认为要学号C语言程序这门课程,不仅要认真阅读课本知识,更重要的是要通过上机实践来巩固我

们的知识,特别是学计算机专业的,我们更应该注重这一环节,

只有这样我们才能成为一个合格的计算机人才。通过这一个课程

设计,进一步来巩固所学的语句,如:循环,和分支结构的运用。还要熟悉四则运算和函数的算法。

2.通过这次课程设计扩展自己的知识面,课本上的东西是远

远不够的,可以通过上网或去图书馆查资料等方式得到一些新的

知识,

3.通过课程设计,加深对课程化设计思想的理解,能进行一

个系统功能分析,并设计一个合理的模块化结构,提高程序开发

能力。

二.设计环境

1.硬件:一台完整的电脑,包括键盘、鼠标,最小硬盘空间1GHz

2.软件:安装有Microsoft visual c++6.0

三.设计内容

以简易计算器为例,通过对简单应用软件计算器的设计,编制、调试,实现

简单的加,减,乘,除等运算,以学习应用MFC库类编写对话框的原理,加深对C++类的学习及应用。

(1)定义一个结构体类型数组,输入0~9及+、--、*等符号的信息,将其信息存入文件中;

(2)输入简单的加减乘除算术计算式,并在屏幕上显示计算结果;

(3)画出部分模块的流程图;

(4)编写代码;

(5)程序分析与调试。

四.设计说明

1)包含的功能有:加、减、乘、除运算,开方、平方等功能。

(2)计算器上数字0—9为一个控件数组,加、减、乘、除为一个控件数组,其余为单一的控件。

(3)输入的原始数据、运算中间数据和结果都显示在窗口顶部的同一个标签中。

(4)计算功能基本上是用系统内部函数。

(5)程序可以能自动判断输入数据的正确性,保证不出现多于一个小数点、以0开头等不正常现象。

(6)“CE”按钮可以清除所有已输入的数据从头计算

五.设计程序流程图

六.调试

根据电脑所给的提示出现语法错误,缺少变量的定义大多的语法错误在通过书本参考下能够修改。主要是平时看书不仔细、不太注意而产生的。如没有注意具体数据使用是有一定的范围限定;过分重视分号的重要性而在if、while语句中画蛇添足加分号;在使用文件的时候忘记将文件先打开,对打开的方式与使用的情况不太注意而造成不匹配;还有漏掉形参的定义是值不能传递等等。这些语法错误有信息框的提示一般是能够排除的。另外还有部分注释的位置也错了,最重要的是逻辑上的错误,一般电脑不容易发现。所以更要对程序仔细的检查。经认真修改之后重新保存文件。

(1) 错误原因分析一

由于该程序相对来讲稍有些长,前后有些变量不容易联系起来,但是在错误信息的提示下一般还是很容易找到。不过需要注意的是在定义的时候有些函数使用同样的变量名而表示不同的作用,因而使用要很小心,定义及定义的位置要特别留意。为减少这样的错误我后来还是用不同的变量名来表示,结果引起的那些错误解决了。

(2) 语法错误

大多的语法错误在通过书本参考下能够修改。主要是平时缺乏锻炼、不太注意而产生的。如没有注意具体数据使用是有一定的范围限定;过分重视分号的重要性而在if、while语句中画蛇添足加分号;在使用文件的时候忘记将文件先打开,对打开的方式(3) 逻辑错误

编译、连接的成功并不意味着程序的最终成功。逻辑上的错误机器不易检查出来,这时需要对数据结果进行分析。这种错误的查找是最难的,需要有相当的耐心和细心去把问题找出来。这也是本次程序编辑过程中碰到的最大的难题。往往运行之后得不到另人满意的结果,此时解决的方法一则用“分段检查”的方法,在程序的不同位置设几个printf函数语句,输出有关变量的值,逐段往下检查,对检查出的错误进行修改,当调试完毕将设置的printf都删去。若在程序中找不到问题,则再来考虑算法是否逻辑严谨,再进行修改。如此循环往复,直到最后程序运行成功。在本次程序编辑过程中,我就是常遇到编译能通过,能够运行程序,但是总在输入、删除等操作完之后再想去看数据文件中存在的数据记录的时候,却一条记录也显示不出来,可能是对n变量的定义或使用出错了,于是在每个主要函数的操作过程中添加了printf语句用来显示n的变化,在执行某个函数前添加插入语句显示n的起始值,在执行完该个函数后再添加插入语句显示此时

n的结果值,观察n的变化是否正确,如果错误了,也就说明该函数编写过程有错。诸如这样的调试方法,不断缩小检查范围,最后将错误找到,进行修改。所以到最后我找到了错误,及时改正,终于把程序完成了,一切功能显示正常。

七. 调试结果图

八. 结论与心得体会

经过了两个星期的C语言程序设计终于在老师的细心指导和同学的热情帮助下基本完成了计算器课题的设计修改任务,虽然有些地方不尽如人意但是初步达到了对自己的要求。信息时代是科技和经济发展的产物,软件产业是信息时代的产物,它在我们的生活工作中发挥着越来越大的作用,计算器的设计对我们知识的掌握有很大的作用,更能方便他人,可行性很强。刚开始设计的时候找不到头绪,不知道该从哪里下手,通过向同学询问和向老师寻求帮助找走进了设计的门槛。在设计这个程序时,刚开始是根据网上的资料,,经过自己的反复尝试以及与与同学的讨论,这也不难,最好还是被我搞定了。这些只要你自己愿意去尝试,问题都可以迎刃而解的。

通过网上查找到很多成功的计算器程序,通过对那些已经成功地程序进行分析找到自己的设计思路,制定设计流程。并通过比较各种程序了解各个程序的利弊,从而明确自己计算器的设计方向和如何通过技术手段达到自己的目的。万事开头难,可是对于并不是很熟悉的C语言在下面的工作中困难处处能遇见。通过查找C语言教材去图书馆查找相关的资料和同学一起讨论终于把一个个棘手的陌生的问题解决。测试阶段中发现了几处错误导致程序不能编译,通过耐心的分析源代码终于编好了一个完整无误的程序。

在这次的C语言程序设计实习中遇到了现实编程中必然见到的

问题通过这些问题的解决积累了编程的实践经验。在实际的编程

操作中发现自己C语言知识的不足,加深了对C语言的理解。在学习之余体验到收获的感觉。同时认识到程序员的工作并不是我们想象的那么简单轻松的,在现在的编程中要有足够的耐心和热情。

九.附录

具体代码实现

#include"dos.h"

#include"conio.h"

#include"string.h"

#include"stdio.h"

#define normbut_bor 0x80

#define presbut_but 0xb8

#define normnum_but 0x8e

#define presnum_but 0xb9

#define spebut_char 0x2c

#define win_color 0xf2

#define win_char 0xfb

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;

struct stack /*结构体栈*/

{

char s[20];

int tos,top;

}stack;

char tag;

init_stack() /*初始化栈*/

{

stack.tos=0;

stack.top=0;

stack.s[stack.tos]='\0';

}

push(char ch) /*入栈*/

{

stack.s[stack.tos++]=ch;

stack.s[stack.tos]='\0';

}

pop() /*取栈数据通过*/

{

if(stack.tos>0)

stack.s[--stack.tos]='\0';

}

clear_stack() /*清空栈*/

{

stack.tos=0;

stack.top=0;

stack.s[stack.tos]='\0';

}

int form_win() /*表格窗口初始化*/

{

textbackground(WHITE); /*窗口背景颜色*/

clrscr(); /*清零*/

draw_win(); /*窗口画线*/

active_button(); /*窗口按键*/

out_text_win(); /*输出文本窗口*/

window_xy(32,3); /*计算结果窗口*/

}

draw_win() /*边框画线窗口*/

{

int i;

char far *t;

char *s="这是一个模拟计算器!"; /*顶端边框输出的字符*/ draw_border(30,0,79,24,win_color); /*边框的位置和颜色*/ i=(79-30-strlen(s))/2+30;

t=vid_mem+i*2;

for(;*s;)

{

*t++=*s++;

*t++=win_color; /*顶端字体颜色*/

}

}

draw_border(int sx,int sy,int ex,int ey,int attrib) /*边界线函数*/ {

char far *t,far *v;

int i;

t=vid_mem;

for(i=sx+1;i

{

v=t+sy*160+i*2;

*v++=196; /*每一行上画线确定为直线*/

*v=attrib;

v=t+ey*160+i*2;

*v++=196; /*每一行下画线确定为直线*/

*v=attrib;

}

for(i=sy+1;i

{

v=t+i*160+sx*2;

*v++=179; /*每一列左画线确定为直线*/

*v=attrib;

v=t+i*160+ex*2;

*v++=179; /*每一列由画线确定为直线*/

*v=attrib;

}

write_char(sx,sy,218,attrib);

write_char(ex,sy,191,attrib);

write_char(sx,ey,192,attrib);

write_char(ex,ey,217,attrib);

}

write_char(int x,int y,char ch,int attrib) /*字符输入函数*/

{

char far *v;

v=vid_mem;

v+=x*2+160*y;

*v++=ch;

*v=attrib;

}

active_button()/*图表按钮设定函数*/

{

int i;

make_button(0,32,9,38,11,"1");/*每个键对应的位置和数值*/

make_button(1,42,9,48,11,"2");

make_button(2,52,9,58,11,"3");

make_button(3,62,9,67,11,"+");

make_button(4,71,9,76,11,"-");

make_button(5,32,12,38,14,"4");

make_button(6,42,12,48,14,"5");

make_button(7,52,12,58,14,"6");

make_button(8,62,12,67,14,"*");

make_button(9,71,12,76,14,"/");/*“/”的位置*/

make_button(10,32,15,38,17,"7");

make_button(11,42,15,48,17,"8");

make_button(12,52,15,58,17,"9");

make_button(13,62,15,67,17,"=");

make_button(14,71,15,76,17,"<-");

make_button(15,32,18,38,20,"0");/*“0”的位置*/

make_button(16,71,18,76,20,"End");

for(i=0;i<17;i++)

{

draw_border(button[i].sx,button[i].sy,button[i].ex,button[i].ey,normbut_bor);

}

for(i=0;i<17;i++)

{

write_top(button[i].sx+1,button[i].sy+1,button[i].ex-1,button[i].head,normnum_but);

}

}

write_top(int x1,int y,int x2,char *s,int attrib)

{

char far *v,far *t;

int i;

v=vid_mem;

for(i=x1;i<=x2;i++)

{

t=v+y*160+i*2;

*t++=' ';

*t=attrib;

}

i=(x2-x1-strlen(s)+1)/2+x1;

t=v+160*y+i*2;

for(;*s;)

{

*t++=*s++;

*t++=attrib;

}

}

make_button(int num,int sx,int sy,int ex,int ey,char *top) {

button[num].sx=sx;

button[num].sy=sy;

button[num].ex=ex;

button[num].ey=ey;

button[num].head=top;

button[num].press=0;

}

out_text_win() /*结果输出窗口*/

{

draw_border(31,2,75,4,0x7f);

write_top(32,3,74," ",0xff);

}

get_key() /*得到按键值*/

{

union inkey /*共用体*/

{

char ch[2];

int i;

}c;

c.i=bioskey(0);

return(c.i);

}

window_xy(int x,int y)

{

union REGS r; /*定义联合体*/

r.h.ah=2; /*初始化*/

r.h.dh=y;

r.h.dl=x;

r.h.bh=0;

int86(0x10,&r,&r);

}

key_choice() /*小键盘键的输入函数*/

{

int ch,bx=0,by=0;/*起始停留键的位置*/

do

{

ch=get_key();

switch(ch)

{

case 0x4f31:res_but(bx,by);bx=0;by=0;get_data(bx,by);break;/*图表键和小键盘的键对应,此处为1*/

case 0x5032:res_but(bx,by);bx=1;by=0;get_data(bx,by);break;/*2*/

case 0x5133:res_but(bx,by);bx=2;by=0;get_data(bx,by);break;/*3*/

case 0x4b34:res_but(bx,by);bx=0;by=1;get_data(bx,by);break;/*4*/

case 0x4c35:res_but(bx,by);bx=1;by=1;get_data(bx,by);break;/*5*/

case 0x4d36:res_but(bx,by);bx=2;by=1;get_data(bx,by);break;/*6*/

case 0x4737:res_but(bx,by);bx=0;by=2;get_data(bx,by);break;/*7*/

case 0x4838:res_but(bx,by);bx=1;by=2;get_data(bx,by);break;/*8*/

case 0x4939:res_but(bx,by);bx=2;by=2;get_data(bx,by);break;/*9*/

case 0x5230:res_but(bx,by);bx=0;by=3;get_data(bx,by);break;/*0*/

case 0x4e2b :res_but(bx,by);bx=3;by=0;get_data(bx,by);send1();break;/*加*/

case 0x4a2d :res_but(bx,by);bx=4;by=0;get_data(bx,by);send1();break;/*减*/

case 0x372a :res_but(bx,by);bx=3;by=1;get_data(bx,by);send1();break;/*乘*/

case 0x352f:res_but(bx,by);bx=4;by=1;get_data(bx,by);send1();break;/*除*/

case 0x0d3d:res_but(bx,by);bx=3;by=2;get_data(bx,by);send2();

out_text_win();put_string();break;/*等于号*/

case 0x1c0d:res_but(bx,by);bx=2;by=4;get_data(bx,by);send2();

out_text_win();put_string();break;/* 回车键(相当与等于号)*/ case 0x0e08:res_but(bx,by);bx=4;by=2;pop();text_clo();break; /*退格(backspace)*/

case 0x3920:res_but(bx,by);get_data(bx,by);ba_space(bx,by); break;/* 空格*/

case 0x4f00:res_but(bx,by);bx=4;by=3;exit(1);break;/*结束(End)*/

case 0x4800:res_but(bx,by);by--;break;/* 上*/

case 0x4b00:res_but(bx,by);bx--;break;/* 左*/

case 0x5000:res_but(bx,by);by++;break;/* 下*/

case 0x4d00:res_but(bx,by);bx++;break;/* 右*/

}

if(bx<0)bx=0; /* 只能在X0到4和Y在0到4内选择按键*/

if(by<0)by=0;

if(by>4)by=4;

if(bx>4)bx=4; /* 只能在X0到4和Y在0到4内选择按键*/

select_but(bx,by);

}while(1);

}

ba_space(int x,int y)

{

int num;

char ch;

if(y>2)

if(x<2)num=15;

else num=16;

else num=x+5*y;

switch(num)

{

case 3:send1();break;

case 13:send2();out_text_win();put_string();break;

case 4:send1();break;

case 8:send1();break;

case 9:send1();break;

case 16:exit(1);break;/*图表对应的结束键*/

case 14:pop();text_clo();break;/*“〈—”对应功能*/

default:;

}

}

text_clo() /*文本光标*/

{

tx--; /*光标向左移*/

if(tx<32)tx++; /*backspace时X不能小于32*/

put_char(tx,ty,'');

}

put_string() /*计算机运算函数*/

{

float result;

tx=32;

switch(tag) /*根据运算符号计算*/

{

case '+': result=v1+v2;break; /*做加法*/

case '-':result=v1-v2;break; /*做减法*/

case'*':result=v1*v2;break; /*做乘法*/

case '/': result=v1/v2;break; /*做除法*/

default :result=v1; /*若不计算输出0*/

}

sprintf(stack.s,"%.3f",result); /*输出结果保留小数点后三位*/ while(stack.s[stack.top])

{

put_char(tx,ty,stack.s[stack.top++]);

tx++;

}

}

send1() /*向服务器发送请求*/

{

sscanf(stack.s,"%f",&v1); /*输入并储存在V1中*/

clear_stack(); /*清除栈*/

}

send2() /*向服务器发送信息*/

{

sscanf(stack.s,"%f",&v2);

clear_stack(); /*清除栈*/

}

get_data(int x,int y) /*键的移动和对应数值关系*/

{

int num;

char ch;

if(y>2)

if(x<2)num=15;

else num=16; /*使得第3行只能取的0键和End键*/ else num=x+5*y; /*其余各键坐标和原来设定的值的关系*/ switch(num) /*使得图表面键和实际键一致*/

{

case 0:ch='1';break; /*图表面1键和实际1一致*/

case 1:ch='2';break;

case 2:ch='3';break;

case 3:ch='+';break;

case 4:ch='-';break;

case 5:ch='4';break;

case 6:ch='5';break;

case 7:ch='6';break;

case 8:ch='*';break;

case 9:ch='/';break;

case 10:ch='7';break;

case 11:ch='8';break;

case 12:ch='9';break;

case 13:ch='=';break;

case 15:ch='0';break; /*图表面0键和实际0一致*/

default:ch=1;

}

if(ch!=1)

{

put_char(tx,ty,ch);

if(ch!='+'&&ch!='-'&&ch!='*'&&ch!='/')

push(ch);

else tag=ch;

tx++;

}

}

select_but(int x,int y) /*选择按钮*/

{

int num;

if(y>2)

if(x<2)num=15;

else num=16;

else num=x+5*y;

draw_border(button[num].sx,button[num].sy,button[num].ex,button[num].ey,presbut_but);

write_top(button[num].sx+1,button[num].sy+1,button[num].ex-1,button[num].head,presnum_but) ;

}

res_but(int x,int y)

{

int num;

if(y>2)

if(x<2)num=15;

else num=16;

else num=x+5*y;

if(num<16)

{

draw_border(button[num].sx,button[num].sy,button[num].ex,button[num].ey,normbut_bor);

write_top(button[num].sx+1,button[num].sy+1,button[num].ex-1,button[num].head,normnum_but );

}

else

{

draw_border(button[num].sx,button[num].sy,button[num].ex,button[num].ey,normbut_bor);

write_top(button[num].sx+1,button[num].sy+1,button[num].ex-1,button[num].head,spebut_char);

}

}

put_char(int x,int y,char ch) /*计算窗口的输入确定函数*/

{

char far *v;

v=vid_mem;

v+=x*2+y*160; /*光标的位置*/

*v++=ch; /*输入字符随光标的推进*/

*v=0xf0; /*输入数字的颜色*/

window_xy(x,y); /*光标在窗口坐标*/

}

calculator() /*计算器构成的函数*/

{

int a,b;

key_choice(); /*键选择函数*/

}

write_text(int x,int y,char *s,int attrib) /*文本输入函数*/

{

char ch;

int lx=x,ly=y;

for(;*s;)

{

ch=*s++;

switch(ch)

{

case '\n':lx=x;ly++;break;

default:write_char(lx++,ly,ch,attrib);

}

}

}

menu() /*左边窗口函数*/

{ char *j="方向键\n移动!"

"\n空格键\n确定!\n可用小键盘\n输入!\n用小窗口\n显示"; /*左边框中显示的字符*/ char *s="设计人员\n1 \n2 \n3 \n "

"\n组长:K ";

draw_border(0,0,29,24,win_color); /*左边框的位置和颜色*/

write_top(1,2,28,"操作步骤",0xf9);/*INTRODCTION的位置和颜色*/

write_text(2,5,j,0x79); /*输入字符的位置和颜色*/

write_text(2,17,s,0x79); /*输入字符的位置和颜色*/

}

main()

{

init_stack();

vid_mem=(char far *)0xb8000000;

if(!form_win())

{

printf("can't form the device,press any key to leave!...");/*如果不能显示见面窗口,按任意退出。*/

getch();

exit();

}

menu();

calculator();

}

十.参考文献

.C语言程序设计教材

.https://www.doczj.com/doc/0b7736017.html,

.https://www.doczj.com/doc/0b7736017.html,/p-25853668.html .https://www.doczj.com/doc/0b7736017.html,/

https://www.doczj.com/doc/0b7736017.html,

C语言简易计算器的实现

目录 一.课程设计目的 (1) 二.设计环境 (1) 三.设计内容 (1) 四.设计说明 (2) 五.设计程序流程图 (2) 六.调试 (4) (1)错误原因分析一 (4) (2)语法错误 (5) (3)逻辑错误 (5) 七. 调试结果图 (6) 八. 结论与心得体会 (7) 九.附录 (8) 具体代码实现 (8) 十.参考文献 (18)

一.课程设计目的 1.通过一个学期的学习,我认为要学号C语言程序这门课程,不仅要认真阅读课本知识,更重要的是要通过上机实践来巩固我 们的知识,特别是学计算机专业的,我们更应该注重这一环节, 只有这样我们才能成为一个合格的计算机人才。通过这一个课程 设计,进一步来巩固所学的语句,如:循环,和分支结构的运用。还要熟悉四则运算和函数的算法。 2.通过这次课程设计扩展自己的知识面,课本上的东西是远 远不够的,可以通过上网或去图书馆查资料等方式得到一些新的 知识, 3.通过课程设计,加深对课程化设计思想的理解,能进行一 个系统功能分析,并设计一个合理的模块化结构,提高程序开发 能力。 二.设计环境 1.硬件:一台完整的电脑,包括键盘、鼠标,最小硬盘空间1GHz 2.软件:安装有Microsoft visual c++6.0 三.设计内容 以简易计算器为例,通过对简单应用软件计算器的设计,编制、调试,实现

简单的加,减,乘,除等运算,以学习应用MFC库类编写对话框的原理,加深对C++类的学习及应用。 (1)定义一个结构体类型数组,输入0~9及+、--、*等符号的信息,将其信息存入文件中; (2)输入简单的加减乘除算术计算式,并在屏幕上显示计算结果; (3)画出部分模块的流程图; (4)编写代码; (5)程序分析与调试。 四.设计说明 1)包含的功能有:加、减、乘、除运算,开方、平方等功能。 (2)计算器上数字0—9为一个控件数组,加、减、乘、除为一个控件数组,其余为单一的控件。 (3)输入的原始数据、运算中间数据和结果都显示在窗口顶部的同一个标签中。 (4)计算功能基本上是用系统内部函数。 (5)程序可以能自动判断输入数据的正确性,保证不出现多于一个小数点、以0开头等不正常现象。 (6)“CE”按钮可以清除所有已输入的数据从头计算 五.设计程序流程图

c语言计算器源代码

c语言计算器源代码 IMB standardization office【IMB 5AB- IMBK 08- IMB 2C】

#i n c l u d e<> #include<> #include<> #definemaxsize100 typedefdoubledatatype1; typedefchardatatype2; typedefstructstack1 { datatype1data1[maxsize]; inttop1; /*栈顶元素*/ }seqstack1,*pseqstack1;/*顺序栈*/ typedefstructstack2 { datatype2data2[maxsize]; inttop2; /*栈顶元素*/ }seqstack2,*pseqstack2;/*顺序栈*/ /*栈的初始化*/ pseqstack1init_seqstack1(void) { pseqstack1S; S=(pseqstack1)malloc(sizeof(pseqstack1)); if(S) S->top1=-1; returnS; } pseqstack2init_seqstack2(void) { pseqstack2S; S=(pseqstack2)malloc(sizeof(pseqstack2)); if(S) S->top2=-1; returnS; } /*判断栈空*/ intempty_seqstack1(pseqstack1S)

if(S->top1==-1) return1; else return0; } intempty_seqstack2(pseqstack2S) { if(S->top2==-1) return1; else return0; } /*X入栈*/ intpush_seqstack1(pseqstack1S,datatype1X) { if(S->top1==maxsize-1) { printf("栈满,无法入栈!\n"); return0; } else { S->top1++; S->data1[S->top1]=X; return1; } } intpush_seqstack2(pseqstack2S,datatype2X) { if(S->top2==maxsize-1) { printf("栈满,无法入栈!\n"); return0; } else { S->top2++; S->data2[S->top2]=X; return1; }

C语言课程设计计算器图形界面

C语言课程设计计算器图形界面

扬州大学 C语言课程设计报告 题目一个简易计算器的设计与实现 班级 学号 姓名 指导教师 成绩 老师评语: 扬州大学信息工程学院 年 6 月 25 目录

一、程序设计目的: (1) 二、程序设计内容: (1) 三、课程设计所补充的内容:补充的函数或算法…………3,4 四、系统总体设计 (4) 五、系统详细设计………………………………………5,6,7,8 六、运行结果………………………………………………8,9,10 七、系统调试…………………………………………8,9,10,11 八、课程设计体会总结………………………………8,9,10,11 1 课程设计目的 (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)进一步考虑计算器外观设计,用可视化界面给出计算器外观、功能按键及输入界面。 使用说明:执行加法运算,'—'表示执行减法运算,表示执行乘法运算,'/'表示除法运算.‘Q’表示退出计算器‘C’表示清零,’=’表示得出结果'^'表示执行x的y次方,'e'表示执行e的x次方操

速算,简易计算器c语言代码,可实现加减乘除

#include"stdio.h" #include"math.h" #include"stdlib.h" struct optrstyle { int top; char stack[20]; } struct opndstyle { int top; int stack[20]; } void main() { char ch; while(1) { printf("-----------------------------------------\n"); printf("|-----------欢迎来到速算24--------------|\n"); printf("|----------是否开始游戏?????------------|\n"); printf("|--------- 开始游戏请按'Y'-------------|\n"); printf("|--------- 退出游戏请按其他键-------------|\n"); printf("-----------------------------------------\n"); scanf("%c",&ch); if(ch=='Y' or ch=='y') { } else break; } } int EvaluateExpression() { // 算术表达式求值的算符优先算法。设OPTR 和OPND 分别为运算符栈和运算数栈,OP 为运算符集合。 InitStack(OPTR); Push(OPTR,'#'); InitStack(OPND); c = getchar(); while(c!='#' || GetTop(OPTR)!='#') { if(!In(c,OP))

简易计算器设计-msp430-C语言

简易计算器

目录 摘要…………………………………………………………………………………P3 关键字………………………………………………………………………………P3 一、设计要求………………………………………………………………………P3 二、方案论证与选择………………………………………………………………P3 2.1 单片机选择………………………………………………………………P3 2.2 LCD显示屏选择…………………………………………………………P3 2.3 键盘选择…………………………………………………………………P4 2.4 CPU工作方式选择………………………………………………………P4 三、系统实现………………………………………………………………………P4 3.1 硬件设计…………………………………………………………………P4 3.1.1系统框图……………………………………………………………P4 3.1.2 盘的电平设计以及与单片机的连接 键……………………………P5 3.2.3单片机与显示器的连接…………………………………………… P5 3.2软件设计…………………………………………………………………… P6 四、作品性能测试与分析…………………………………………………………P10 4.1试性能概览………………………………………………………………P10 4.2误差分析…………………………………………………………………P12

五、参考文献………………………………………………………………………P12 六、附录……………………………………………………………………………P13 6.1计算器功能介绍…………………………………………………………P13 6.2仿真电路图………………………………………………………………P13 6.3元件清单…………………………………………………………………P13 6.4原程序代码………………………………………………………………P14 摘要:本设计以低功耗单片机MSP430V136T、1602字符型液晶屏和4*4简易键盘为主要器件,来实现加、减、乘、除、开根号、平方、求倒数等运算。设计中分别采用P1口低4位和P2口低4位与键盘的行列线相连,用于采集中断信号并分析键值;键盘规格为4*4,由于所需的功能键数大于16,因此需要进行按键复用;单片机的P3口连接显示器的D0~D7端,用于输出显示数据或控制命令;选用P4口中的3、4和5口用于实现显示屏的控制功能:使能、控制/数

C语言制作简单计算器

C语言制作简单计算器 一、项目介绍 我们要用c语言做一个简单的计算器,进行加、减、乘、除操作。本程序涉及的所有数学知识都很简单,但输入过程会增加复杂性。我们需要检查输入,确保用户没有要求计算机完成不可能的任务。还必须允许用户一次输入一个计算式,例如:32.4+32 或者9*3.2 项目效果图 编写这个程序的步骤如下: ?获得用户要求计算机执行计算所需的输入。 ?检查输入,确保输入可以理解。 ?执行计算。 ?显示结果。 三、解决方案 1.步骤1

获得用户输入是很简单的,可以使用printf()和scanf()。下面是读取用户输入的程序代码: #includeint main(){ double number1=0.0; //定义第一个操作值 double number2=0.0; //定义第二个操作值 char operation=0; //operation必须是'+''-''*''/'或'%' printf("\nEnter the calculation\n"); scanf("%lf%c%lf",&number1,&operation,&number2); return0; } 2.步骤2 接着,检查输入是否正确。最明显的检查是要执行的操作是否有效。有效的操作有+、-、*、/和%,所以需要检查输入的操作是否是其中的一个。 还需要检查第二个数字,如果操作是/或者%,第二个数字就不能是0。如果右操作数是0,这些操作就是无效的。这些操作都可以用if语句来完成,switch语句则为此提供了一种更好的方式,因此它比一系列if语句更容易理解。 switch(operation) { case'+': printf("=%lf\n",number1+number2); break; case'-': printf("=%lf\n",number1-number2); break; case'*': printf("=%lf\n",number1*number2); break; case'/': if(number2==0) printf("\n\n\aDavision by zero error!\n"); else printf("=%lf\n",number1/number2); break;

简易计算器C语言代码

简易四则运算计算器 计算机工具地历史而言,中国古代最早采用地一种计算工具叫筹策,又叫做算筹,这种算筹多用竹子制成,也有用木头,兽骨充当材料的,大约270枚一束,放在布袋里可随身携带。直到今天仍在使用的住算盘,是中国古代计算工具领域中的另一项发明明代时的住算盘已经与现代的住算盘几乎相同。 17世纪初,西方国家的计算工具有了较大的发展。英国数学家纳尔发现了“纳皮尔算筹”;英国牧师奥却德发明了圆柱形对数计算尺,这种计算尺不仅能做加减乘涂,乘方和开方运算,甚至可以计算三角函数,指数函数和对数函数。这些计算工具不仅带动了计算的发展,也为现代计算器发展尊定了良好的基础,成为现代社会应用广泛的计算工具,如手机,操作系统上附带的多功能计算器。 项目设计目的 掌握模块的划分; 掌握结构体定义; 掌握栈的操作; 掌握函数的定义; 掌握栈的基本操作; 掌握VC的基本绘图库; 掌握鼠标的响应操作; 目设计内容 设计一个含有界面的计算器,输入一个包含括号的表达式,使用栈数据类型实现整数的四则运算操作,开方运算。 项目设计要求 根据分析,系统要求实现以下几点基本功能: 可通过按钮输入数字、运算符; 能通过按钮实现退格、清除功能; 实现加、减、乘、除、开方运算功能; 实现括号运算; 显示运算结果; 良好的交互界面。

项目详细设计 功能模块图 根据系统功能要求,主要含有四大模块,分别是计算器界面设计模块、计算器按键控制模块、四则混合运算模块、计算器记忆处理模块。 计算器界面设计模块:调用VC图形系统函数和字符函数画出计算器的界面,包括24个按钮和一个文本输入框。 计算机按键控制模块:计算器通过键盘按键值的判断,执行相应的操作,如接收数字输入等。 计算器计算处理模块。计算处理模块主要完成可以包括括号的表达式运算,运算包括加,减,乘,除、开方。计算处理模块在按键控制模块中被调用执行。处理模块是通过栈来实现的,分别定义了两个顺序栈,一个用来存放操作符栈,一个用来存放操作数栈。 计算器记忆处理模块。记忆处理模块使计算其具有记忆功能。记忆当前输入的表达式,给出一个最后的运算结果。可以清楚部分或全部记忆的值。 图简易计算器模块图 数据结构 该系统主要的数据有操作符集,用一维数组存放;存放操作符的优先级关系集,操作符的优先级关系用一个二维数组来体现;另外定义两个栈,一个用来存放操作符,一个用来存放操作数。 char ops[7]={'+','-','*','/','(',')','#'}; int cmp[7][7]={ {2,2,1,1,1,2,2}, {2,2,1,1,1,2,2}, {2,2,2,2,1,2,2}, {2,2,2,2,1,2,2}, {1,1,1,1,1,3,0}, {2,2,2,2,0,2,2}, {1,1,1,1,1,0,3}}; typedef struct { char elem[Stack_Size]; int top; }SeqStack; typedef struct { int elem[Stack_Size]; int top; }SeqStackOperand;

C语言课程设计--计算器(图形界面)

扬州大 学 题目一个简易计算器的设计与实现 班级 学号 姓名 指导教师 成绩 老师评语: 扬州大学信息工程学院 2010 年6 月25

目录 一、程序设计目的: (1) 二、程序设计内容: (1) 三、课程设计所补充的内容:补充的函数或算法…………3,4 四、系统总体设计 (4) 五、系统详细设计………………………………………5,6,7,8 六、运行结果………………………………………………8,9,10 七、系统调试…………………………………………8,9,10,11 八、课程设计体会总结………………………………8,9,10,11

1 课程设计目的 (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)进一步考虑计算器外观设计,用可视化界面给出计算器外观、功能按键及输入界面。 使用说明:执行加法运算,'—'表示执行减法运算,表示执行乘法运算,'/'表示除法运算.‘Q’表示退出计算器‘C’表示清零,’=’表示得出结果'^'表示执行x的y次方,'e'表示执行e的x次方操作,'&'表示执行累加操作.,你可以可以用键盘上的上下左右键对光标进行移动,当光标移动到计算器按键上时,按ENTER即可执行该键的操作!最后按“=”则可得出结果。 3 课题设计的补充知识 本程序通过int specialkey(void)和#include来实现对屏幕的操作,通过调用int arrow()函数,int specialkey(void)和#include来实现对光标的操作。计算机图形采用Turbo C 2.0绘图程序制作。因此涉及C的图形程序设计知识。此外,由于不允许调用库函数,则要自行开发程序实现sinx,cosx,e的x次方函数运算,则可以根据幂级数的展开式来设计实现其运算的算法,而x的阶乘和x的累加则可用for语句来实现。 最后,不得不说说四则运算的算法,有两种方法可以实现:(1)利用堆栈实现四则运算(2)还可以用递归整数的四则运算。 sinx函数 #include

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

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

如果需要放弃本次计算操作,可以利用程序中设置好的按键进行清零,并为下一次运算作准备。 运用相关知识,查阅相关资料,编写一个简单的计算器,能够实现简单的基本的加减乘除运算,在计算器工作时用户能利用键盘或鼠标进行相应操作。程序基本功能要求实现完整,并有简单的验证。程序还须有符合标准的 程序设计报告。

2概要设计 系统流程图 系统流程图主要功能表 主要功能表

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语句*/ {

(完整word版)C语言简易计算器课程设计.doc

C语言课程设计报告书题目:简易计算器 院系: 班级: 学号: 姓名:

摘要 该软件为用户提供在windows 系统上的简易计算器,能进行简单的加、减、 乘、除四则运算与混合运算。目的是为了巩固和加深 C 语言课程的基本知识的理 解和掌握,利用 C语言进行基本的软件设计,掌握 C 语言的编程和程序调试 的基本技能,掌握书写程序设计说明文档的能力,提高运用 C 语言解决实际问 题的能力。 关键词: C; 简易计算器 ; 程序 ; 基本算法;混合运算 SUMMARY the 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.

用C语言实现多项式简单计算器的设计

武汉理工大学华夏学院课程设计报告书 课程名称:数据结构 题目:用C语言实现多项式简单计算器的设计 系名:信息工程系 专业班级:软件工程1121班 姓名:邓燕蓉 指导教师:王绪梅 2013 年 6月 28日

课程设计任务书 学生姓名:邓燕蓉专业班级:软件工程1121班 指导教师:王绪梅工作单位:华夏学院计算机教研室设计题目:用C语言实现多项式简单计算器的设计 设计目的 1.巩固和加深课堂所学知识、学会分析研究数据对象的特性及数据的组织方法; 2.选择合适的数据的逻辑结构和存储结构以及相应操作,实现简单的多项式计算; 3.提高程序设计能力、加强查阅、运用资料的能力、算法分析与程序设计素质培养; 设计任务(在规定的时间内完成下列任务) 〔问题描述〕输入并建立两个多项式并输出多项式 设计一个程序:对两个多项式进行加、减法及乘法运算,建立一个新多项式并输出. 或设计一个程序对其中一个多项式求导。 〔实现提示〕 选择带头结点的单链表或循环链表存储多项式,头结点中存放多项式的参数及单链表的数据具体要完成的任务是: A.编制完成上述问题的C语言程序、进行程序调试并能得出正确的运行结果。 B.写出规范的课程设计报告书; 时间安排:6月24日---28日 具体要求 1. 课程设计报告按统一通用格式书写,具体内容如下: ①设计任务与要求 ②总体方案与说明 ③软件主要模块的流程图 ④源程序清单与注释 ⑤问题分析与解决方案(包括调式记录、调式报告,即在调式过程中遇到的主要问题、解决方法 及改进设想); ⑥小结与体会 附录:①源程序(必须有简单注释)②使用说明③参考资料 2.每位学生应独立完成各自的任务且每天至少在设计室工作半天; 指导教师签名:王绪梅2013 年6月22日 教研室主任(或责任教师)签名:2013年6月24日

单片机C语言简易计算器

课程设计报告 课程名称单片机原理及应用设计题目简易计算器设计专业班级 姓名 学号

1.项目概述 中国古代最早采用的一种计算工具叫算筹。这种算筹多用竹子制成,也有用木头,兽骨充当材料的。约二百七十枚一束,放在布袋里可以随身携带。17世纪初,西方国家的计算工具有了较大的发展,英国数学家纳皮尔发明的“纳皮尔算筹”,英国牧师奥却德发明了圆柱形对数计算尺,这种计算尺不仅能做加减乘除,乘方,开方运算,甚至可以计算三角函数,指数函数和对数函数,这些计算工具不仅带动了计算器的发展,也为现代计算器发展奠定了良好的基础,成为现代社会应用广泛的计算工具。 2.项目要求 基于AT89C51单片机的简易计算器,设计要求如下: (1)计算器至少能正常显示8位数。 (2)开机时,显示“0” (3)计算器能对整数进行简单的加减乘除四则运算,在做除法时能自动舍去小数部分 (4)运算结果超过可显示的位数时能进行出错提示。 3.小组人员组成及分工

4.系统设计1.框图设计 显示 录入 5.硬件设计 (1)电路原理图: AT89C51 八位七段数码管 按键录入模 块(0-9 +-*/=c)

(2)元件清单: 6.软件设计(1)算法流程图: 主函数

显示函数 按键函数

(2)程序清单: #include /***按键程序***/ char keyscan(); /***显示程序***/ void display(); char dsp[9]={0,0,12,12,12,12,12,12,12}; //初始化显示数组 /***计算程序***/ void calculate(char k,char c1[8],char c2[8]); /***片选***/ unsigned char code Select[]= {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; /***码选***/ unsigned char code LED_CODES[]= {0xC0,0xF9,0xA4,0xB0,0x99, //0-4 0x92,0x82,0xF8,0x80,0x90, //5-9 0x86,0xAF,0xFF,0x7F,0xBF,}; //E,r,空格,.,- /***main函数***/ void main(void) { char i,j,k,c; char a[8],b[8]; /***定时1ms***/ TMOD=0; //TL0=-(1000/256); //TH0=-(1000%256); EA = 1; //总中断开关

用C语言编写简易计算器

供应链管理 用C语言设计简易计算器 班级:工业工程1103班 姓名: 2014/5/6

一、设计内容 我设计的是一款简易计算器,界面清楚,操作方便,它能实现以下功能:1.以界面形式给出计算器功能 2.简单的四则混合运算(支持小括号、优先级) 3.弦、余弦函数计算 4.指数、对数的运算 二、总体设计 简单计算器由五大模块组成,模块设计如下: 模块调用图 1.主函数 void main() 功能:调用各个主要模块,实现简单计算器的整体功能。2. 主界面函数void JieMian() 功能:使用有关图形函数模拟出可视化的计算器外观界面,并提供用户输入窗口。 3.四则混合运算函数void SiZeHunHeYunSuan() 功能:实现简单的加减乘除混合运算,并支持优先级和带括号的运算。 4.三角运算函数void SanJiaoYunSuan() 功能:实现基本的三角函数运算:sin(x)和cos(x)。 5.指对数函数void ZhiDuiShuYunSuan() 功能:实现基本的指数和对数运算。

三、采取的解决措施: 1.去图书馆借相关图书,上网查资料,通过自己的阅读,研究,不断的尝试,运行,修改,最终做出了简单的界面,但仍存在很多不足的地方,只能模拟出大体的外观,没能模拟出计算器中的各个键。 2.查在界面显示的函数原型,对比自己的程序,不断修改,对比,调试,检查,反思,最后发现是语句顺序错误,显示写在了判断的后面,修改成功。 3.在编写ln函数的时候,遇到很大困难,最后通过查阅资料,向别人请教编写出了函数。 四、详细代码: #include #include #include void main () { int i,flag; printf("*****欢迎使用简单计算器*******\n"); printf(" 1.加法运算\n"); printf(" 2.减法运算\n"); printf(" 3.乘法运算\n"); printf(" 4.除法运算\n"); printf(" 5.开方运算\n"); printf(" 6.平方运算\n"); printf(" 7.立方运算\n"); printf(" 8.正弦运算\n"); printf(" 9.余弦运算\n"); printf(" 10.正切运算\n"); printf(" 11.余切运算\n"); printf(" 12.平均值方差标准差运算\n"); printf("请输入i的值:\n"); scanf("%d",&i); switch(i) { case 1:flag=1;break; case 2:flag=2;break; case 3:flag=3;break; case 4:flag=4;break; case 5:flag=5;break; case 6:flag=6;break; case 7:flag=7;break; case 8:flag=8;break;

C语言,简单计算机代码

C语言,简单计算机代码 #include #include #define p 3.14 int jia(int a, int b) //加{ return a + b; } int jian(int a, int b) // 减{ return a - b; } int cheng(int a, int b) //乘{ return a * b; } int chu(int a, int b) //除{ return a / b;

void menu() { printf(" @@@ 菜单@@@\n"); printf("***** 1.加减 2.十进制转换 3.三角函数*****\n"); } int main() { while(1) { int i=0,n,a[200]; int r; int c; int tallax=1; menu(); scanf("%d", &tallax); switch (tallax) // { case 1:

printf("***** 1.加 2.减 3.乘 4.除*****\n"); int input=1; int x = 0; int y = 0; int ret = 0; scanf("%d", &input); if (input >= 1 && input <= 4) { printf("输入两个数:(1 3)\n"); scanf("%d%d", &x, &y); } else printf("输入错误"); switch (input) { case 1: ret = jia(x, y); printf("%d+%d = %d\n",x,y,ret); break; case 2: ret = jian(x, y); printf("%d-%d = %d\n",x,y,ret);

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

C语言课程设计学院:地球物理与测控技术学院专业:测控技术与仪器 姓名:邬博文 学号:201620120202

目录 第一章选题的意义 (4) 1.1 课题研究的背景 (4) 1.2 自己设计的优势 (4) 1.3 设计上功能上的不足 (4) 第二章研究的基础 (5) 2.1 涉及的主要知识点 (5) 第三章研究的可行性 (6) 3.1 技术的可行性 (6) 3.2 经济效益和社会效益的可行性 (6) 第四章研究的具体部分 (7) 4.1 研究的主要流程图 (7) 4.2 研究的具体代码 (8) 4.3程序运行结果图表 (14) 第五章总结 (17)

第一章选题的意义 ①通过本项课程设计,可以培养独立思考、综合运用所学有关相应知识的能力,能更好的巩固《C语言程序设计》课程学习的内容,掌握工程软件设计的基本方法,强化上机动手编程能力,闯过理论与实践相结合的难关!更加了解了c语言的好处和其可用性!同时增加了同学之间的团队合作精神!更加也体会到以后在工作中团队合作的重要性和必要性! ②通过C语言课程设计,使学生了解高级程序设计语言的结构,掌握基本的程序设计过程和技巧,掌握基本的分析问题和利用计算机求解问题的能力,具备初步的高级语言程序设计能力。为后续各门计算机课程的学习和毕业设计打下坚实基础。 1.1 课题研究的背景 计算器是现代日常生活中使用较为频繁的工具之一,常用的计算器有简易版和科学计算器两种模式。简易版的计算器不支持表达式运算,每次只能输入一个数据或者运算符来计算,而科学计算器除了容纳简易版计算器的功能外,还支持表达式运算,用户可以输入一个合法的算术表达式来得到所需的结果。计算器对我们每一的学生都很熟悉,从初中到高中再到大学。但是我们只知道按下几个按钮计算器便会显示出结果,很少有学生分析过计算器究竟是如何运行的。C语言课程设计便是一个很好的机会,让我去亲自写计算器的运行代码,尽管是简单计算器的设计,但其背后的知识那是相当多的,对我是个挑战,我接受! 1.2 自己设计的优势 现时学习生活中,常会遇到一些数目较大数据繁杂的数值运算,徒手运算起来很困难,这时候我们就必须用到计算器。人们对计算的要求不断提高,普通的功能简单的仅能进行加、减、乘、除运算的计算工具已经不能满足需要,需要一种能进行多种计算。现在已经有一些功能较为强大、涵盖面较广的计算软件,而且各种平台的小工具仍不断出现。这些大大方便了我们的生活给我们更多的选择和实现方式。本程序实现了加、减、乘、除、求幂、求模,求平方根,求Sin,求Cos,求Log10,求阶乘,取整,求正切,以及进制之间的相互转换。它可以直接输入数学表达式,不需要任何转换,就可以直接输出。 1.3 设计上功能上的不足 本程序虽然在其他简易计算器的基础上新增加了很多类容,如:三角函数的求值、指数函数的计算、任意数的任意次方、进制之间的相互转换等;但是由于个人能力的限制,仍不能实现四则混合运算的功能,仅仅是能进行一个两个数或者一个数的计算,这是这个程序最为不足的地方。但是我相信,随着学习的不断深入,这个功能在不久以后会被很好的实现。

(完整版)C语言毕业课程设计报告【简易计算器设计】

《C语言课程设计》报告

设计题目:简单计算器设计 学院名称:电子与信息工程学院 专业:计算机科学与技术 班级:计科09-1 姓名:朱凯迪学号1 9 指导教师:宋宏图定稿日期:2010年03月10日 一、设计题目 简单计算器设计 二、设计要求 在功能上功能尽量模拟windows操作系统中的计算器,系统界面不做强制要求。 三、设计目的 ①通过本项课程设计,可以培养独立思考、综合运用 所学有关相应知识的能力,能更好的巩固《C语言程 序设计》课程学习的内容,掌握工程软件设计的基

本方法,强化上机动手编程能力,闯过理论与实践相 结合的难关!更加了解了c语言的好处和其可用性! 同时增加了同学之间的团队合作精神!更加也体会到 以后在工作中团队合作的重要性和必要性! ②通过C语言课程设计,使学生了解高级程序设计语言 的结构,掌握基本的程序设计过程和技巧,掌握基本 的分析问题和利用计算机求解问题的能力,具备初步 的高级语言程序设计能力。为后续各门计算机课程的 学习和毕业设计打下坚实基础。 四、设计思想及过程 ①由于需要使功能尽量模仿Windows下的计算器,而 很多功能要以图形界面实现,故用Borland C++ Builder编写。所以用的是面向对象程序设计。但因 为这是C语言的课程设计,所以除了面向对象的使用 以外,所有语法都是按照C语言的格式编写。 ②采用工程模式,文件包括calc.h(运算主函数头文件, 包括各运算符的操作以及其辅助函数)、Main.h(窗体 类的声明头文件)、Calc.cpp(工程初始化文件)、 Main.cpp(代码主文件,包括各空间操作的函数)以及 一些其它附属文件,包括dll动态链接库。 ③在参考了Windows里的计算器以后,决定在我的课 程设计中实现: ⒈0~9的数字输入功能(小数点除外) ⒉实现加、减、乘、整除、取模、阶乘、位运算左 移、x的y次方、与、异或、x立方、x平方运算

基于c语言的简易计算器的设计与实现

课程名称:C语言程序设计课题名称:简易计算器 班级: 学号: 姓名: 指导老师: 成绩:

一、课程设计目的 1.通过这次的课程设计,巩固以前所学的知识: 1)进一步熟悉了各种语句,如宏定义语句,语句的嵌套等等。 2)对顺序,选择,循环结构的综合运用。 3)进一步巩固了一些算法,如求四则混合运算,三角函数,指对数的算法。 2.在课程设计的过程中,拓展了自己的知识面,知道我们所学过的C语言知识不过 是很少的一部分。还有很多知识等待我们自己去学习。 3.为了完善自己的程序,通过上网,查阅图书等途径学到了一些新的知识,如对C 语言中一些常用图形函数的应用。 4.通过课程设计,加深对结构化程序设计思想的理解,能进行一个系统功能需求分 析,并设计合理的模块化结构。 5.通过课程设计,提高程序开发能力,能运用合理的控制流编写清晰高效的程序。 二、设计内容 我设计的是一款简易计算器,界面清楚,操作方便,它能实现以下功能: 1.查询当时时间 2.简单的四则混合运算(支持小括号、优先级) 3.正弦、余弦函数计算 4.指对数计算 三、总体设计 简单计算器由六大模块组成,模块调用图如下: Main() ZhuJieMia n() SiZeYunS uan() Time() SanJiaoY unSuan() ZhiDuiShuY unSuan()

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); } 用两个数组模拟数据结构栈,其特点是数据先进后出。用两个数组分别保存操作数和运算符。从字符串中依次分离出操作数与运算符,分别存入对应数组。当操作符串为空时,直接存入(相当与栈元素的压入)。当不为空时,与数组最后一个元素(相当于栈顶)比较优先级,若大于直接存入,否则弹出操作数最后两位进行运算,直到操作符栈顶元素优先级小

用c语言编写的计算器源代码

作品:科学计算器 作者:欧宗龙 编写环境:vc++6.0 语言:c #include "stdafx.h" #include #include #include #include "resource.h" #include "MainDlg.h" #include #include #define PI 3.141593 BOOL A_Op=FALSE; BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch(uMsg) { HANDLE_MSG(hWnd, WM_INITDIALOG, Main_OnInitDialog); HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand); HANDLE_MSG(hWnd,WM_CLOSE, Main_OnClose); } return FALSE; } BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam) {

return TRUE; } void TrimNumber(char a[])//判断并删除小数点后无用的零 { for(unsigned i=0;i=i;j--) { if(a[j]=='0') { a[j]='\0'; } else if(a[j]=='.') { a[j]='\0'; } else break; } } } } double Operate(char Operator,double n1,double n2) //判断符号,进行相应的运算{ if(Operator=='0') { } if(Operator=='+') { n2+=n1; } if(Operator=='-') { n2=n1-n2; } if(Operator=='*') { n2*=n1; } if(Operator=='/')

相关主题
文本预览
相关文档 最新文档