数据结构课程设计-实验报告(一)表达式求值(计算器)_第1页
数据结构课程设计-实验报告(一)表达式求值(计算器)_第2页
数据结构课程设计-实验报告(一)表达式求值(计算器)_第3页
数据结构课程设计-实验报告(一)表达式求值(计算器)_第4页
数据结构课程设计-实验报告(一)表达式求值(计算器)_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1/1数据结构课程设计_实验报告(一)表达式求值(计算器)数据结构课程设计试验报告起止时间:2023.12.28-2023.12.31

1、输入:tan45

2、输出:1

3、执行结果:

设计过程中遇到的问题及解决方法:

问题:算数表达式以字符串输入,操作数和操作符的提取;

解决方法:两两操作符之间如有数字将中间的数字提取强制转换成double型;

附件:(程序源代码)

#include

#include

#include

#include

#defineN100

#definepai3.1415926

typedefstructyxj

{

charoperat;

intrank;

}yxj;

typedefstructstr

{

chardata[N];

}zs;

voidsjhs(void)

{

chars[10],a[10];

doubley,x;

printf("请输入(sincostan角度制)表达式:\n");

scanf("%s",s);

if(strstr(s,"sin")!=0)

{

inti=0,j=0;

while(s[i]!='\0')

{

if(s[i]>='0'

i++;

}

s[j]='\0';

x=atof(s);

y=sin(x*pai/180);

}

elseif(strstr(s,"cos")!=0)

{

inti=0,j=0;

while(s[i]!='\0')

{

if(s[i]>='0'

i++;

}

s[j]='\0';

x=atof(s);

y=cos(x*pai/180);

}

elseif(strstr(s,"tan")!=0)

{

inti=0,j=0;

while(s[i]!='\0')

{

if(s[i]>='0'

i++;

}

s[j]='\0';

x=atof(s);

y=tan(x*pai/180);

}

else

{

printf("格式错误\n");

return;

}

printf("%lf\n",y);

printf("*****1、连续*****\n");

printf("*****0、返回上一层*****\n");

scanf("%s",a);

if(strcmp(a,"0")==0)

return;

elseif(strcmp(a,"1")==0)

sjhs;

else

printf("没有该选项\n");

}

voidszys(yxjmark)

{

yxjos[N];

chara[10];

charch;

doublens[N];

zszhan[20];

intnumb[N];

intLen,p=0,q=1,i,o=1,n=0;

chardata[N];

os[0]=mark[0];

ns[0]=0;

printf("请输入算术(+-*/^)表达式(以=结束):\n");

scanf("%s",data);

if(strcmp(data,"+")==0||strcmp(data,"-")==0||strcmp(data,"*")==0||strcmp(data,"/")==0||strcmp(data,"^")==0||strcmp(data,"=")==0)

{

printf("格式错误\n");

return;

}

Len=strlen(data);

numb[0]=0;

for(i=0;i='0'

zhan[(p+k)/2].data[t]='\0';

if(zhan[(p+k)/2].data[0]!='\0')

ns[n++]=atof(zhan[(p+k)/2].data);

p++;

for(j=0;jos[o-1].rank

break;

}

else

{

doublenumb1,numb2,numb;

switch(ch=os[--o].operat)

{

case'+':

{

numb1=ns[--n];

numb2=ns[--n];

numb=numb1+numb2;

ns[n++]=numb;

break;

}

case'-':

{

numb1=ns[--n];

numb2=ns[--n];

numb=numb2-numb1;

ns[n++]=numb;

break;

}

case'*':

{

numb1=ns[--n];

numb2=ns[--n];

numb=numb2*numb1;

ns[n++]=numb;

break;

}

case'/':

{

numb1=ns[--n];

numb2=ns[--n];

if(numb1==0)

{

printf("无效操作\n");

return;

}

else

{

numb=numb2/numb1;

ns[n++]=numb;

}

break;

}

case'^':

{

numb1=ns[--n];

numb2=ns[--n];

numb=pow(numb2,numb1);

ns[n++]=numb;

break;

}

}

}

}

}

elseif(data[i]>='0'

elseif(data[i]=='.');

else

{

printf("格式错误,请重新输入:\n");

szys(mark);

break;

}

}

printf("%lf\n",ns[0]);

printf("*****1、连续*****\n");

printf("*****0、返回上一层*****\n");

scanf("%s",

if(strcmp(a,"0")==0)

return;

elseif(strcmp(a,"1")==0)

szys(mark);

else

printf("没有该选项\n");

}

intmain

{

yxjmark[9];

mark[0].operat='#';

mark[0].rank=-1;

mark[1].operat='+';

mark[1].rank=1;

mark[2].operat='-';

mark[2].rank=1;

mark[3].operat='*';

mark[3].rank=2;

mark[4].operat='/';

mark[4].rank=2;

mark[5].operat='(';

mark[5].rank=-1;

mark[6].operat=')';

mark[6].rank=-1;

mark[7].operat='=';

mark[7].rank=0;

mark[8].operat='^';

mark[8].rank=3;

while(1)

{

chari[10];

printf("*****1、四则运算计算器*****\n");

printf("*****2、三角函数计算器*****\n");

printf("*****0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论