如何修复C语言阶乘计算程序以实现教授要求的指定输出格式
代码问题排查&修正方案
存在的问题
- 变量
fact未初始化,默认是内存随机值,计算阶乘前必须将其赋值为1 - 循环内部错误修改了用户输入的
n值,n = n * (n-1)这行完全多余,会导致循环条件i <= n逻辑混乱,甚至出现死循环 printf输出时错误使用了取地址符&,&n、&fact取的是变量的内存地址,不是变量存储的值,输出结果完全不符合预期- 输出格式完全不匹配教授要求,没有打印
n!=乘数序列=结果的结构,也没有输出中间的每一步乘数 - 引入了完全没用的
<iostream>头文件,这是C++的输入输出头,纯C代码不需要包含
修正后可运行代码
#include <stdio.h> int main() { int n, i, fact = 1; printf("Enter a positive integer: \n"); scanf("%d", &n); if (n < 0) { printf("Error! Factorial of a negative number doesn't exist."); } else if (n == 0) { // 0的阶乘是约定值1,做特殊兼容处理 printf("0!=1"); } else { // 先输出格式开头 printf("%d!=", n); for(i = 1; i <= n; ++i) { fact *= i; // 控制乘数输出格式,最后一个乘数后不加* if (i == n) { printf("%d", i); } else { printf("%d*", i); } } // 输出最终阶乘结果 printf("=%d", fact); } return 0; }
内容的提问来源于stack exchange,提问作者misfit101
相关产品推荐
相关产品推荐

