2017-02-14 34 views
1

これは一日中私を食べています。私はC言語には比較的新しいので、この作業を行うことはできません。理由はわかりません。関数の暗黙的な宣言time、rand、printf、すべての関数呼び出し

assignment_1.h --- ...私は3つのファイル..

私も、これは、スタックオーバーフローを使用して私の最初の時間であるとの間隔をお詫びしたい

を持っている...しかし、とにかく、ここにコードがあります-------------------------------------------------- ------

#ifndef ASSIGNMENT_1_H 
#define ASSIGNMENT_1_H 

#define NULL 0 

int CalculateFactorial(int input); 
int CalculateFibonacci(int input); 
void ReverseArray(int size, int array[]); 
void ShuffleArray(int size, int array[]); 

#endif 

Main.c ---------------------------------- -------------------------------------

#include "assignment_1.h" 
#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 


int main(){ 

int fact = CalculateFactorial(15); 
int fib = CalculateFibonacci(15); 

printf("Factorial: %d\n", fact); 
printf("Fib: %d\n", fib); 

int array[] = {1,2,3,4,5,6}; 
int size = 6; 

ReverseArray(size, array); 
ShuffleArray(size, array); 

return 0; 


}/*end main*/ 

assignment_1.c --- ------------------ ------------------------------------------

#include "assignment_1.h" 


int CalculateFactorial(int input){ 

if(input<=0) return 0; 


int factorial = input; 
int multiplier = input; 

while(multiplier > 1){ 
    factorial *= multiplier; 
    --multiplier; 
}/*end while*/ 

return factorial; 

}/*end calcfact*/ 



int CalculateFibonacci(int input){ 

if(input<=0) return 0; 

else if(input == 1)  return 1; 

return CalculateFibonnaci(input-1) + CalculateFibonacci(input-2); 

}/*end calcfib*/ 



void ReverseArray(int size, int array[]){ 

int last = size-1; 
int first = 0; 
int temp; 

while (last-first > 1){  /*stops the loop if size is even*/ 

temp = array[last]; 
array[last] = array[first]; 
array[first] = temp; 

++first; 
--last; 

if(last-first == 2)  break; /*stops loop if size is odd*/ 

}/*end while*/ 

int i; 
for (i = 0; i< size;++i){ 
    printf("%d, ",array[i]); 
} 
printf("\n"); 

}/*end reverse*/ 



void ShuffleArray(int size, int array[]){ 

srand((unsigned int)time(NULL)); 

int i; 
for (i = 0; i < size; ++i){ 

    int idx = rand()%size; /*random unsigned int between 0 and the 
         max index of the array*/ 

    int temp = array[i]; 
    array[i] = array[idx]; 
    array[idx] = temp; 

}/*end for loop*/ 

for (i = 0; i< size;++i){ 
    printf("%d, ",array[i]); 
} 
printf("\n"); 

}/*end shuffle*/ 

Iあなたはmain.cのに別々にassignment_1.cをコンパイルしているので合理的である(

+0

これは分かりませんが、注意してください。1)プログラムの先頭に '' srand()を一度呼び出す必要があります.3) '' int''を定義する必要はありません。 '15! 'の値を保持しません。 –

+3

'assignment_1.c'の中の' assignment_1.c'で使われている関数(またはそれがインクルードしている別のヘッダ)のヘッダを '#インクルード 'する必要があります。両方のファイルがそれらの関数を使用する場合は、両方の '.c'ファイルにそれらを含めることはOKです。 – Dmitri

+0

@Dmitiri、 私があなたのことを理解しているかどうか分からないのですが、assignment1.cとmain.ciの先頭に '#include" assignment_1.h " – spencerktm30

答えて

2

...私は非常に任意の助けに感謝関数の暗黙的な宣言「」]

:すべてと言って警告エラーのトンを得続けますリンカーを使用して2つのファイルをまとめてリンクする予定の場合)、これらのヘッダーをファイルに含めなければなりません。;ある翻訳単位から別の翻訳単位に自動的に引き継がれることはありません。

assignment_1.cにこれらを挿入します。

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 

私はあなたがassignment_1.hで指定NULLの定義され、追加のエラーを見つけました。 になりません。NULLとなります。これは標準シンボルです。それはあなた自身のprintfscanfを書くようなものでしょう。

NULLは、<stddef.h>ヘッダー内で定義されています。 NULLを使用する場合は、それも含めます。

+1

'NULL'実装固有であり、必ずしも '0'(または'((void *)0x0) 'とは必ずしも同じではない))...オペレーティングシステムが特定のメモリマップ変換デザインに従って定義する値です'((void *)0x0)'の99%と定義されています)。 – Myst

+0

@Myst 'NULL'はヌルポインタ定数であり、その定義によってゼロと等しい値を比較する*必須*です。私はあなたが言っていることを理解しています。基礎となるゼロビットパターンを持たないかもしれない。私はこの質問を回答に注入するのに十分な程度の詳細は考慮しません。人々がさらに読んでみたいと思ったら、これらのコメントをかなり早く見るでしょう。 Ta :) – Sebivor

+0

それは本当です:-) – Myst

関連する問題