🔶 실기 대비 - C언어 -인프런 C프로그래밍 입문부터 게임 개발까지(변수,상수,입출력,반복문,포인터)
✔ 변수,상수,입출력,프로젝트
- 코드
#include <stdio.h>
int main(void)
{
printf("정수형 변수에 대한 예제\n");
int age1 = 12;
printf("%d\n", age1);
age1 = 13;
printf("%d\n", age1);
printf("실수형 변수에 대한 예제\n");
float f = 46.5;
printf("%f\n", f); // 46.500000 출력
printf("%.2f\n", f); // 46.50 출력 => .다음에 소숫점 출력하고자하는 자릿수 입력
double d = 4.428;
printf("%lf\n", d); // 4.428000 출력
printf("%.2lf\n", d); // 4.43 출력 => 반올림
printf("상수에 대한 예제\n");
// 변수 타입앞에 const 붙혀주면 왼다 => 변하지 않는수 , 수정 안됨
const int YEAR = 2000;
printf("태어난 년도 = %d\n", YEAR);
printf(" printf 사용 예제\n");
// 연산
int add = 3 + 7;
printf("3+7 = %d\n", add);
printf("%d x %d = %d\n", 3, 7, 3 * 7);
printf("scanf 사용예제\n");
// 키보드 입력을 받아서 저장
int input;
printf("값을 입력하세요\n");
// input이라는 변수에 정수형을 입력받는다
scanf_s("%d", &input);
printf("입력값 : %d\n", input);
int one, two, three;
printf("3개의 정수를 입력하세요 : ");
scanf_s("%d %d %d", &one, &two, &three);
printf("첫번째 값 : %d\n",one);
printf("두번째 값 : %d\n",two);
printf("세번째 값 : %d\n",three);
printf("문자( 한 글자), 문자열(한 글자 이상의 여러 글자)\n");
char c = 'A';
printf("%c\n", c);
printf("배열 선언\n");
char str[256];
printf("문자열은 & 안붙혀도 되고, 사이즈를 표기해야된다\n");
scanf_s("%s", str, sizeof(str));
printf("%s\n", str);
printf("프로젝트 \n");
printf("경찰관이 범죄자의 정보를 입수(조서 작성)\n");
printf("이름, 나이, 몸무게, 키, 범죄명?\n");
char name[256];
printf("이름이 뭐에요?");
scanf_s("%s", name, sizeof(name));
int age;
printf("몇살이에요?");
scanf_s("%d", &age);
float weight;
printf("몸무게는 몇 kg?");
scanf_s("%f", &weight);
double height;
printf("키는 몇?");
scanf_s("%lf", &height);
char what[256];
printf("무슨 범죄를 저질렀어요?");
scanf_s("%s", what, sizeof(what));
printf("조서 내용 출력");
printf("\n\n--- 범죄자 정보 ---\n\n");
printf("이름 : %s\n", name);
printf("나이 : %d\n", age);
printf("몸무게 : %.2f\n", weight);
printf("키 : %.2lf\n", height);
printf("범죄명 : %s\n", what);
return 0;
}
▶ 출력내용
✔ 반복문
- 코드
#include<stdio.h>
int main(void)
{
printf("++ 연산자\n");
int a = 10;
// ++이 앞에 붙으면 ++를 실행 후 출력
printf("a는 %d\n", ++a);
// ++이 뒤에 붙으면 해당 문장 수행 후 ++ 이 적용되는것
printf("a는 %d\n", a++);
printf("a는 %d\n", a);
printf("반복문 : for, while, do while\n");
printf("for문 : for(선언; 조건; 증감; { } \n");
printf("반복문 : for 예시\n");
for (int i = 1; i <= 3; i++) {
printf("Hello world %d\n", i);
}
printf("while문 : while(조건){ } \n");
printf("반복문 : while 예시 \n");
int i = 1;
while (i <= 3)
{
printf("Hello world %d\n", i++);
}
printf("do while문 : do{ } while(조건){ } \n");
printf("반복문 : do while 예시 \n");
int j = 1;
do {
printf("Hello world %d\n", j++);
} while (j <= 3);
printf("반복문 :2중 반복문 예시 \n");
for (int i = 1; i <= 3; i++) {
printf("첫번째 반복문 : %d\n", i);
for (int j = 1; j <= 2; j++) {
printf(" 두번째 반복문 : %d\n", j);
}
}
printf("반복문 :2중 반복문 활용한 구구단 출력 \n");
for (int i = 2; i <= 3; i++) {
printf(" %d단 계산 \n", i);
for (int j = 1; j <= 9; j++) {
printf(" %d * %d = %d\n", i, j, i * j);
}
}
printf("반복문 :2중 반복문 활용한 별 출력 \n");
for (int i = 0; i < 5; i++) {
for (int j = 0; j <= i; j++) {
printf("*");
}
printf("\n");
}
printf("반복문 :2중 반복문 활용한 별 출력 \n");
for (int i = 0; i <= 5; i++) {
for (int j = i; j <= 5-1; j++) {
printf(" ");
}for (int k = 0; k <= i; k++) {
printf("*");
}
printf("\n");
}
return 0;
}
▶ 출력내용
✔ 포인터
- 코드
#include<stdio.h>
void swap(int c, int d); // 함수 선언
void swap_addr(int* c, int* d);
void changeArray(int* ptr);
int main(void)
{
// 포인터
// [철수] : 101호 -> 메모리 공간의 주소
// [영희] : 201호
// [민수] : 301호
// 각 문 앞에 암호가 걸려있음
int 철수 = 1; // 암호 : 1
int 영희 = 2;
int 민수 = 3;
printf("철수네 주소 : %d, 암호 : %d\n", &철수, 철수);
printf("영희네 주소 : %d, 암호 : %d\n", &영희, 영희);
printf("민수네 주소 : %d, 암호 : %d\n", &민수, 민수);
// 미션 : 아파트의 각 집에 방문하여 문에 적힌 암호 확인
int *미션맨; // 포인터 변수 선언 : 변수명 앞에 *을 붙혀준다
미션맨 = &철수; // 미션맨이 철수의 주소값을 할당 : 할당할 변수이름(철수)앞에 &를 붙혀준다
printf("미션맨이 방문하는 곳 주소 %d, 암호 : %d\n", 미션맨, *미션맨);
미션맨 = &영희;
printf("미션맨이 방문하는 곳 주소 %d, 암호 : %d\n", 미션맨, *미션맨);
미션맨 = &민수;
printf("미션맨이 방문하는 곳 주소 %d, 암호 : %d\n", 미션맨, *미션맨);
// 두번째 미션 : 각 암호에 3을 곱해라
미션맨 = &철수;
*미션맨 = *미션맨 *3 ;
printf("미션맨이 암호를 바꾼 곳 주소 %d, 암호 : %d\n", 미션맨, *미션맨);
미션맨 = &영희;
*미션맨 = *미션맨 * 3;
printf("미션맨이 암호를 바꾼 곳 주소 %d, 암호 : %d\n", 미션맨, *미션맨);
미션맨 = &민수;
*미션맨 = *미션맨 * 3;
printf("미션맨이 암호를 바꾼 곳 주소 %d, 암호 : %d\n", 미션맨, *미션맨);
// 스파이등장
// 미션맨이 바꾼 암호에서 2를 빼라
// 스파이도 미션맨이 가르키고있는 메모리 주소를 가리킨다
int* 스파이 = 미션맨;
스파이 = &철수;
*스파이 = *스파이 - 2;
printf("스파이가 방문하는 곳 주소 : %d, 암호 : %d\n", 스파이, *스파이);
스파이 = &영희;
*스파이 = *스파이 - 2;
printf("스파이가 방문하는 곳 주소 : %d, 암호 : %d\n", 스파이, *스파이);
스파이 = &민수;
*스파이 = *스파이 - 2;
printf("스파이가 방문하는 곳 주소 : %d, 암호 : %d\n", 스파이, *스파이);
// 참고로 미션맨,스파이가 사는 곳의 주소 : &미션맨, &스파이 로 확인
printf("미션맨이 사는 주소 : %d\n", &미션맨);
printf("스파이가 사는 주소 : %d\n", &스파이);
// 배열
printf("-------배열--------\n ");
int arr[3] = { 5,10, 15 };
int* ptr = arr;
for (int i = 0; i < 3; i++) {
printf("배열 arr[%d] 의 값 : %d\n", i, arr[i]);
}
for (int i = 0; i < 3; i++) {
printf("포인터 ptr[%d] 의 값 : %d\n", i, ptr[i]);
}
printf("-------포인터의 값 변경 후--------\n ");
ptr[0] = 100;
ptr[1] = 200;
ptr[2] = 300;
for (int i = 0; i < 3; i++) {
//printf("배열 arr[%d] 의 값 : %d\n", i, arr[i]);
printf("배열 arr[%d] 의 값 : %d\n", i, *(arr + i));
}
for (int i = 0; i < 3; i++) {
//printf("포인터 ptr[%d] 의 값 : %d\n", i, ptr[i]);
printf("포인터 ptr[%d] 의 값 : %d\n", i, *(ptr + i));
}
// *(arr + i) == arr[i] : 똑같은 표현
// arr == arr 배열의 첫번째 값의 주소와 동일하다 == &arr[0]
// *& 는 아무것도 없는 것과 같다 : &는 주소, *은 그 주소의 값이기 때문
// *& 는 서로 상쇄된다
// SWAP 함수 : 변수의 값을 바꾼다
int c = 10;
int d = 20;
printf("SWAP 함수 전 => c : %d, d : %d\n", c, d);
swap(c, d);
printf("SWAP 함수 후 => c : %d, d : %d\n", c, d);
// 값에 의한 복사(Call by Value) -> 값만 복사한다는 의미
// 메모리 공간에 있는 주소값 자체를 넣어줘야한다
printf("SWAP 함수 전(주소값 전달) => c : %d, d : %d\n", c, d);
swap_addr(&c, &d);
printf("SWAP 함수 후(주소값 전달) => c : %d, d : %d\n", c, d);
// 포인터로 배열값 변경하기
int arr2[3] = { 10, 20, 30 };
printf("------배열값 변경 전-------\n");
for (int i = 0; i < 3; i++) {
printf("%d\n", arr2[i]);
}
changeArray(arr2);
printf("------배열값 변경 후-------\n");
for (int i = 0; i < 3; i++) {
printf("%d\n", arr2[i]);
}
return 0;
}
void swap(int c, int d) {
int temp = c;
c = d;
d = temp;
printf("SWAP 함수 내 => c : %d, d : %d\n", c, d);
}
void swap_addr(int *c, int *d) {
int temp = *c;
*c = *d;
*d = temp;
printf("SWAP 함수 내(주소값 전달)=> c : %d, d : %d\n", *c, *d);
}
void changeArray(int* ptr) {
ptr[2] = 50;
}
▶ 출력내용