else语句在C

时间:2016-03-24 21:31:18

标签: c

我试图在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;
}

1 个答案:

答案 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()