我试图在C中找出Babbage的差异机器。我写了这个概念的所有基本概念:例如,如果你要找到10的平方,首先你必须找到10之前的整数平方。这就是巴贝奇机器的工作原理。 所以在我的程序中我们有一个整数列表,我们假设我们已经是这些整数的平方。给出这些信息,它必须能够处理任何正整数的平方,而不进行任何乘法运算。
但是,代码只是没有执行" else"参与if-else语句。但是,当我删除" else"中的所有内容时声明并简单地写了一个printf函数,它提供了很好的条件。
所以在else语句中一定有问题,我是否正在将数据附加到数组错误?是否不允许在C中的If-Else语句中写入for循环?我在python中编写了相同的算法,效果很好!
ps:我已经尝试过写一个do-while而不是" else"一部分。
请提前帮助,请提供帮助
#include<stdio.h>
int main(){
int integers[] = {0,1,2};
int sq_of_integers[] = {0,1,4};
int first_differences[] = {1,3};
int second_difference[] = {2};
int input;
int i;
int x;
int end2 = 2;
int end1 = 1;
for ( i = 0 ; i<=2 ; i++){
printf("Enter a number to be squared: ");
scanf(" %d", &input);
if (input <= integers[end2]){
printf("It is already known, sir.\n");
}else{
for( x = 0 ; x<= input - integers[-1] ; x++){
// Calculation of the square root:
integers[end2+1] = integers[end2]+1;
sq_of_integers[end2+1] = second_difference[0] + first_differences[end1] + sq_of_integers[end2];
first_differences[end1+1] = sq_of_integers[end2] +sq_of_integers[-2];
printf(sq_of_integers[end2]);
end2 = end2 + 1;
end1 = end1 + 1;
}
}
}
return 0;
}
答案 0 :(得分:0)
input - integers[-1]
具有未定义的值。可能它是负面的,所以你退出for
循环而不处理它一次。
编辑:完整的代码审核。如果你不明白,请询问。
您尝试使用没有格式参数的printf()
,可能是在没有警告的情况下进行编译。尝试使用我给出的命令进行编译。
计算first_differences
值时也存在索引错误。
small.c:
/*
Compile with MinGW for Windows:
gcc -Wall -Wextra -Werror -std=gnu99 -o small.exe small.c
Compile with linux gcc:
gcc -Wall -Wextra -Werror -std=gnu99 -o small small.c
*/
#define N_UPPER_LIMIT 1023
#include <stdio.h>
int main()
{
long integers[N_UPPER_LIMIT + 1] = {0, 1, 2};
long sq_of_integers[N_UPPER_LIMIT + 1] = {0, 1, 4};
long first_differences[N_UPPER_LIMIT] = {1, 3};
long second_difference[] = {2};
int end1 = 1;
int end2 = 2;
for (int i = 0; i < 2; i++)
{
int input;
printf("Enter a number to be squared: ");
fflush(stdout);
scanf(" %d", &input);
if (input < 0)
{
printf("It is negative, sir.\n");
}
else if (input <= integers[end2])
{
printf("It is already known, sir.\n");
printf("square(%ld) = %ld\n", integers[input], sq_of_integers[input]);
}
else if (input > N_UPPER_LIMIT)
{
printf("Please do not go further than %d, sir.\n", N_UPPER_LIMIT);
}
else
{
while (input > integers[end2])
{
// Calculation of the square root:
integers[end2 + 1] = integers[end2] + 1;
sq_of_integers[end2 + 1] = second_difference[0]
+ first_differences[end1] + sq_of_integers[end2];
first_differences[end1 + 1] = sq_of_integers[end2 + 1]
- sq_of_integers[end2];
end2++;
end1++;
printf("square(%ld) = %ld\n", integers[end2], sq_of_integers[end2]);
}
}
}
return 0;
}
摆脱静态极限可能是一个很好的练习。如果你想这样做,你将不得不为malloc()
的变量分配内存,并将限制作为程序参数,或者尝试改变通过调用malloc()
的任何一个来分配的大小。 realloc()
。