当前位置:首页 » 编程语言 » 字符串加减乘除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;

}