c语言,求阶乘,我哪错了?求大佬解答

#include<stdio.h>
int main()
{printf("输入一个正整数:");
int n,t;
t=n;
scanf("%d",&n);
do{t*=n-1;
n--;
} while(n>1);
printf("n!为:",t);
return 0;
}

请按图示修改,记住c语言是按顺序执行每条语句的,在输入n之前给t赋值没有意义。

追问

那为什么这样还是不行
#include
int main()
{printf("输入一个正整数:");
int n;
scanf("%d",&n);
int t=n;
do{t*=n-1;
n--;
} while(n>1);
printf("n!为:",t);
return 0;
}

追答

这样的话你改改t *=(n-1)看看,加个括号

每次都减1,效率会更低的

追问

嘤嘤嘤,还是不行,不知道哪错了X﹏X

追答

printf("n!为%d\n", t);

追问

谢谢,太蠢了(╯▽╰)

温馨提示:答案为网友推荐,仅供参考
第1个回答  2021-07-28

#include<stdio.h>

int main()

{ printf("输入一个正整数:");

  int n,t;

  scanf("%d",&n);

  t=n; //此句下移了一行 

  do

  { t*=n-1;

    n--;

  }

  while(n>1);

  printf("n!为:%d\n",t);//输出内容改了 

  return 0;

}

第2个回答  2021-12-03
语句t=n的位置,应该出现在scanf语句之后,因为只有这样,n的值才是一个确定的值,t的值也是。
第3个回答  2021-12-15
最主要的原因是:t=n;的位置过早,t不会得到正确的n值,也就不会得到正确的最终结果。应该把它放到scanf语句的后面,就好了。
见下面的清单:
#include<stdio.h>
int main(){
int n,t;
printf("输入一个正整数:");
scanf("%d",&n);
t=n;
do{
t*=n-1;
n--;}while(n>1);
printf("n!为:",t);
return0;
}
第4个回答  2021-12-07
顺序错了,应该先输入n的值后再给t赋值。

改成将t=n;放到scanf("%d",&n);的后面。