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);
}
错误提示 展开
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);
}
错误提示 展开
4个回答
展开全部
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等毫无含义的变量名,这样以后代码长了以后会很难读。加油!!!
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等毫无含义的变量名,这样以后代码长了以后会很难读。加油!!!
展开全部
数据类型问题,
y1=1/m;不对应该为y1=1.0/m;
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;
}
根据你写的改下来的,能编译出结果,你的代码太乱了。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询