㈠ 請問怎麼用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語言編寫四則運算
請先給出明確答復:因為程序規定的是先輸入操作符,再輸入兩個操作數
解釋原因:請看下面部分的代碼
- 第一個scanf("%c",&oper);這一句要求輸入一個(注意是一個)字元格式的值,給oper;
如果你輸入一個數字、英文等等,假如你第一個輸入的是10,那oper就是1,而不是10,因為%c一次只能讀取一個字元;
接下來,輸入第二第三個,程序再往下就會拿oper判斷,如果oper等於-號,就會執行減法,如果等於+號就會執行加法;
所以你輸入的操作數是不會匹配任何運算符,就不能進行運算。
有無解決辦法:
調換語句順序:復制第一個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();
}