当前位置:首页 » 编程语言 » c语言编程四则运算法
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言编程四则运算法

发布时间: 2022-03-04 05:24:04

㈠ 请问怎么用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语言编写程序四则运算法则

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语言编写四则运算

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

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

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

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

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

有无解决办法:

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

㈣ 用简单的c语言编写四则运算题

这个很简单啊。

假设你已经输入写好了,然后制定的运算种类存在int op里面,int x表示数的位数

那么

if (x==1) {a=rand()%9+1;b=rand()%9+1;} else {a=rand()%90+10;b=rand()%90+10;} 随机生成两个数

然后if (op==0) c=a+b;if (op==1) c=a-b;if (op==2) c=a*b;if (op==3) c=a/b;电脑计算出答案

然后你把a,b运算符号都输出,然后读入用户的答案,判断是否和c一致就可以了。

比如输入到d。假设规定用户输入-1表示结束。

那么就if (d==-1) break。整个过程写在一个循环里面就行了。

if (c==d) ct1++; else ct2++; 记录对错次数

最后输出一下ct1和ct2就可以了。


最后大致写下总的。

ct1=ct2=0;
while(1)
{
input();//你自己完成输入。
if(x==1){a=rand()%9+1;b=rand()%9+1;}else{a=rand()%90+10;b=rand()%90+10;}
if(op==0)c=a+b;if(op==1)c=a-b;if(op==2)c=a*b;if(op==3)c=a/b;
output(a,b,op);//你自己完成以下输出a,b和计算符号。以及提示语之类的
readfromuser(d);//你自己看看怎么从用户这边读入,并且判断是否是退出之类的。
if(isexit(d))break;//如果你自己判断出来用户要退出就退出。
if(c==d)ct1++;ct2++;
}
outputscore(ct1,ct2);//输出一下分数。


输入输出函数我就不具体写了,你可能想完成的更美工一点之类的,但是大致流程就这样子。

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

嵌套。检测第一个操作数,运算符,第二个操作数。 当运算符为 除号时,判断除数是否为零。可以看书 谭浩强的《C程序设计》 多看看就懂了。

㈥ C语言编程问题。实现普通四则运算

#include<stdio.h>
main()
{
inti=1,flag=0;
doublea=0,b=0,result=0;
charsym;
printf("(%d) ",i);
scanf("%lf%c%lf",&a,&sym,&b);
while(sym!='#')
{
switch(sym)
{
case'+':
result=a+b;
break;
case'-':
result=a-b;
break;
case'*':
result=a*b;
break;
case'/':
result=a/b;
break;
default:
if(b==0)flag=2;
}
if(flag==0)
{
printf("%lf ",result);
i++;
}
elseflag=2;
printf("(%d) ",i);
scanf("%lf%c%lf",&a,&sym,&b);
}
}

楼主程序实现能力有待提升啊

㈦ 用c语言编程四则混合运算计算器

#include<stdio.h>
#include<ctype.h>
#include<stdlib.h>
char
token[61];
/*存放表达式字符串的数组*/
int
n=0;
void
error(void)
/*报告错误函数*/
{
printf("ERROR!\n");
exit(1);
}
void
match(char
expected)
/*检查字符匹配的函数*/
{
if(token[n]==expected)
token[++n]=getchar();
else
error();
}
double
term(void);
/*计算乘除的函数*/
double
factor(void);
/*处理括号和数字的函数*/
double
exp(void)
/*计算加减的函数*/
{
double
temp=term();
while((token[n]=='+')||(token[n]=='-'))
switch(token[n])
{
case'+':match('+');
temp+=term();
break;
case'-':match('-');
temp-=term();
break;
}
return
temp;
}
double
term(void)
{
double
div;
double
temp=factor();
while((token[n]=='*')||(token[n]=='/'))
switch(token[n])
{
case'*':match('*');
temp*=factor();
break;
case'/':match('/');
div=factor();
if(div==0)
/*处理除数为零的情况*/
{
printf("The
divisor
is
zero!\n");
exit(1);
}
temp/=div;
break;
}
return
temp;
}
double
factor(void)
{
double
temp;
char
number[61];
int
i=0;
if(token[n]=='(')
{
match('(');
temp=exp();
match(')');
}
else
if(isdigit(token[n])||token[n]=='.')
{
while(isdigit(token[n])||token[n]=='.')
/*将字符串转换为浮点数*/
{
number[i++]=token[n++];
token[n]=getchar();
}
number[i]='\0';
temp=atof(number);
}
else
error();
return
temp;
}
main()
{
double
result;
FILE
*data=fopen("61590_4.dat","at");
if(data==NULL)
data=fopen("61590_4.dat","wt");
if(data==NULL)
return
0;
token[n]=getchar();
result=exp();
if(token[n]=='\n')
{
token[n]='\0';
printf("%s=%g\n",token,result);
fprintf(data,"%s=%g\n",token,result);
}
else
error();
fclose(data);
return
0;
getch();
}
我觉得这个就可以.我试了!

㈧ C语言编程四则运算计算题

在每个scanf()函数后面加一句:
getchar();
记住每一句后面都要加哦
如果正确了,再追问

㈨ 四则运算之加减法--C语言编程

简单示例如下:

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

楼主问用C语言编写,1楼的用C++怎么编写啊

我的C语言代码如下:

#include<stdlib.h>
#include<stdio.h>
#include<time.h>
#include <math.h>
#include <conio.h>

void main()
{ int s,d=0;
int a,b,c,z,v,m;
char ch[4]={'+','-','x','/'};
srand((unsigned)time(NULL));
m=100;
b=rand()%m;
printf("%d ",b);
z=b;
for(s=0;s<3;s++)
{a=rand()%4;b=rand()%m; <br/>printf("%c %d ",ch[a],b); <br/>if (a==0) {v=z+b;z=b;}
if (a==1) {v=z-b;z=b;}
if (a==2) {v=z*b;z=b;}
if (a==3) {v=z/b;z=b;}
}
printf("= ");
loop: scanf("%d",&c);
fflush(stdin);
if (c==v) {printf("OK!");goto end;}
while (c!=v && d++!=2)
{printf("it does not matter and try it again: "); <br/>goto loop; <br/>}

printf("the result is : %d",v);

end:getch();
}