Ошибка сборки приводит к выходу блоков кода

Я пишу код C для решения числовой задачи, я определяю матрицу 100x100 и заполняю ее значениями A — матрица, b — решение: A[i][j]=1/(i+j+1) , b[i]= сумма всех значений в i-й строке. Ниже приведен мой код:

#include <stdio.h>
#include <stdlib.h>
#define n 100
int main()
{
    double A[n][n];
    double b[n];
    int i,j;
    for (i=0;i<n;i++)
        for (j=0;j<n;j++)
        {
            b[i]=0;
            A[i][j]=0;
        }
    for (i=0;i<n;i++)
        for (j=0;j<n;j++)
        {
            A[i][j]=1/(i+j+1);
            b[i]+=A[i][j];
        }

    int c=10;

    for (i=0;i<n;i++)
        for (j=0;j<n;j++)
        {
             printf("%lf\t",A[i][j]);
             if (c==j) printf("\n");
             c=c*10;
        }


    return 0;
}

Всякий раз, когда я нажимаю кнопку сборки, блоки кода завершаются, показывает это:

Кроссплатформенная среда разработки перестала работать

а потом программа закрывается. Может ли кто-нибудь помочь мне разобраться в проблеме?!


person RayaR    schedule 14.04.2015    source источник
comment
Я построил его (и запустил) в своей (не CodeBlocks) среде. Он построил / работал нормально. Некоторые возможности могут включать ограничения памяти (маловероятно), настройки переключения/сборки компилятора, плохую конфигурацию среды CodeBlocks. Можешь показать настройки сборки?   -  person ryyker    schedule 14.04.2015
comment
@ryyker, не могли бы вы сказать мне, какую среду вы используете?   -  person RayaR    schedule 14.04.2015
comment
Я использую LabWindows/CVI. Это коммерческий продукт от National Instruments. Но впоследствии я запустил его в Code::Blocks, и он отлично работал.   -  person ryyker    schedule 14.04.2015


Ответы (2)


У вас есть проблема, все A будут установлены на 0, просто используйте 1., используйте double вместо int

#include <stdio.h>                                                             
#include <stdlib.h>                                                            
#define n 100                                                                  
int main()                                                                     
{                                                                              
    double A[n][n];                                                            
    double b[n];                                                               
    int i, j;                                                                  
    for (i = 0; i < n; i++)                                                    
        for (j = 0; j < n; j++)                                                
        {                                                                      
            b[i] = 0;                                                          
            A[i][j] = 0;                                                       
        }                                                                      
    for (i = 0 ; i < n; i++)                                                   
        for (j = 0; j < n; j++)                                                
        {                                                                      
            A[i][j] = 1. / (i + j + 1);                                        
            b[i] += A[i][j];                                                   
        }                                                                      

    int c = 10;                                                                

    for (i = 0; i < n; i++)                                                    
        for (j = 0; j < n; j++)                                                
        {                                                                      
            printf("%lf\t", A[i][j]);                                          
            if (c == j) printf("\n");                                          
            c *= 10;                                                           
        }                                                                      


    return 0;                                                                  
}  
person Ôrel    schedule 14.04.2015
comment
Ну, это не проблема, я пытался собрать программу без него, но это тоже не работает. - person RayaR; 14.04.2015
comment
@Ôrel - Хотя присвоение значений int двойной переменной небрежно, проблема здесь не в этом. На самом деле с кодом проблем нет. Я запустил его точно так же, как и в среде Code::Block, и он собрался и работал нормально. - person ryyker; 14.04.2015

Я собрал и запустил ваш код точно так, как он есть как в своей повседневной среде (LabWindows/CVI — компилятор ANSI C), так и в консоли Code::Blocks по умолчанию. проект в режиме отладки. В обеих средах, если не считать возможных неожиданных результатов, все работало нормально. (у вас может быть некоторая отладка, как только вы получите его для сборки).

Предложите взглянуть на вашу установку/окружение Code::Block. Раньше мне приходилось переустанавливать, чтобы заставить его работать правильно, хотя это было давно, и я не могу вспомнить подробности.

А пока взгляните на:
1) Глобальные настройки компилятора — исполняемые файлы Toolchain Мой выглядит следующим образом:
введите здесь описание изображения

2) Глобальные настройки компилятора — настройки компилятора
Все мои настройки по умолчанию имеют значение Не выбрано

3) Глобальные настройки компилятора — параметры сборки
Моя выглядит так:
введите здесь описание изображения

Прогон выглядел так:
введите здесь описание изображения

person ryyker    schedule 14.04.2015