扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
#include stdio.h
“专业、务实、高效、创新、把客户的事当成自己的事”是我们每一个人一直以来坚持追求的企业文化。 成都创新互联是您可以信赖的网站建设服务商、专业的互联网服务提供商! 专注于做网站、成都做网站、软件开发、设计服务业务。我们始终坚持以客户需求为导向,结合用户体验与视觉传达,提供有针对性的项目解决方案,提供专业性的建议,创新互联建站将不断地超越自我,追逐市场,引领市场!
int main(void)
{
int x,y=1,z;
printf("Enter x:");
scanf("%d",x);
for(z=1;z=x;z++)
{
y=y*x;
}
printf("y=%d",y);
return 0;
}
或
#include stdio.h
#include math.h
int main(void)
{
int x,y;
printf("Enter x:");
scanf("%d",x);
y=pow(x,x);
printf("y=%d",y);
return 0;
}
C语言中的数学函数:pow原型:在TC2.0中原型为extern float pow(float x, float y); ,而在VC6.0中原型为double pow( double x, double y );
头文件:math.h
功能:计算x的y次幂。
返回值:x应大于零,返回幂指数的结果。
返回类型:double型,int,float会给与警告!
举例1:(在VC6.0中运行通过)
#include math.h
#include stdio.h
int main(void)
{
double x = 2.0, y = 3.0;
printf("%lf raised to %lf is %lf\n", x, y, pow(x, y));
return 0;
}
请仔细看输入方法,别输错了,要不然答案不正确的[原创]函数型计算器(VC++6.0,win32 console)/*---------------------------------------
函数型计算器(VC++6.0,Win32 Console)
程序由 yu_hua 于2007-07-27设计完成
功能:目前提供了10多个常用数学函数:
⑴正弦sin ⑵余弦cos ⑶正切tan
⑷开平方sqrt ⑸反正弦arcsin
⑹反余弦arccos ⑺反正切arctan
⑻常用对数lg ⑼自然对数ln
⑽e指数exp ⑾乘幂函数∧
用法:如果要求2的32次幂,可以打入
2^32回车如果要求30度角的正切可
键入tan(Pi/6)回车注意不能打入:
tan(30)Enter如果要求1.23弧度的
正弦,有几种方法都有效:
sin(1.23)Enter
sin 1.23 Enter
sin1.23 Enter
如果验证正余弦的平方和公式,可打入
sin(1.23)^2+cos(1.23)^2 Enter或
sin1.23^2+cos1.23^2 Enter此外两
函数表达式连在一起,自动理解为相乘
如:sin1.23cos0.77+cos1.23sin0.77
就等价于
sin(1.23)*cos(0.77)+cos(1.23)*sin(0.77)
当然你还可以依据三角变换,再用
sin(1.23+0.77)也即sin2验证一下。
本计算器充分考虑了运算符的优先级
因此诸如:2+3*4^2 实际上相当于:
2+(3*(4*4))另外函数名前面如果是
数字,那么自动认为二者相乘.同理,
如果某数的右侧是左括号,则自动
认为该数与括弧项之间隐含一乘号。
如:3sin1.2^2+5cos2.1^2 相当于
3*sin2(1.2)+5*cos2(2.1) 又如:
4(3-2(sqrt5-1)+ln2)+lg5 相当于
4*(3-2*(√5 -1)+loge(2))+log10(5)
此外,本计算器提供了圆周率 Pi
键入字母时不区分大小写,以方便使用。
----------------------------------------*/
#include iostream
#include iomanip
#include cstdlib
#include cstring
#include cctype
#include cmath
using namespace std;const char Tab=0x9;
const int DIGIT=1;double fun(double x,char op[],int *iop)
{
while(op[*iop-1]32) //本行使得函数嵌套调用时不必加括号
// 如 arc sin(sin(1.234)) 只需键入arc sin sin 1.234Enter
switch(op[*iop-1])
{
case 7: x=sin(x); (*iop)--;break;
case 8: x=cos(x); (*iop)--;break;
case 9: x=tan(x); (*iop)--;break;
case 10: x=sqrt(x); (*iop)--;break;
case 11: x=asin(x); (*iop)--;break;
case 12: x=acos(x); (*iop)--;break;
case 13: x=atan(x); (*iop)--;break;
case 14: x=log10(x);(*iop)--;break;
case 15: x=log(x); (*iop)--;break;
case 16: x=exp(x); (*iop)--;break;
}
return x;
}double calc(char *expr,char **addr)
{
static deep; //递归深度
static char *fname[]={ "sin","cos","tan","sqrt",
"arcsin","arccos","arctan","lg","ln","exp",NULL};
double ST[10]={0.0}; //数字栈
char op[10]={'+'}; //运算符栈
char c,*rexp,*pp,*pf;
int ist=1,iop=1,last;
if(!deep)
{
pp=pf=expr;
do
{
c = *pp++;
if(c!=' ' c!=Tab)
*pf++ = c;
}
while(c!='\0');
}
pp=expr;
if((c=*pp)=='-'||c=='+')
{
op[0] = c;
pp++;
}
last = !DIGIT;
while((c=*pp)!='\0')
{
if(c=='(')//左圆括弧
{
deep++;
ST[ist++]=calc(++pp,addr);
deep--;
ST[ist-1]=fun(ST[ist-1],op,iop);
pp = *addr;
last = DIGIT;
if(*pp == '('||isalpha(*pp) strnicmp(pp,"Pi",2))
{ ////目的是:当右圆括弧的
op[iop++]='*'; ////右恻为左圆括弧或函数
last = !DIGIT; ////名字时,默认其为乘法
c = op[--iop]; /////////////////////////////
goto operate ; /////////////////////////////
}
}
else if(c==')')//右圆括弧
{
pp++;
break;
}
else if(isalpha(c))
{
if(!strnicmp(pp,"Pi",2))
{
if(last==DIGIT){cout "π左侧遇)" endl;exit(1);}
ST[ist++]=3.14159265358979323846;
ST[ist-1]=fun(ST[ist-1],op,iop);
pp += 2;
last = DIGIT;
if(!strnicmp(pp,"Pi",2)){cout "两个π相连" endl;exit(2);}
if(*pp=='('){cout "π右侧遇(" endl;exit(3);}
}
else
{
for(int i=0; (pf=fname[i])!=NULL; i++)
if(!strnicmp(pp,pf,strlen(pf)))break;
if(pf!=NULL)
{
op[iop++] = 07+i;
pp += strlen(pf);
}
else {cout "陌生函数名" endl;exit(4);}
}
}
else if(c=='+'||c=='-'||c=='*'||c=='/'||c=='^')
{
char cc;
if(last != DIGIT){cout "运算符粘连" endl;exit(5);}
pp++;
if(c=='+'||c=='-')
{
do
{
cc = op[--iop];
--ist;
switch(cc)
{
case '+': ST[ist-1] += ST[ist];break;
case '-': ST[ist-1] -= ST[ist];break;
case '*': ST[ist-1] *= ST[ist];break;
case '/': ST[ist-1] /= ST[ist];break;
case '^': ST[ist-1] = pow(ST[ist-1],ST[ist]);break;
}
}
while(iop);
op[iop++] = c;
}
else if(c=='*'||c=='/')
{
operate: cc = op[iop-1];
if(cc=='+'||cc=='-')
{
op[iop++] = c;
}
else
{
--ist;
op[iop-1] = c;
switch(cc)
{
case '*': ST[ist-1] *= ST[ist];break;
case '/': ST[ist-1] /= ST[ist];break;
case '^': ST[ist-1] = pow(ST[ist-1],ST[ist]);break;
}
}
}
else
{
cc = op[iop-1];
if(cc=='^'){cout "乘幂符连用" endl;exit(6);}
op[iop++] = c;
}
last = !DIGIT;
}
else
{
if(last == DIGIT){cout "两数字粘连" endl;exit(7);}
ST[ist++]=strtod(pp,rexp);
ST[ist-1]=fun(ST[ist-1],op,iop);
if(pp == rexp){cout "非法字符" endl;exit(8);}
pp = rexp;
last = DIGIT;
if(*pp == '('||isalpha(*pp))
{
op[iop++]='*';
last = !DIGIT;
c = op[--iop]; /////////////////////////////
goto operate ; /////////////////////////////
}
}
}
*addr=pp;
if(iop=ist){cout "表达式有误" endl;exit(9);}
while(iop)
{
--ist;
switch(op[--iop])
{
case '+': ST[ist-1] += ST[ist];break;
case '-': ST[ist-1] -= ST[ist];break;
case '*': ST[ist-1] *= ST[ist];break;
case '/': ST[ist-1] /= ST[ist];break;
case '^': ST[ist-1] = pow(ST[ist-1],ST[ist]);break;
}
}
return ST[0];
}int main()
{
char s[128],*end;
system("chcp 936"); //中文代码页
while(1)
{
cout "请输入表达式:";
cin.getline(s,128);
cout setprecision(17) calc(s,end) endl;
}
return 0;
extern float pow(float x, float y)
用法:#include math.h
功能:计算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
C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
既然大家都没发程序,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语言中计算一个数的N次方可以用库函数pow来实现。
函数原型:double pow(double x, double y);
功 能:计算x^y的值
返 回 值:计算结果
举例如下:
double a = pow(3.14, 2); // 计算3.14的平方
注:使用pow函数时,需要将头文件#includemath.h包含进源文件中。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流