C 为什么同一个程序在表意文字和代码块中的行为不同?
此代码用于查找100!的数字之和!。我在ideone中得到了正确的输出,但在代码块中得到了错误的输出。请帮忙C 为什么同一个程序在表意文字和代码块中的行为不同?,c,C,此代码用于查找100!的数字之和!。我在ideone中得到了正确的输出,但在代码块中得到了错误的输出。请帮忙 #include <stdio.h> #include <stdlib.h> #define size_of_number 160 #define question 100 //Function Prototypes void initialise(int[]); int sum_of_digits(int[]); void factorial(int[],in
#include <stdio.h>
#include <stdlib.h>
#define size_of_number 160
#define question 100
//Function Prototypes
void initialise(int[]);
int sum_of_digits(int[]);
void factorial(int[],int);
int main()
{
int number[size_of_number];
int sum;
initialise(number);
factorial(number, question);
//Getting the sum of the digits of the number
sum = sum_of_digits(number);
printf("The sum of the digits of %d! is %d.\n",question, sum);
return 0;
}
//Initially, the number is 0 so all it's digits are set to zero.
void initialise(int number[])
{
int i;
for(i = 0; i < size_of_number; i++)
{
number[i] = 0;
}
}
//Finding the factorial by multiplying the digits
void factorial(int number[], int num)
{
int i, first_digit;
int carry, replace, product;
first_digit = 0;
number[first_digit] = 1;
while(num != 1)
{
carry = 0;
for(i = 0; i <= first_digit; i++)
{
product = num*number[i] + carry;
replace = product%10;
carry = product/10;
number[i] = replace;
if( (i == first_digit) && (carry > 0) )
{
first_digit++;
}
}
num--;
}
}
//Finding the sum of all digits
int sum_of_digits(int number[])
{
int i, sum;
for(i = 0; i < size_of_number; i++)
{
sum = sum + number[i];
}
return sum;
}
#包括
#包括
#定义\u编号160的大小\u
#定义问题100
//功能原型
无效初始化(int[]);
整数位数之和(整数[]);
无效阶乘(int[],int);
int main()
{
整数[整数的大小];
整数和;
初始化(数字);
阶乘(数,问题);
//获取数字的位数之和
sum=数字的总和(数字);
printf(“第%d!个数字的和是第%d个。\n”,问题,和);
返回0;
}
//最初,数字是0,所以它的所有数字都设置为零。
无效初始化(整数[])
{
int i;
对于(i=0;i<数量的大小;i++)
{
数字[i]=0;
}
}
//用数字相乘求阶乘
无效阶乘(整数[],整数)
{
int i,第一位数字;
国际运输,更换,产品;
第一位数字=0;
数字[第一位]=1;
while(num!=1)
{
进位=0;
对于(i=0;i=0))
{
第一位数字++;
}
}
num--;
}
}
//求所有数字的和
整数位数之和(整数编号[])
{
int i,总和;
对于(i=0;i<数量的大小;i++)
{
总和=总和+数字[i];
}
回报金额;
}
我也有一些其他程序的问题。为什么s代码块没有给出正确的输出,即648?在函数
sum\u of
中不初始化sum
。正常的局部变量在C中不会自动获得起始值,因此您的程序具有C标准所称的未定义行为。任何事情都可能发生,但通常会发生的是,变量从内存中变量恰好位于的位置的任何数据开始。在函数sum\u of digits
中,您不会初始化sum
。正常的局部变量在C中不会自动获得起始值,因此您的程序具有C标准所称的未定义行为。任何事情都有可能发生,但通常情况下,变量是从内存中变量所在位置的任何数据开始的。TL;DR.如果包含未定义或实现定义的behavior.TL,则其行为可能会有所不同;如果包含未定义或实现定义的行为,它的行为可能会有所不同。未初始化的局部变量在Java中不会获得默认值,它们会导致编译器错误。向上投票,因为净效果是一样的,但你仍然应该修正措辞。我还不能接受答案。应用程序告诉我等九分钟。谢谢你的帮助!顺便说一句,你读了程序,很快就理解了错误@用户230452。这就是长时间读写代码时发生的情况。继续说。你可能在问@ThomasPadron McCarthy,但我觉得不错。事实上,这么快就发现了错误,这是一个很好的迹象。我同意。您可能希望在代码审阅时发布程序以获得更完整的答案。未初始化的局部变量在Java中不会获得默认值,它们会导致编译器错误。向上投票,因为净效果是一样的,但你仍然应该修正措辞。我还不能接受答案。应用程序告诉我等九分钟。谢谢你的帮助!顺便说一句,你读了程序,很快就理解了错误@用户230452。这就是长时间读写代码时发生的情况。继续说。你可能在问@ThomasPadron McCarthy,但我觉得不错。事实上,这么快就发现了错误,这是一个很好的迹象。我同意。您可能希望在代码评审中发布您的程序,以获得更完整的答案。