设计一个多功能计算器<用C语言程序设计>

设计一个多功能计算器<用C语言程序设计>,第1张

一题目意义和设计思想

1、题目意义 多功能计算器的设计目的是为了简化计算及对所学C语言知识的有效应用。在多功能计算器设计的这个实际的例子中,我们运用C语言知识来解决这个生活中的实际问题。从而能更有效地检验自己的C语言学习的水平,加强对知识的掌握,提高解决实际问题的能力。 2、设计思想 首先是对要解决的问题进行分析,

二、采用的主要技术、遇到的难点和解决方法

在设计的过程中主要运用到do-while 循环语句,if-else判断语句,switch选择语句,函数的递归调用,库函数windowsh的清屏函数system(“cls”),和程序的终止函数exit(0)等技术。遇到的问题主要有两个: 1) 清屏的功能的实现 2) 输出结果后将结果作为 *** 作数继续计算的功能的实现解决方法:1) 是通过查询资料和复习书上的知识 明白了应该调用库函数windowsh的清屏函数system(“cls”)就可以解决这个问题2) 通过循环do-while嵌套do-while和if-else语句的使用来解决,循环的利用前次计算的结果来作为下一个计算的第一个 *** 作数来实现的。

三、实现的主要功能和系统结构

各函数的 实现的功能Main()主函数 主函数

Calculate() 进行直接的计算

Expression() 表达式计算得形式

System(“cls”) 系统清屏的功能

Exit() 系统使得程序退出的功能

函数之间的关系\实现功能:1)具备整型数据、浮点型数据的算术(加、减、乘、除)运算功能。依次输入第一个运算数、运算符(+,-,,/),第二个运算数,然后输出结果。结果可以作为下一个运算的第一运算数。按‘C’清屏,按‘X’退出。例如: 选择c清屏的功能后如图 按任意键继续 最后按X退出功能2)实现单运算符表达式计算的功能。输入的 *** 作数可以包含整数或浮点数。如果遇到错误的表达式,应输出错误提示信息。输入表达式如下:

#include<stdioh>

int main() {

double num1 = 0; //输入1

double num2 = 0; //输入2

char ch; // *** 作

double ret = 0; //结果 printf( "输入第一个数:" );

scanf( "%lf", &num1 );

printf( "输入第二个数:" );

scanf( "%lf", &num2 );

printf( " *** 作[+ - /]:" );

getchar();

scanf( "%c", &ch ); switch( ch ) {

case '+':

ret = num1 + num2;

break;

case '-':

ret = num1 - num2;

break;

case '':

ret = num1 num2;

break;

case '/':

ret = num1 / num2;

break;

default:

break;

}

printf( "结果:%2lf\n", ret ); return 0;

} 写个简单易懂的,你 *** 作计算器的步骤就是编写程序的思路呀

#include "stdioh"

#include "stringh"

#include "ctypeh"

#include "mathh"

//expression evaluate

#define iMUL 0

#define iDIV 1

#define iADD 2

#define iSUB 3

#define iCap 4

//#define LtKH 5

//#define RtKH 6

#define MaxSize 100

void iPush(float);

float iPop();

float StaOperand[MaxSize];

int iTop=-1;

//

char Srcexp[MaxSize];

char Capaexp[MaxSize];

char RevPolishexp[MaxSize];

float NumCapaTab[26];

char validexp[]="/+-()";

char NumSets[]="0123456789";

char StackSymb[MaxSize];

int operands;

//

void NumsToCapas(char [], int , char [], float []);

int CheckExpress(char);

int PriorChar(char,char);

int GetOperator(char [], char);

void counterPolishexp(char INexp[], int slen, char Outexp[]);

float CalcRevPolishexp(char [], float [], char [], int);

void main()

{

int ilen;

float iResult=00;

printf("enter a valid number string:\n");

memset(StackSymb,0,MaxSize);

memset(NumCapaTab,0,26); //A--NO1, B--NO2, etc

gets(Srcexp);

ilen=strlen(Srcexp);

//printf("source expression:%s\n",Srcexp);

NumsToCapas(Srcexp,ilen,Capaexp,NumCapaTab);

printf("Numbers listed as follows:\n");

int i;

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

printf("%2f ",NumCapaTab[i]);

printf("\nCapaexp listed in the following:\n");

printf("%s\n",Capaexp);

ilen=strlen(Capaexp);

counterPolishexp(Capaexp,ilen,RevPolishexp);

printf("RevPolishexp:\n%s\n",RevPolishexp);

ilen=strlen(RevPolishexp);

iResult=CalcRevPolishexp(validexp, NumCapaTab, RevPolishexp,ilen);

printf("\ncounterPolish expression:\n%s%6f\n",Srcexp,iResult);

}

void iPush(float value)

{

if(iTop<MaxSize) StaOperand[++iTop]=value;

}

float iPop()

{

if(iTop>-1)

return StaOperand[iTop--];

return -10;

}

void NumsToCapas(char Srcexp[], int slen, char Capaexp[], float NumCapaTab[])

{

char ch;

int i, j, k, flg=0;

int sign;

float val=00,power=100;

i=0; j=0; k=0;

while (i<slen)

{

ch=Srcexp[i];

if (i==0)

{

sign=(ch=='-')-1:1;

if(ch=='+'||ch=='-')

{

ch=Srcexp[++i];

flg=1;

}

}

if (isdigit(ch))

{

val=ch-'0';

while (isdigit(ch=Srcexp[++i]))

{

val=val100+ch-'0';

}

if (ch=='')

{

while(isdigit(ch=Srcexp[++i]))

{

val=val+(ch-'0')/power;

power=10;

}

} //end if

if(flg)

{

val=sign;

flg=0;

}

} //end if

//write Capaexp array

// write NOj to array

if(val)

{

Capaexp[k++]='A'+j;

Capaexp[k++]=ch;

NumCapaTab[j++]=val; //A--0, B--1,and C, etc

}

else

{

Capaexp[k++]=ch;

}

val=00;

power=100;

//

i++;

}

Capaexp[k]='\0';

operands=j;

}

float CalcRevPolishexp(char validexp[], float NumCapaTab[], char RevPolishexp[], int slen)

{

float sval=00, op1,op2;

int i, rt;

char ch;

//recursive stack

i=0;

while((ch=RevPolishexp[i]) && i<slen)

{

switch(rt=GetOperator(validexp, ch))

{

case iMUL: op2=iPop(); op1=iPop();

sval=op1op2;

iPush(sval);

break;

case iDIV: op2=iPop(); op1=iPop();

if(!fabs(op2))

{

printf("overflow\n");

iPush(0);

break;

}

sval=op1/op2;

iPush(sval);

break;

case iADD: op2=iPop(); op1=iPop();

sval=op1+op2;

iPush(sval);

break;

case iSUB: op2=iPop(); op1=iPop();

sval=op1-op2;

iPush(sval);

break;

case iCap: iPush(NumCapaTab[ch-'A']);

break;

default: ;

}

++i;

}

while(iTop>-1)

{

sval=iPop();

}

return sval;

}

int GetOperator(char validexp[],char oper)

{

int oplen,i=0;

oplen=strlen(validexp);

if (!oplen) return -1;

if(isalpha(oper)) return 4;

while(i<oplen && validexp[i]!=oper) ++i;

if(i==oplen || i>=4) return -1;

return i;

}

int CheckExpress(char ch)

{

int i=0;

char cc;

while((cc=validexp[i]) && ch!=cc) ++i;

if (!cc)

return 0;

return 1;

}

int PriorChar(char curch, char stach)

{

//栈外优先级高于(>)栈顶优先级时,才入栈

//否则(<=),一律出栈

if (curch==stach) return 0; //等于时应该出栈

else if (curch=='' || curch=='/')

{

if(stach!='' && stach!='/')

return 1;

}

else if (curch=='+' || curch=='-')

{

if (stach=='(' || stach==')')

return 1;

}

else if (curch=='(')

{

if (stach==')')

return 1;

}

return 0;

}

void counterPolishexp(char INexp[], int slen, char Outexp[])

{

int i, j, k,pr;

char t;

i=0;

j=k=0;

while (INexp[i]!='=' && i<slen)

{

if (INexp[i]=='(')

StackSymb[k++]=INexp[i];

//iPush((INexp+i));

else if(INexp[i]==')')

{

//if((t=iPop())!=-1)

while((t=StackSymb[k-1])!='(')

{

Outexp[j++]=t;

k--;

}

k--;

}

else if (CheckExpress(INexp[i])) // is oparator

{

// printf("operator %c k=%d\n",INexp[i],k);

while (k)

{

// iPush((INexp+i));

if(pr=PriorChar(INexp[i],StackSymb[k-1]))

break;

else

{

//if ((t=iPop())!=-1)

t=StackSymb[k-1]; k--;

Outexp[j++]=t;

}

} //end while

StackSymb[k++]=INexp[i]; //common process

}

else //if() 变量名

{

// printf("operand %c k=%d\n",INexp[i],k);

Outexp[j++]=INexp[i];

}

i++; //

}

while (k)

{

t=StackSymb[k-1]; k--;

Outexp[j++]=t;

}

Outexp[j]='\0';

}

以上就是关于设计一个多功能计算器<用C语言程序设计>全部的内容,包括:设计一个多功能计算器<用C语言程序设计>、用C语言编写一个简单的计算器1、用C语言编计算器程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/9283438.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存