01. malloc() 함수를 사용하여 int 변수, short 변수, float 변수를 저장할 수 있는 동적 메모리를 만들고 사용자로부터 해당 값을 입력받아서 저장한다. 동적 메모리에 저장된 값을 꺼내서 출력한다.

#include <stdio.h>
#include <stdlib.h>
int main() {
int* a = (int*)malloc(sizeof(int));
short* b = (short*)malloc(sizeof(short));
float* c = (float*)malloc(sizeof(float));
printf("정수(int형)을 입력하시오: ");
scanf("%d", a);
printf("정수(short형)을 입력하시오: ");
scanf("%d", b);
printf("실수(float형)을 입력하시오: ");
scanf("%f", c);
printf("\n입력된 값은 %d, %d, %.2f입니다.", *a, *b, *c);
free(a);
free(b);
free(c);
}
02. 사용자가 입력한 n개의 실수의 합을 계산하기 위한 C 프로그램을 작성해보자. 사용자로부터 실수의 개수를 먼저 입력받도록 해보자. 실수의 개수만큼 동적 메모리를 할당하고, 실수들을 동적 메모리에 저장한다.

#include <stdio.h>
#include <stdlib.h>
int main() {
int a;
double sum = 0;
double* p;
printf("실수의 개수: ");
scanf("%d", &a);
p = (double*)malloc(sizeof(double) * a);
for (int i = 0; i < a; i++) {
printf("실수를 입력하시오: ");
scanf("%lf", p + i);
}
for (int i = 0; i < a; i++) {
sum += p[i];
}
printf("합은 %.1lf입니다. ", sum);
free(p)
}
03. 정수 100개를 저장할 수 있는 동적 메모리를 할당받고 여기에 0부터 99 사이의 난수를 저장한다. 난수 중에서 최대값을 찾아서 출력해보자.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define size 100
int main() {
srand((unsigned)time(NULL));
int* a = (int*)malloc(sizeof(int) * size);
int max;
for (int i = 0; i < size; i++) {
a[i] = rand() % 100;
}
max = a[0];
for (int i = 1; i < size; i++) {
if ( max < a[i]) {
max = a[i];
}
}
printf("난수 중에서 최대 값은 %d입니다.", max);
free(a)
}
04. malloc()함수를 사용하여 문자열을 저장할 수 있는 동적 메모리를 생성하고 사용자가 입력한 문자열을 저장한 후에 화면에 출력한다. 문자열을 입력받기 전에 문자열의 최대 길이를 먼저 입력받는다.

#include <stdio.h>
#include <stdlib.h>
int main() {
char* p = NULL;
int len;
printf("문자열의 최대 길이를 입력하시오: ");
scanf("%d", &len);
getchar();
p = (char*)malloc(sizeof(char) * (len+1));
printf("문자열을 입력하시오: ");
gets_s(p, sizeof(char) * (len + 1));
printf("\n입력된 문자열은 %s입니다.", p);
free(p);
}
05. 처음에 20바이트를 동적 할당받아서 "hangookuniv"를 저장한다. realloc()를 이용하여 동적 할당 메모리의 크기를 30바이트로 증가시키고, 이미 있던 문자열에 ".com"을 추가해보자. 저장된 문자열과 동적 할당 메모리의 주소를 출력해보자.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
char* p = (char*)malloc(sizeof(char) * 20);
strcpy(p, "hangookuniv");
printf("문자열 = %s, 주소 = %u \n", p, p);
p = (char*)realloc(p, sizeof(char) * 30);
strcat(p, ".com");
printf("문자열 = %s, 주소 = %u \n", p, p);
free(p)
}
06. 다음과 같은 구조체를 동적 메모리 할당으로 생성하는 프로그램을 작성해보자. 동적으로 생성된 구조체에는 { 10, 3.14, 'a'}를 저장한다.
typedef struct rec {
int i;
float PI;
char A;
} my_record;

#include <stdio.h>
#include <stdlib.h>
typedef struct rec {
int i;
float PI;
char A;
} my_record;
int main() {
my_record* p = (my_record*) malloc(sizeof(my_record));
*p = { 10,3.14,'a' };
printf("i = %d \n", (*p).i);
printf("PI = %.2f \n", p->PI);
printf("A = %c \n", p->A);
}
07. 성적을 나타내는 구조체가 다음과 같다. 사용자에게 구조체의 개수를 입력하도록 요청하고 개수만큼의 동적 메모리를 할당받은 후에 구조체에 값을 저장한다. 입력이 끝나면 구조체에 저장된 값을 화면에 출력한다.
struct course {
char subject[30];
double marks;
};

#include <stdio.h>
#include <stdlib.h>
struct course {
char subject[30];
double marks;
};
int main() {
int len;
struct course* p;
printf("구조체의 개수: ");
scanf("%d", &len);
p = (struct course*)malloc(sizeof(struct course) * len);
for (int i = 0; i < len; i++) {
printf("과목 이름과 성적: ");
scanf("%s %lf", p[i].subject, &p[i].marks); // &(p + i)->marks 도 가능
}
printf("\n");
for (int i = 0; i < len; i++) {
printf("%-10s %.1lf \n", p[i].subject, p[i].marks);
}
free(p);
}'C' 카테고리의 다른 글
| [C언어 | SDL을 이용한 게임 작성] 슈팅게임 (0) | 2025.02.27 |
|---|---|
| [C언어 | SDL을 이용한 게임 작성] Visual Studio에서 SDL 개발 환경 설정하기 (0) | 2025.02.24 |
| [쉽게 풀어쓴 C언어 Express 개정 4판] 16장 Programming (1) | 2024.10.16 |
| [쉽게 풀어쓴 C언어 Express 개정 4판] 15장 Programming (0) | 2024.10.15 |
| [쉽게 풀어쓴 C언어 Express 개정 4판] 14장 Programming (14) | 2024.10.11 |