[혼공단 11기] 혼공C 2주차 미션

헤스더·2024년 1월 14일
0
post-thumbnail
혼공C 2주차 미션
- 진도: Chapter 03-04
- 기본: 3-2 데이터 입력(p.109~110), 4-2 그 외 유용한 연산자(p.146~147) 확인 문제 풀고 인증하기
- 선택: Ch.04 도전 실전 예제(p.148) 풀고 인증하기




기본 미션

3-2. 데이터 입력 - 1번

1. 다음과 같이 변수가 선언되어 있을 때, scanf 함수의 사용법이 옳은 것을 고르세요.
char ch;
short sh;
int in;
float ft;
double db;

① scanf("%d", &ch);
② scanf("%d", &sh);
③ scanf("%d%f", &in, &ft);
④ scanf("%f", &db);


🗣️풀이과정
scanf 함수는 입력 받을 값의 자료형에 따라 형식 지정자를 사용해야한다. 주어진 변수 선언을 기준으로 살펴보면,

  1. -ch는 문자형(char) 변수이다. 올바른 형식 지정자는 %c이다.
  2. -sh는 short형 변수이다. 올바른 형식 지정자는 %hd이다.
  3. -in은 정수형(int) 변수, -ft는 실수형(float) 변수이다. 올바른 형식 지정자는 %d와 %f이다.
  4. -db는 더블형(double) 변수이다. 올바른 형식 지정자는 %lf이다.

위에 따라, 옳은 것은 3번이다.
⁂ 3번



3-2. 데이터 입력 - 2번

2. 다음 프로그램의 빈칸에 알맞은 내용을 채워보세요.
#include <stdio.h>
int main(void)
{
	char fruit[20];
    int cnt;
    printf("좋아하는 과일 : ");
    scanf("%s",);
    printf("몇 개 : ");
    scanf("%d",);
    printf("%s를 %d개 드립니다.", fruit, cnt);
    return 0;
}
실행결과
좋아하는 과일 : 망고
몇 개 : 3
망고를 3개 드립니다.

🗣️풀이과정
배열은 이름만 사용하면 해당 배열의 첫 번째 요소를 가리키는 포인터로 간주되기 때문에 따로 주소 연산자(&)를 사용하지 않는다. 하지만 일반 변수에 대해서는 주소 연산자(&)를 사용하여 변수의 주소를 전달해야 한다.

따라서 위의 실행결과처럼 출력되려면,

①: fruit
②: &cnt

를 입력해야 한다.

⁂ ①: fruit, ②: &cnt





4-2. 그 외 유용한 연산자 - 1번

1. short형과 long형의 자료형의 크기를 비교하여 크기가 큰 자료형이 무엇인지 출력하세요.
#include <stdio.h>
int main(void)
{
	int res; //결과 변수
    <<<>>>
    //sizeof의 피연산자로 자료형 이름을 사용하여 크기를 바이트 단위로 계산한다.
	//short형의 크기가 long형보다 크면 참이므로 1, 그렇지 않으먼 0을 res에 저장한다.
    <<<>>>
    //res가 1과 같으면 shrot형의 크기가 크므로 출력하고
    //그렇지 않으면 long형을 출력한다.
    return 0;
}
실행결과
long

🗣️풀이과정

#include <stdio.h>
int main(void)
{
	int res; //결과 변수
    
    //sizeof의 피연산자로 자료형 이름을 사용하여 크기를 바이트 단위로 계산한다.
	//short형의 크기가 long형보다 크면 참이므로 1, 그렇지 않으먼 0을 res에 저장한다.
    res = sizeof(short) > sizeof(long);
    
    //res가 1과 같으면 shrot형의 크기가 크므로 출력하고
    //그렇지 않으면 long형을 출력한다.
    if(res == 1)
    {
    	printf("short\n");
    }
    else
    {
    	printf("long\n");
    }
    
    return 0;
}
  • 주석에 따라 코드를 작성하면 위와 같다.


4-2. 그 외 유용한 연산자 - 2번

2. 야구경기장의 좌석 수가 70개고 입장객 수가 65명일 때 입장률을 출력하세요.
#include <stdio.h>
int main(void)
{
	<<<>>> //경기장의 좌석수(seats) 초기화
    <<<>>> //관중수(audience) 초기화
    <<<>>> //입장률(rate)을 저장할 변수
    <<<>>>
    //'audience/seats'를 바로 연산하면 둘 다 int형이므로 몫을 계산한다.
    //이 경우 관중수가 좌석 수보다 크지 않으므로 항상 0이 출력된다.
    //따라서 소수점까지 계산할 수 있도록 double형으로 형 변환한다.
    //나누기(/)와 곱하기(*)는 우선순위가 같으므로 연산 방향에 따라 왼쪽부터
    //나누기 연산이 먼저 수행된다.
    <<<>>> //입장률 출력
    return 0;
}
실행결과
입장률 : 92.9%

🗣️풀이과정

#include <stdio.h>
int main(void)
{
	int seats = 70; //경기장의 좌석수(seats) 초기화
    int audience = 65; //관중수(audience) 초기화
    double rate; //입장률(rate)을 저장할 변수
    
	rate=(double)audience/seats*100;
    //'audience/seats'를 바로 연산하면 둘 다 int형이므로 몫을 계산한다.
    //이 경우 관중수가 좌석 수보다 크지 않으므로 항상 0이 출력된다.
    //따라서 소수점까지 계산할 수 있도록 double형으로 형 변환한다.
    //나누기(/)와 곱하기(*)는 우선순위가 같으므로 연산 방향에 따라 왼쪽부터
    //나누기 연산이 먼저 수행된다.
	
	printf("입장률 : %.1lf%\n", rate);
    //입장률 출력
    return 0;
}
  • 주석에 따라 작성하면 위와 같다.


4-2. 그 외 유용한 연산자 - 3번

3. 3.76시간은 몇 시간, 몇 분, 몇 초인지 출력하세요.
#include <stdio.h>
int main(void)
{
	int hour, min, sec; //시, 분, 초를 저장할 변수
    double time = 3.76; //시간 초기화
    <<<>>> //형 변환으로 정수 부분만을 골라낸다.
    <<<>>> //한 시간이 안되는 부분만을 다시 저장한다.
    <<<>>> //분 단위로 환산
    <<<>>> //정수 부분만을 골라내어 분으로 저장한다.
    <<<>>> //일분이 안되는 부분만을 다시 저장한다.
    <<<>>> //초 단위로 환산
    <<<>>> //정수 부분만을 골라내어 초로 저장한다.
    <<<>>> //변환한 시간 출력
    return 0;
}
실행결과
3.76시간은 3시간 45분 35초입니다.

🗣️풀이과정

#include <stdio.h>
int main(void)
{
	int hour, min, sec; //시, 분, 초를 저장할 변수
    double time = 3.76; //시간 초기화
    hour = (int)time; //형 변환으로 정수 부분만을 골라낸다.
    time = (time-hour)*60; //한 시간이 안되는 부분만을 다시 저장한다.
    min = (int)time; //분 단위로 환산
    time = (time-min)*60; //정수 부분만을 골라내어 분으로 저장한다.
    sec = (int)time; //일분이 안되는 부분만을 다시 저장한다.
    //초 단위로 환산
    //정수 부분만을 골라내어 초로 저장한다.
    //변환한 시간 출력
    printf("%.2f시간은 %d시간 %d분 %d초입니다.\n", 3.76, hour, min, sec);
    return 0;
}
  • 주석에 따라 코드를 작성하면 위와 같다.



0개의 댓글