‘壹’ c语言则么怎么实现四则运算
#include<stdio.h>
#include<conio.h>
void main()
{
float a=0,b=0,c=0,key;
char d;
printf("输入简单的四则运算表达式:\n");
scanf("%f%c%f",&a,&d,&b);
switch(d)
{
case'+': c=a+b;break;
case'-': c=a-b;break;
case'x':
case'*': c=a*b;break;
case'/': if(b>0) c=a/b;break;
default:break;
}
printf("%g%c%g=%g\n",a,d,b,c);
getchar();
}
‘贰’ 请大家帮忙用C语言编写一个四则运算程序
~~rand()%100用来产生0~100以内的随机数,不能每次都存入一样的数吧,所以用随机数好些,。。,,我学的也是谭浩强的,没有rand()用于产生随机数,cystem(“pause”)用于暂停,相当于getchar()或getch(),cystem("cls")用于清屏,可以去掉,这些东西都是我网络上百得。,。呵呵谭浩强书上确实没有这些东西。。
把问题先想清楚是一种很好的习惯,,呵呵
/* Note:Your choice is C IDE */
#include "stdio.h"
#include"windows.h"
int right=0,wrong=0;
void add()
{
int a,b,c;
a=rand()%100;
b=rand()%100;
printf("请回答:%d+%d=",a,b);
scanf("%d",&c);
if(a+b!=c){printf("回答错误\n");wrong++;}
else {printf("回答正确\n");right++;}
}
void minu()
{
int a,b,c;
a=rand()%100;
b=rand()%100;
printf("请回答:%d-%d=",a,b);
scanf("%d",&c);
if(a-b!=c){printf("回答错误\n");wrong++;}
else {printf("回答正确\n");right++;}
}
void mul()
{
int a,b,c;
a=rand()%100;
b=rand()%100;
printf("请回答:%d*%d=",a,b);
scanf("%d",&c);
if(a*b!=c){printf("回答错误\n");wrong++;}
else {printf("回答正确\n");right++;}
}
void di()
{
int a,b,c;
a=rand()%100;
b=rand()%100;
printf("请回答:%d/%d=",a,b);
scanf("%d",&c);
if(a/b!=c){printf("回答错误\n");wrong++;}
else {printf("回答正确\n");right++;}
}
void main()
{
int choise,con=0;
printf("\n\n\t\t欢迎光临我的C语言四则运算程序\n");
system("pause");
system("cls");
while(1)
{
printf("\n\n\t\t请选择:\n加(输入1)\n减(输入2)\n乘(输入3)\n除(输入4)\n");
if(con==0)scanf("%d",&choise);
switch(choise)
{
case 1:add();break;
case 2:minu();break;
case 3:mul();break;
case 4:di();break;
}
printf("请问您想继续进行这个运算还是重新选择其他运算还是退出程序?\n继续(输入1),重新(输入2),退出(输入3)");
scanf("%d",&con);
if(con==1)con=1;
if(con==2)con=0;
if(con==3)break;
}
printf("您总做了%d个题,正确%d的道,错误%d道!\n",right+wrong,right,wrong);
system("pause");
}
编译器不同可能不能运行,这是通用的VC6.0的编译器。另外,采用了 100之内的随机数做的题目
‘叁’ C语言四则运算
你可以才网络文库里找找,应该有很多例子的,也比较详细,不需要在这里悬赏
‘肆’ 如何用c语言编写可以实现四则运算的计算器
#include <stdio.h>#include <stdlib.h>#include <string.h>void resolve(char *p);void del(int n);void find(char *p);int last();char s[80];int num[80];char sign[80]; /*此程序所有数组为全局变量*/int main(){ int n=1; while(n==1) { printf("Enter:\n"); scanf("%s",s); resolve(s); find(sign); /*寻找乘号和除号*/ printf("result= %d\n\n",last()); printf("please Enter:\n1:continue 2:exit\n\n "); scanf("%d",&n); }
return 0;}
void resolve(char *p) /*数字放在NUM中,符号放在SIGN中*/{ int n=0,k=0; while(*p!='\0') { if(*p>='0'&&*p<='9') n=n*10+(*p-'0'); else {
num[k]=n; n=0; sign[k++]=*p; } p++; } num[k]=n;
}
void find(char *p) { int i,n; for(i=0;*p;i++) { if(*p=='*'||*p=='/') { n=(*p=='*' ? num[i]*num[i+1] : num[i]/num[i+1]); num[i]=n; del(i); /*删除其中的乘除号和已经运算过的数字*/ i--; } else p++;
} }
void del(int n){ int i; for(i=n;i<strlen(sign);i++) { sign[i]=sign[i+1]; num[i+1]=num[i+2]; }
}
int last(){ int i,sum; sum=(sign[0]=='+' ? num[0]+num[1] : num[0]-num[1]); for(i=1;sign[i];i++) sum=(sign[i]=='+' ? sum+num[i+1] : sum-num[i+1]); return sum;
}
刚出炉的 没有实现其中的括号功能 也只能处理整数
‘伍’ 关于c语言四则运算的简单编程
大致看了下
你if后面有2个语句
得加花括号
if
(c=43)
{answer=a+b;printf("answer=%d",answer);}
ni
shishi
kan
对了
还要改等号
‘陆’ 请问怎么用c语言程序编写输入任意数字进行四则运算呢
#include<stdio.h>
struct
{
int op;
double num;
}ret[200];
int topa,topb;
int opstk[200];
int level[200];
double cal(double a,double b,char op)
{
if(op=='+')
return a+b;
if(op=='-')
return a-b;
if(op=='*')
return a*b;
if(op=='/')
return a/b;
}
int main()
{
int i,temp,sign,j,x,y;
char s[200];
level['+']=level['-']=0;
level['*']=level['/']=1;
level['(']=level[')']=2;
while(scanf("%s",s)!=EOF)
{
topa=topb=0;
for(i=0;s[i];i++)
{
if(s[i]=='(')
{
opstk[topa++]='(';
}
else if(s[i]==')')
{
while(topa>0&&opstk[topa-1]!='(')
{
topa--;
ret[topb++].op=opstk[topa];
}
topa--;
}
else if(s[i]=='+'||s[i]=='*'||s[i]=='/')
{
while(topa>0&&opstk[topa-1]!='('&&level[opstk[topa-1]]>=level[s[i]])
{
topa--;
ret[topb++].op=opstk[topa];
}
opstk[topa++]=s[i];
}
else if(s[i]=='-')
{
if((i>0&&s[i-1]=='(')||i==0)
{
sign=-1;
temp=0;
for(j=i+1;s[j]&&s[j]>='0'&&s[j]<='9';j++)
temp=temp*10+s[j]-'0';
ret[topb].op=-1;
ret[topb++].num=sign*temp;
i=j-1;
}
else
{
while(topa>0&&opstk[topa-1]!='('&&level[opstk[topa-1]]>=level['-'])
{
topa--;
ret[topb++].op=opstk[topa];
}
opstk[topa++]='-';
}
}
else if(s[i]>='0'&&s[i]<='9')
{
temp=0;
for(j=i;s[j]&&s[j]>='0'&&s[j]<='9';j++)
temp=temp*10+s[j]-'0';
ret[topb].op=-1;
ret[topb++].num=temp;
i=j-1;
}
}
while(topa>0)
{
topa--;
ret[topb++].op=opstk[topa];
}
for(i=0;i<topb;i++)
{
if(ret[i].op=='+'||ret[i].op=='-'||ret[i].op=='*'||ret[i].op=='/')
{
for(y=i-1;y>=0;y--)
if(ret[y].op==-1)
break;
for(x=y-1;x>=0;x--)
if(ret[x].op==-1)
break;
ret[i].num=cal(ret[x].num,ret[y].num,ret[i].op);
ret[i].op=-1;
ret[x].op=0;
ret[y].op=0;
}
}
printf("%.4lf\n",ret[topb-1].num);
}
return 0;
}
‘柒’ 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语言实现多个操作数的基本四则运算
#include <stdlib.h>
#include <math.h>
#include <conio.h>
#include <stdio.h>
#include <string.h>
void SplitPrem(char *str);
float Combine();
char str[200],str1[200],str2[50][30],operate_c[50],sub_str[30];
int operate_2str[50];
int strnum=0,operatenum=0; /* 子字符串个数,操作符个数 */
int i,j,k,flag;
float f=0.0,str_f[50];
void main()
{
float temp;
printf("请输入一个字符串表达式:\n");
gets(str);
strcpy(str1,str);
SplitPrem(str1);
temp=Combine();
printf("%s=%g\n",str,temp);
}
/* 分解为子字符串和操作符 */
void SplitPrem(char *str1)
{
j=strlen(str1);
sub_str[0]=str1[0];
k=1;
for( i=1; i<j; i++)
{
if(str1[i]=='*'||str1[i]=='/'||str1[i]=='+'||str1[i]=='-')
{
sub_str[k]=0;
strcpy(str2[strnum],sub_str);
operate_c[operatenum]=str1[i];
operate_2str[operatenum]=strnum;
strnum++;
operatenum++;
k=0;
}
else
{
sub_str[k]=str1[i];
k++;
}
}
if(k>0)
{
sub_str[k]=0;
strcpy(str2[strnum],sub_str);
strnum++;
}
for( i=0; i<strnum; i++)
str_f[i]=atof(str2[i]); /* 字符串转化为浮点数 */
}
/*先计算乘除,后计算加减,每计算一次,子字符串和操作符向前移动 */
float Combine()
{
while(1)
{
flag=0;
for( i=0; i<operatenum; i++)
{
if(operate_c[i]=='*'||operate_c[i]=='/')
{
if(operate_c[i]=='*')
{
f=str_f[operate_2str[i]]*str_f[operate_2str[i]+1];
str_f[operate_2str[i]]=f;
for( j=i; j<operatenum-1; j++)
{
operate_c[j]=operate_c[j+1];
operate_2str[j]=operate_2str[j+1]-1;
}
for( j=operate_2str[i]+1; j<strnum-1; j++)
str_f[j]=str_f[j+1];
operatenum=operatenum-1;
strnum=strnum-1;
flag=1;
}
else
{
f=str_f[operate_2str[i]]/str_f[operate_2str[i]+1];
str_f[operate_2str[i]]=f;
for( j=i; j<operatenum-1; j++)
{
operate_c[j]=operate_c[j+1];
operate_2str[j]=operate_2str[j+1]-1;
}
for( j=operate_2str[i]+1; j<strnum-1; j++)
str_f[j]=str_f[j+1];
operatenum=operatenum-1;
strnum=strnum-1;
flag=1;
}
}
}
if(flag==0)break;
}
while(1)
{
flag=0;
for( i=0; i<operatenum; i++)
{
if(operate_c[i]=='+'||operate_c[i]=='-')
{
if(operate_c[i]=='+')
{
f=str_f[operate_2str[i]]+str_f[operate_2str[i]+1];
str_f[operate_2str[i]]=f;
for( j=i; j<operatenum-1; j++)
{
operate_c[j]=operate_c[j+1];
operate_2str[j]=operate_2str[j+1]-1;
}
for( j=operate_2str[i]+1; j<strnum-1; j++)
str_f[j]=str_f[j+1];
operatenum=operatenum-1;
strnum=strnum-1;
flag=1;
}
else
{
f=str_f[operate_2str[i]]-str_f[operate_2str[i]+1];
str_f[operate_2str[i]]=f;
for( j=i; j<operatenum-1; j++)
{
operate_c[j]=operate_c[j+1];
operate_2str[j]=operate_2str[j+1]-1;
}
for( j=operate_2str[i]+1; j<strnum-1; j++)
str_f[j]=str_f[j+1];
operatenum=operatenum-1;
strnum=strnum-1;
flag=1;
}
}
}
if(flag==0)break;
}
return f;
}
‘玖’ 输入两个整数,进行加减乘除四则运算的c语言程序怎么写啊,拜托了~
代码
#include<stdio.h>
int main()
{
int a,b;
scanf("%d %d",&a,&b);
printf("%d ",a + b);
printf("%d ",a - b);
printf("%d ",a * b);
printf("%d ",a / b);
return 0;
}
运行截图
分析
C语言中的加减乘除和数学中的加减乘除一样,不同在于符号的表示问题,乘号需要用“*”表示。除号需要用“/”表示。新手学习C语言,很容易把除号和取余好混淆,强调一下,取余号是“%”,百分号就是取余的意思。因此在输入两个整数以后,按照数学方法就可以直接输出结果,整数的输入用scanf()函数。