혼공C-2주차

박은정·2022년 7월 17일
0

혼공C

목록 보기
2/4

2주차

  • 기본미션: Ch.3,4 확인문제 풀고 풀이 과정 설명하기
  • 선택미션: Ch.4 도전 실전 문제 풀고 인증샷

~기본미션~

Ch.3-1 확인문제

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

    float long char double int unsigned short

long char int short : 정수형
unsigned : 정수형의 양수 데이터를 저장할때 사용한다.
  1. 다음 프로그램의 실행결과를 예상해보세요.
#include <stdio.h>

int main(void)
{
	int a=0;  //변수 a를 0으로 초기화
    
    a=a+1;  //a(0)에 a(0)+1 값을 저장 -> a=1
    a=a+2;  //a(1)에 a(1)+2 값을 저장 -> a=3
    a=a+3;  //a(3)에 a(3)+2 값을 저장 -> a=6
    printf("a: %d",a);  // 따라서 최종 a값인 6이 출력
    
    return 0;
}
실행결과
6
  1. 국어, 영어, 수학 점수를 저장할 변수(kor, eng, mat)를 선언하고 각각 70, 80, 90점으로 초기화합니다. 총점을 저장할 변수(tot)를 선언하여 세 과목의 합을 구하고 세 과목의 점수와 총점을 출력하는 프로그램을 작성하세요.
#include <stdio.h>

int main(void)
{
> int kor=70, eng=80, mat=90;   //점수를 저장할 변수 선언, 초기화
> int tot;   //점수 총점을 저장할 변수 선언

> tot=kor+eng+mat;   //tot변수에 국어, 영어, 수학 점수 변수 합의 값 저장
> printf("국어: %d, 영어: %d, 수학: %d\n", kor, eng, mat);   //국어, 영어, 수학 점수 출력
> printf("총점: %d", tot);   // 총점 출력

	return 0;
}
실행결과
국어 : 70, 영어 : 80, 수학 : 90
총점 : 240

Ch.3-2 확인문제

  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);

정답: 3
1 -> 자료형 char의 변환 문자는 %c가 사용되어야 한다.
2 -> 자료형 short의 변환 문자는 %ud가 사용되어야 한다.
4 -> 자료형 double의 변환 문자는 %lf가 사용되어야 한다.
  1. 다음 프로그램의 빈칸에 알맞은 내용을 채워보세요.
#include <stdio.h>

int main(void)
{
	char fruit[20];
    int cnt;

	printf("좋아하는 과일: ");
>     scanf("%s", fruit ); //문자열을 입력하므로 &를 사용하지 않음
    printf("몇 개: ");
>     scanf("%d", &cnt); //cnt 변수는 정수형이므로 &를 사용
    printf("%s를 %d개 드립니다.", fruit, cnt);

	return 0;
}
실행결과
좋아하는 과일 : 망고 
몇 개 : 3
망고를 3개 드립니다.
  1. 키보드로 문자를 입력하여 아스키 코드 값을 출력하는 프로그램을 작성하세요. 어떤 문자가 입력될지는 실행할 때 결정합니다.
#include <stdio.h>

int main(void)
{
	char ch;
    
    printf("문자 입력: ");
>	scanf("%c, &ch);   //문자 입력, char형이므로 &를 붙인다.
>	printf("%c문자의 아스키 코드 값은 %d입니다.", ch, ch);   //char형 변수는 변환문자에 따라 출력되는 값이 달라진다. %c를 사용하면 문자가, %d를 사용하면 정수가 출력된다.

	return 0;
}
실행결과
문자 입력: A/t
A/t 문자의 아스키 코드 값은 65/116입니다.

ch.4-1 확인문제

  1. 4.0과 1.2의 덧셈, 뺄셈, 곱셈, 나눗셈을 한 값을 소수점 이하 첫째 자리까지 출력하세요.
#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
  1. 두 과목의 점수를 입력하여 평균을 출력하는 프로그램을 작성하세요. 평균은 소수점 이하 첫째 자리까지 출력하세요.
#include <stdio.h>

int main(void)
{
	int a, b, tot;
	double avg;

	printf("두 과목의 점수 : ");
> 	scanf("%d%d",&a, &b);   //scanf함수에서 변환문자를 여러개 쓸 때는 콤마(,)를 사용하지 않고 이어쓰기(이거틀림)
	tot = a + b;
	avg = tot / 2.0;

> 	printf("평균: %.1lf\n",avg);

	return 0;
}
실행결과
두 과목의 점수: 70 85
평균: 77.5
  1. 태희가 신청한 전체 학점과 평균을 계산하여 신청 학점이 10학점 이상이고 평점 평균이 4.0을 넘는 경우 1을 출력하고, 그렇지 않으면 0을 출력하는 프로그램을 작성하세요. 태희가 이전 학기에 신청한 과목당 학점과 얻은 점수는 아래와 같습니다.

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

각 변수명은 다음과 같습니다.

kor(국어), eng(영어), mat(수학), credits(전체 학점), res(결과 저장), kscore(국어 평점), escore(영 평), mscore(수 평), grade(평점 평균)

#include <stdio.h>

int main(void)
{
> 	int kor = 3, eng = 5, mat = 4; //과목 변수 선언, 초기화
> 	int credits, res; //전체 학점, 결과 저장 변수 선언
> 	double kscore = 3.8, escore = 4.4, mscore = 3.9; //평점 변수 선언, 초기화. 실수이므로 double 자료형
> 	double grade; //평점 평균 변수 선언

> 	credits = kor + eng + mat; //전체 학점=국+영+수
> 	grade = (kscore + escore + mscore) / 3; //평점의 평균을 계산 -> 과목별 평점을 더하고 3으로 나눴으나 오답
  //grade = (kor*kscore + eng*escore + mat*mscore) / credits; -> 옳은 코드
> 	res = (credits >= 10) && (grade >= 4.0); // 전체학점이 10학점 이상이면서(AND) 평점 평균이 4.0보다 크면 1(T) 출력, 아니면 0(F)출력 

> 	printf("%d", res); //res 출력
	
	return 0;
 }
실행결과
1

ch.4-2 확인문제

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

int main(void)
{
	int res;
>	res = (sizeof(short) > sizeof(long)) ? 1 : 0;
> 	printf("%d\n\n", res);  //0은 출력했는데 long을 어떻게 출력하는지 몰랐음 예약어라서 변수로 쓸 수도 없고?
  //printf("%s\n", (res==1) ? "short" : "long"); -> printf 함수에서 수식을 쓸 수 있는지 몰랐다.

return 0;
}
실행결과
long
  1. 야구경기장의 좌석 수가 70개고 입장객 수가 65명일 때 입장률을 출력하세요.
#include <stdio.h>

int main(void)
{
>	int seats=70, audience=65;
>	double rate;

>	rate = ((double)audience / (double)seats)*100;
>	printf("입장률: %.1lf\n%%", rate);   // % 자체를 출력할 때는 두 번 연속으로 입력하기

return 0;
}
실행결과
입장률 : 92.9%
  1. 3.76시간은 몇 시간, 몇 분, 몇 초인지 출력하세요.
내가 작성한 코드
#include <stdio.h>

int main(void)
{
	int hour, min, sec;
    double time=3.76;
    
	hour = (int)time;
	double ra = time - hour;
	double ra2 = (ra * 60);
	min = (int)ra2;
	double ra3 = ra2 - min;
	sec= (int) (ra3 * 60);
	printf("%.2lf시간은 %d시간 %d분 %d초입니다.", time, hour, min, sec);

return 0;
}
해설지 코드
#include <stdio.h>

int main(void)
{
	int hour, min, sec;
    double time=3.76;
    
    hour=(int)time;   // time 변수를 int로 형 변환하여 정수만 잘라내기
    time -= hour;   // time = time - hour (0.76)
    time *= 60.0;   // time = time * 60.0 (45.6)
    min=(int)time;   // 형 변환 
    time -=min;   // time = time - min (0.6)
    time *=60;   // time = time * 60  
    sec = (int)time;
    printf("3.76시간은 %d시간 %d분 %d초입니다.\n", hour, min, sec);

return 0;
}
실행결과
3.76시간은 3시간 45분 35초입니다.
둘 다 결과는 동일하게 나오나 해설지의 코드가 훨씬 간결하다.
복합대입 연산자를 생각도 못 해서 변수를 만들어서 결과를 대입했음..

~선택미션~

ch.4-2 도전 실전 예제

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

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

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

20행에서 (cm * 0.01) 사이에 *를 안 넣은걸로 30분을 헤맴
나도 모르게 수학 문제 풀듯이 풀어서 헷갈렸다.

1개의 댓글

comment-user-thumbnail
2023년 1월 22일

안녕하세요. 혹시 4-2문제에서 sec 0.6*60 출력 35입니까? 36아닙니까?

답글 달기