Created
June 3, 2020 05:54
-
-
Save HwDhyeon/08b2a5f404095d8da16c104fb326dae2 to your computer and use it in GitHub Desktop.
무한정 정수를 입력받고 평균을 구하기 (realloc 활용)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include <stdlib.h> | |
// Integer data define | |
typedef struct Data Data; | |
struct Data { | |
int num; | |
}; | |
// Integer data control functions | |
Data *NewData(int num); // Create new Integer data | |
void ViewData(Data *data); // Print one array item | |
void DeleteData(Data *data); // Free memory from data | |
// Array struct define | |
typedef struct Array Array; | |
struct Array { | |
Data **base; | |
size_t size; | |
size_t count; | |
}; | |
// Array control functions | |
Array *NewArray(void); // Create new empty array | |
void ViewArray(Array *arr); // Print all array items | |
void ArrayPushData(Array *arr, int num); // Insert Integer data to array | |
void DeleteArray(Array *arr); // Free memory from array | |
// requirements functions | |
void GetIntegerArray(Array *arr); // Get Integer data from user inputs | |
void PrintIntegerArray(Array *arr); // ViewArray(); | |
double AverageIntegerArray(Array *arr); // Calculate the average of array values | |
// Main function | |
int main() | |
{ | |
Array *arr = NewArray(); | |
GetIntegerArray(arr); | |
PrintIntegerArray(arr); | |
printf("%f\n", AverageIntegerArray(arr)); | |
DeleteArray(arr); | |
return 0; | |
} | |
void GetIntegerArray(Array *arr) { | |
int t; | |
for(;;) { | |
scanf("%d", &t); | |
if(t == -1) { | |
break; | |
} | |
ArrayPushData(arr, t); | |
} | |
} | |
void PrintIntegerArray(Array *arr) { | |
ViewArray(arr); | |
printf("\n"); | |
} | |
double AverageIntegerArray(Array *arr) { | |
int sum = 0; | |
for(int i=0;i<arr->count;i++) { | |
sum += arr->base[i]->num; | |
} | |
return (double)sum / (double)arr->count; | |
} | |
Data *NewData(int num) { | |
Data *data = (Data *)malloc(sizeof(Data)); | |
data->num = num; | |
return data; | |
} | |
void ViewData(Data *data) { | |
printf("%d\t", data->num); | |
} | |
void DeleteData(Data *data) { | |
free(data); | |
} | |
Array *NewArray(void) { | |
Array *arr = (Array *)malloc(sizeof(Array)); | |
arr->base = (Data **)malloc(sizeof(Data *)); | |
arr->size = 1; | |
arr->count= 0; | |
return arr; | |
} | |
void ViewArray(Array *arr) { | |
Data *data = NULL; | |
for(int i=0;i<arr->count;i++) { | |
data = arr->base[i]; | |
ViewData(data); | |
} | |
} | |
void ArrayPushData(Array *arr, int num) { | |
if(arr->count == arr->size) { | |
arr->size *= 2; | |
arr->base = (Data **)realloc(arr->base, sizeof(Data *)*arr->size); | |
} | |
arr->base[arr->count] = NewData(num); | |
arr->count++; | |
} | |
void DeleteArray(Array *arr) { | |
Data *data = NULL; | |
for(int i=0;i<arr->count;i++) { | |
data = arr->base[i]; | |
DeleteData(data); | |
} | |
free(arr->base); | |
free(data); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment