#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;
}追问
而后主函数里面,你输入一个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);
}追问
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