Ron Weasley 2022. 7. 18. 10:49

이번에 해야 할 주차는 2주차 입니다.

 

3장과 4장에 대한 내용을 설명을 하겠습니다.

변수

변수는, 프로그램에서 데이터를 메모리에 저장하기 위해 사용되는 일련의 번호박스입니다.

예를 들어 택배를 하나 받았다고 생각을 해봅시다. 우리가 옷을 주문하고 주문한 옷이 택배 박스로 왔을 때 안에 들어있는 내용물은 아! 옷이 들어있구나 하고 뜯어볼 것 입니다. 이처럼 내용물을 저장할 수 있는 박스가 일종의 변수가 되는 것입니다. 그림을 보겠습니다.

 

똑같이 박스와 옷을 기준으로 설명을 하면 A박스에 옷 대신에 10이라는 값이 들어있다고 생각하시면 됩니다. 일단 변수에 대해서는 이정도만 하고 나중에 코드로 보여드리겠습니다.

 

<변수 선언 방법>

변수를 선언하기 위해서는 자료형을 알아야 합니다. C언어에서 자료형은 int(정수), float(실수), char(문자) 등등 다양한 자료형을 지원하는데, 우리가 숫자 10이 들어가는 박스(변수)를 만들기 위해서는 다음과 같이 선언을 하면 됩니다.

<정수자료형> <변수이름>
        int                  a;

이렇게 선언을 하시면 됩니다.

다양한 자료형에 대한 변수 선언 예제 코드를 보겠습니다.

정수형 변수 a, b와 실수형 변수 dc와 문자형 변수 ch를 선언했습니다.

그리고 각각 변수의 이름에다가 값을 초기화를 하고 출력을 해봤습니다.

보시면, 초기화를 해준 값으로 다 설정이 되어 있는것을 볼 수 있습니다.

이제 변수에 대해서 이해를 하셔야겠지만! 쉽게 말해서 우리가 데이터를 저장하기 위해 사용되는 박스(공간)이라고 생각하시면 됩니다.

참고로 같은 자료형 끼리는 동시에 선언도 가능합니다.

ex) int a, b;

 

문자열 변수

앞에서 정수형, 실수형, 문자형을 배워봤습니다. 하지만 문자열 변수에 대해서는 좀 짚고 넘어 가야합니다.

문자열이란 A B C 이렇게 한 문자가 아닌 ABC처럼 나열되어있는 문자를 의미합니다. 문자열의 선언 방법은 다음과 같습니다.

앞에 보이는 fruit는 문자열(배열)을 저장할 이름이구 뒤에 큰 따옴표 안에 들어가있는 Apple은 문자열 값입니다.

실제로 메모리에 저장되어 있는 그림을 보여 드리겠습니다.

배열은 이어져있는 기차라고 생각 하시면 됩니다.

위 그림처럼 Apple이라는 문자들이 하나의 배열에 이어져 붙혀있고, 마지막으로 \0라는 널값을 가지고 있습니다.

왜 널 값을 가지고 있냐면 문자열의 끝을 알리기 위해 사용된다고 생각하시면 됩니다. 이 부분에 대해서는 나중에 설명을 드리겠습니다.

 

<3장 확인문제>

1. 다음 자료형 중에서 실수형에 O 표를 하세요.

2. 다음 프로그램의 실행결과를 예상해보세요.

답은 6이 됩니다.

그 이유는 첫번째 나오는 공식에서 a = a + 1이라고 했는데, 그럼 0 + 1의 값을 a에 넣고, 두번째는 1 + 2를 해서 a에 넣고, 세번째는 3 + 3을 해서 a에 값을 넣어주면 a는 6이됩니다.

 

데이터 입력 (scanf)

이때까지 우리는 printf() 함수를 이용해서 출력을 하는 방법만 배웠습니다.

하지만 이제는 우리가 원하는 값을 넣어줄 수 있는 입력값을 지정해줄건데! 예제코드를 보겠습니다.

이번에는 변수 초기화를 하지 않고, a의 값을 입력을 받게 하는 scanf()함수를 가져왔습니다.

scanf() 함수는 먼저, 변수 형태에 맞는 변한 문자와 주소를 가르키는 &기호와 변수명을 들고오시면 됩니다.

이 부분도 역시 나중에 포인터를 배울 때 하겠지만 &는 a의 메모리의 주소를 의미합니다! 라고 생각하시면 됩니다.

10을 입력하게 되면 10을 출력해줍니다!!

 

<3-2 확인문제>

1. 다음과 같이 변수가 선언되어 있을 때, scanf 함수의 사용법이 옳은 것을 고르세요.

1. scanf("%d", &ch);

2. scanf("%d", &sh);

3. scanf("%d%f", &in, &ft); (정답)

4. scanf("%f", &db);

풀이 : 왜 3번을 정답으로 체크를 했냐면 scanf는 변수 형태에 맞는 변환 문자와 주소를 가르켜야 합니다.

1,2,4는 변수 형태에 맞는 변환 문자가 아니기 때문에 제외를 시켰고! 3번은 정수형을 입력 받기 위해 %d와 실수형 float을 입력 받기 위해 %f를 적어줌으로써 정상적으로 프로그램이 작동이 됩니다.

 

2. 다음 프로그램의 빈칸에 알맞은 내용을 채워보세요.

1번 빈칸에는 fruit가 들어가고, 2번 빈칸에는 &cnt가 들어갑니다.

이유는 문자열은 배열로 되어 있기 때문에 주소를 가르키는 &문자가 필요없고, cnt는 배열이 아니기 때문에 &를 입력해주어야합니다.

3. 키보드로 문자를 입력하여 아스키 코드 값을 출력하는 프로그램을 작성하세요! 어떤 문자가 입력될지는 실행할 때 결정합니다.

변환할 문자 표현식만 바꿔주면 아무런 문제가 없습니다.

 

산술 연산자

산술 연산자는 수학에서 많이 사용하는 +, -, *, / 같이 사칙연산을 의미하고 마지막으로 %까지 포함합니다.

각 연산자는 코드를 통해서 보겠습니다.

코드는 단순합니다. 그냥 더하기, 빼기, 곱하기 연산이랑 음수로 변한하는 연산을 수행한 것 입니다.

sum = a + b를 알아보겠습니다.

먼저, a와 b의 값을 더해줍니다. 10 + 20

다음은 30이란 값이 나오는데 30을 sum에 대입합니다.

일반적인 수학이랑은 좀 다른게 컴퓨터에서는 = 기호가 같다가 아니라 대입한다! 입니다. 요것만 잘 기억하시면 연산자는 크게 어려울게 없을것입니다.

 

나누기 연산자와 나머지 연산자

다음은 / 연산자와 % 연산자를 배워보겠습니다. 역시 코드로 먼저 보겠습니다.

여기서는 아까 산술 연산자와는 다르게 조오금? 헷갈릴 수 있습니다.

나누기 연산이라는 것은 몫을 구하는 것이고, 나머지 연산은 말 그대로 몫을 제외한 나머지만 구하는 것입니다.

5 나누기 2는 몫이 2, 나머지가 1이 남죠?? 같은 것입니다. 그래서 코드의 결과값도 몫과 나머지만 구해줍니다.

증감 연산자

증감 연산자는 말 그대로 증가, 감소를 시켜주는 연산자입니다. 예를 들어 나중에 배울 반복문에서 ++나 -- 같이 1을 증가 시키거나 1을 감소 시키는 역할을 하는 연산자입니다. 역시나 바로 코드를 보겠습니다.

결과값에서 보면 a는 11, b는 9가 됩니다. 주석에 달아놨듯이 ++은 1을 증가, --는 1을 감소 해준다만 알고 이제 ++, -- 같은 증감 연산자가 나타나는 위치에 따라 또 연산이 바뀌는 것을 보겠습니다.

pre변수에는 a가 전위 표기로 된 증가 연산자를 사용했고, post변수에는 b가 후위 표기로 된 증가 연산자를 사용했습니다.

우리가 알다시피 1을 더했으니까 18과 18이 출력이 되어야 하지만 실제로는 그렇지 않습니다.

왜냐면 ++a는 만나자 마자 바로 a를 증가시키는 것이고, b++은 연산이 끝난 후 1을 더해줍니다.

이 부분은 진짜 중요하기 때문에, 또 다른 예제를 보겠습니다.

실행의 값을 보고 설명을 하겠습니다.

조금 의문이 들지 않나요?

왜 ++b는 6인데 a++은 5일까요??

이유는 다음과 같습니다. 전위 표기는 값을 증가한 후에 연산을 하는것이고, 후위 표기는 연산 후 값을 증가시키는 것이기 때문입니다.

여기까지 이해를 하셨으면 엄청나신겁니당!!

관계 연산자

관계 연산자는 참, 거짓(1, 0)을 판별하기 위해 사용되는 연산자입니다. 수학을 예로 들면 a < 10 이면 a는 10보다 작다! 라는 말이 있듯이 프로그래밍 언어에서도 동일합니다. 코드를 보겠습니다.

위 설명과 같이 관계 연산자는 1 또는 0만 나오게 됩니다. 1은 참, 0은 거짓인데 > 연산자와 < 연산자만 보겠습니다.

a가 b보다 크다! 는 거짓이기 때문에 거짓값인 0이 나왔고, a < b는 b가 a보다 크기 때문에 1이 나왔습니다.

 

논리 연산자

논리 연산자도 관계 연산자와 같이 참과 거짓을 판단하는데 사용됩니다. &&, ||, ! 연산자로 구분이 됩니다.

마찬가지로 코드를 보겠습니다.

논리 연산자는 표를 보면서 외우시면 됩니다!!

입력 비트는 말 그대로 조건식이 참인지 거짓인지 판별을 하는 것이다.

(a > 10) && (a < 20)을 예시로 보자면, a는 10보다 크다. 즉, (a > 10)은 참이되고, a는 20보다 작다. 즉, (a < 20)은 거짓입니다.

즉, 1과 0이 만나서 0을 출력합니다.

 

<4-1 확인 문제>

1. 4.0과 1.2의 덧셈, 뺄셈, 곱셈, 나눗셈을 한 값을 소수점 이하 첫째 자리까지 출력하세요.

2. 두 과목의 점수를 입력하여 평균을 출력하는 프로그램을 작성하세요. 평균은 소수점 이하 첫째 자리까지 출력하세요.

3. 태희가 신청한 전체 학점과 평점을 계산하여 신청 학점이 10학점 이상이고 평점 평균이 4.0을 넘는 경우 1을 출력하고, 그렇지 않으면 0을 출력하는 프로그램을 작성하세요. 태희가 이전 학기에 신청한 과목당 학점과 얻은 점수는 다음과 같습니다.

국어-3학점-3.8
영어-5학점-4.4
수학-4학점-3.9

논리 연산자만 보면, 평점 평균이 4.0 이상이고, 전체 학점이 10 이상일때, 1을 출력. 그 외에는 0을 출력

평점, 학점을 수정해주면 0인지 1인지 값을 출력할 수 있습니다.

 

분량 조절을 못하여 복합 대입연산자는 확인 문제를 보면서 알아보겠습니다.

1. short형과 long형과 자료형의 크기를 비교하여 크기가 큰 자료형이 무엇인지 출력하세요.

6열에 나오는 sizeof는 함수는 아니지만 크기를 바이트 단위로 계산하여 알려줍니다.

그래서 short랑 long이랑 비교를 하는데, short가 더 크면 res는 1, 아니면 0을 담고, 7열은 삼항 연산자라고합니다.

"조건 ? 참 : 거짓" 으로 입력을 하는데, res가 1이면 short를 출력, 0이면 long을 출력하라는 것입니다.

2. 야구경기장의 좌석 수가 70개고 입장객 수가 65명일 때 입장률을 출력하세여.

여기서는 형 변환을 시켜주는 (double)이 나와있습니다.

형 변환 연산자는 정수 * 실수를 했을때, 실수값으로 출력하고 싶으면 정수 앞에 (실수)를 넣어주고, 정수로 출력하고 싶으면 실수 앞에 (정수)라고 입력합니다. 위 문제에서는 좌석 수, 관객 수 둘다 정수형이기 때문에 double로 형 변환을 했습니다.

3. 3.76시간은 몇 시간, 몇 분, 몇 초인지를 출력하세요.

여기서도 마찬 가지로 실수를 우리가 시간으로 쓸 수 없기 때문에 형 변환을 사용하여 정수 부분만 가지고 왔습니다.

 

<선택 미션>

1. 체중(kg)과 키(cm)를 입력하여 BMI(신체질량지수)를 구한 후에 BMI의 값이 20.0이상 25.0미만이면 "표준입니다"를 출력하고 그렇지 않으면 "체중관리가 필요합니다" 를 출력합니다.

 

BMI는 표준체중, 저체중, 과체중을 판별하는 수치로 몸무게를 키의 제곱으로 나누어 구합니다. 이때 키는 미터(m)의 단위로 계산합니다.

실행결과
몸무게(kg)와 키(cm) 입력 : 66 185.6
체중관리가 필요합니다.

코드에 대해서 간략하게 설명을 하겠습니다.

1. 키, 몸무게, 신체질량지수를 담을 변수를 선언했습니다.

2. 몸무게와 키를 입력받습니다.

3. 키는 신체질량지수를 담기 위해서는 미터로 환산하여야 하기 때문에 185는 1.85로 변환을 시켜줘야 하기 때문에 double로 형 변환을 시키고 100.0을 나눠줍니다.

4. BMI는 실수이기 때문에 전부다 형 변환을 시켜줬습니다.

5. if함수를 안쓰기 때문에 삼항 연산자로 조건을 해보면, BMI가 20.0 이상이면서 BMI가 25.0 미만일 때 표준입니다. 출력하고 그 외에는 체중관리가 필요합니다. 출력합니다

정상적으로 출력이 되네요!!!