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

淡笑看过尘世 范文 报告范文
精选回答

C语言课程设计.简易计算器.报告本文简介:C语言课程设计-简易计算器xxxx大学信息科学与工程学院课程设计报告班级:通信工程一班姓名(学号):xxx实验项目名称:简易计算器实验室(中心):信息科学与工程学院信息技术实验室指导教师:xxx实验完成时间:2012年6月19日目录一:课程设计题目3二:功能描述3三:概要设计4四:详细设计5五:测试

C语言课程设计.简易计算器.报告本文内容:

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

xxxx大学信息科学与工程学院

课程设计报告

级:

通信工程一班

姓名

(学号):

xxx

实验项目名称:

简易计算器

实验室(中心):

信息科学与工程学院信息技术实验室

xxx

实验完成时间:

2012

6

19

目录

一:课程设计题目3

二:功能描述3

三:概要设计4

四:详细设计5

五:测试结果及存在的问题9

六:课程设计心得体会12

七:附录12

序号

项目

标准

评分

1

系统演示(功能)(50%)

按要求完成系统功能且界面友好容错能力强(45-50)

按要求完成系统功能界面一般有较好的容错能力(40-44)

基本完成系统功能有一定的容错能力(35-39)

基本完成系统功能(30-34分)

未完成系统功能或他人代做或抄袭(15)

2

课程设计说明书(50%)

课程设计书各项目认真填写,具有清晰的设计思路及软件测试结果分析(45-50)

课程设计书各项目认真填写,具有较为清晰的设计思路并对软件测试结果进行了较为清晰的分析(40-44)

课程设计书各项目认真填写,设计思路正确(35-39)

课程设计书进行为较为认真的填写(30-34)

课程设计书有未完成项或各项填写不属实或他人代做或抄袭(15)

教师签字

总分

一、题目:

简易计算器设计

二、功能描述:

此简易计算器根据算符优先算法原则可以计算由“+,-,*,/,(,)”

组成的任意算术表达式的值。其中此程序中包含对负数和字符数据转

换功能。

如:-9+((2+3)*9/8-5)/(-3);

三、概要设计:

根据算符优先算法设计将函数功能模块分布如下:

利用结构体数组中脚码的变换达到符号和数据进栈和出栈的目的。

算符优先算法计算表达式的值

定义运算符栈和数据栈及各个函数的类型和数据的类型(自定义完成)

功能:完成栈的定义和初始化及

函数的类型定义及运算符

集合定义.

字符型数据表达式的输入并对负数处理以符合算法规则(Translate函数完成)

功能:完成负数转换成(0-负数)形

N

式以便数据读入

(Translate).

判断表达式是否正确

(Can函数完成)

功能:完成判断表达式是否符合

一般计算表达式规则(Can).

Y

运算符和数据的进栈和出栈(自定义函数完成)

功能:完成运算符和数据的进栈

和出栈.

功能:完成数据

算符优先级比较(Precede函数完成)

字符型数据转换成浮点型数据(Getdouble函数完成)

转换和运算符

比较.

数据运算的过程及输出(Operate和EvaluateExpression函数完成)

功能:完成函数调用以完成

数值计算.

四、详细设计:

各功能模块的实现过程如下:

1:栈的应用:

通过运用结构体数组中top值的改变来达到数据进栈和出栈的目的,而栈的初始化只需将top的初始值赋为-1即可

2:表达式负数的处理(由Translate函数完成):

Y

N

Y

N

N

Y

结束返回新的数组s

i>t?(t为数组长度)

i+1之后元素向后移一位,s[i+1]=0

s[i]=’(’且s[i+1]=’-’

S数组首位加0

S[0]=’-’?

读入字符串数组(s)

开始

算法说明:

函数中,先扫描数组,若s[0]=‘-’,则将数组的所有元素向后

移一位且首位赋值为‘0’,若数组首位之后含有形如(-5)则将负号及其以后的元素全向后移一位且负号位置赋值为‘0’,然后返回新的数组;

i=i+1,t=t+1

3:表达式正误的判断(由Can函数完成):

函数说明:

函数中将错误归为几类:括号的完整性、运算符后的数据类型、除号后的数据不能为0、小数点及运算符不能多个在一起、右括号后的数据必须为运算符或结束标志;函数通过p和s记录对这些错误的判断,并返回结果;

4:进栈和出栈:

说明:

运算符和数据的进栈是通过给结构体数组赋值并增加top的值来记录栈的栈顶元素的位置

以便取用;出栈是使top的减1后的那个数组中的数据作为新栈的栈顶元素,并返回栈顶元素.即实质上是通过改变数组的位置来达到进栈出栈;

5:字符串数据转换成浮点型数据(由Getdouble函数完成):

函数说明:

从字符数组的运算符开始扫描,直到遇到下一个运算符结束,然后将这两个运算符间的字符记录在数组S中,再用库函数atof将字符数据转换成浮点型数据并返回数据和数组a中新的元素的起点(即扫描到的第二个运算符);

6:算符优先级的比较:

函数说明:

此函数是记录运算符栈的栈顶元素在运算符集合中的位置与读入运算符在运算符集合中的位置,将这两个值作为运算符优先级表数组的脚码,然后返回这个元素所代表的字符;

7:算符优先算法求表达式的值的核心算法:

说明:此函数中使用两个工作栈,一个是OPTR,用以寄存运算符;另一个是OPND,用以寄存浮点型数据。基本思想是:首先置数栈为空栈,表达式的起始符号为‘#’算符栈的栈底元素;然后依次读入表达式中的每一个字符,若为数则进OPND数栈,若为运算符则和OPTR算符栈的栈顶运算符比较优先级后,如果栈顶算符优先级低,则此算符进栈并返回新的栈顶算符;如果栈顶算符优先级高,则取算符栈栈顶算符theta并删除此算符,同时去数栈的最上面的两个数a和b并删除这两个数,作a

theta

b运算并将结果进数栈;如果两个算符优先级相同,则删除算符栈顶算符并返回新的栈顶算符。直到整个表达式求值完毕(即OPTR的栈顶算符和当前读入的字符均为‘#’时求值完毕)。

程序框图如下:

Y

N

Y

开始

定义并初始化栈

ch=算符栈顶元素,k=0

ch!=’#’

||

s[k]!=’#’

s[k]是算符?

ch和算符栈顶元素优先级

算符进栈

删除栈顶元素

去算符栈顶元素(theta)

字符串转换为

浮点型数据

删除theta并返回新栈顶元素

取数栈栈顶的两元素a,b

删除数栈的最上面的两元素

结果进数栈

计算a(theta)b的值

k=k+1

ch=算符栈顶元素

x=数栈顶元素

输出x的值结束

五、测试结果及存在的问题:

1:系统运行效果:

输入界面:

正确的计算:

再计算界面

错误报告:

修正再计算:

2:存在的不足及预期的解决办法:

不足之处:

计算器的操作界面不是很美观;

而且程序循环使用不能在指定的位置退出;

目前只能用于计算+、-、*、/

四则运算;

预期的解决办法

:

查询资料学习了解操作界面的制作方法及需要的技巧;

查询相关资料了解学习有关处理字符数组赋值的相关问题

(即处理字符数组赋值只取到预定的位置);

学习了解相关的库函数的功能以增加计算器的计算功能

(如计算器的次方、开方、π、等的运算)

.

六、课程设计心得体会:

心得体会:

我对编程是有很浓厚兴趣的。在编程的过程中,我深深地体会到力不从心—有些知识没能深入地理解和掌握以及VC++的许多功能没能探索和了解使我编程时有好多的思想运用不上(如设计一个美观的操作界面)。另外,我也感受到了数据结构的重要性,有了结构才能将好的思想付诸实践。同时经过查询资料了解到栈由多种运用方法,其中包括栈的顺序存储结构和链式存储结构,栈是计算表达式的经典应用。数据结构中的许多结构都是很经典思想,只有把编程语言和数据结构都熟练掌握的情况下,才能做出一些很好的作品。在编程过程中,虽然有时候是很发闷的,尤其是程序无错但结果不对,但是在完成一个完整的程序时所带来的喜悦是其它事情所不能替代的。我很喜欢编程,即使我的知识和能力有限,但我相信经过努力,一切皆有可能。

七、附录:

程序源代码如下:

#include

#include

#include

//算符优先级表

char

First[7][7]=

{

//

+,-,*,/,(,),#

/*

+/

>,>,,/*

-/

>,>,,/*/

>,>,>,>,,>,/*

//

>,>,>,>,,>,/*

(/,>,>,,>,>,/*

#/

top=-1;

}

//运算符进栈函数

void

Push_R(OPTR_Stacka,char

b)

{

a->top++;

a->data[a->top]=b;

}

//数据进栈函数

void

Push_D(OPND_Stacka,double

b)

{

a->top++;

a->data[a->top]=b;

}

//取运算符栈顶符函数

void

GetTop_R(OPTR_Stacka,charb)

{b=a->data[a->top];

}

//取数据栈顶数函数

void

GetTop_D(OPND_Stacka,doubleb)

{b=a->data[a->top];

}

//判断数据是否为运算符函数

int

In(char

a,chars)

{

for(int

i=0;idata[a->top];

}

//取数据站的栈顶元素,并从栈中删除此元素

void

Pop_D(OPND_Stacka,doubleb)

{b=a->data[a->top];

a->top--;

}

//二元运算函数

double

Operate(double

a,char

theta,double

b)

{

switch(theta)

{

case

+

:return

a+b;

case

-

:return

a-b;

case

:return

a*b;

case

/

:return

a/b;

default:return

0;

}

}

//将字符串转换成浮点型数据

double

Getdouble(chara,intb)

{

double

x;char

s[50];

int

m=0,n;

n=strlen(a);

for(int

i=*b;i

if(In(a[i],OP)==1)

{

m=i;break;

}

for(i=*b;i

s[i-*b]=a[i];

strcat(s,“\0“);

x=atof(s);b=m;

return

x;

}

//算符优先算法求值核心函数

double

EvaluateExpression(chars)

{

OPND_Stack

OPND;

OPTR_Stack

OPTR;

char

ch,theta;

double

x,a,b;

int

k=0;

strcat(s,“#“);

InitStack_R(Push_R(

InitStack_D(

GetTop_R(

while(s[k]!=

#

||ch!=

#

)

{

if(In(s[k],OP)==0)

{

x=Getdouble(s,Push_D(

}

else

{

switch(Precede(ch,s[k]))

{

case

:GetTop_R(Pop_R(

Pop_D(Pop_D(

Push_D(

break;

}

}

GetTop_R(

}

GetTop_D(

return

x;

InitStack_R(Push_R(

InitStack_D(

}

//判断表达式是否输入正确.

int

Can(char

a[],int

n)

{

int

p=0,s=0,t=0;

for(int

i=0;i

{

if(a[i]==

(

||a[i]==

)

)

p++;

if((a[i]==

+

||a[i]==

-

||a[i]==

||a[i]==

/

)

if(a[i]==

/

if((a[i]==

(

if(a[i]==

)

if(a[i]==

.

}

if(p%2==0

return

1;

}

//负数转换函数

void

Translate(chars)

{

char

b[80];int

k,t;

if(s[0]==

-

)

{

b[0]=

0

;

b[1]=

\0

;

strcat(b,s);

strcpy(s,b);

}

t=strlen(s);

k=t;

for(int

i=0;i=k;j--)

s[j]=s[j-1];

s[k]=

0

;

s[t+1]=

\0

;

}

t=strlen(s);

k=t;

}

}

//主函数

void

main()

{

system(“color

B0“);

char

a[80];int

m;char

b[80];

printf(“============简易计算器============\n“);

printf(“[四则运算.如:-1+(2+3)*9/(-2)-6].\n请输入一个表达式:\n“);

while(1)

{

gets(a);

strcpy(b,a);

Translate(a);

while(1)

{

int

p;

m=strlen(a);

p=Can(a,m);

if(p==0)

break;

system(“color

F4“);

printf(“输入错误.请从新输入表达式:\n“);

gets(a);

strcpy(b,a);

Translate(a);

}

system(“color

B0“);

printf(“=*=*=*=*=*=*表达式结果=*=*=*=*=*=*\n“);

printf(“该表达式的结果为:\n%s=%-10.3lf\n“,b,EvaluateExpression(a));

printf(“=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*\n“);

printf(“继续使用[四则运算.如:-1+(2+3)*9/(-2)-6]\n请再输入一个表达式:\n“);

}

}

通信工程11级一班

16

/

17

体会生活 2022-07-13 03:44:00

相关推荐

蚍蜉撼树是什么意思蚍(蚍蜉撼树是什么意思)

1、蜉蝣树(拼音pfhnsh)是中国成语,蜉蝣树(蜉蝣:一种大蚂蚁;Shake:摇动)比喻力量本来就很弱,但是你想摇动一个很强大的东西,就不能随心所欲了。这个成语一般用作主语、谓语、宾语,属于主谓式,含有贬义。...
展开详情

得意洋洋,反义词(得意洋洋的反义词)

1、得意洋洋的反义词有郁郁寡欢的,有空虚进取的书,有哭天抢地的,有郁郁寡欢的,有失意的,有垂头丧气的,有谦虚谨慎的,有黯然销魂的,有抑郁的。2、“得意”是中国成语,读作:dyyngyng,解释为:得意:明白意图...
展开详情

士大夫怎么读(士大夫)

1、士大夫,在古代是指有官职的人,也指不当官的有名望的学者。2、在中国古代,官员和学者的统称。055-79000:“仆亦承传送门之业,受朝廷调教,使得冠带之端,在士大夫之列。”陈继儒,明朝《晋书夏侯湛传》:“立...
展开详情

福兮祸所伏祸兮福所倚什么意思(福兮祸所伏祸兮福所倚)

1、福兮祸所伏祸兮福所倚是俗语,意思是福祸相依,相互转化。比喻能有好结果,好事也能有坏结果。建议人在富贵时要谦虚谨慎,戒骄戒躁;踌躇满志,狂妄自大,却滋生灾难,由福转祸;逆境中坚持,努力,可以化逆境为顺境,从苦...
展开详情

回眸一笑是啥意思(回眸一笑什么意思)

1、回首微笑,拼音是humuy和ao,中国成语,意思是翻白眼,微笑。常用来形容女人妩媚的表情,诱惑人,引人入胜。出自唐白居易《长恨歌》。2、唐白居易《长恨歌》:“只要她转过头来笑一笑,就有一百个符咒在施,六宫的...
展开详情

精选推荐更多>

利用陀螺经纬仪可以测定什么方向

利用陀螺经纬仪可以测定真北方向,陀螺经纬仪是一种将陀螺仪和经纬仪集成在一起的测量仪器。它利用陀螺仪本身的物理特性及地球自转的影响,实现自动寻找真北方向,从而测定任意测站上任意方向的大地方位角。
陀螺经纬仪由陀螺仪和经纬仪两部分组成。经纬仪于1730年由英国人发明,经过金属经纬仪的漫长过程,20世纪20年代发展为光学经纬仪,60年代以来进入电子经纬仪阶段,现已相当先进,向着智能化方向发展。陀螺仪是陀螺经纬仪的主体,主导着整机的发展进程。
陀螺经纬仪按定向准确度可分为工程级和精密级。定向原理除了英美曾经用过的速度式外,一般都用摆式。陀螺仪和经纬仪整体使用,结合方式有下挂式和上架式两类。下挂式仪器是20世纪50年代发展起来的,几乎所有的精密级仪器和自动化程度较高的仪器均属此类。
陀螺经纬仪的使用方式与构造特点有关。一般上架式仪器都用人工测法,下挂式仪器多用自动测法。自动测法仪器主要采用自动跟踪法、多点光电计时法和光电积分法观测。其中,光电积分法最为先进。人工测法主要采用跟踪逆转点法、中天时间法、记时摆幅法和多点记时法观测。

罢了是什么意思

罢了,汉语词语,拼音是bà le,语气词,用在陈述句的末尾,有“仅此而已”的意味,对句子的意思起冲淡的作用,前面常跟“不过”、“无非”、“只是”等词呼应;表示容忍,有勉强放过、暂时不深究的意思。
出处:
1、元·关汉卿《金线池》第四折:“他委实不肯便罢了,教我怎生断理?”
2、明·高明《琵琶记·书馆悲逢》:“他把我嘲,难恕饶,你说与我知道,怎肯干休罢了?”
3、清·吴敬梓《儒林外史》第二十二回:“我不说你也罢了,你还问我这些话,这也可笑!”
4、刘大白《洪水》:“人也漂流去,倒也罢了;剩下这没饭吃没屋住的人们,是洪水底洪恩吗?”
5、明·施耐庵《水浒传》第二十三回:“只见枯草丛中钻出两只大虫来,武松道:‘阿呀!我今番罢了!’”
6、《儿女英雄传》第二回:“这可就罢了我了!慢说我没有这样的家当,便有,我也不肯这样做法。”
7、《西游补》第五回:“你四人回去罢了,千万替我谢声。”
8、明·凌濛初《二刻拍案惊奇》卷九:“凤官人还问我姐姐。你只打点迎亲罢了。”
9、《儒林外史》第十九回:“每日清早上是我弟媳妇出来屋后抱柴,你明日众人伏在那里,遇着就抢罢了。”
10、清·曹雪芹《红楼梦》第二十二回:谁又参禅,不过是一时的玩话儿罢了。
11、清·曹雪芹《红楼梦》第三十二回:“我也不过俗中又俗的一个俗人罢了。”
12、鲁迅《两地书·致许广平二》:“我相信写了出来,未必于你有用,但我也只能写出这些罢了。”
13、明·吴承恩《西游记》第二十三回:“哥哥,罢了!罢了!我们遇着鬼了!”
14、《儒林外史》第二十三回:“罢了!我上了这小畜生的当了!”
造句:
1、他不会真的打你,无非吓唬吓唬你罢了。
2、这不过是我的一点学习心得罢了。
3、他不愿意去也就罢了。
4、这道题很难吗?罢了。

搁浅的意思

搁浅,汉语词语,拼音为gē qiǎn,意思是船因水浅搁住不能动。也比喻事情遇到阻碍而中途停顿。
出自《儒林外史》第四十三回:“盐船搁浅了,我们快帮他去起拨!”
近义词:停止、停息、停留、中止、停顿、停滞。
反义词:沉没、漂浮、畅游。
用法:作动词,形容某件事暂时停顿。
例句:然而最可恶的是她现在要用的辞句,先生都没教过,英文读本上也找不到;她写了半行就搁浅了。
造句:
1、我开始意识到,那种至纯至美的欢乐已搁浅在童年,童年已变得十分遥远和亲切。
2、最远处那戈壁连绵起伏的沙梁,在夕晖尽染中,宛若被定格的金波荡漾的海面。晚风中摇曳的芦苇,就像没来得及起锚远航被搁浅在滩涂的帆影。
3、我倚在时光的寂深处,想象爱情恒远的缠绵。所有的故事,潋滟成文字里的幽怨,搁浅在无眠的夜里。行走在文字里的眷恋,染透了葱翠的思念,漫过记忆的潮岸,荡漾成午夜里一道寂寞的风景。

丰年好大雪 珍珠如土金如铁的意思

“丰年好大雪,珍珠如土金如铁”指当时金陵四大家族中的薛(谐音“雪”)家,家产丰厚,珍珠如土般堆成山,金银似铁到处都是。出自清·曹雪芹《红楼梦》:“贾不假,白玉为堂金作马。阿房宫,三百里,住不下金陵一个史。东海缺少白玉床,龙王来请金陵王。丰年好大雪,珍珠如土金如铁。”
《红楼梦》是中国古代章回体长篇小说,中国古典四大名著之一,通行本共120回,一般认为前80回是清代作家曹雪芹所著,后40回是清代作家高鹗所补。小说以贾、史、王、薛四大家族的兴衰为背景,以富贵公子贾宝玉为视角,以贾宝玉与林黛玉、薛宝钗的爱情婚姻悲剧为主线,描绘了一批举止见识出于须眉之上的闺阁佳人的人生百态,展现了真正的人性美和悲剧美,可以说是一部从各个角度展现女性美以及中国古代社会世态百相的史诗性著作。
《红楼梦》版本有120回“程本”和80回“脂本”两大系统。程本为程伟元排印的印刷本,脂本为脂砚斋在不同时期抄评的早期手抄本。脂本是程本的底本。
《红楼梦》是一部具有世界影响力的人情小说,中国封建社会的百科全书,传统文化的集大成者。小说作者以“大旨谈情,实录其事”自勉,只按自己的事体情理,按迹循踪,摆脱旧套,新鲜别致,取得了非凡的艺术成就。“真事隐去,假语村言”的特殊笔法更是令后世读者脑洞大开,揣测之说久而遂多。二十世纪以来,《红楼梦》更以其异常出色的艺术成就和丰富深刻的思想底蕴使学术界产生了以为研究对象的专门学问——红学。
常见热点问答
热点搜索
1-20
21-40
41-60
61-80
81-100
101-120
121-140
141-160
161-180
181-200
作文大全
1-20
21-40
41-60
61-80
81-100
101-120
121-140
141-160
161-180
181-200