기본 미션 : 확인 문제 풀고, 풀이 과정 설명하기
선택 미션 : 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
의 조건이 모두 일치하면 표준입니다.
를 출력합니다.체중관리가 필요합니다
를 출력합니다.