㈠ 用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語言中如何實現加減乘除運算
實現方法如下:
讀入的時候用%x讀入,然後在程序裡面直接用+,-,*,/運算就行了,輸出的時候再用%x。
㈢ c語言實現簡單的加減乘除
1、打開C-Free5.0新建一個空白頁面,然後將C語言的基礎格式寫完,注意格式縮進。如下圖所示。
㈣ C語言兩數加減乘除的方法
這是一個例子,看看能否幫上你。#include <stdio.h>
#include <stdlib.h>
#include <conio.h>int getOption (void);
void getData (float* num1, float* num2);
float calc (int option, float num1, float num2);
float add (float num1, float num2);
float sub (float num1, float num2);
float mul (float num1, float num2);
float divs (float num1, float num2);
void prfloatData (float nun1, float num2, int option, float result); int main (void)
{
int option;
float num1;
float num2;
float result; while (1)
{
system("cls");
option = getOption();
if (option==5)
{
break;
}
else if(option>0&&option<5)
{
printf("%d\n",option);
getData (&num1, &num2);
result = calc (option, num1, num2);
prfloatData (num1, num2, option, result);
}
printf("\t請按任意鍵繼續");
getch();
fflush(stdin);
}
return 0;
} int getOption (void)
{
float option; printf("\t\t********************************");
printf("\n\t\t\t * MENU *");
printf("\n\t\t\t");
printf("\n\t\t\t 1. ADD ");
printf("\n\t\t\t 2. SUBTRACT ");
printf("\n\t\t\t 3. MULTIPLY ");
printf("\n\t\t\t 4. DIVIDE");
printf("\n\t\t\t 5. RETURN\n");
printf("\n\t\t********************************"); printf("\n\n\tPlease type your choice ");
printf("and key return:");
//scanf ("%f", &option);
option = getch()-48;
return option;
} void getData (float* a, float* b)
{
printf("\tPlease enter two floateger numbers:");
scanf ("%f %f", a, b);
return;
} float calc (int option, float num1, float num2)
{
float result; switch(option)
{
case 1 : result = add (num1, num2);
break;
case 2 : result = sub (num1, num2);
break;
case 3 : result = mul (num1, num2);
break;
case 4 : if (num2 == 0.0)
{
printf("\n\a\aError:");
printf("division by zero\n");
exit (100);
}
else
result = divs (num1, num2);
break;
default: printf("\aOption not available\n");
exit (101);
}
return result;
} float add (float a, float b)
{
return a+b;
} float sub (float a, float b)
{
return a-b;
} float mul (float a, float b)
{
return a*b;
} float divs (float a, float b)
{
return a/b;
} void prfloatData (float a, float b, int option, float result)
{
switch(option)
{
case 1 : printf("\n\t%6.2f + %6.2f = %6.2f\n", a, b, result);
break;
case 2 : printf("\n\t%6.2f - %6.2f = %6.2f\n", a, b, result);
break;
case 3 : printf("\n\t%6.2f * %6.2f = %6.2f\n", a, b, result);
break;
case 4 : printf("\n\t%6.2f / %6.2f = %6.2f\n", a, b, result);
break;
default: printf("\n\t\a\a未知錯誤!\n");
exit (102);
}
return;
}
㈤ C語言實現加減乘除運算
按照你的程序運行後。。。在輸入c值的時候
程序直接結束了。。。還有就是每個case語句後記著加上break跳出不過也有不過根據具體需要也可以不加break;但是你的這個程序需要加上break;
原因是:回車符也是字元,所以你按回後,程序以為是輸入了c的值了,而在輸入b值成功是因為
回車符不是數字形式的。
以下是我改過的程序,編譯運行都很好的
#include
#include
void main()
{
float a,b;
char c;
printf("\n input a:");
scanf("%f",&a);
printf("\n input b:");
scanf("%f",&b);
//這種情況經常遇到。。。。輸入完後回車被下一個scanf("%c",&c)捕獲了。
//因為回車符也是字元,所以你按回車後,程序以為是輸入了c的值了
//所以加上下面一行,把回車符取走就可以了。。。。
getchar();
printf("\n input c:");
scanf("%c",&c);
//printf("\n%c",c);
switch(c)
{
case '+': printf("a+b=%f",a+b);break;
case '-': printf("a-b=%f",a-b);break;
case '*': printf("a*b=%f",a*b);break;
case '/': printf("a/b=%f",a/b);break;
default: break;
}
//為了好看
printf("\n");
}
㈥ C語言計算加減乘除
簡單寫了一個如下:
#include<stdio.h>
#include<string.h>
intmain()
{
doublea,b;
charop;
scanf("%lf%c%lf",&a,&op,&b);
if(op=='+'){
printf("%g+%g=%g",a,b,a+b);
}
elseif(op=='-'){
printf("%g-%g=%g",a,b,a-b);
}
elseif(op=='*'){
printf("%g*%g=%g",a,b,a*b);
}
elseif(op=='/'){
printf("%g/%g=%g",a,b,a/b);
}
return0;
}
㈦ C語言數組里的元素怎麼加減乘除
你的數組越界了,把小於等於3改成小於3
㈧ c語言 加減乘除 順序
先加減後乘除。
C語言中的加號、減號與數學中的一樣,乘號、除號不同;另外C語言還多了一個求余數的運算符,就是 %。
不同類型的除數和被除數會導致不同類型的運算結果:
當除數和被除數都是整數時,運算結果也是整數;如果不能整除,那麼就直接丟掉小數部分,只保留整數部分,這跟將小數賦值給整數類型是一個道理。一旦除數和被除數中有一個是小數,那麼運算結果也是小數,並且是 double 類型的小數。
(8)c語言的加減乘除怎麼算擴展閱讀
取余,也就是求余數,使用的運算符是 %。C語言中的取余運算只能針對整數,也就是說,% 的兩邊都必須是整數,不能出現小數,否則編譯器會報錯。
另外,余數可以是正數也可以是負數,由 % 左邊的整數決定:
如果 % 左邊是正數,那麼余數也是正數;
如果 % 左邊是負數,那麼余數也是負數。
㈨ 怎樣用C語言編寫一個簡單的可以進行加減乘除運算混合運算的計算器
用C語言編寫一個簡單的可以進行加減乘除運算混合運算的計算器的方法:
1、打開visual C++ 6.0-文件-新建-文件-C++ Source File;
㈩ C語言中16進制之間的加減乘除運算怎麼做
可以參考下面的代碼:
int a,b;
scanf("%x%x",&a,&b);
printf("%x %x ",a+b,a-b);
輸入:9 7
輸出:
10
2
(10)c語言的加減乘除怎麼算擴展閱讀:
C語言fmod()函數:求x/y的余數(針對浮點數)
C語言acos()函數:求反餘弦
C語言asin()函數:求反正弦
C語言atan()函數:求反正切
C語言atan2()函數:求x/y的反正切值
if:條件語句,後面不需要放分號。(K&R時期引入)
else:條件語句否定分支(與if連用)。(K&R時期引入)
switch:開關語句(多重分支語句)。(K&R時期引入)