當前位置:首頁 » 編程語言 » 字元串加減乘除c語言
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

字元串加減乘除c語言

發布時間: 2022-05-14 05:13:16

❶ 怎樣用c語言編寫一個簡單的可以進行加減乘除運算混合運算的計算器

用C語言編寫一個簡單的可以進行加減乘除運算混合運算的計算器的方法:

1、打開visual C++ 6.0-文件-新建-文件-C++ Source File;

❷ c語言中如何隨機輸出加減乘除

給定加減乘除的符號,給一個字元串,然後隨機分配一個數,輸出這個數所對應的字元串中的字元。

#include<stdio.h>

main()

{

float a,b;

char c;

printf("請按照這樣的格式輸入zhuan:a(+,-,*,/)b ");

scanf("%f%c%f",&a,&c,&b);

switch(c)

{

case'+': printf("%f",a+b);break;

case'-':printf("%f",a-b);break;

case'*':printf("%f",a*b);break;

case'/':printf("%f",a/b);break;

default:printf("輸入有誤");

}

}

(2)字元串加減乘除c語言擴展閱讀:

C語言包含的各種控制語句僅有9種,關鍵字也只有32 個,程序的編寫要求不嚴格且以小寫字母為主,對許多不必要的部分進行了精簡。實際上,語句構成與硬體有關聯的較少,且C語言本身不提供與硬體相關的輸入輸出、文件管理等功能,如需此類功能,需要通過配合編譯系統所支持的各類庫進行編程,故c語言擁有非常簡潔的編譯系統。

❸ 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語言怎樣實現計算器加減乘除功能

  1. 我學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語言中如何對字元型進行加減乘除

加減可以,乘除應該也可以。其實字元型做四則運算就是對這個字元的ASCII碼進行運算,所以不用轉換

❻ C語言字元串四則運算的實現!求指導

以前寫過一個,支持四則運算以及括弧運算,採用棧實現
#include<stdio.h>
#include<malloc.h>
#define null 0
#define max 100
typedef struct date /*定義字元棧*/
{
char sk[max];
int top;
}seqstack;
typedef struct da /*定義數據棧*/
{
int sk[max];
int top;
}stack;
void push(seqstack *s,char x) /*進棧*/
{
if(s->top==max-1)
{
printf("out of space.\n");
}
s->top++;
s->sk[s->top]=x;
}
void spush(stack *s,int x) /*進棧*/
{
if(s->top==max-1)
{
printf("sout of space.\n");
}
s->top++;
s->sk[s->top]=x;
}
char pop(seqstack *s ,char c) /*出棧*/
{
if(s->top==-1)
{
printf("no element.\n");return 0;
}
else
{
c=s->sk[s->top];
s->top--;
return c;
}
}
int spop(stack *s ,int c) /*出棧*/
{
if(s->top==-1)
{
printf("sno element.\n");return 0;
}
else
{
c=s->sk[s->top];
s->top--;
return c;
}
}
int pp(char c) /*判斷字元*/
{
switch(c)
{
case '#':return 0;break;
case '+':return 2;break;
case '-':return 2;break;
case '*':return 3;break;
case '/':return 3;break;
case '(':return 1;break;
case ')':return 4;break;
default:return 9;break;
}
}
int yunsuan(int a,char b,int c) /*運算*/
{
switch(b)
{
case '+':return a+c;break;
case '-':return a-c;break;
case '*':return a*c;break;
default:
if(c==0) return 0; //除數為0
return a/c;break;
}
}
char bijiao(seqstack *f,char c) /*比較優先順序*/
{
int m,n;
char w;
m=pp(c);
w=f->sk[f->top];
n=pp(w);
if(n<m) return '>';
return '<';
}
void main()
{
int x,s;
int q=0,w=0;
int p=0; /*標示變數*/
char ch,th='\0',d='\0';
seqstack *h;
h=(seqstack*)malloc(sizeof(seqstack));
if(!h) printf("no creat");
h->top=-1;
stack *g;
g=(stack*)malloc(sizeof(stack));
if(!g) printf("no door");
g->top=-1;
push(h,'#');
ch=getchar();
while(ch!='\n')
{
if(pp(ch)==9)
{
if(p>0)
{
x=spop(g,x);
spush(g,10*x+ch-48);
}
else
{
spush(g,ch-48);
p++;
}
}
if(pp(ch)==1)
{ push(h,ch);p=0;}
if(pp(ch)==4)
{
while(pp(h->sk[h->top])!=1)
{
q=spop(g,q);
w=spop(g,w);
th=pop(h,th);
spush(g,yunsuan(w,th,q));
}
d=pop(h,d);p=0;
}
if(pp(ch)!=9&&pp(ch)!=1&&pp(ch)!=4)
{
switch(bijiao(h,ch))
{
case '>':push(h,ch);p=0;break;
case '<':
while(pp(h->sk[h->top])>=pp(ch))
{
q=spop(g,q);w=spop(g,w);
th=pop(h,th);
spush(g,yunsuan(w,th,q));
}
push(h,ch); p=0;break;
}
}
ch=getchar();
}
while(ch=='\n'&&h->sk[h->top]!='#')
{
q=spop(g,q);w=spop(g,w);
th=pop(h,th);
s=yunsuan(w,th,q);
spush(g,s);
}
printf("the answer is %d\n",g->sk[g->top]);
}

❼ C語言加減乘除運算怎樣用scanf函數輸入

輸入X時會將最後的回車(也是一個字元)存入緩沖區,接著的scanf("%c",&a);實際上是將回車賦給了a,解決辦法,在scanf("%d",&x);後面加上一句getchar();用來吸收回車,問題解決。

❽ 在c語言中字元串不會進行加減乘除等算術運算式嗎

不行,只有int,float等數值類型可以進行算數運算,字元串不可以,但是字元串可以通過加號進行拼接

❾ 加減乘除的c語言編程怎麼寫

c語言的加減乘除可以這樣寫,假設有int變數a,b,c

加法:c=a+b

減法:c=a-b

乘法:c=a*b

除法:c=a/b

❿ C語言:輸入兩個數和一個字元,根據操作符進行加減乘除運算,並輸出結果的表達式。。


#include <stdio.h>


int main(){

int a, b;//兩個數

char op;//操作符


printf("輸入一個表達式,例如5*4: ");

scanf("%d%c%d", &a, &op, &b);

switch(op){

case '+':

printf("%d%c%d=%d", a, op, b, a+b);

break;

case '-':

printf("%d%c%d=%d", a, op, b, a-b);

break;

case '*':

printf("%d%c%d=%d", a, op, b, a*b);

break;

case '/':

printf("%d%c%d=%f", a, op, b, a*1.0/b);

break;

}

return 0;

}