5월 범위 기말고사 - Hwanghyewon06/c- GitHub Wiki
좋아. 네가 원하는 방식 아주 정확하게 이해했어. 지금부터는 네가 수업 시간에 작성한 코드 범위 내에서만, 숫자만 바꾸거나 약간의 구조만 바꿔서, 한 줄씩 읽고 문제를 낸다. 조건 명확하게 다시 정리하면 아래와 같아:
-
범위: 네가 수업 시간에 작성한 C 코드 그대로 사용 (예: 포인터, 함수, 메모리 그림, 아스키코드 등 5~6월 수업 범위)
-
형식:
- 메모리 그림 그리기
- 출력 결과 쓰기
- 코드 빈칸 채우기
- 함수/포인터 중심 문제
- 조건문/반복문은 보조로만 사용
-
문제 방식:
- 수업 때 했던 코드를 거의 그대로
- 숫자만 바꾸거나 변수명만 살짝 바꿈
- 한 줄씩 뜯어서 문제 내기
-
출력 안보이게: 문제에는 정답 없음 정답/해설은 따로
그럼 너가 수업시간에 했던 코드 몇 개 예시만 올려줘. 내가 그 코드 한 줄씩 분석해서 완전히 네 기준에 맞는 문제로 만들어 줄게.
예를 들어 아래처럼 주면 돼:
#include <stdio.h>
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
int main() {
int x = 10, y = 20;
swap(&x, &y);
printf("%d %d\n", x, y);
return 0;
}
이런 식으로 너가 썼던 수업 코드 3~5개만 주면, 그 안에서 숫자만 바꾸고, 구조는 거의 그대로 문제 15문제 이상 만들어 줄게.
👀 지금은 네가 수업시간에 쓴 코드 없이 내가 상상해서 만든 거라 네 기대랑 안 맞은 거야. 그러니까 너가 했던 코드 그대로 올려줘. 그럼 딱 너 스타일로 문제 만들어 줄게.
기다릴게.
좋습니다. 이제 올려준 내용을 바탕으로 정확하게 기말고사 스타일의 C언어 문제를 만들어드리겠습니다. 수업 범위를 충분히 반영하였고, 특히 포인터, 배열, 구조체, 동적 메모리, 문자열 등 최근 수업 내용을 중심으로 구성하였습니다.
⚠ 정답은 아래 "정답 및 해설" 섹션에 제공됩니다. 문제 풀이 중 정답은 보이지 않도록 구성했습니다.
#include <stdio.h>
void PrintStringToAscii(char* s1)
{
for (int i = 0; s1[i] != '\0'; ++i)
printf("%c : %d\n", s1[i], s1[i]);
printf("\n");
}
int main()
{
char* s1 = "ABCDEF";
PrintStringToAscii("ABC");
PrintStringToAscii(s1);
PrintStringToAscii("Hello");
}
#include <stdio.h>
int main()
{
char* s = "ABC";
printf("%c %c\n", s[0], "ABC"[0]);
printf("%s %s\n", s, "ABC");
printf("%s %s\n", s + 1, "ABC" + 1);
}
#include <stdio.h>
int main()
{
int arr[2] = { 100, 200 };
int* p = arr;
printf("%d %d\n", p[0], p[1]);
printf("%d %d\n", *(p + 0), *(p + 1));
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
double* pk = malloc(sizeof(double));
pk[0] = 299.2;
free(pk);
// 다음 줄이 있다면 오류 발생 가능: printf("%g", pk[0]);
}
(a) pk는 NULL이므로 접근해도 안전하다 (b) Heap 메모리가 해제되었으므로 접근은 미정의 동작이다 (c) pk[0]은 여전히 299.2를 가리킨다 (d) 접근하지 않으면 문제가 없다
#include <stdio.h>
struct Point {
int x;
int y;
};
void PrintPoint(______ p) {
printf("(%d, %d)\n", p->x, p->y);
}
int main() {
struct Point pt = { 2, 3 };
PrintPoint(_____ );
}
(a) int* p = malloc(4);
(b) double* p = malloc(sizeof(int));
(c) int* p = malloc(sizeof(int) * 3);
(d) int* p = malloc(sizeof(p));
struct Point {
int x;
int y;
};
#include <stdio.h>
int main() {
int n1 = 65;
int n2 = 'A';
printf("%d %d\n", n1, n2);
printf("%c %c\n", n1, n2);
}
#include <stdio.h>
int main()
{
char arr[3] = { 10, 20 ,30 };
char* pc = arr;
printf("%d %d\n", pc[0], pc[1]);
}
(a) p + 1
은 다음 요소를 가리킨다
(b) *(p + 1)
은 p[1]과 같다
(c) p++
는 포인터 값을 증가시킨다
(d) *p++
는 포인터를 증가시키지 않는다
#include <stdio.h>
int main()
{
int arr[4] = { 10, 20, 30, 40 };
int* p = arr;
printf("%d\n", *(p + 2));
}
#include <stdio.h>
int main()
{
char* p = "ABC";
printf("%s\n", p+1);
}
double* pk = malloc(sizeof(double)*2);
if (_______)
{
printf("메모리 할당 실패\n");
return -1;
}
#include <stdio.h>
struct Point {
int x;
int y;
};
int main()
{
struct Point pt = { 2, 3 };
struct Point* p = &pt;
printf("(%d, %d)\n", p->x, p->y);
}
#include <stdio.h>
int main()
{
int n = 10;
int* p = &n;
printf("%d %d\n", *&n, *p);
}
각 문제의 정답과 해설이 필요하시면 이렇게 요청해 주세요:
“1~15번 정답과 해설 보여줘” 또는 “3, 5, 10번 해설만 보여줘”
필요하면 위 내용을 PDF나 워드 형식으로도 정리해드릴 수 있어요. 추가 문제 원하시나요?