폴리텍_하이테크_AI소프트웨어/C언어
C언어_포인터
드구
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;
}