C语言纠错 编写一个程序,返回任意正整数的阶乘值,在主函数接受任意输入的正整数n的值,输出1!+..+n!=

#include <stdio.h>
void main()
{
int f(int a);
int n=0,i,a;
scanf("%d\n",&a);
for(i=1;i<=a;i++)
n=n+f(a);
printf("1!+......+%d!=%d\n",a,n);
}
int f(int a)
{
int j,s=1,i=1;
for(j=1;j<=i;j++)
s=s*j;
i++;
return (s);
}

第1个回答  推荐于2016-10-26
首先你的f()函数里面,参数a没有使用,先给i赋值1,然后j=1;j<=i;这样循环只会做一次所以把i改为a,f()函数里面的i没有任何作用,不用定义i。
而后主函数里面,你输入一个a,然后每次循环都是n=n+f(a);这样每次都是算的f(a),但是目标是算f(i),所以把f(a)改为f(i)。
最后,给你优化一下:
#include<stdio.h>
int f(int a)
{
if(a<=1)
return 1;
else return a*f(a-1);
}
int main()
{
int a,n=0;
printf("请输入一个正整数:");
scanf("%d",&a);
for(int i=1;i<=a;i++)
n+=f(i);
printf("1!+...+%d!=%d\n",a,n);
return 0;
}追问

void main()

{
int f(int a);
int n=0,i,a;
scanf("%d\n",&a);
for(i=1;i<=a;i++)
n=n+f(i);
printf("1!+......+%d!=%d\n",a,n);
}
int f(int a)
{
if(a<=1)return 1;
else return a*f(a-1);
}
你再帮我看一下 按照这样编编译是正确的但执行运行不出来,麻烦您了

本回答被提问者采纳
第2个回答  2015-06-12
子函数为什么在定义a之前,程序一开始就进入子函数了,s值返回后赋值给了a,可是a又被你重新定义了,并又把输入的数据赋值给了a。没太看懂你这么做的目的。
第3个回答  2015-06-12
#include <stdio.h>
void main()
{
int f(int a);
int n=0,i,a;
scanf("%d\n",&a);
for(i=1;i<=a;i++)
n=n+f(i);
printf("1!+......+%d!=%d\n",a,n);
}
int f(int a)
{
int j,s=1;
for(j=2;j<=a;j++)
{s=s*j;}

return (s);
}追问

编译是对的但是执行后输入一个整数执行不出来

追答

把scanf那行删除,重新输入一遍就i行了,不是程序的问题,是编译器的小bug

相关了解……

你可能感兴趣的内容

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