드구 2024. 10. 10. 18:00

1. 포인터 배열

#include <stdio.h>

// 포인터 배열과 각 요소의 주소 출력
int main() {
    int a[5] = { 1, 2, 3, 4, 5 };
    for (int i = 0; i < 5; i++)
       printf("배열 a[%d]번째 주소는 %d 입니다\n", i + 1, &a[i]);
    
    // 배열의 주소가 첫번째 요소의 주소
    printf("주소: %p\n", (void*)a);
    return 0;
}

 

2. 배열의 첫 번째 요소 가리키는 포인터

#include <stdio.h>

// 배열 첫 번째 요소 가리키는 포인터를 통해 값 출력
int main() {
	int a[5] = { 1,2,3,4,5 };
	int* b = &a[0];
	printf("a[0]의 주소값은 %d\n",b);
	printf("a[0]의 주소값은 %d\n",&a[0]);
	printf("a[0]의 주소값은 %d\n",a);
	printf("a[0]에 저장된 값은 %d\n",*b);
	printf("a[0]에 저장된 값은 %d\n",a[0]);
	return 0;
}

3. 포인터를 이용해 배열의 값 변경

#include <stdio.h>

int main() {
	int a[5] = { 1,2,3,4,5 };
	int* b = a;
	printf("기존 배열의 a의 값 출력\n");
	for (int i = 0; i< 5; i++)
		printf("%d ", a[i]);
	printf("\n");
	
	printf("배열 각 요소에 10을 더한다");
	printf("\n변경된 배열의 값 - 방법 1\n");
	for(int i=0;i<5;i++)
	{	
		*(b + i) += 10;
		printf("%d ", b[i]);
	}
	printf("\n변경된 배열의 값 - 방법 2\n");
	for (int i = 0; i < 5; i++)
		printf("%d ", a[i]);

	printf("\n변경된 배열의 값 - 방법 3\n");
	for (int i = 0; i < 5; i++)
		printf("%d ", *(b + i));
	return 0;
}

4. 학생 점수 입력받아 평균 계산

#include <stdio.h>

// 학생 점수를 입력받아 평균 계산
int main() {
    int a[5];
    int* b = a;
    int sum = 0;

    for (int i = 0; i < 5; i++) {
        printf("%d번째 학생의 시험점수를 입력하세요: ", i + 1);
        scanf_s("%d", b + i);
        sum += a[i];
    }

    printf("5명 학생의 평균은 %.0f입니다.\n", sum / 5.0);
    return 0;
}

5. 학생의 키 입력받기

#include <stdio.h>

int main() {
	int stu[5];
	int* st = stu;

	int sum = 0;

	for (int i = 0; i < 5; i++) {
		printf("%d번째 학생의 키를 입력하세요: ", i + 1);
		scanf_s("%d", st + i);
	}
	printf("학생들의 키는 아래와 같습니다.\n");
	for (int i = 0; i < 5; i++) {
		printf("%d번째 학생의 키는 %d입니다. \n", i + 1,stu[i]);
		sum += stu[i];
	}
	printf("5명 학생의 평균은 %.0f입니다.", sum / 5.0);
	return 0;
}

6. 성적 입력받고 최고 성적 출력

#include <stdio.h>

int main() {
    int score[5];
    int* sc = score;
    int max = 0;

    for (int i = 0; i < 5; i++) {
        printf("%d번째 성적을 입력하세요: ", i + 1);
        scanf("%d", sc + i);
        if (max < *(sc + i))
            max = *(sc + i);
    }
    for (int i = 0; i < 5; i++) {
        if (max == score[i])
            printf("최고 성적은 %d번째 성적인 %d입니다.\n", i + 1, *(sc + i));
    }
    return 0;
}

7. 숫자 3개를 입력받고 오름차순으로 정렬

#include <stdio.h>

int main() {
    int num[3];
    int* nb = num;
    int temp;

    printf("수 3개를 차례로 입력하세요: \n");
    for(int i=0;i<3;i++)
        scanf("%d", nb + i);

    if (*nb > *(nb + 1)) {
        temp = *nb;
        *nb = *(nb + 1);
        *(nb + 1) = temp;
    }
    if (*(nb + 1) > *(nb + 2)) {
        temp = *(nb + 2);
        *(nb + 1) = *(nb + 2);
        *(nb + 2) = temp;
    }
    if (nb[0] > nb[1]) {
        temp = nb[0];
        nb[0] = nb[1];
        nb[1] = temp;
    }

    printf("정렬 결과는 %d, %d, %d입니다.", *nb, *(nb + 1), *(nb + 2));
    return 0;
}

8. 주사위 던지기

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

int main() {
    srand(time(0));
    int dice[3];
    int* dc = dice;
    int count = 0;

    while (1) {
        for (int i = 0; i < 3; i++) {
            *(dc+i) = rand() % 6 + 1;
            count += 1;
        }
        if (*dc == *(dc+1) && *dc == *(dc+2)) {
            printf("주사위는 총 %d번 던졌습니다.\n", count);
            printf("주사위가 가리키는 수는 %d입니다.\n", *dc);
            break;
        }
    }
    return 0;
}

9. 가위바위보 게임

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

int main() {
    srand(time(NULL));
    int game, count, win, lose, draw;
    count = win = lose = draw = 0;
    char str1[3][80] = { "가위","바위","보" };
    int* gm = &game;
    char (*pstr1)[80] = str1;

    while (1) {
        printf("**************** 가위 바위 보 게임 ****************\n");
        printf("1. 가위 _ 2. 바위 _ 3. 보 _ 0. 종료\n");
        printf("입력해주세요: ");
        scanf("%d", gm);
        int com = rand() % 3 + 1;
        int* cm = &com;

        if (game == 0) {
            printf("종료합니다.\n");
            break;
        } else if (*gm != 1 && *gm != 2 && *gm != 3) {
            printf("잘못 입력하셨습니다.\n\n");
            continue;
        }
        count += 1;
        printf("컴퓨터 : %s\n", *(pstr1 + (*cm - 1)));
        printf("사용자 : %s\n", *(pstr1 + (*gm - 1)));

        if (*gm == *cm) {
            printf("비겼습니다.\n");
            draw += 1;
        } else if ((*gm == 1 && *cm == 3) || (*gm == 2 && *cm == 1) || (*gm == 3 && *cm == 2)) {
            printf("이겼습니다.\n");
            win += 1;
        } else {
            printf("졌습니다.\n");
            lose += 1;
        }
        printf("%d전 %d승 %d무 %d패\n\n", count, win, draw, lose);
    }
    return 0;
}

10. 포인터 변수로 값 더하기

#include <stdio.h>

// 포인터 변수 사용하여 값 더하기
int main() {
    int a = 10;
    int b = 20;
    int c;
    int* x[3];  // 포인터 배열
    x[0] = &a;
    x[1] = &b;
    x[2] = &c;

    *x[2] = *x[0] + *x[1];  // 포인터를 통해 a와 b의 값을 더함

    for (int i = 0; i < 3; i++)
        printf("%d ", *x[i]);
    printf("\n변수 c의 값은 %d", c);
    return 0;
}

 

11. 문자형 배열 출력

#include <stdio.h>

// 문자형 배열 출력
int main() {
    const char* myclass2[6] = { "Hyengjoo", "Kim", "Sieun", "Park", "Lee", "Jeon" };

    for (int i = 0; i < 6; i++)
        printf("%s ", myclass2[i]);
    return 0;
}

12. 과일 목록 출력

#include <stdio.h>

// 과일 목록 출력
int main() {
    const char* fruite[5] = { "Banana", "Apple", "Melon", "Orange", "Tomato" };

    for (int i = 0; i < 5; i++)
        printf("%s\n", fruite[i]);
    return 0;
}

13. 문자열 복사 strcpy

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>

// 문자열 복사 
int main() {
    char str[20] = "mango tree";
    printf("%s\n", str);

    strcpy(str, sizeof(str), "apple pie");  // 문자열 복사
    printf("%s\n", str);

    return 0;
}

 

14. 문자열 일부 복사 strncpy

#include <stdio.h>
#include <string.h>

// 문자열 일부 복사
int main() {
    char str[20] = "mango tree";
    printf("%s\n", str);

    strncpy(str, "apple pie", 5);  // "apple pie"의 앞 5글자만 복사
    printf("%s\n", str);

    return 0;
}

15. 문자열 연결 strcat

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>

// 문자열 연결
int main() {
    char str[20] = "straw";
    printf("%s\n", str);

    strcat(str, sizeof(str), "berry");  // 문자열 연결
    printf("%s\n", str);

    return 0;
}

 

16. 제한된 길이로 문자열 연결 strncat

#include <stdio.h>
#include <string.h>

// 문자열의 앞부분만 연결
int main() {
    char str[20] = "straw";
    printf("%s\n", str);

    strncat(str, sizeof(str), "berryberry", 5);  // "berryberry"의 앞 5글자만 연결
    printf("%s\n", str);

    return 0;
}

17. 문자열 길이 확인 strlen

#include <stdio.h>
#include <string.h>

// 문자열 길이 출력
int main() {
    char str[20] = "straw";
    printf("%s\n", str);

    printf("문자열 길이: %zu\n", strlen(str));  // 문자열 길이 출력

    return 0;
}

18. 두 문자열 중 긴 문자열 출력

#include <stdio.h>
#include <string.h>

// 두 문자열 중 긴 문자열 출력
int main() {
    char a[20];
    char b[20];

    printf("두 개의 문자열을 입력하세요: ");
    scanf("%s %s", a, b);  // 두 문자열 입력

    printf("긴 문자열: %s\n", strlen(a) > strlen(b) ? a : b);
    return 0;
}

19. strlen과 sizeof의 차이

#include <stdio.h>
#include <string.h>

// strlen과 sizeof 차이
int main() {
    char str1[20] = "banana";

    printf("strlen: %zu\n", strlen(str1));  // 문자열의 실제 길이
    printf("sizeof: %zu\n", sizeof(str1));  // 배열의 전체 크기

    return 0;
}

20. 문자열 비교 strcmp

#include <stdio.h>
#include <string.h>

// 문자열을 비교하여 사전순으로 어느 것이 먼저인지 출력
int main() {
    char str1[20] = "banana";
    char str2[20] = "apple";

    int result = strcmp(str1, str2);  // 문자열 비교

    if (result < 0)
        printf("%s이 %s보다 사전순으로 먼저입니다.\n", str1, str2);
    else if (result > 0)
        printf("%s이 %s보다 사전순으로 먼저입니다.\n", str2, str1);
    else
        printf("두 문자열은 같습니다.\n");

    return 0;
}