2016-11-23 5 views
-1

Я попытался сделать короткую программу в C, чтобы создать функции для вычисления суммы куба чисел (например, 2 * 2 * 2, например), но я получил это сообщение, когда я попытался запустить программу:C - Check_expect_i и ошибка сегментации (ядро сбрасывается)

"сегментации по умолчанию (основной сбрасывали)"

sum_even_cubes.c, строка 14: проверка прошла sum_even_cubes.c, строка 15: проверка прошла sum_even_cubes. c, строка 16: проверка пройдена sum_even_cubes.c, строка 17: проверка прошла sum_even_cubes.c, строка 18: проверка прошла

sum_even_cubes.c, строка 56: проверка прошла sum_even_cubes.c, строка 57: проверка прошла ошибка сегментирования (ядро сбрасывали)

Ниже моей программы в C: (эта ошибка происходит, вероятно, на функция sum_even_cubes_rec())

#include "base.h" 

int sum_even_cubes(int n); 

void sum_even_cubes_test(void) { 
// a) 

check_expect_i(sum_even_cubes(0), 0); 
check_expect_i(sum_even_cubes(1), 0); 
check_expect_i(sum_even_cubes(2), 8); 
check_expect_i(sum_even_cubes(3), 8); 
check_expect_i(sum_even_cubes(4), 72); 
} 
int sum_even_cubes(int n) { 
    // b) 

int sum_even_cubes = 0 ; 

if(n%2==0){ 
    for(int i=0 ; i<=n ; i+=2){ 
     sum_even_cubes = (sum_even_cubes + (i*i*i)); 
    } 

    return sum_even_cubes; 
    } 

if(n%2!=0){ 

    for(int i=0 ; i<=(n-1) ; i+=2){ 
     sum_even_cubes = (sum_even_cubes + (i*i*i)); 
    } 

    return sum_even_cubes; 

} 

return 404; 
} 
int sum_even_cubes_rec(int n); 

void sum_even_cubes_rec_test(void) { 
// a) 

check_expect_i(sum_even_cubes_rec(0), 0); 
check_expect_i(sum_even_cubes_rec(1), 0); 
check_expect_i(sum_even_cubes_rec(2), 8); 
check_expect_i(sum_even_cubes_rec(3), 8); 
check_expect_i(sum_even_cubes_rec(4), 72);} 

    int sum_even_cubes_rec(int n) { 
    // c) 



if(n%2==0){ 

    if(n==0){return 0;} 

    if(n!=0){return (sum_even_cubes_rec(n) + sum_even_cubes_rec((n-2))  )   ;} 

} 

if(n%2!=0){ 

    if(n==1){return 0;} 

    if(n!=1){return (sum_even_cubes_rec((n-1)) + sum_even_cubes_rec((n-3))) ;} 

} 

return 404; 
    } 
    int sum_even_cubes_rec2(int n, int acc); 

    void sum_even_cubes_rec2_test(void) { 
// a) 
check_expect_i(sum_even_cubes_rec2(0,0), 0); 
check_expect_i(sum_even_cubes_rec2(1,0), 0); 
check_expect_i(sum_even_cubes_rec2(2,0), 8); 
check_expect_i(sum_even_cubes_rec2(3,0), 8); 
check_expect_i(sum_even_cubes_rec2(4,0), 72); 
    } 

    int sum_even_cubes_rec2(int n, int acc) { 
// d) 

if(n%2==0){ 

    if(n==0){return acc;} 

    if(n!=0){return (sum_even_cubes_rec2(n-2, acc + n*n*n));} 

} 

if(n%2!=0){ 
    if(n==1){return acc;} 

    if(n!=1){return (sum_even_cubes_rec2(n-2, acc + (n-1)*(n-1)*(n-1)))  ;} 

} 

return 404; 
    } 


int main(void) { 
sum_even_cubes_test(); 
printf("\n"); 
sum_even_cubes_rec_test(); 
printf("\n"); 
sum_even_cubes_rec2_test(); 
    } 

Извините за исходный код, я не понимаю, как выделить его полностью, как C программирования исходного кода.

+0

Что это нужно делать с Expect инструментом сценариев? – Barmar

+0

'sum_even_cubes_rec (n)' in 'sum_even_cubes_rec (n)' – BLUEPIXY

ответ

0

Я не совсем уверен, что цель этой программы, но очень простой способ написать успешные программы - это работать с прочной основой и основываться на ней.

Ниже приведена программа, которая итеративно вычисляет куб числа. Вы также можете просто вернуть число, умноженное на себя 3 раза или (x*x*x).

#include <stdio.h> 

int simpleCube(int x){ 
    return (x*x*x); 
} 

int iterativeCube(int x, int n){ 
    int i, total = 1; 
    for (i = 0; i < n; i++){ 
     total *= x; 
    } 
    return total; 
} 

int main(){ 
    printf("2 Cubed is %d\n", iterativeCube(2, 3)); 
    return 0; 
} 

Вот программа, которая вычисляет куб числа, используя math.h «s pow() функции.

#include <stdio.h> 
#include <math.h> 

int main(){ 
    int base = 2, exponent = 3, result; 
    result = pow(base, exponent); 
    printf("%d^%d = %d\n", base, exponent, result); 
    return 0; 
} 

Если вы хотите, чтобы суммировать все кубики от 1 до п:

#include <stdio.h> 
#include <math.h> 

int main(){ 
    int i, n = 10, result, totalEven = 0, totalOdd = 0; 
    for (i = 1; i < n; i++){ 
     if (i % 2 == 0){ 
      /* The number is even */ 
      result = pow(i, 3); 
      totalEven += result; 
     } else { 
      /* The number is odd */ 
      result = pow(i, 3); 
      totalOdd += result; 
     } 
    } 
    printf("The sum of all even cubes from 1 to %d is %d.\n", n, totalEven); 
    printf("The sum of all odd cubes from 1 to %d is %d.\n", n, totalOdd); 
    printf("The sum of all cubes from 1 to %d is %d.\n", n, totalEven+totalOdd); 
    return 0; 
} 
Смежные вопросы