#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 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
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++;
}看一看
改成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;
}
根据你写的改下来的,能编译出结果,你的代码太乱了。。。
没用, 那个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语言很好入门的,慢慢学会去掌握它的一些规则,加油!