Hello World
#include <stdio.h>
int main() {
printf("Hello World \n");
}
정수형 변수
int age = 28;
printf("%d\n", age);
age = 14;
printf("%d\n", age);
return 0;
실수형 변수
float f = 68.5f;
printf("%.3f\n", f);
double d = 55.53;
printf("%.2lf\n", d);
return 0;
상수
const int YEAR = 1995;
printf("태어난 년도 : %d\n", YEAR);
return 0;
연산
int add = 3 + 7;
printf("3 + 7 = %d\n", add);
printf("%d + %d = %d\n", 3, 7, 3 + 7);
return 0;
scanf
int input;
printf("값을 입력하세요 : ");
scanf_s("%d", &input);
printf("입력값 : %d\n", input);
return 0;
//여러개
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);
return 0;
문자, 문자열
char c = 'A';
printf("%c\n", c);
return 0;
char str[256];
scanf_s("%s", str, sizeof(str));
printf("%s\n", str);
return 0;
++
int a = 10;
printf("a= %d\n", a); //10
a++; //1씩 증가 a++ > a = a + 1;
printf("a= %d\n", a); //11
a++;
printf("a= %d\n", a); //12
return 0;
int b = 20;
printf("b = %d\n", ++b); //1을 먼저 더함 21
printf("b = %d\n", b++); //b를 먼저 나타내고 1을 더함 21
printf("b = %d\n", b); //22
return 0;
반복문
for (선언; 조건; 증감)
for (int i = 1;i <=10; i++)
{
printf("Hello World %d\n", i);
}
return 0;
while(조건){ }
int i = 1;
while (i<=10)
{
printf("Hello World %d\n", i++);
//i++;
}
return 0;
do { } while (조건);
int i = 1;
do {
printf("Hello World %d\n", i++);
} while (i <= 10);
return 0;
이중 반복문
for (int i = 1; i <= 4; i++)
{
printf("첫 번째 반복문 : %d\n", i);
for (int j = 1; j <= 5; j++)
{
printf(" 두 번째 반복문 : %d\n", j);
}
}
return 0;
활용
//구구단
for (int i = 2; i <= 9; i++) {
printf("%d단 계산 \n", i);
for (int j = 1; j <= 9; j++) {
printf(" %d x %d = %d\n", i, j, i * j);
}
}
return 0;
for (int i = 0; i < 5;i++) {
for (int j = 0; j <=i; j++) {
printf("*");
}
printf("\n");
}
return 0;
피라미드 쌓기
int floor;
printf("몇 층으로 쌓겠느냐? : ");
scanf_s("%d", &floor);
for (int i = 0; i < floor; i++) {
for (int j = i; j < floor - 1; j++)
{
printf(" ");
}
for (int k = 0; k < i * 2 +1; k++)
{
printf("*");
}
printf("\n");
}
return 0;
if else
int age = 28;
if (age >= 20)
printf("성인입니다.");
else
printf("학생입니다.");
return 0;
else if
int age = 4;
if (age >= 20)
{
printf("성인입니다.");
}
else if (age >= 17 && age <= 20)
{
printf("고등학생입니다.");
}
else {
printf("어린이입니다.");
}
return 0;
break
//1~5까지 조별 발표
for (int i = 1; i <= 30; i++)
{
if (i >= 6)
{
printf("나머지 학생은 집에 가세요 \n");
break; //for문 탈출
}
printf("%d 번 학생 조별 발표 준비를 하세요\n", i);
}
return 0;
continue
for (int i = 1; i <= 30; i++)
{
if (i >= 6 && i <= 10)
{
if (i == 7)
{
printf("%d 번 학생은 결석입니다.\n", i);
continue;// 조건이 맞을때 i = 7 다음으로 넘어감
}
printf("%d 번 학생 조별 발표 준비를 하세요\n", i);
}
}
return 0;
and:&&
or:||
int a = 10;
int b = 10;
int c = 12;
int d = 13;
if (a == b || c == d)
{
printf("a와 b, 혹은 c와 d가 같습니다\n");
}
else
{
printf("값이 서로 다르네요\n");
}
return 0;
랜덤
//기본
{
srand(time(NULL)); //난수 초기화
int num = rand() % 3 + 1;//1~3
printf("%d", rum);
return 0;
}
printf("난수 초기화 전.. \n"); //여러번 실행해도 똑같은 값
for (int i = 0; i < 10; i++)
{
printf("%d ", rand() % 10);
}
srand(time(NULL));
printf("\n\n 난수 초기화 후.. \n");//여러번 실행하면 다른 값
for (int i = 0; i < 10; i++)
{
printf("%d ", rand() % 10);
}
return 0;
가위바위보
srand(time(NULL));
int i = rand() % 3;
if (i == 0)
{
printf("가위\n");
}
else if (i == 1)
{
printf("바위\n");
}
else if (i == 2)
{
printf("보\n");
}
else {
printf("몰라요\n");
}
return 0;
switch case(가위바위보)
srand(time(NULL));
int i = rand() % 3;
switch (i)
{
case 0: printf("가위\n");break;
case 1: printf("바위\n");break;
case 2: printf("보\n");break;
default:printf("몰라요\n");break;
}
return 0;
UP and DOWN
srand(time(NULL));
int num = rand() % 100 + 1;//1~100
int answer = 0;
int chance = 5;
while (chance > 0)
{
printf("남은 기회 : %d \n", chance--);
printf("숫자를 맞춰 보세요 (1~100) : ");
scanf_s("%d", &answer);
if (answer > num)
{
printf("Down \n\n");
}
else if (answer < num)
{
printf("Up \n\n");
}
else if (answer == num)
{
printf("정답입니다.! \n\n");
break;
}
else
{
printf("알 수 없는 오류가 발생했어요 \n\n");
}
if (chance == 0)
{
printf("기회를 모두 소진했습니다. \n\n");
}
}
return 0;
반환형 함수이름 (전달값){}
반환형:형태 (int, void, double, char 등등)
전달값:파라미터 여러개 사용 가능
기본 예시
//선언
void p(int num);
//정의
void p(int num)
{
printf("num 은 %d입니다\n", num);
}
반환값이 없는 함수
void function_without_return();//선언
function_without_return();
return 0;
void function_without_return() //정의
{
printf("반환값이 없는 함수입니다");
}
반환값이 있는 함수
int function_with_return(); //선언
int ret = function_with_return();
printf(ret); //10
return 0;
int function_with_return() //정의
{
printf("반환값이 있는 함수입니다\n");
return 10;
}
전달값이 있는 함수
void function_with_params(int num1, int num2, int num3);
function_with_params(13, 22, 32);
return 0;
void function_with_params(int num1, int num2, int num3)
{
printf("전달값이 있는 함수이며, 전달 받은 값은 %d, %d ,%d 입니다\n",
num1, num2, num3); // 13, 22, 32
}
반환값과 전달값이 있는함수
int apple(int total, int ate);
printf("사과 %d개중에 %d개를 먹으면 %d개가 남아요\n",
10, 4, apple(10, 4));
return 0;
int apple(int total, int ate)
{
printf("전달값과 변환값이 있는 함수힙니다.\n");
return total - ate;
}
기본 예문
int subway_1 = 30;
int subway_2 = 40;
int subway_3 = 50;
printf("지하철 1호차에 %d명 타고 있습니다.", subway_1);
printf("지하철 2호차에 %d명 타고 있습니다.", subway_2);
printf("지하철 3호차에 %d명 타고 있습니다.", subway_3);
int subway_array[3];
subway_array[0] = 30;
subway_array[1] = 40;
subway_array[2] = 50;
for (int i = 0; i < 3; i++)
{
printf("지하철 %d호차에 %d명 타고 있습니다.", i + 1, subway_array[i]);
}
return 0;
값 설정
int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
for (int i = 0; i < 10; i++)
{
printf("%d\n", arr[i]);
}
return 0;
값 설정 후 초기화
배열 크기는 항상 상수
값을 주지 않으면 자동으로 '0'이됨
float문
float arr_f[5] = { 1.0f, 2.0f, 3.0f };
for (int i = 0; i < 5; i++)
{
printf("%.2f\n", arr_f[i]);
}
return 0;
문자열 배열
//문자열 //문자열 끝에는 '끝'을 의미하는 NULL 문자 '\0'이 포함되어야함
char str[7] = "coding"; // [c][o][d][i][n][g][\0]
printf("%s\n", str);
return 0;
한글 문자열
char kor[] = "은룡";
printf("%s\n", kor);
printf("%d\n", sizeof(kor));
// 영어 1글자당 : 1byte
// 한글 1글자당 : 2byte
return 0;
ASCII코드
7bit, 총 128개의 코드 0~127
for(int i = 0; i < 128; i++)
{
printf("아스키코드 정수 %c : %d \n" , i , i);
}
return 0;
메모리 공간의 주소
int 철수 = 1; //암호
int 영희 = 2;
int 민수 = 3;
printf("철수네 주소 : %p ,암호 : %d\n", &철수, 철수);
//&철수 : 메모리 공간의 주소
printf("영희네 주소 : %p ,암호 : %d\n", &영희, 영희);
printf("민수네 주소 : %p ,암호 : %d\n", &민수, 민수);
return 0;
포인터 변수
int 철수 = 1;
int * 미션맨; // 포인터 변수
미션맨 = &철수; // *미션맨 = 철수;
printf("미션맨이 방문하는 곳 주소 : %p, 암호 : %d", 미션맨, *미션맨);
int * 스파이 = 미션맨 // 다른 포인터 변수 추가
return 0;
c언어 출력타입
%d: 10진수(정수형)
%f: 실수형
%e: 지수형
%o: 8진수
%x: 16진수
%u: 부호없는 10진수
%g: 실수형 자동출력
%p: 포인터의 주소
%c: 하나의 문자로 출력
%s: 문자열
배열과 포인터
int arr[3] = { 5, 10, 15 };
int* ptr = arr; //배열 arr과 ptr은 같은 배열
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]);
}
return 0;
int arr[3] = { 5, 10, 15 };
//arr[i] == *(arr + i)
//arr === arr 배열의 첫번째 값의 주소와 동일 == &arr[0]
printf("arr 자체의 값 = %p\n", arr);
printf("arr[0]의 주소 = %p\n", &arr[0]);
printf("arr 자체의 값이 가지는 주소의 실제 값 = %d\n", *arr);
printf("arr[0]의 실제 값 = %d\n", *&arr[0]);
//*& = 아무것도 없는 것과 같다.
return 0;
swap
void swap(int a, int b);
int a = 10;
int b = 20;
printf("swap 함수전 a:%d , b:%d\n", a, b); // a=10 ,b= 20
swap(a, b);
printf("swap 함수 후 a:%d , b:%d\n", a, b); //a=10 ,b= 20
return 0;
void swap(int a, int b)
{
int temp = a;
a = b;
b = temp;
printf("swap 함수 안 a:%d , b:%d\n", a, b); //a=20 ,b= 10
}
a, b 와 swap 함수 안 a, b의 주소 값이 다름
주소 값 전달
void swap_addr(int* a, int* b);
printf("<주소값 전달>swap 함수 전 a:%d , b:%d\n", a, b);
swap_addr(&a, &b);
printf("<주소값 전달>swap 함수 후 a:%d , b:%d\n", a, b);
return 0;
void swap_addr(int* a, int* b)
{
int temp = *a;
*a = *b;
*b = temp;
printf("<주소값 전달>swap 함수 안 a:%d , b:%d\n", *a, *b);
}
주소값을 전달해서 값이 바뀜
다차원 배열 기본
//다차원 배열
int i = 1;//□
int arr[5];
//□□□□□
//[0][1][2][3][4]
int arr2[2][5];
//□□□□□
//□□□□□
//[0,0][0,1][0,2][0,3][0,4] >> arr2[0][0] ~ arr2[0][4]
//[1,0][1,1][1,2][1,3][1,4]
int arr3[4][2];
//□□
//□□
//□□
//□□
int arr4[3][3][3];
//□□□ >> arr4[0][0][0] >> arr4[0][0][2]
//□□□ >> arr4[0][1][0] >> arr4[0][1][2]
//□□□
//□□□ >> arr4[1][0][0] >> arr4[1][0][2]
//□□□
//□□□
//□□□ >> arr4[2][0][0] >> arr4[2][0][2]
//□□□
//□□□
return 0;
다차원 배열 선언
int arr3[4][2] = {
{1, 2},
{1, 2},
{1, 2},
{1, 2}};
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 2; j++)
{
printf("2차원 배열 (%d, %d) 의 값 : %d\n", i, j, arr3[i][j]);
}
printf("\n");
}
기본문법
struct GameInfo {
char* name;
int year;
int price;
char* company;
};
사용법
struct GameInfo gameInfo1;
gameInfo1.name = "은룡게임";
gameInfo1.year = 1995;
gameInfo1.price = 500;
gameInfo1.company = "은룡회사";
printf("-- 게임 출시 정보--\n");
printf(" 게임명 : %s\n", gameInfo1.name);
printf(" 출시연도 : %d\n", gameInfo1.year);
printf(" 가격 : %d\n", gameInfo1.price);
printf(" 제작사 : %s\n", gameInfo1.company);
사용법 2
struct GameInfo gameInfo2 = { "은룡게임2", 1996, 300, "은룡회사" };
printf("-- 다른 게임 출시 정보--\n");
printf(" 게임명 : %s\n", gameInfo2.name);
printf(" 출시연도 : %d\n", gameInfo2.year);
printf(" 가격 : %d\n", gameInfo2.price);
printf(" 제작사 : %s\n", gameInfo2.company);
구조체 배열
struct GameInfo gameArray[2] = {
{ "은룡게임", 1995, 500, "은룡회사" } ,
{ "은룡게임2", 1996, 300, "은룡회사" }
}
구조체 포인터
struct GameInfo* gamePtr;
gamePtr = &gameInfo1;
printf(" 게임명 : %s\n", gamePtr->name);
printf(" 출시연도 : %d\n", gamePtr->year);
printf(" 가격 : %d\n", gamePtr->price);
printf(" 제작사 : %s\n", gamePtr->company);
구조체 안의 구조체
struct GameInfo* friendGame;
gameInfo1.friendGame = &gameInfo2;
printf("-- 연관 게임 출시 정보--\n");
printf(" 게임명 : %s\n", gameInfo1.friendGame->name);
printf(" 출시연도 : %d\n", gameInfo1.friendGame->year);
printf(" 가격 : %d\n", gameInfo1.friendGame->price);
printf(" 제작사 : %s\n", gameInfo1.friendGame->company);
typedef
자료형에 별명 지정
int i = 1;
typedef int 정수;
typedef float 실수;
정수 정수변수 = 3;
실수 실수변수 = 3.23f;
printf("정수변수 = %d 실수변수 = %.2f\n\n", 정수변수, 실수변수);
typedef struct GameInfomatin {
char* name;
int year;
int price;
char* company;
struct GameInfo* friendGame;
} GAME_INFO;
GAME_INFO game2;
game2.name = "영어게임";
game2.year = 1994;
game2.price = 700;
game2.company = "영어회사";
fputs,fgets = 문자열
fprintf,fscanf = %s,%d 출력타입
fputs : 파일 쓰기
char line[MAX];
FILE* file = fopen("C:\\Users\\Eunryong\\Desktop\\C언어\\test1.txt", "wb");
if (file == NULL)
{
printf("파일 열기 실패\n");
return 1;
}
fputs("fputs를 이용해서 글을 적어볼게요\n", file);
fputs("잘 적히는지 확인해주세요\n", file);
fclose(file);
fgets : 파일 읽기
FILE* file = fopen("C:\\Users\\Eunryong\\Desktop\\C언어\\test1.txt", "rb");
if (file == NULL)
{
printf("파일 열기 실패\n");
return 1;
}
while (fgets(line, MAX, file) != NULL)
{
printf("%s", line);
}
fclose(file);
fprintf
int num[6] = { 0,0,0,0,0,0 };
int bonus = 0;
char str1[MAX];
char str2[MAX];
FILE* file = fopen("C:\\Users\\Eunryong\\Desktop\\C언어\\test2.txt", "wb");
if (file == NULL)
{
printf("파일 열기 실패");
return 1;
}
fprintf(file, "%s %d %d %d %d %d %d\n", "추첨번호", 1, 2, 3, 4, 5, 6);
fprintf(file, "%s %d \n", "보너스번호", 7);
fclose(file);
fscanf
FILE* file = fopen("C:\\Users\\Eunryong\\Desktop\\C언어\\test2.txt", "rb");
if (file == NULL)
{
printf("파일 열기 실패");
return 1;
}
fscanf(file, "%s %d %d %d %d %d %d", str1,
&num[0], &num[1], &num[2], &num[3], &num[4], &num[5]);
printf("%s %d %d %d %d %d %d\n", str1, num[0], num[1], num[2], num[3], num[4], num[5]);
fscanf(file, "%s %d", str2, &bonus);
printf("%s %d\n", str2, bonus);
fclose(file);