输入整数N,计算1+1/2!+1/3!+....+1/n!

#include<stdio.h>
long AddOne(int n)
{
if(n==1||n==0) return 1;
else
return n*AddOne(n-1);
}

void main()
{
double s,M,sum;
int n;
scanf("%d",&n);
for(sum=0;n>0;n--){
M=AddOne(n);
s=(1.0)/M;
sum=sum+s;}
printf("%d",sum);
}

我这样做哪里出错了?
自定义函数不能用于循环吗?

这样做,本身没错,自定义函数可以循环,你的错主要在于输出格式的错误,sum不为int型,不能用%d进行输出。你只要将%d改为%f就OK了,见下面:
#include<stdio.h>
long AddOne(int n)
{
if(n==1||n==0) return 1;
else
return n*AddOne(n-1);
}
void main()
{
double s,M,sum;
int n;
scanf("%d",&n);
for(sum=0;n>0;n--){
M=AddOne(n);
s=(1.0)/M;
sum=sum+s;}
printf("%f",sum);
}

另外给你补充下知识。printf输出格式有以下
%a(%A) 浮点数、十六进制数字和p-(P-)记数法(C99)
%c 字符
%d 有符号十进制整数
%f 浮点数(包括float和doulbe)
%e(%E) 浮点数指数输出[e-(E-)记数法]
%g(%G) 浮点数不显无意义的零"0"
%i 有符号十进制整数(与%d相同)
%u 无符号十进制整数
%o 八进制整数 e.g. 0123
%x(%X) 十六进制整数0f(0F) e.g. 0x1234
%p 指针
%s 字符串
%% "%"
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-04-11
#include <stdio.h>
long AddOne(int n)
{
if(n==1||n==0) return 1;
else
return n*AddOne(n-1);
}

main()
{
double s,M,sum;
int n;
scanf("%d",&n);
for(sum=0;n>0;n--){
M=AddOne(n);
s=(1.0)/M;
sum=sum+s;}
printf("%lf",sum); // 最后这里改%d为%lf,%lf对应double嘛。}
不会啊,您这里不是在for中用了AddOne吗?来自:求助得到的回答本回答被提问者和网友采纳
第1个回答  推荐于2018-04-11
for(sum=0;n>0;n--),sum应该为n