当前位置:首页 » 编程语言 » 用c语言编写四则运算

用c语言编写四则运算

发布时间: 2022-04-23 10:52:25

c语言编写程序四则运算法

1234567891011121314151617# include <stdio.h>int main(void){ int a,b,s; char c; scanf("%d%c%d",&a,&c,&b); switch(c) { case '+':s=a+b;break; case '-':s=a-b;break; case '*':s=a*b;break; case '/':s=a/b;break; default:return -1; } printf("%d",s); return 0;}

如果还要判断除数为0的情况 再添个if即可

Ⅱ 用c语言编四则运算

用C++写的,用C的话,函数方面很繁琐...
实现不止是整数,小数也可以,但算式中不要有负数,结果中可以有.
2000字不够用,分两部分,前一部分一些全局变量和类的申明:
#include
<iostream.h>
#include
<string.h>
#include
<stdlib.h>
#include
<math.h>
#define
MAX
100
//定义运算优先顺序数组,1表示优先,0表示相等,-1表示非优先,2表示表达式有误
int
com_value[9][9]=
{
1,1,-1,-1,-1,1,1,1,2,
1,1,-1,-1,-1,1,1,1,2,
1,1,1,1,-1,-1,1,1,2,
1,1,1,1,-1,-1,1,1,2,
1,1,1,1,2,-1,1,1,2,
-1,-1,-1,-1,-1,-1,0,2,2,
1,1,1,1,1,2,1,1,2,
-1,-1,-1,-1,-1,-1,2,0,2,
2,2,2,2,2,2,2,2,2
};
//堆栈类模板
template
<class
type>
class
stack
{
public:
stack(){top=new
type[MAX];};
~stack(){};
type
*top;
public:
void
push(type
e){*top=e;top++;}
type
pop(){top--;return*top;}
type
GetTop(){return
*(top-1);}
int
GetTopValue(type
&e)
{
if(e=='+')return
0;else
if(e=='-')return
1;
else
if(e=='*')return
2;else
if(e=='/')return
3;
else
if(e=='^')return
4;else
if(e=='(')return
5;
else
if(e==')')return
6;else
if(e=='=')return
7;
else
return
8;
}
int
GetTopValue()
{
type
temp=GetTop();
if(temp=='+')return
0;else
if(temp=='-')return
1;
else
if(temp=='*')return
2;else
if(temp=='/')return
3;
else
if(temp=='^')return
4;else
if(temp=='(')return
5;
else
if(temp==')')return
6;else
if(temp=='=')return
7;
else
return
8;
}
type
calculate(char
s)
{
type
b=pop(),a=pop();
if(s=='+')return
a+b;
if(s=='-')return
a-b;
if(s=='*')return
a*b;
if(s=='/')return
a/b;
if(s=='^')return
pow(a,b);
}
};

Ⅲ 用简单的C语言实现带括号的四则运算

#include<stdio.h> /*库文件包含*/

#include<string.h> /*用于字符串操作*/

#include<stdlib.h> /*用于exit函数*/

/**************************************************************************

int check(char *c)

输入参数:

char *c: 输入的字符串

返回参数:

0:字符串中有不符合规定的字符

1: 字符串字符符合规定,没有不符合规定的字符.

功能:

检查字符串中有否除了 0-9, +,-,*,/,(,),之外的其他字符,

如果有,则返回0, 表示出现错误。

若没有,则返回1,表式字符串符合规定。

**************************************************************************/

int check(char *c)

{

int k=0;

while(*c!='')

{

if((*c>='0' && *c<='9') || *c=='+' ||

*c=='-' || *c=='*' || *c=='/' ||

*c=='.' || *c=='(' || *c==')' )

{

}

else

{

printf("input error, there have the char not the math expression char! ");

return 0;

}

if(*c=='(')

k++;

else if(*c==')')

k--;

c++;

}

if(k!=0)

{

printf("input error, there is not have correct bracket '()'! ");

return 0;

}

return 1;

}

Ⅳ 请问怎么用C语言编写四则运算的程序呢

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define size 20

typedef float NUM;

typedef struct
{
NUM data[size];
int top;
}*Space,Lnode;

void begin();
void initialize(Space x,Space y);
void input(Space x,Space y);
int is_operator(char a_operator);
int pushf(Space s,float x);
int pushc(Space s,char x);
int empty(Space s);
int priority(char o);
int popf(Space s,float *x);
int popc(Space s,int *x);
float result(int a_operator,float operand1,float operand2);

main()
{
begin();
system("pause");
}

void begin()
{
Lnode operand,a_operator;//定义两个指向结构体的指针
Space s_operand=&operand,s_operator=&a_operator;
initialize(s_operand,s_operator);//初始化
input(s_operand,s_operator);//开始
}

void initialize(Space s,Space t)//初始化数据栈、运算符栈
{
s->top=0;
t->top=0;
}

void input(Space x,Space y)
{
int i,j,position=0,op=0;
float operand1=0,operand2=0,evaluate=0;//用来储存两个计算数 和 一个结果
char string[50];//所输入的表达式
char temp[50];//用来临时存放小数

printf("请输入表达式: ");
gets(string);

while(string[position]!='\0'&&string[position]!='\n')
{
i=0;
strcpy(temp,"0");

if(is_operator(string[position]))//判断是否为运算符
{
if(!empty(y))
{
while(!empty(y)&&priority(string[position])<=priority(y->data[y->top-1]))//判断优先级
{
popf(x,&operand1);
popf(x,&operand2);
popc(y,&op);
pushf(x,result(op,operand1,operand2));//计算结果
}
}
pushc(y,string[position]);//运算符入栈
position++;
}

while((string[position]!='\0'&&string[position]!='\n')&&(!is_operator(string[position])))//数据存入temp数组
{
temp[i]=string[position];

i++;
position++;
}
pushf(x,atof(temp));//将数组强制转换为浮点型 然后进行入栈操作 x为指向数据栈的指针 atof函数即使强制转换类型
}

while(!empty(y))
{
popc(y,&op);
popf(x,&operand1);
popf(x,&operand2);

pushf(x,result(op,operand1,operand2));
}
popf(x,&evaluate);

printf("结果是 : %f",evaluate);
}

int pushf(Space s,float x)//数据入栈
{
if(s->top==size)
return 0;
s->data[s->top]=x;
s->top++;
return 1;
}

int pushc(Space s,char x)//运算符入栈
{
if(s->top==size)
return 0;
s->data[s->top]=x;
s->top++;
return 1;
}

int popf(Space s,float *x)//数据出栈
{
if(s->top==0)
return 0;
else
{
s->top--;
*x=s->data[s->top];
return 1;
}
}

int popc(Space s,int *x)//运算符出栈
{
if(s->top==0)
return 0;
else
{
s->top--;
*x=s->data[s->top];
return 1;
}
}

int empty(Space s)//判断栈空
{
if(s->top==0)
return 1;
else
return 0;
}

int is_operator(char Operator) //判断是否为运算符
{
switch(Operator)
{
case '+':
case '-':
case '*':
case '/':
return 1;
default:
return 0;
}
}

int priority(char o) //判断运算符的优先级别
{
switch(o)
{
case '+':
case '-':
return 1;
case '*':
case '/':
return 2;
default:
return 0;
}
}

float result(int a_operator,float operand1,float operand2)//计算结果
{
switch(a_operator)
{
case '+':
return operand2+operand1;
case '-':
return operand2-operand1;
case '*':
return operand2*operand1;
case '/':
return operand2/operand1;
}
}

这是用栈写的 没有写输入错误的判断 你自己添加一下吧
我是因为刚好有一个现成的程序

Ⅳ C语言编写四则运算

请先给出明确答复:因为程序规定的是先输入操作符,再输入两个操作数

解释原因:请看下面部分的代码

  1. 第一个scanf("%c",&oper);这一句要求输入一个(注意是一个)字符格式的值,给oper;
  2. 如果你输入一个数字、英文等等,假如你第一个输入的是10,那oper就是1,而不是10,因为%c一次只能读取一个字符;

  3. 接下来,输入第二第三个,程序再往下就会拿oper判断,如果oper等于-号,就会执行减法,如果等于+号就会执行加法;

  4. 所以你输入的操作数是不会匹配任何运算符,就不能进行运算。

有无解决办法:

调换语句顺序:复制第一个printf那一行与第一个scanf那一行,注意这两行printf在scanf的上面,把这两句放到第二个scanf之后,第三个print之前。就能输入 1 空格 + 空格 2 回车,这种的

Ⅵ C语言怎么实现四则运算

我曾用c编了个计算器,支持四则运算,支持括号改变优先级,你看看吧:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#define Esc 27
#define Tab 9

void needle(char* s,char* carriage,int start)//needle意为“用针缝”
{
int size_carriage=(int)strlen(carriage);
int i,j;
for(j=0;j<size_carriage;j++)
{
for(i=(int)strlen(s);i>=start;i--)
s[i+1]=s[i];
s[i+1]=carriage[j];
start=i+2;
}
}

double factorial(double d)//factorial意为“阶乘”
{
return d==0?1:d*factorial(d-1);
}

void handle(char* carriage)//handle意为“处理”
{
void find_start(char*,int*);
char* save1,*save2,ch;
char op[111];
double d1,d2;
int start,i;
find_start(carriage,&start);
ch=carriage[start];
d1=strtod(carriage,&save1);//strtod是库函数,功能是将字符串carriage中出现的第一个浮点数转化为double,并将剩余字符储存在save1中
if(ch=='!')
{
sprintf(op,"%g",factorial(d1));//springf是库函数,功能是将显示在屏幕上的内容储存在op中
strcpy(carriage,op);
return;
}
for(i=0;i<(int)strlen(save1);i++)//对于第一个不是'+'或'-'或数字的字符串,strtod无法作用。所以得去掉诸如"*22"字符串中的'*'
save1[i]=save1[i+1];
d2=strtod(save1,&save2);
switch(ch)
{
case '*':sprintf(op,"%.32g",d1*d2);break;
case '/':sprintf(op,"%.32g",d1/d2);break;
case '+':sprintf(op,"%.16g",d1+d2);break;
case '-':sprintf(op,"%.16g",d1-d2);
}
strcpy(carriage,op);
}

void del(char* s,int start,int end)//delete意为“删除”
{
int i,j;
int size=(int)strlen(s);
for(i=end;i>=start;i--)
for(j=i;j<size;j++)
s[j]=s[j+1];
}

void (char* s,char* carriage,int start,int end)//意为“复制”
{
int i;
for(i=0;start<=end;i++,start++)
carriage[i]=s[start];
carriage[i]='\0';
}

void scissor(char* s,char* carriage,int* start)//scissor意为“用剪刀剪”
{
int sta,end;
for(sta=*start-1;(s[sta]>='0'&&s[sta]<='9')||s[sta]=='.';sta--);
if(sta!=0||s[*start]=='!') //处理式子是-2+3或-2!的特殊情况
sta++;
if(s[*start]=='!')//'!'是单目运算符
end=*start;
else
{
for(end=*start+1;(s[end]>='0'&&s[end]<='9')||s[end]=='.';end++);
if((s[end-1]=='*'||s[end-1]=='/')&&(s[end]=='+'||s[end]=='-'))//处理式子是2*-2等的特殊情况
for(end++;(s[end]>='0'&&s[end]<='9')||s[end]=='.';end++);
end--;
}
(s,carriage,sta,end);
del(s,sta,end);
*start=sta;//记住等下针线函数needle要开始缝的地方
}

void find_start(char* s,int* start)//find_start意为“找到操作符号开始处”
{
int i;
int size=(int)strlen(s);
//由优先级决定从上而下的顺序
for(i=0;i<size;i++)
if(s[i]=='!')
{
*start=i;
return;
}
for(i=0;i<size;i++)
if(s[i]=='*'||s[i]=='/')
{
*start=i;
return;
}
if(s[0]=='+'||s[0]=='-')
{
for(*start=1;(s[*start]>='0'&&s[*start]<='9')||s[*start]=='.';(*start)++);
return;
}
for(i=0;i<size;i++)
if(s[i]=='+'||s[i]=='-')
{
*start=i;
return;
}
}

int judge(char* s)//judge意为“判断”
{
int i;
int size=(int)strlen(s);
for(i=1;i<size;i++)
if(s[i]=='+'||s[i]=='-'||s[i]=='*'||s[i]=='/'||s[i]=='!')
return 1;
return 0;
}

void count(char* s)//count意为“计算”
{
int start,i;
char carriage[555];//carriage意为“运载体”
while(judge(s))//判断式子是否还需要进行运算
{
for(i=0;i<(int)strlen(s);i++)//此循环作用是将式子中出现的'--'替换为'+'
{
for(;s[i]!='-' && i<(int)strlen(s);i++);//循环结束
if(s[i+1]=='-')
{
del(s,i,i+1);
needle(s,"+",i);
}

}
find_start(s,&start);//让下标start指向式子应该最先开始处理的运算符
scissor(s,carriage,&start);//用剪刀scissor将start指向的运算符及相对应的操作数剪下并储存在运载体carriage上
handle(carriage);//处理该运载体,并将运载体上运载的式子的计算结果储存在运载体上
needle(s,carriage,start);//见函数simplify中的说明
}
}

void simplify(char* s)//simplify意为“简化”,即将括号去除
{
char carriage[555];//carriage意为“运载体”
int start,end,i;
int size=(int)strlen(s);
while(1)
{
for(i=0;s[i] != '(' && i<size;i++);//注意这里末尾是分号
if(i==size)
break;//说明式子已不含括号,简化完成
for(end=0;s[end] != ')';end++);//使end下标指向式子中第一个出现')'的地方
end--;
for(start=end;s[start] != '(';start--);//寻找与上面一个')'配对的'('
start++;
(s,carriage,start,end);//将括号里的内容复制给运载体carriage
del(s,start-1,end+1);//删除整个括号及其里面的内容
count(carriage);//计算运载体运载的表达式,运算结果储存在运载体上
needle(s,carriage,start-1);//将运载体运载过来的结果用针线needle缝在刚才删除式子s括号及其内容的地方
}
}

int main()
{
int i=0;
char s[555],ch;
puts(" 本程序不对用户输入数据进行检测:");
puts(" 即用户应输入规范的计算式,包括分母不能为0:");
puts(" 式子不能含有空格及其他非计算字符;");
puts(" 按任意一个键开始,按回车键显示运算结果;");
while(1)
{
i++;
ch=getch();
if(Esc==ch)
break;
if(Tab==ch)
{
system("cls");//清除当前屏幕
puts("显示运算结果后:按“Esc”键退出,按“Tab”键清除当前屏幕");
}
if(i==1)
{
system("cls");
puts("显示运算结果后:按“Esc”键退出,按“Tab”键清除当前屏幕");
}
puts("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
gets(s);
simplify(s);
count(s);
puts(s);
//实验数据:23.243*(5!-23.123/.133+(2!-13/13.23)*(2!-.235)-((4!-20)!/2!)-32*(3!+2.23/(2*3)!))
//其正确结果是:-5953.9401265774754346182917611489
}
puts("谢谢使用!\n有问题可加q问我:281754179");
getch();
return 0;
}

我记得学了数据结构后我又重新用栈写了个,容错能力会更好,上面的代码可以改进很多,也只是给你一个思路罢了

Ⅶ 怎么用C语言编写一个大整数的四则运算器,求解(急!!)

1.打开CodeBlocks,创建一个新的空白文件,定义头文件和主要功能,然后写程序的主体:

Ⅷ c语言怎么用switch语句编写四则运算

switch 是一个开关语句,和case配套使用, 和if else 判断语句差不多, switch 语句是用于多分支语句进行条件判断。下例为用switch语句编写的四则运算:

#include <stdio.h>
void main()
{
double N1,N2;
char Operation;
printf("输入运算的两个数");
scanf("%lf%lf",&N1,N2);
printf("请输入运算符(+,-,*,/):");
switch(Operation)
{
case '+':printf("%lf%c%lf=%lf",N1,N2,Operation,N1+N2);
break;
case '-':printf("%lf%c%lf=%lf",N1,N2,Operation,N1-N2);
break;
case '*':printf("%lf%c%lf=%lf",N1,N2,Operation,N1*N2);
break;
case '/':printf("%lf%c%lf=%lf",N1,N2,Operation,N1/N2);
break;
}
}

Ⅸ 用c语言编写四则运算,急呀!越简单越好

用纯粹的C语言实现,代码如下:

#include<stdio.h>
intmain()
{
doublea,b;
scanf("%lf%lf",&a,&b);
printf("a+b=%lf,a-b=%lf,a*b=%lf",a+b,a-b,a*b);
if(b==0)
printf(",error! ");
else
printf(",a/b=%lf ",a/b);
return0;
}

Ⅹ 自己编写的C语言四则运算

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int add(int num1,int num2)//加法
{
return num1+num2;
}
int subtraction(int num1,int num2)//减法
{
return num1-num2;
}
int mul(int num1,int num2)//乘法
{
return num1*num2;
}
float divis(int num1,int num2)//除法
{
return ((int)(((float)num1/num2)*100+0.5))/100.0;
}
int main()
{
int type = -1;
int data = -1;
int choice,num1,num2,results;
float div_result;
int right = 0;
int wrong = 0;
char ch;
printf("欢迎进入四则运算题,现在开始爆发你的小宇宙吧!\n");
srand((unsigned int)time(NULL));
while(1)
{
printf("请选择运算类型:1.加法 2.减法 3.乘法 4.除法(保留两位小数)\n");
scanf("%d",&choice);
printf("请选择位数:1.一位数 2.两位数\n");
scanf("%d",&data);
switch (choice)
{
case 1:
if(data == 1)
{
num1 = rand()%10;
num2 = rand()%10;
printf("%d + %d=__?__\n",num1,num2);
scanf("%d",&results);
if(results == add(num1,num2))
{
printf("回答正确!\n");
right++;
}
else
{
printf("回答错误!\n");
wrong++;
}
printf("是否继续?y/n\n");
getchar();
scanf("%c",&ch);
if(ch == 'y')
break;
else if(ch == 'n')
goto end;
}
else if (data == 2)
{
num1 = rand()%100;
num2 = rand()%100;
printf("%d + %d=__?__\n",num1,num2);
scanf("%d",&results);
if(results == add(num1,num2))
{
printf("回答正确!\n");
right++;
}
else
{
printf("回答错误!\n");
wrong++;
}
printf("是否继续?y/n\n");
getchar();
scanf("%c",&ch);
if(ch == 'y')
break;
else if(ch == 'n')
goto end;
}
break;
case 2:
if(data == 1)
{
num1 = rand()%10;
num2 = rand()%10;
printf("%d - %d=__?__\n",num1,num2);
scanf("%d",&results);
if(results == subtraction(num1,num2))
{
printf("回答正确!\n");
right++;
}
else
{
printf("回答错误!\n");
wrong++;
}
printf("是否继续?y/n\n");
getchar();
scanf("%c",&ch);
if(ch == 'y')
break;
else if(ch == 'n')
goto end;
}
else if (data == 2)
{
num1 = rand()%100;
num2 = rand()%100;
printf("%d - %d=__?__\n",num1,num2);
scanf("%d",&results);
if(results == subtraction(num1,num2))
{
printf("回答正确!\n");
right++;
}
else
{
printf("回答错误!\n");
wrong++;
}
printf("是否继续?y/n\n");
getchar();
scanf("%c",&ch);
if(ch == 'y')
break;
else if(ch == 'n')
goto end;
}
break;
case 3:
if(data == 1)
{
num1 = rand()%10;
num2 = rand()%10;
printf("%d * %d=__?__\n",num1,num2);
scanf("%d",&results);
if(results == mul(num1,num2))
{
printf("回答正确!\n");
right++;
}
else
{
printf("回答错误!\n");
wrong++;
}
printf("是否继续?y/n\n");
getchar();
scanf("%c",&ch);
if(ch == 'y')
break;
else if(ch == 'n')
goto end;
}
else if (data == 2)
{
num1 = rand()%100;
num2 = rand()%100;
printf("%d * %d=__?__\n",num1,num2);
scanf("%d",&results);
if(results == mul(num1,num2))
{
printf("回答正确!\n");
right++;
}
else
{
printf("回答错误!\n");
wrong++;
}
printf("是否继续?y/n\n");
getchar();
scanf("%c",&ch);
if(ch == 'y')
break;
else if(ch == 'n')
goto end;
}
break;
case 4:
if(data == 1)
{
num1 = rand()%10;
num2 = rand()%10+1;
printf("%d / %d=__?__\n",num1,num2);
scanf("%f",&div_result);
if(div_result == divis(num1,num2))
{
printf("回答正确!\n");
right++;
}
else
{
printf("回答错误!\n");
wrong++;
}
printf("是否继续?y/n\n");
getchar();
scanf("%c",&ch);
if(ch == 'y')
break;
else if(ch == 'n')
goto end;
}
else if (data == 2)
{
num1 = rand()%100;
num2 = rand()%100+1;
printf("%d / %d=__?__\n",num1,num2);
scanf("%f",&div_result);
if(div_result == divis(num1,num2))
{
printf("回答正确!\n");
right++;
}
else
{
printf("回答错误!\n");
wrong++;
}
printf("是否继续?y/n\n");
getchar();
scanf("%c",&ch);
if(ch == 'y')
break;
else if(ch == 'n')
goto end;
}
break;
default :
printf("输入错误!\n");
break;
}
}
end:
printf("回答正确%d题,回答错误%d题\n",right,wrong);
printf("\n====================谢谢光临====================!\n");
system("pause");
return 0;
}
//注意除法是采用四舍五入的,有什么不明白的再问吧,望采纳!

热点内容
网卡访问 发布:2025-05-18 03:35:04 浏览:504
接收和发送服务器地址 发布:2025-05-18 03:33:48 浏览:365
ef数据库查询数据 发布:2025-05-18 03:29:36 浏览:668
百度云下载文件夹 发布:2025-05-18 03:17:33 浏览:674
php云开发 发布:2025-05-18 03:12:41 浏览:447
sql语句显示表 发布:2025-05-18 03:12:30 浏览:690
数据库系统的例子 发布:2025-05-18 03:02:42 浏览:191
数字化储存与编译是什么 发布:2025-05-18 02:56:55 浏览:217
个人网站模板源码 发布:2025-05-18 02:51:17 浏览:490
主服务器ip地址 发布:2025-05-18 02:46:29 浏览:856