s=2^2!+3^2!怎么理解?
#include <stdio.h>long square(int p);
long factorial(int q);
void main()
{
int i;
long s=0;
for(i=2;i<=3;i++)
{
s=s+square(i);
}
printf("%ld\n",s);
}
long square(int p)
{
int k;
long r;
long factorial(int);
k=p*p;
r=factorial(k);
return r;
}
long factorial(int q)
{
long c=1;
int i;
for(i=1;i<=q;i++)
{
c+=i;
}
return c;
}
看这位鱼友想表达的是,先用这个没有含有他问题的代码然后引出他想要问的问题,果然是一招投石问路的好方法。像这位鱼友的问题为:s = 2^2 + 3^2是怎么理解的,其实不难,首先你要明白各运算符号之间的优先级,在你的这个问题中,^运算符的优先级低于+运算符,所以先进行3+2运算为5,然后语句变为s = 2^2^5,然后又知道^异或是这样的:相同位为零,不同位为1,所以上述式子s = 2^5^2为:
s = 0000 0010 ^ 0000 1001 ^ 0000 0010,如果你发现了式子中其中2^2的 0 1表示是相同的,所以首先2^2=0,然后拿0^5= 0000 0000 ^ 0000 1001,最后结果为s = 5。
不知道我的解答你懂了没有?如果懂了明白了,请大力并且拼命的点赞,至于为什么,你懂的……:lol: 朋友!你说的这个 s=2^2!+3^2!;程序中没有啊! !非运算优先等级最高,不过一般用法是 !表达式 ……也不知道你这个怎么会放后面了…… 优先级看的话,先! 再+ 最后按位异或完事了赋值 …… 2的平方的阶乘 就是 4的阶乘就是 4*3*2*1=24 学习一下 这真不熟悉 s=2^2!+3^2!,^这个不是异或优先级符号,是求2的平方的阶乘+3的平方的阶乘。
进入for循环,i=2,先调用square(i)求出2的平方,再调用factorial(k)求出4的阶乘。当i>3时,退出for循环。 一个人的精彩 发表于 2014-3-31 17:30 static/image/common/back.gif
s=2^2!+3^2!,^这个不是异或优先级符号,是求2的平方的阶乘+3的平方的阶乘。
进入for循环,i=2,先调用s ...
那如果像你说的那样,那你求出的结果是多少?? 4!=24,9!=362880。4!+9!=362904。 偶来也{:5_109:},调试了N久才找到POINT------
#include <stdio.h>
#include <math.h>
long square(int p); //声明求平方的函数square
long factorial(int q);//声明求阶乘的函数factorial
void main()
{
int i; //定义整型变量i
long s=0; //定义长整变量s,并赋值
for(i=2; i<=3; i++) //进入for循环
{
s = s + square(i);//在等式中调用函数square
}
printf("%ld\n",s); //输出2^2! + 3^2! 的结果
}
long square(int p) //定义函数square, 在此p=i,
{
int k;
long r;
long factorial(int); //声明求阶乘的函数factorial,此句可省略,因在开头已经声明过了
k = p * p; // 相当于k=i*i,即平方
r=factorial(k);
//调用阶乘函数factorial,
return r; //返回r的值给s=s+square(i);
}
long factorial(int q) //定义函数factorial, 在此q=k,
{
long c=1;
int j; //之所以把i改成j,是为了更易在调试中看懂^^,不改也没问题嘀
for(j=1; j<=q; j++)//进入for循环
{
c += j; //此句要改为c *= j, 否则结果是57,而不是4!+9!=362904
//相当于计算c=4*3*2*1 及 c=9*8*7*6*5*4*3*2*1
}
return c; //返回c的值给r=factorial(k);
}
{:7_183:}终于交到功课了,嘻嘻 这个程序中有2^2!+3^2!么????
在C中!是非的意思但不可能写成2^2!这样 数学中!是阶乘
比如4! = 4 * 3 * 2 * 1
2^2! = 4! 懂??
求阶乘的程序的话#include<stdio.h>
long int fac(int i);//我是用递归求法
int main()
{
int i;
printf("Please Input a number:");
scanf("%d",&i);
printf("%d! = %ld\n",i,fac(i));
return 0;
}
long int fac(int i)
{
if(1 == i)
{
return i;
}
else
{
return i * fac(i - 1);
}
} 看看。帮顶下
页:
[1]