既然大家都没发程序,I am coming.
说明:由于幂的运算应该比括号低比乘除要高,所以为避免混淆用幂运算时用括号括起来,比如2+9/3^2-5表示2+(9/3)^2-5,要是想要9除以3^2,这样输入:2+9/(3^2)-5,以免引起歧义。
程序功能强大代码简练。可以对任意数值类型计算,这里全部按double型处理,程序还可以使用大括号{}中括号[]小括号()三种括号,当然优先级是小括号>中括号>大括号>运算符。
要是只想结果取整,将所有double类型改为int即可,不过不主张这样做,既然是计算器,当然要精确计算。
一个完整的c程序如下,程序在win-tc和Dev-c++下都调试通过。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
char s[201];/*全局变量s[]与i分别表示算术表达式字符串以及其当前位置指针变量*/
int i=0;
double proc1(char ch);
void proc2(double *a,char *c);
void str_read(double *a,char *c) /*读取下一个操作数*/
{ int j=0;
char s1[30];
while ((s[i]!='\0')&&(s[i]!='+')&&(s[i]!='-')&&(s[i]!='(')&&(s[i]!=')')
&&(s[i]!='=')&&(s[i]!='^')&&(s[i]!='*')&&(s[i]!='/')&&(s[i]!='[')&&(s[i]!=']')
&&(s[i]!='{')&&(s[i]!='}')) /*操作数结束标志*/
s1[j++]=s[i++];
s1[j]='\0';
*a=atof(s1);
*c=s[i++];
}
void input_str() /*表达式接收模块*/
{ int j,k,t=0;
char c,s1[80];
printf("\n请输入任一算术表达式:\n");
while (!t)
{ gets(s);
j=k=0; t=1;
while ((s[j]!='=')&&(s[j]!='\0')&&(t)) /*判断括号配对*/
{if ((s[j]=='(')||(s[j]=='[')||(s[j]=='{'))
switch(s[j])
{ case '(':s1[k++]=')';break;
case '[':s1[k++]=']';break;
case '{':s1[k++]='}';
}
else if ((s[j]==')')||(s[j]==']')||(s[j]=='}'))
if (s1[--k]!=s[j])
{ printf("输入出错!请重新输入(直接回车退出):\n");
t=0;
}
j++;
}
if ((k!=0)&&(t))
{printf("输入出错!请重新输入(直接回车退出):\n");
t=0;
}
}
}
void proc2(double *a,char *c)
/*算术运算符之后只有两种情况:要么是各种左括号,要么是操作数*/
{ char ch;
if ((s[i]=='(')||(s[i]=='[')||(s[i]=='{'))
{ switch(s[i])
{ case '(':ch=')';break;
case '[':ch=']';break;
case '{':ch='}';
}
++i;
*a=proc1(ch);
/*计算从当前左括号开始到与其相对应的右括号结束这段表达式的值*/
*c=s[i++]; /*跳过右括号*/
}
else str_read(a,c); /*读取一个操作数*/
}
double proc1(char ch)
/*该过程对算术表达式s从当前位置s[i]开始到表达式结束或s[i]==ch这部分进行求值*/
{ double a1=0,a2,a=0;
char c1='+',c='+',c2='+';
/*给表达式前面加上"0+"(第一操作数与第一操作符)*/
while((c!='=')&&(c!='\0')&&(c!=ch))
{ proc2(&a,&c); /*读取第二操作数与第二操作符.*/
while (c=='^' || c=='*' || c=='/')
{ proc2(&a2,&c2); /*读取第三操作数与第三操作符.*/
switch (c) /*对第二操作符进行运算*/
{ case '*':a=a*a2; break;
case '/':a=a/a2; break;
case '^':a=pow(a,a2);
}
c=c2; /*把第三操作符赋给第二操作符变量*/
}
switch (c1) /*对第一操作符进行运算*/
{ case '+':a1=a1+a;break;
case '-':a1=a1-a;
}
c1=c; /*把第二操作符赋给第一操作符变量*/
}
return(a1); /*返回这部分表达式的值*/
}
int main(void)
{ system("cls");
input_str();
if (s[0]=='\0') return 0;
printf("该表达式的值是: ");
printf("%-8f\n",proc1('\0'));
system("pause");
return 0;
}
温馨提示:内容为网友见解,仅供参考
用C语言编译一个简单计算器的程序,要求其中有括号和幂函数
char c,s1[80];printf("\\n请输入任一算术表达式:\\n");while (!t){ gets(s);j=k=0; t=1;while ((s[j]!='=')&&(s[j]!='\\0')&&(t)) \/*判断括号配对*\/ {if ((s[j]=='(')||(s[j]=='[')||(s[j]=='{'))switch(s[j]){ case '(':s1[k++]=')'...
C语言中的幂函数··
功能:计算x的y次幂。 说明:x应大于零,返回幂指数的结果。 举例: \/\/ pow.c #include <stdlib.h> #include <math.h> #include <conio.h> void main() { printf("4^5=%f",pow(4.,5.)); getchar(); } 相关函数:pow10 本回答由提问者推荐 举报| 答案纠错 | 评论 8 18 agtim62 采纳率:27%...
C语言简单计算,三角函数,四则运算,幂函数,指数函数
1.函数名:abs原型:int abs(int i);功能:求整数的绝对值。例如,设x=abs(5),y=abs(–5),z=abs(0),则x=5,y=5,z=0。2.函数名:labs原型:long labs(long n);功能:求长整型数的绝对值。例如,设x=labs(40000L),y=labs(–5),z=labs(0),则x=40000,y=5,z=0。3...
大神帮忙用c语言编一个程序计算一个物理公式
b = (u*r*r*n*i)\/2.0\/ pow(r*r+x*x,1.5);printf("b=%lf", b);return 0;} 输入 110 和 0 输出 b=0.001428 请注意物理量的单位,根据单位,自己调整一下程序。pow() 是 幂函数计算。
C语言中,对一个初学者来说,如何编一个幂函数程序
用循环,循环次数为n,每循环一次就再乘以一个(1+r)即可。要用静态变量来记录乘积。
如何用c语言来表示一个指数?
1、直接用浮点数表示:10的N次方为 1e10 也可写成1e+10(如果是负N次方的话就把加号变成减号)。e大小写都可以,需要注意的是e前面必须有一个数字,不然的话就非法表达。2、用幂函数表示:在c语言中,求x的y次方可用pow(x,y)表示,所以10的N次方也可表示为pow(10,N)。其中pow函数在头文件...
c语言简单程序 想求2的2次方 可是我写的程序结果是零 求指点 新手_百度...
你那个符号不是幂函数符号,他表示两个数取异或,现将两个数转化为二进制数码,两个2转化之后每一位对应都是一样的,得到的结果就是每一位都是0,最后结果就是0了嘛。例如转化之后是 0000 0010 ^ 0000 0010 --- 得到 0000 0000 (每一位对应作异或运算,相同则为0,不同则为1.) 最后结...
学生必看的计算机C语言重要考点
第一章 C 语言基本知识 [考点 1]C程序 用C语言编写的程序称为C语言源程序,源程序文件的后缀名为“.c”。源程序经编译后生成后级名为“obi”的目标文件,再把目标文件与各种库函数连接起来,生成“.exe”可执行文件。C语言有种基本结构:顺序结构、选择结构、循环结构 [考点 2] main 函数 又称主函数,是C程序...
用C语言求平方根的问题
64.编写计算器程序。用户输入运算数和四则运算符,输出计算结果。(用swith语句,需要3个变量,一个是字符型变量存放运算符,两个用于运算的整型变量)65.void main()66.{ 67. int a,b,d;68.69. char c;70. printf("Please input operator\\nFor example '+' '-' '*' '\/'\\n");71. ...
C语言头文件的问题
本分类给出了各种数学计算函数,必须提醒的是ANSI C标准中的数据格式并不符合IEEE754标准,一些C语言编译器却遵循IEEE754(例如frinklin C51)头文件 math.h 函数列表 函数类别 函数用途 详细说明 错误条件处理 定义域错误(函数的输入参数值不在规定的范围内)值域错误(函数的返回值不在规定的范围内)三...