본 내용은 해당 강의 토대로 작성
경찰서 조서 출력
배운 것을 토대로 범죄자의 신분을 입력 받아, 그것을 출력해본다.
#include <stdio.h>
int main(void)
{
char name[256]; //문자열 선언
printf("이름이 뭐예요?");
scanf("%s", name, sizeof(name)); //문자열 입력 받기, 256을 넘지 않게 함
int age; //정수 선언
printf("몇살이에요?");
scanf("%d", &age); //정수 앞에는 &붙임
float weight; //실수 선언
printf("몸무게는 몇 kg 이예요?");
scanf("%f" , &weight); //실수 앞에도 &붙임
double height; //더 긴 실수(double)
printf("키는 몇 cm 이예요?");
scanf("%lf" , &height); //double은 "%lf"
char what[256];
printf("무슨 범죄를 저질렀어요?");
scanf("%s", what, sizeof(what));
// 조서 내용 출력
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)
{
return 0;
}
새로운 파일 생성하면 항상 위의 명령어는 기본적으로 적어야한다. 단, 한 프로젝트에서 함수명이 겹치면 안된다. 저번시간에 함수 main
은 이미 사용한 함수명이므로 저번 함수의 이름을 변경한다.
++ 연산
++
는 변수의 앞과 뒤에 적어주면 1을 더해준다.
#include <stdio.h>
int main(void)
{
int a = 10;
printf("a는 %d\n" , a); //10 출력
a++; //a = 10에서 1을 더해주므로 a = 11
printf("a는 %d\n" , a); //11 출력
a++;
printf("a는 %d\n" , a); //12 출력
return 0;
}
위와 같이, printf
실행 후 a++
을 적어주면 1씩 더해준다.
#include <stdio.h>
int main(void)
{
int b = 20;
printf("b는 %d\n" , ++b); //21 출력
printf("b는 %d\n" , b++); //21 출력
printf("b는 %d\n" , b); //22 출력
return 0;
}
위의 경우에서, ++
이 앞에 있으면 printf
를 실행하기 전에 +1을 하지만, ++
가 뒤에 있으면 printf
실행 후 +1을 한다.
#include <stdio.h>
int main(void)
{
int i = 1;
printf("Hello world %d\n", i++);
printf("Hello world %d\n", i++);
printf("Hello world %d\n", i++);
printf("Hello world %d\n", i++);
printf("Hello world %d\n", i++);
printf("Hello world %d\n", i++);
printf("Hello world %d\n", i++);
printf("Hello world %d\n", i++);
printf("Hello world %d\n", i++);
printf("Hello world %d\n", i++);
return 0;
}
위 명령어의 출력은 아래와 같다.
이렇게 반복된 작업을 할 때, 반복문을 사용하면 편하다. C의 반복문은 아래와 같다.
- for
- while
- do while
for
for문의 문법은 다음과 같다.
for(선언; 조건; 증감){ 실행할 명령 }
문법대로 위의 Hello World
문은 아래처럼 작성하면 된다.
#include <stdio.h>
int main(void)
{
for (int i = 1; i <= 10; i++) // i는 1이고 10보다 작을 동안 명령을 실행한 뒤 +1을 한다.
{
printf("Hello World %d\n", i);
}
return 0;
}
while
while문의 문법은 다음과 같다.
변수 선언
while(조건){ 실행할 명령 }
while문은 for문과 달리 변수를 반복문 전에 선언해야한다. 아래처럼 작성한다.
#include <stdio.h>
int main(void)
{
int i = 1;
while (i <= 10)
{
printf("Hello World %d\n", i);
i++;
}
return 0;
}
이때, i++
은 printf
에 넣어도 된다.
#include <stdio.h>
int main(void)
{
int i = 1;
while (i <= 10)
{
printf("Hello World %d\n", i++);
}
return 0;
}
do while
do while문의 문법은 다음과 같다.
변수 선언
do {실행할 명령} while (조건);
do while문 또한 변수를 앞에 선언한다.
#include <stdio.h>
int main(void)
{
int i = 1;
do {
printf("Hello World %d\n", i++);
} while (i <=10);
return 0;
}
이중 반복문
구구단
반복문을 두 번 사용해서 구구단을 만들 수 있다.
#include <stdio.h>
int main(void)
{
for(int i=2; i <=9; i++) //i가 2부터 9까지 1씩 올라가며 전체 반복(단수)
{
printf("%d단 계산\n", i); //단수 출력
for(int j = 1 ; j <= 9; j++) //각 단수에서 1부터 9까지 1씩 올라가며 곱함
{
printf(" %d x % d = %d\n", i, j, i*j); // i,j를 넣어서 각 숫자 및 연산 결과 출력
}
}
return 0;
}
위 명령어의 결과의 일부(2단)는 아래와 같다.
별 그리기
다섯 개의 줄에 별을 하나씩 늘려가며 그리기는 어떻게 할까? 명령어와 출력은 아래와 같다.
#include <stdio.h>
int main(void)
{
for (int i = 0; i < 5; i++)
{
for (int j = 0; j <= i; j++) //별을 출력할 반복문
{
printf("*");
}
printf("\n"); //한 개의 줄에 별 출력 완료 후 줄바꿈
}
return 0;
}
*
**
***
****
*****
반복문에 의하면 j
는 i
반복문 안에서 i
보다 작거나 같을 때 *
을 하나 출력하고 1이 더해진다. j
가 i
를 넘을 경우에는 j
반복문을 빠져나가서 공백을 출력해 줄바꿈한 뒤, i
는 1이 더해진다. 이런 반복이 i
가 5가되면 끝나게 되므로 위의 출력이 나오는 것이다.
거꾸로 별
위와는 다르게 아래처럼 출력하려면 어떻게 할까?
*
**
***
****
*****
명령어는 다음과 같다.
#include <stdio.h>
int main(void)
{
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;
}
j
는 공백을 출력할 반복문의 변수이다. i
가 2이라면, j
도 2일 것이다. 그리고 공백을 한 번 출력하고 1이 더해진다. 4보다 작을 때 까지 명령을 실행하므로 공백을 두 개 출력하고 넘어간다. 그 후에는 위와 같이 별을 출력하는 반복문을 수행하고 공백을 출력한다.
피라미드를 쌓아라
입력한 층수대로 꼭대기에서 아래까지 2씩 커지는 피라미드를 만들어보자.
#include <stdio.h>
int main(void)
{
int floor;
printf("몇 층으로 쌓겠느냐?");
scanf("%d" , &floor); //층수를 floor 변수에 받음
for (int i=0; i < floor; i++) //floor의 수만큼 쌓음
{
for (int j=i; j < floor-1; j++) //공백을 만드는 반복문
{
printf(" ");
}
for (int k=0; k < i * 2 + 1; k++) //벽(*)을 쌓는 반복문
{
printf("*");
}
printf("\n");
}
return 0;
}
만들 피라미드는 층이 내려갈 때 마다 2씩 커진다. 즉, 1,3,5,7,9 … 인 수열이다. i = 0
일 때, 벽은 하나를 쌓아야 하고 i = 1
일 때, 벽은 셋을 쌓아야 한다. 그리고 k = 0
으로 선언되었다. 그러므로 k< i *2+1
조건을 주면 된다. 명령문을 실행하고 층수를 10을 준다면, 아래처럼 출력이 된다.
느낀점
어제처럼 Windows에서만 실행되는 명령어가 없어서 고생은 안 하고 수업을 비교적 잘 따라갈 수 있었다. 코딩을 하며 느끼는 것인데, C는 세미콜론에 정말 민감하다. 꼭 세미콜론을 붙여주자. 반복문을 자세하고 쉽게 배울 수 있어서 이해가 잘 되고 좋았다.
'programming study > C' 카테고리의 다른 글
[나도코딩]C 프로그래밍 - 입문부터 게임 개발까지 (6)(2020.12.28) (0) | 2020.12.28 |
---|---|
[나도코딩]C 프로그래밍 - 입문부터 게임 개발까지 (5)(2020.12.27) (2) | 2020.12.27 |
[나도코딩]C 프로그래밍 - 입문부터 게임 개발까지 (4)(2020.12.27) (0) | 2020.12.27 |
[나도코딩]C 프로그래밍 - 입문부터 게임 개발까지 (3)(2020.12.26) (0) | 2020.12.26 |
[나도코딩]C 프로그래밍 - 입문부터 게임 개발까지 (1)(2020.12.25) (0) | 2020.12.25 |