2016-11-23 64 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行: 檢查通過分割故障(核心轉儲)

下面我的程序Ç:(錯誤可能是在發生功能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(); 
    } 

很抱歉的源代碼,我沒有得到如何完全凸顯它作爲ç編程源代碼。

+0

這是什麼都與期望腳本工具呢? – Barmar

+0

'sum_even_cubes_rec(n)'在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.hpow()功能的數目的立方體的程序。

#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總結了所有的立方體到n:

#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; 
}