C语言,高手看看这道题这么做有什么问题?

#include"stdio.h"voidmain(){intn=1,m=1,j;doubley1,y=1;do{j=0;for(j<n;j=j+1);{m=m*j;}y... #include "stdio.h"
void main( )
{
int n=1,m=1,j;
double y1,y=1;
do
{
j=0;
for(j<n;j=j+1);
{
m=m*j;
}
y1=1/m;
y=y+y1;
n++;
}while(y1>=10e-6);
printf("y=%lf\n",y);
}
错误提示
展开
 我来答
KummerWu
2013-04-27 · TA获得超过694个赞
知道小有建树答主
回答量:378
采纳率:0%
帮助的人:415万
展开全部
int main(int argc, char* argv[]){
int n=1,j;
double y1,y=0,m=1; //m必须是double类型,否则,如果是整形,则m>1时,
//这儿是整形除法(C语言中两个整数相除,1/2 = 0),y1为0
do
{
m = 1; //m需要每次重新初始化
for(j=1;j<n;j=j+1) //语法格式不正确
{
m=m*j;
}
y1=1/m;
y=y+y1;
n++;
}while(y1>=10e-4);
printf("y=%lf\n",y);

return 0;
}

不过你这个写法效率太低,中间的那个for循环导致性能很差,完全可以优化,如下
int main(int argc, char* argv[]){
int n=1,j;
double y1,y=1,m=1;
do
{
m=m*n;
y1=1/m;
y=y+y1;
n++;
}while(y1>=10e-4);
printf("y=%lf\n",y);

return 0;
}
另外,可以看出你应该是刚刚学编程,特别注意,变量命名要用有含义的标识符,避免使用x,y,z,y1,z2等毫无含义的变量名,这样以后代码长了以后会很难读。加油!!!
追问

怎么执出来不对啊!

根据题目不可能啊

追答

你是不是没有编译好,两个程序执行出来都是相同的结果 2.718254

__zst__
2013-04-27
知道答主
回答量:33
采纳率:0%
帮助的人:13万
展开全部
数据类型问题,
y1=1/m;不对应该为y1=1.0/m;
追问
为何1.0  ?  改了没用!
追答
for(j<n;j=j+1);
{
m=m*j;
}
y1=1/m;
y=y+y1;
n++;
改成
for(j<n;j=j+1);
{
m=m*j;
y1=1/m;
y=y+y1;
n++;
}看一看
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-04-27
展开全部
y1>=10e-6是哪个国家的c语言?还有,for语句直接带大括号,不用接分号结尾
追问
改成0.00001没用!
追答
#include 
int main( )
{
int n=1,m=1,j=0;
double y1,y=0;
do
{

m=1;//每次进入循环要重置参数m的值
for(j=1;j=10e-6);
printf("y=%lf\n",y);

//最后,能看出你是一个新手,代码要自己调,收获才大,多写写程序,多读别人写好的程序
return 0;
}

根据你写的改下来的,能编译出结果,你的代码太乱了。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hai3zei3wang3
2013-04-27 · TA获得超过173个赞
知道小有建树答主
回答量:168
采纳率:0%
帮助的人:91.7万
展开全部
j=0应改j=1;还有while(y1>=10e-6)不是10e-4吗?
更多追问追答
追问

没用, 那个10e-6  不重要  。

追答
for(j<n;j=j+1);这句的封号去掉改成for(;j<n;j++)就行
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式