❶ c语言中怎么做一个能做加减乘的计算器
首先,你的scanf要写成这样:scanf("%d",&X);
参考这个程序:
#include<stdio.h>
voidmain(){floatx,y,z;charc;
scanf("%f%c%f",&x,&c,&y);
switch(c){
case'+':z=x+y;break;
case'-':z=x-y;break;
case'*':z=x*y;break;
case'/':z=(y==0)?(0):(x/y);break;
default:z=0;break;
}
printf("%f%c%f=%f ",x,c,y,z);
}
❷ 请问怎么用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语言编写一个只有加减乘除的循环计算器最好有程序分析
#include<stdio.h>//望采纳!!!
intmain(void)
{
doublea,b;
charch,yn;
do{
printf("请输入运算式子:");
scanf("%lf%c%lf",&a,&ch,&b);
switch(ch)
{
case'+':printf("%lf%c%lf=%lf ",a,ch,b,a+b);break;
case'-':printf("%lf%c%lf=%lf ",a,ch,b,a-b);break;
case'/':printf("%lf%c%lf=%lf ",a,ch,b,a/b);break;
case'*':printf("%lf%c%lf=%lf ",a,ch,b,a*b);break;
default:printf("式子输入错误!请以(数1+数2)这种格式输入!");
}
fflush(stdin,NULL);
printf("计算完毕!是否再次使用?y/n:");
scanf("%c",&yn);
if(yn=='y'||yn=='Y')
{printf("欢迎再次使用 ");continue;}
else{printf("感谢使用本计算器!本次服务到此结束! ");break;}
}
while(1);
}
❹ 我只想做一个有加减乘除的简单计算器,用C语言,怎么写谢谢您
#include"stdio.h"
/*预处理命令*/
void main()
/*主函数*/
{
double a,b;
/*双精度实型变量说明*/
char c,d;
/*变量说明*/
do
/*循环体*/
{
printf("input a (-*/)b\n");
/*输入提示*/
scanf("%lf%c%lf",&a,&c,&b);
/*输入算术表达式*/
if(c==' ')
/*判断 */
printf("=%0.2f",a b);
/*输出a b的值*/
else if(c=='-')
/*判断-*/
printf("=%0.2f",a-b);
/*输出a-b的值*/
else if(c=='*')
/*判断**/
printf("=%0.2f",a*b);
/*输出a*b的值*/
else if(c=='/')
/*判断/*/
printf("=%0.3f",a/b);
/*输出a/b*/
else
/*不满足以上条件*/
printf("error");
/*输出错误*/
printf("\n\ninput\n");
/*输入\n*/
scanf("%c",&d);
/*输入符号给d*/
}
/*循环体结束*/
while(d=='\n');
/*循环条件语句*/
}
❺ 用c语言编一个简单的加减乘除的计算器程序 不需要很复杂 只要能进行两个数之间的运算就好了
intmain()
{
charexp[8];
printf("enterexp: ");
scanf("%s",exp);//输入类似于1+12*5这样的式子,一次一个
switch(exp[1]){
case'+':
printf("%d ",exp[0]-'0'+exp[2]-'0'); break;
case'-':
printf("%d ",exp[0]-exp[2]);break;
case'*':
printf("%d ",(exp[0]-'0')*(exp[2]-'0'));break;
case'/':
printf("%f ",(exp[0]-'0')*1.0/(exp[2]-'0')*1.0);//1.0是为了转化成浮点数好得到小数结果
};
return0;
}
❻ 求用C语言编写一个只有加减乘除的计算器,最好有程序分析吧,谢了
#include <stdio.h>
int main()
{
float data1, data2; //定义两个数
char op;
while (3 == scanf("%f%c%f", &data1, &op, &data2) ) //首先输入两个数字和操作符号
{
float result;
printf("%.6lf%c%.6lf=", data1, op, data2);//显示输入的数字和操作符号
switch (op) //根据输入的符号判断要执行的操作
{
case '+':
result = data1 + data2;
break;
case '-':
result = data1 - data2;
break;
case '*':
result = data1 * data2;
break;
case '/':
result = data1 / data2;
break;
default:;
}
printf("%.6lf\n", result);//输出操作结果
}
return 0;
}
❼ 用C语言怎样实现计算器加减乘除功能
我学c++时写的
#include<iostream.h>
#include "string"
int count(int a,int b,char c)
{
if(c=='+') return a+b;
if(c=='-') return a-b;
if(c=='/') return a/b;
if(c=='*') return a*b;
}
void main()
{
char str[100];
cin>>str;
int number[10]={0};
char sign[10];
int i,j=0,k=0,m;
int strlong=strlen(str);//#include "string"
cout<<strlong;
for(i=0;i<strlong;i++)
{
if(str[i]>='0'&&str[i]<='9')
number[j]=number[j]*10+str[i]-48;
else
{j++;
sign[k]=str[i];
k++;}
}
j++;
//cout<<j<<k;
for(i=0;i<j;i++)
cout<<number[i]<<endl;
for(i=0;i<k;i++)
cout<<sign[i]<<endl;
for( i=0;i<k;i++)
{
if(sign[i]=='/'||sign[i]=='*')
{number[i]=count(number[i],number[i+1],sign[i]);
cout<<number[i];
for(m=i;m<k-i;m++)
{sign[m]=sign[m+1];number[m+1]=number[m+2];}
k--;i--;}
}
for( i=0;i<k;i++)
{ if(sign[i]=='+'||sign[i]=='-')
{number[i]=count(number[i],number[i+1],sign[i]);
cout<<number[i];
for(m=i;m<k-i;m++)
{sign[m]=sign[m+1];number[m+1]=number[m+2];}
k--;i--;}
}
for (i=0;i<3;i++)
{cout<<number[i];
}
cout<<k;
}
2.堆栈
#include "string"
#include "iostream"
#include<vector>
#include<list>
#include<cstdlib>
using namespace std;
//自定义类型 用于存储 两种数据类型
class newType
{
public:
bool flag;//true 为f false 为 c
union
{
float f;
char c;
}data;
};
//将字符串转换为 数字数组和字符数组 (通用提取字符串中数字)
bool couvert(string str,vector<float> &numbers,vector<char> &chars,vector<newType> &all)//这里要使用引用
{
int len=str.length();
bool flag=true;
int pos=0;
for(int i=0;i<len;i++)
{
if(str[i]>='0'&&str[i]<='9'||str[i]=='.')
{
if (flag)
{
string substr=str.substr(i,len) ;
float f=atof(substr.data());
numbers.push_back(f);
//添加f到all向量中
newType n;
n.data.f=f;
n.flag=true;
all.push_back(n);
}
flag=false;
}
else
{
//chars.push_back(str[i]);
chars.push_back(str[i]);
newType n;
n.data.c=str[i];
n.flag=false;
all.push_back(n);
flag=true;
}
}//for
return true;
}
//计算没有括号的表达式
bool calculate(vector<float> numbers,
vector<char> chars,float &value)
{
//计算四者表达式 无括号类型 1+2*3+4
int ii=0;
//先计算乘除
while(ii<chars.size())
//注意while(ii<(chars.size()-2)) 和while(ii<chars.size()-2) 区别
{
switch(chars[ii])
{
case '*':
numbers[ii]=numbers[ii]*numbers[ii+1];
numbers.erase(numbers.begin()+ii+1); //移除number[ii]后面的数
chars.erase(chars.begin()+ii); //移除chars[ii]
ii--;
break;
case '/':
numbers[ii]=numbers[ii]/numbers[ii+1];
numbers.erase(numbers.begin()+ii+1);
chars.erase(chars.begin()+ii);
ii--;
break;
}
ii++;
}
//只剩下加减 计算加减
ii=0;
while(ii<chars.size())
//注意while(ii<(chars.size()-2)) 和while(ii<chars.size()-2) 区别
{
switch(chars[ii])
{
case '+':
// cout<<"+::"<<numbers[ii]<<chars[ii]<<numbers[ii+1]<<endl;
numbers[ii]=numbers[ii]+numbers[ii+1];
numbers.erase(numbers.begin()+ii+1); //移除number[ii]后面的数
chars.erase(chars.begin()+ii); //移除chars[ii]
break;
case '-':
// cout<<"-::"<<numbers[ii]<<chars[ii]<<numbers[ii+1]<<endl;
numbers[ii]=numbers[ii]-numbers[ii+1];
numbers.erase(numbers.begin()+ii+1);
chars.erase(chars.begin()+ii);
break;
}
// ii++;
}
value=numbers[0];//得到值
return true;
}
//计算带括号的表达式
int calculate1( vector<newType> all,float &value)
{
int pos=0;
vector<float> numbers;
vector<char> chars;
float va=0;
for(int i=0;i<all.size();i++)
{
if (all[i].flag)//判断是数字还是字符
{
cout<<"数字"<<i<<":"<<all[i].data.f<<endl;
}
else
{
cout<<"字符"<<i<<":"<<all[i].data.c<<endl;
if (all[i].data.c==')') //如果是右括号 将之前的()之间的括号内容
{ //用calculate计算 并替换
for (int j=pos+1;j<i;j++) //参数转换
{
if (all[j].flag)
{
numbers.push_back(all[j].data.f);
} else{
chars.push_back(all[j].data.c);
}
}
calculate(numbers,chars,va);
numbers.clear();
chars.clear();
newType ne;
ne.data.f=va;
all.erase(all.begin()+pos,all.begin()+i+1);
all.insert(all.begin()+pos,ne);
i=pos+1;
}
else if (all[i].data.c=='(')
{
pos=i;//记录此时左括号的位置
}
}//else
}//for
for(int kk=0;kk<all.size();kk++)
{
if (all[kk].flag)
{
numbers.push_back(all[kk].data.f);
} else{
chars.push_back(all[kk].data.c);
}
}
for( i=0;i<all.size();i++)
{
if (all[i].flag)
{
cout<<all[i].data.f<<" ";
} else
{
cout<<all[i].data.c<<" ";
}
}
calculate(numbers,chars,value);
return 1;
} void main()
{
//
string str="10+(2*3+8)+(10*2)";
vector<float> numbers;
vector<char> chars;
vector<newType> all;
couvert(str, numbers, chars,all);
for(int i=0;i<all.size();i++)
{
if (all[i].flag)
{
cout<<all[i].data.f<<" ";
} else
{
cout<<all[i].data.c<<" ";
}
}
float value,value1;
// calculate(numbers,chars,value);
calculate1(all,value1);
cout<<value1;
}
这是我翻家底找到的 .
❽ 用C语言做个简单的计算器 要有加减乘除 先乘后加 先算括号里的
简单的表达式求值,不追求效率的话不需要使用堆栈之类的专业算法,只需要递归算法就足够了:
1.首先编写递归计算没有括号的字符串表达式函数。
算法:从头到尾按运算符优先级次序依次搜索运算符,在这里先搜索乘除符号再搜索加减符号,同优先级的符号则先遇到谁就处理谁,比如先查找乘除运算符,一旦遇到乘或除运算符,就根据运算符的运算规则依次读取操作数进行运算,运算完毕将结果转换成字符串再放回表达式中将本次运算所涉及到的部分覆盖掉,然后继续向后查找并处理乘或除运算符直到结尾,本次处理完毕。按此方式再从头到尾处理加减运算符。如果某次搜索未遇到运算符则表明表达式处理完毕,这时表达式中应该就只有一个数了。
2.编写处理带括号的表达式函数。
方法:从头到尾搜索右括号,找到后再向前找左括号,于是找到表达式中最内层的括号,调用上面的子函数计算其值,用其覆盖所处理的括号部分,本过程递归执行直到没有找到右括号为止,表达式计算完毕。
❾ 用C语言编写一个简单的加减乘除计算器,要求如图
#include<stdlib.h>
#include<string.h>
intCalculate(char*input,float*ret)
{
intreturnRet=0;
floatnum1,num2,symbol;
intlen=strlen(input);
char*num1Str=(char*)malloc(sizeof(char)*len);
char*num2Str=(char*)malloc(sizeof(char)*len);
memset(num1Str,0,len);
memset(num2Str,0,len);
intgetSymbol=0;
for(inti=0,j=0;i<len;i++)
{
if(input[i]=='+'||input[i]=='-'||input[i]=='*'||input[i]=='/')
{
symbol=input[i];
getSymbol=1;
continue;
}
if(getSymbol==0)
num1Str[i]=input[i];
else
num2Str[j++]=input[i];
}
num1=atof(num1Str);
num2=atof(num2Str);
if(symbol=='+')
*ret=num1+num2;
elseif(symbol=='-')
*ret=num1-num2;
elseif(symbol=='*')
*ret=num1*num2;
if(symbol=='/')
{
if(num2!=0)
*ret=num1/num2;
else
returnRet=1;//dataerror
}
free(num2Str);
free(num1Str);
returnreturnRet;
}
intmain(void)
{
floatret;
charinput[100];
memset(input,0,sizeof(input));
scanf("%s",input);
if(Calculate(input,&ret)==0)
printf("%.2f",ret);
else
printf("dataerro");
return0;
}
❿ 用C语言做一个计算器,能实现加减乘除混合运算
用C语言编写一个简单的可以进行加减乘除运算混合运算的计算器的方法:
1、打开visual C++ 6.0-文件-新建-文件-C++ Source File;