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

#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);
}
错误提示

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

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-04-27
数据类型问题,
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++;
}看一看

第2个回答  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;
}

根据你写的改下来的,能编译出结果,你的代码太乱了。。。

第3个回答  2013-04-27
j=0应改j=1;还有while(y1>=10e-6)不是10e-4吗?追问

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

追答

for(j<n;j=j+1);这句的封号去掉改成for(;j<n;j++)就行

追问

没用!!不说缺少这个我才加上的!!

追答

#include "stdio.h"
void main( )
{
int n=1,m=1,j;
double y1,y=1;
do
{
j=1;
for(;j=10e-4);
printf("y=%lf\n",y);
}
我运行过了,这样就行,你看一下

追问

真的耶! 为何 for(; 括号后有个 ; ?

追答

这是for循环的用法:for(表达式1;表达式2;表达式3)语句
封号是必不可少的;C语言很好入门的,慢慢学会去掌握它的一些规则,加油!

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网