Skip to content

Instantly share code, notes, and snippets.

@HwDhyeon
Created June 3, 2020 05:54
Show Gist options
  • Save HwDhyeon/08b2a5f404095d8da16c104fb326dae2 to your computer and use it in GitHub Desktop.
Save HwDhyeon/08b2a5f404095d8da16c104fb326dae2 to your computer and use it in GitHub Desktop.
무한정 정수를 입력받고 평균을 구하기 (realloc 활용)
#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