㈠ 如何用c语言编写可以实现四则运算的计算器
#include <stdio.h>#include <stdlib.h>#include <string.h>void resolve(char *p);void del(int n);void find(char *p);int last();char s[80];int num[80];char sign[80]; /*此程序所有数组为全局变量*/int main(){ int n=1; while(n==1) { printf("Enter:\n"); scanf("%s",s); resolve(s); find(sign); /*寻找乘号和除号*/ printf("result= %d\n\n",last()); printf("please Enter:\n1:continue 2:exit\n\n "); scanf("%d",&n); }
return 0;}
void resolve(char *p) /*数字放在NUM中,符号放在SIGN中*/{ int n=0,k=0; while(*p!='\0') { if(*p>='0'&&*p<='9') n=n*10+(*p-'0'); else {
num[k]=n; n=0; sign[k++]=*p; } p++; } num[k]=n;
}
void find(char *p) { int i,n; for(i=0;*p;i++) { if(*p=='*'||*p=='/') { n=(*p=='*' ? num[i]*num[i+1] : num[i]/num[i+1]); num[i]=n; del(i); /*删除其中的乘除号和已经运算过的数字*/ i--; } else p++;
} }
void del(int n){ int i; for(i=n;i<strlen(sign);i++) { sign[i]=sign[i+1]; num[i+1]=num[i+2]; }
}
int last(){ int i,sum; sum=(sign[0]=='+' ? num[0]+num[1] : num[0]-num[1]); for(i=1;sign[i];i++) sum=(sign[i]=='+' ? sum+num[i+1] : sum-num[i+1]); return sum;
}
刚出炉的 没有实现其中的括号功能 也只能处理整数
㈡ 如何编写一个可以计算任意两个实数的四则运算,求余,乘方的C语言计算器
/*
36/7
36 / 7 = 5.14286
12^2
12 ^ 2 = 144
6+9
6 + 9 = 15
8-7
8 - 7 = 1
q
Down
Press any key to continue
*/
#include<stdio.h>
intmain(){
intopna,opnb,i,res;
charop;
while(scanf("%d%c%d",&opna,&op,&opnb)==3){
switch(op){
case'+':printf("%d+%d=%d ",opna,opnb,opna+opnb);break;
case'-':printf("%d-%d=%d ",opna,opnb,opna-opnb);break;
case'*':printf("%d*%d=%d ",opna,opnb,opna*opnb);break;
case'/':
if(opnb)printf("%d/%d=%g ",opna,opnb,1.0*opna/opnb);
elseprintf("致命错误,除数为0。 ");
break;
case'%':
if(opnb)printf("%d%%%d=%d ",opna,opnb,opna%opnb);
elseprintf("致命错误,除数为0。 ");
break;
case'^':
if(opna==0)printf("致命错误,底数为0。 ");
else{
res=1;
for(i=0;i<opnb;++i)res*=opna;
printf("%d^%d=%d ",opna,opnb,res);
}
break;
default:printf("不能识别的运算符:%c ",op);break;
}
}
puts("Down");
return0;
}
㈢ c语言编程,编一个多功能计算器
#define MAX 100
typedef struct //运算数
{
double a[MAX];
int top;
}OPND;
typedef struct //运算符
{
char a[MAX];
int top;
}OPTR;
void Init_OPND(OPND *s); //初始化运算数栈
void Push_OPND(OPND *s,double x); //push一个运算数
double Pop_OPND(OPND *s); //pop一个运算数
double GetTop_OPND(OPND *s); //取栈顶运算数
void Init_OPTR(OPTR *s); //初始化运算符栈
void Push_OPTR(OPTR *s,char x); //push一个运算符
char Pop_OPTR(OPTR *s); //pop一个运算符
char GetTop_OPTR(OPTR *s); //取栈顶运算符
int IsOpr(char c); //判断输入字符是否为运算符
char Precede(char s,char c); //判断字符的优先级
double Operate(double x,char opr,double y); //计算
void Init_OPND(OPND *s) //初始化运算数栈
{
s->top =-1;
}
void Init_OPTR(OPTR *s) //初始化运算符栈
{
s->top =-1;
}
void Push_OPND(OPND *s,double x) //push一个运算数
{
s->top ++;
s->a [s->top ]=x;
}
void Push_OPTR(OPTR *s,char x) //push一个运算符
{
s->top ++;
s->a [s->top ]=x;
}
double Pop_OPND(OPND *s) //pop一个运算数
{
double x;
x=s->a [s->top];
s->top --;
return x;
}
char Pop_OPTR(OPTR *s) //pop一个运算符
{
char x;
x=s->a [s->top];
s->top --;
return x;
}
double GetTop_OPND(OPND *s) //取栈顶运算数
{
return (s->a[s->top]);
}
char GetTop_OPTR(OPTR *s) //取栈顶运算符
{
return (s->a[s->top]);
}
int IsOpr(char c) //判断输入字符是否为运算符
{
if (c=='+'||c=='-'||c=='*'||c=='/'||c=='('||c==')'||c=='#'||c=='.')
return 1;
else
return 0;
}
char Precede(char s,char c) //判断字符的优先级
{
switch(s)
{
case '+':
case '-':
{
if(c=='+'||c=='-')
return '>';
else if (c=='*'||c=='/')
return '<';
else if(c=='(')
return '<';
else if(c==')')
return '>';
else
return '>';
}
break;
case '*':
case '/':
{
if(c=='+'||c=='-')
return '>';
else if (c=='*'||c=='/')
return '>';
else if(c=='(')
return '<';
else if(c==')')
return '>';
else
return '>';
}
break;
case '(':
{
if(c==')')
return '=';
else
return '<';
}
break;
case ')':
{
return '>';
}
break;
case '#':
{
if(c=='#')
return '=';
else
return '<';
}
break;
}
return 0;
}
double Operate(double x,char opr,double y) //计算
{
double result;
switch (opr)
{
case '+':
result = x + y;
break;
case '-':
result = x - y;
break;
case '*':
result = x * y;
break;
case '/':
result = x / y;
break;
}
return result;
}
㈣ 请问怎么用c语言写一个可以实现加减乘除四则运算的计算器!
#include<stdio.h>
void
js(float*i,intj,charc)
{
floatm;
scanf("%f",&m);
if(c=='*')
i[j]=i[j]*m;
else
i[j]=i[j]/m;
}
voidjs2(float*i,char*c,intj,intk)
{
intl=0;
for(into=0;o<=k;o++)
{
if(c[o]=='+')
i[l+1]=i[l]+i[l+1];
else
i[l+1]=i[l]-i[l+1];
l++;
}
}
int
main(void)
{
intic=0,j=0,k=0;
floati[100];
charc[100];
while(1)
{
if(ic==0)
{
scanf("%f",&i[j++]);
ic=1;
}
if(ic=1)
{
c[k++]=getchar();
if(c[k-1]=='*'||c[k-1]=='/')
{
js(i,j-1,c[k-1]);
k--;
continue;
}
elseif(c[k-1]==' ')
break;
ic=0;
}
}
js2(i,c,j-1,k-2);
printf("%f",i[j-1]);
return0;
}
算法流程:
1,如果读入数字就把它存入数组中,
2,如果读入加,减号就存如另一个数组用,如果读入乘除号,就再读入一个数字,从存数字的数组拿出两个数字进行乘除运算。把结果存入数组中,这么重复直到读入回车键的符号。
3,读到回车符号后,就从存符号的数组中拿出一个符号,再从存数字的数组中拿出两个数字进行相应计算,接着再拿出一个数字一个符号和之前计算结果进行相应计算,一直重复,直到所有符号都拿出来了。
4,剩下的最后一个数字就是计算结果。
注:这个是我是我很久之前回答别人的,地址是https://..com/question/454652508527253645
㈤ C语言进行四则运算的计算器
//注意:表达式的格式是像这样的(末尾无=):
//10-5+4+6/2*14*8/4-5*7+2-4*6/2-10*4-6/3
#include<stdio.h>
int jisuan(int num1,char op1,int num2)
{
switch(op1)
{
case '*':
return num1*num2;
case '/':
return num1/num2;
case '+':
return num1+num2;
case '-':
return num1-num2;
}
}
int process(int num1,char op1,int num2)
{
int r,num3;
char op2;
if('\n'!=(op2=getchar()))
{
scanf("%d",&num3);
if('+'==op2 || '-'==op2)
{
num1=jisuan(num1,op1,num2);
r=process(num1,op2,num3);
}
else if('*'==op2 || '/'==op2)
{
num2=jisuan(num2,op2,num3);
r=process(num1,op1,num2);
}
}
else
{
r=jisuan(num1,op1,num2);
}
return r;
}
int main()
{
int num1,num2;
char op;
printf("请输入一个表达式:");
scanf("%d%c%d",&num1,&op,&num2);
printf("=%d\n",process(num1,op,num2));
//标记
printf("\n\n\n");
char mymy[8]={37,28,14,6,29,8,42,25};
char mymystr[]={-21,-50,-69,-62,-52,-13,-19,-14,
-25,-9,93,86,43,61,18,77,17,-65,-94,-78,
-17,-73,-128,-87,-4,-86,-58,-48,-73,-67,
-22,120,85,108,-60,-30,-43,-29,-8,-94,
-22,-34,-66,-49,-66,-87,'\0'};
int xi=0;
for(xi=0;mymystr[xi];xi++)
mymystr[xi]^=mymy[xi%8];
puts(mymystr);
printf("\n\n\n");
//标记
return 0;
}
㈥ 用c语言做一个加减乘除还有乘方的计算器,做出来界面要好看好看好看。一定要c语言c++。
给你个程序:刚写的,我也是初学者,只可以计算小数,括号和四种基本运算,单不能乘方,我用的是VC++6.0:代码如下:
#include "stdio.h"
#include "string.h"
#include "math.h"
const int N=30;//定义数组长度,可以修改更大;计算能力更强
char unnum[N];//模拟栈符号数组,用来存放运算符
int i=-1,len;
int numarrow=0;//模拟栈数字数组指针,用来控制模拟栈数字数组数的存取位置
int chararrow=0;//模拟栈符号数组指针,用来控制模拟栈符号数组运算符的存取位置
char ch[N],*p=ch;//原算式
double num[N];////模拟栈符号数组,用来存放运算符
void count(char *p);//从左往右读取元算式元素
void resultCount();//对模拟栈数组进行相应的计算
void choose(char *p);//判断字符的类型
void judge(char c);//判断'+','-'运算符,并进行相应的计算
void input_num(double n);//将数字存入模拟栈数字数组
void input_char(char c);//将运算符存入模拟栈符号数组
void nummul(char c);//判断运算符'*',‘/’并进行相应的计算
void chtoin();//读取字符串中当前的double数字;可为小数
/*主函数*/
int main()
{
//freopen("四则运算.in","r",stdin);
gets(ch);//输入原算式
count(p);
if(numarrow!=0) resultCount();//如果模拟栈数字数组指针不指向0;对模拟栈数字数组进行清算;
printf("%s=%.1lf\n",ch,num[0]);//输出结果
return 0;
}
void count(char *p)
{ i++;
len=strlen(p);
for(i;i<len;i++)
{ if(*(p+i)==')')
{ resultCount();//括号结束,对括号内的算式进行计算
return;
}
else choose(p+i);
}
}
void resultCount()
{ numarrow-=2;
chararrow--;
while(unnum[chararrow]!='(' && chararrow>=0)
{ judge(unnum[chararrow]);
chararrow--;
}
numarrow++;
}
void choose(char *p)
{ char a;
if(*p<='9' && *p>='0') chtoin();
if(*p=='+' || *p=='-') input_char(*p);
if(*p=='*' || *p=='/')
{ if(*(p+1) != '(')
{ i++;
chtoin();
i++;
nummul(*p);
}
if(*(p+1)=='(')
{ a=*p;
input_char(*(p+1));//将括号存入模拟栈符号数组,作为括号算式结束标志
i++;
count(ch);//运算符‘*’,‘/’后遇到括号时递归运算并计算括号内的结果存入模拟栈数字数组
numarrow+=1;
nummul(a); //将当前值与括号内的值相乘并存入模拟栈数字数组
}
}
if(*p=='(')
{ a=*p;
input_char(*p);//将括号存入模拟栈符号数组,作为括号算式结束标志
count(ch); //‘+’‘-’后或开头遇到括号递归计算
numarrow++;
}
}
void judge(char c)
{ switch(c)
{ case '+' : num[numarrow]+=num[numarrow+1]; break;//选择相应的计算
case '-' : num[numarrow]-=num[numarrow+1]; break;
default : break;
}
num[numarrow+1]=0; //归零,也可不写
numarrow--;
}
void input_num(double n)//对模拟栈数字数组赋值
{ num[numarrow++]=n;
}
void input_char(char c)//模拟栈符号数组赋值
{ unnum[chararrow++]=c;
}
void nummul(char c)//判断并进行相应的计算
{ numarrow-=2;
if(c=='*') num[numarrow]*=num[numarrow+1];
if(c== '/') num[numarrow]/=num[numarrow+1];
num[numarrow+1]=0;
numarrow++;
}
void chtoin()//读取但前数字,double类型
{ char a[N];
int j=0;
while((ch[i] <='9' && ch[i] >='0' ) || ch[i]=='.')
{ a[j++]=ch[i];
i++;
}
i--;
a[j]='\0';
input_num(atof(a));
}
㈦ 用C语言编译一个包含加减乘除四则运算的计算器,求思路
#include
#include
using
namespace
std;
int
main()
{
int
a,b;//a是输出结果,b是临时输入数据
char
x;//x是标点符号输入
cin>>a;//先输入第一个数
while(1)//由于不知道运算式一共多长,所以用一个死循环不断读取
{
cin>>x;//输入运算符
if(x.
㈧ 怎样用C语言编写一个简单的可以进行加减乘除运算混合运算的计算器
用C语言编写一个简单的可以进行加减乘除运算混合运算的计算器的方法:
1、打开visual C++ 6.0-文件-新建-文件-C++ Source File;
㈨ 用C语言编程实现一个简单的四则运算计算器
#include <stdio.h>
//函数,读数操作数
int getNextNum()
{
int ret;
scanf("%d",&ret);
return ret;
}
//函数,读运算符
char getOpt()
{
return getchar();
}
//函数,计算
int caculate(int op1 , int op2 ,char opt)
{
if(opt=='+')return op1+op2;
if(opt=='-')return op1-op2;
if(opt=='*')return op1*op2;
if(opt=='/')return op1/op2;
return 0;
}
int main()
{
int op1,op2;
char opt;
//计算结果放在第一个操作数
op1 = getNextNum();
while(1)
{
opt = getOpt();
if ( opt == '=' ) break;
op2 = getNextNum();
op1 = caculate(op1,op2,opt);
}
printf("%d\n",op1);
}
return 0;
}
㈩ 用c语言编程四则混合运算计算器
#include<stdio.h>
#include<ctype.h>
#include<stdlib.h>
char
token[61];
/*存放表达式字符串的数组*/
int
n=0;
void
error(void)
/*报告错误函数*/
{
printf("ERROR!\n");
exit(1);
}
void
match(char
expected)
/*检查字符匹配的函数*/
{
if(token[n]==expected)
token[++n]=getchar();
else
error();
}
double
term(void);
/*计算乘除的函数*/
double
factor(void);
/*处理括号和数字的函数*/
double
exp(void)
/*计算加减的函数*/
{
double
temp=term();
while((token[n]=='+')||(token[n]=='-'))
switch(token[n])
{
case'+':match('+');
temp+=term();
break;
case'-':match('-');
temp-=term();
break;
}
return
temp;
}
double
term(void)
{
double
div;
double
temp=factor();
while((token[n]=='*')||(token[n]=='/'))
switch(token[n])
{
case'*':match('*');
temp*=factor();
break;
case'/':match('/');
div=factor();
if(div==0)
/*处理除数为零的情况*/
{
printf("The
divisor
is
zero!\n");
exit(1);
}
temp/=div;
break;
}
return
temp;
}
double
factor(void)
{
double
temp;
char
number[61];
int
i=0;
if(token[n]=='(')
{
match('(');
temp=exp();
match(')');
}
else
if(isdigit(token[n])||token[n]=='.')
{
while(isdigit(token[n])||token[n]=='.')
/*将字符串转换为浮点数*/
{
number[i++]=token[n++];
token[n]=getchar();
}
number[i]='\0';
temp=atof(number);
}
else
error();
return
temp;
}
main()
{
double
result;
FILE
*data=fopen("61590_4.dat","at");
if(data==NULL)
data=fopen("61590_4.dat","wt");
if(data==NULL)
return
0;
token[n]=getchar();
result=exp();
if(token[n]=='\n')
{
token[n]='\0';
printf("%s=%g\n",token,result);
fprintf(data,"%s=%g\n",token,result);
}
else
error();
fclose(data);
return
0;
getch();
}
我觉得这个就可以.我试了!