c - 使用用户定义函数在 c 中给出垃圾值的数字的阶乘
问题描述
我试图构建一个程序来使用用户定义的函数计算阶乘,但它给出了一个垃圾值这个程序是 c-cat 准备的分配
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
int accept_num(); // Function call
int fact(); // Function call
void display_num(); // Function call
int main()
{
int num;
num = fact(); //calling factorial
display_num(num); //calling printf
}
//take input
int accept_num()
{
int n;
printf("Enter number: ");
scanf("%d",&n);
return n;
}
//calculate factorial
int fact()
{
int i,num1;
unsigned long long factr=1;
num1 = accept_num();
for(i=1; i<=num1; i++)
{
factr *= i;
}
return factr;
}
void display_num(int num2)
{
printf("Answer = %llu",num2);
}
解决方案
不匹配的类型通常会导致垃圾值。计算阶乘后,您将其存储为int
类型,并在display_num()
您正在打印的函数中unsigned long long int
保留比int
. 此外,如果你使用int i
它会导致在限制后循环迭代后的阶乘错误值int
。
下面是精炼的代码,将每个替换int
为unsigned long long int
:
#include<stdio.h>
#include<stdlib.h>
unsigned long long int accept_num(); // Function call
unsigned long long int fact(); // Function call
void display_num(); // Function call
int main()
{
//changed the datatype of num
unsigned long long int num;
num = fact(); //calling factorial
display_num(num); //calling printf
}
//take input
unsigned long long int accept_num()
{
//changed datatype of n
unsigned long long int n;
printf("Enter number: ");
scanf("%llu",&n);
return n;
}
//calculate factorial
unsigned long long int fact()
{
unsigned long long int i;
//changed datatype of num1
unsigned long long int num1;
unsigned long long int factr=1;
num1 = accept_num();
for(i=1; i<=num1; i++)
{
factr *= i;
}
return factr;
}
//changed datatype of argument num2
void display_num(unsigned long long int num2)
{
printf("Answer = %llu",num2);
}
此外,还有更多可以减少的冗余变量。参考这段代码:
#include<stdio.h>
long int multiplyNumbers(int n);
int main() {
int inputNumber;
printf("Enter a positive integer: ");
scanf("%d",&inputNumber);
printf("Factorial of %d = %ld", inputNumber, multiplyNumbers(inputNumber));
return 0;
}
//calculate factorial using recursion
long int multiplyNumbers(int n) {
if (n>=1)
return n*multiplyNumbers(n-1);
else
return 1;
}
推荐阅读
- sql - SQL Server - WHERE子句中除以零错误(即使条件除数> 0)
- ios - iOS Swift:条件绑定的初始化程序必须具有 Optional 类型,而不是 '() -> String?
- c# - 实体框架插入具有相同类型和 id 的多个导航属性的对象
- akka - Thingsboard 中的演员模型
- android - 如何使用rest api调用单击上一个按钮后保持复选框状态
- c# - Linq 除了忽略自定义比较器?
- sql - 内部联接查询不检索最新结果
- node.js - 如何通过聚合加入 3 个集合?
- visual-studio-2017 - Visual Studio 2017 社区版 - Nuget.exe 未找到
- python - 多个外键上的 SQLAlchemy 双内连接