기본 미션 : 확인 문제 풀고, 풀이 과정 설명하기
선택 미션 : Ch.04 도전 실전 문제 풀고 인증샷
끝나지 않을 듯 했던 기말고사가 끝났습니다!!
기말고사도 무사히 마친 만큼 이제부터는 더욱 혼공단 활동에 활발히 참여할 수 있겠네요.
그럼 긴 말 없이 확인문제부터 풀어보겠습니다.

#include <stdio.h>
int main(void) {
int a = 0;
a = a + 1;
a = a + 2;
a = a + 3;
printf("a : %d", a );
return 0;
}
출력 결과 : 6
int a의 초깃값은 0입니다.
a에 a+1을 저장하면 a에는 1의 값이 저장됩니다.a에 a+2을 저장하면 1+2이기 때문에 a에는 3의 값이 저장됩니다.a에 a+3을 저장하면 3+3이기 때문에 a에는 6의 값이 저장됩니다.a의 값을 출력하므로 a에 저장된 값인 6이 출력될 것입니다.

char ch; - scanf("%c", &ch );short sh; - scanf("%d", &sh );int in; - scanf("%d", &in );float ft; - scanf("%f", &ft );double db; - scanf("%lf", &db );#include <stdio.h>
int main(void) {
char fruit[20];
int cnt;
printf("좋아하는 과일 : ");
scanf("%s", ? ); //?에 들어갈 내용 채우기
printf("몇 개 : ");
scanf("%d", ? ); //?에 들어갈 내용 채우기
printf("%s를 %d개 드립니다.", fruit, cnt);
return 0;
}
첫 번째 ?에는 %s가 있으므로 문자열형태의 변수인 fruit가 들어갑니다.
두 번째 ?에는 %d가 있으므로 정수형의 변수인 cnt가 들어갑니다.
그리고 fruit와 cnt는 모두 scanf으로 입력받기 때문에 변수명 앞에 &를 붙여주어야 합니다.
답 : (순서대로) &fruit &cnt
#include <stdio.h>
int main(void) {
char ch;
printf("문자 입력 : ");
scanf("%c", &ch);
printf("%c문자의 아스키 코드 값은 %d입니다.", ch, ch);
return 0;
}
출력 결과
문자 입력 : A
A문자의 아스키 코드 값은 65입니다.
위 코드는 문자를 입력받아 아스키코드값을 출력하는 프로그램입니다.
char ch의 값을 입력받아야 하기 때문에 scanf를 사용합니다.%c를 정수표현인 %d로 바꿔 출력합니다.A를 입력하면 아스키 코드 값인 65가 출력됩니다.


#include <stdio.h>
int main(void) {
double a = 4.0, b = 1.2;
printf("%.1lf + %.1lf = %.1lf\n", a, b, (a + b));
printf("%.1lf - %.1lf = %.1lf\n", a, b, (a - b));
printf("%.1lf * %.1lf = %.1lf\n", a, b, (a * b));
printf("%.1lf / %.1lf = %.1lf\n", a, b, (a / b));
return 0;
}
출력결과
4.0 + 1.2 = 5.2
4.0 - 1.2 = 2.8
4.0 * 1.2 = 4.8
4.0 / 1.2 = 3.3
a와 b는 double타입이기때문에 %lf을 사용합니다.% 뒤에 .1을 추가합니다.+, 뺄셈은 -, 곱셈은 *, 나눗셈은 /으로 연산하여 나타냅니다.#include <stdio.h>
int main(void) {
int a, b, tot;
double avg;
printf("두 과목의 점수 : ");
scanf("%d %d", &a, &b );
tot = a + b;
avg = tot/2.0;
printf("평균 : %.1lf\n", avg );
return 0;
}
출력 결과
두 과목의 점수 : 90 89
평균 : 89.5
%d를 사용하고 a와 b의 값을 입력받기 때문에 &를 사용합니다.tot변수에 합계를 입력합니다.avg변수에 tot/2.0를 저장합니다. 이 때 tot를 2로 나누게 되면 소수점 자리까지 계산을 하지 않기 때문에 반드시 2.0으로 나누어 주어야 합니다.avg변수는 double타입이므로 %lf를 사용합니다.각 변수명은 다음과 같습니다.
| 국어 | 영어 | 수학 | 전체 학점 | 결과 저장 | 국어 평점 | 영어 평점 | 수학 평점 | 평점 평균 |
|---|---|---|---|---|---|---|---|---|
| kor | eng | mat | credits | res | kscore | escore | mscore | grade |
#include <stdio.h>
int main(void) {
int kor = 3, eng = 5, mat = 4; //국어, 영어, 수학의 학점 초기화
int credits; //전체 학점을 저장할 변수
int res; //연산 결과를 저장할 변수
double kscore = 3.8, escore = 4.4, mscore = 3.9; //각 과목의 평점 초기화
double grade; //평점의 평균을 저장할 변수
credits = (kor + eng + mat); //전체 학점 계산
grade = (kscore + escore + mscore); //평점의 평균 계산
if ( (credits >= 10 ) && (grade > 4.0) ) res = 1;
else res = 0;
printf("%d", res ); //결과 출력
return 0;
}
출력 결과 : 1
kor eng mat는 학점을 나타내므로 int형으로 나타냅니다.credits은 학점의 총 합계이므로 int형으로 나타냅니다.res은 1또는 0을 저장하므로 int형으로 나타냅니다.kscore escore mscore은 평점을 나타내므로 double형으로 나타냅니다.grade는 평점의 평균이므로 double형으로 나타냅니다.credits >= 10 grade > 4.0의 두 가지 조건을 모두 만족해야만 res에 1이 저장되기 때문에 && 또는 &를 사용합니다.else문으로 이동해 res에 0이 저장됩니다.

#include <stdio.h>
int main(void) {
int res;
res = (sizeof(short) > sizeof(long)) ? 1 : 0;
if (res == 1) printf("short");
else printf("long");
return 0;
}
출력결과 : long
sizeof의 연산자를 사용하여 short의 크기를 계산합니다.sizeof의 연산자를 사용하여 long의 크기를 계산합니다.short형의 크기가 클 경우 res에 1을 저장합니다.long형의 크기가 클 경우 res에 2을 저장합니다.res의 값이 1일 경우 short를 출력합니다.res의 값이 2일 경우 long을 출력합니다.#include <stdio.h>
int main(void) {
int seats = 70; //경기장의 좌석 수 초기화
int audience = 65; //관중 수 초기화
double rate; //입장률을 저장할 변수
rate = (double)audience / (double)seats * 100.0;
printf("입장률 : %.1lf%", rate); //입장률 출력
return 0;
}
출력 결과
입장률 : 92.9%
seats와 audience변수는 int로 지정합니다.rate는 double로 지정합니다.seats / audience는 그대로 계산하면 정수형이기 때문에 0이 출력됩니다. 따라서 double로 캐스팅을 해주어야 올바른 값이 나올 수 있습니다.%.1lf로 나타냅니다.#include <stdio.h>
int main(void) {
int hour, min, sec; //시, 분, 초를 저장할 변수
double time = 3.76; //시간 초기화
hour = (int)time; //형 변환으로 정수 부분만을 골라낸다.
time -= hour; //한 시간이 안 되는 부분만을 다시 저장한다.
time *= 60; //분 단위로 환산
min = (int)time; //정수 부분만 분으로 저장한다.
time -= min; //1분이 안 되는 부분만을 다시 저장한다.
time *= 60; //초 단위로 환산
sec = (int)time; //정수 부분만 초로 저장한다.
printf("3.76시간은 %d시간 %d분 %d초입니다.",hour, min, sec);
}
출력결과
3.76시간은 3시간 45분 35초입니다.
3.76시간은 3시간 n분 n초이기 때문에 time변수를 int로 캐스팅하여 3시간을 hour변수에 저장합니다.0.76을 * 60로 분으로 변환하고 time변수를 int로 캐스팅하여 정수부분인 45를 min변수에 저장합니다.hour와 min변수에 쓰인 것을 제한 나머지를 * 60로 초로 변환하고 time변수를 int로 캐스팅하여 정수부분인 35을 sec변수에 저장합니다.hour min sec은 모두 정수형이므로 %d를 사용하여 나타냅니다.
체중(kg)과 키(cm)를 입력하여 BMI(신체질량지수)를 구한 후에 BMI의 값이 20.0 이상 25.0 미만이면 "표준입니다"를 출력하고 그렇지 않으면 "체중관리가 필요합니다"를 출력합니다.
BMI는 표준체중, 저체중, 과체중을 판변하는 수치로 몸무게를 키의 제곱으로 나누어 구합니다. 이 때 키는 미터(m)단위로 계산합니다.
#include <stdio.h>
int main(void) {
double kg, cm;
printf("몸무게(kg)와 키(cm) 입력 : ");
scanf_s("%.1lf %.1lf", &kg, &cm);
cm /= 100;
double bmi = kg / (cm * cm);
if (bmi >= 20.0 && bmi < 25.0) printf("표준입니다");
else printf("체중관리가 필요합니다");
return 0;
}
출력결과
몸무게(kg)와 키(cm) 입력 : 66 185.6
체중관리가 필요합니다.
kg cm은 소수일 수도 있으므로 double로 선언해줍니다.%.1lf로 나타내줍니다.cm / 100을 cm에 저장합니다.몸무게 / 키의 제곱이므로 kg / ( cm * cm )를 bmi변수에 저장합니다.bmi >= 20.0와 bmi < 25.0의 조건이 모두 일치하면 표준입니다.를 출력합니다.체중관리가 필요합니다를 출력합니다.