❶ 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;