<Lab 02 문제 유형 요약>
- Program 1 : '/', '%' 연산자 / if, else 조건문
- Program 2 : '%' 연산자 사용하여 자릿수별 출력
- Program 3 : 비트 연산자 (>>) 사용하여 16진수 바이트 단위 출력
- Program 4 : 비트 연산자 (<<) 사용하여 숫자 나열 출력
- Program 5 : if, else if, else 조건문
- Program 6 : 조건 연산자 (삼항 연산자) / if, else 조건문
- Program 7 : enum / switch 조건문
- Program 8 : switch 조건문 / float 소수점 아래 숫자 개수 지정
- Program 9 : if, else if 조건문
- Program 10 : 중첩 조건문 / switch 조건문 여러 개 case를 한 줄에 표현
Program 1
표준입력으로 두 정수를 입력 받아 큰 수를 작은 수로 나눈 몫과 나머지를 각각 출력하는 프로그램을 작성하시오.
#include <stdio.h>
int main()
{
int a = 0, b = 0, quotient = 0, remainder =0;
scanf("%d %d", &a, &b);
if (a > b) {
quotient = a / b;
remainder = a % b;
}
else {
quotient = b / a;
remainder = b % a;
}
printf("몫 : %d, 나머지 : %d\n", quotient, remainder);
return 0;
}
Program 2
정수인 천만 이하의 한 수를 입력 받아 우리가 사용하는 단위인 만, 천, 백, 십, 일 단위로 출력하는 프로그램을 작성하시오.
- 입력이 2347653이면 “234만 7천 6백 5십 3입니다.” 로 출력
#include <stdio.h>
int main()
{
int integer = 0;
scanf("%d", &integer);
printf("%d만 ", integer / 10000);
printf("%d천 ", integer % 10000 / 1000);
printf("%d백 ", integer % 10000 % 1000 / 100);
printf("%d십 ", integer % 10000 % 1000 % 100 / 10);
printf("%d입니다.\n", integer % 10000 % 1000 % 100 % 10);
return 0;
}
Program 3
부호없는 정수를 16진수로 입력 받아 최하위 바이트부터 순서대로 각바이트의 값을 16진수로 출력하는 프로그램을 쓰시오. (힌트: 비트 연산자 사용)
#include <stdio.h>
int main()
{
int hexa = 0;
printf("16진수로 데이터를 입력하시오 : ");
scanf("%x", &hexa);
printf("byte 0 : %02x\n", hexa & 0x000000FF);
printf("byte 1 : %02x\n", (hexa >> 8) & 0x000000FF);
printf("byte 2 : %02x\n", (hexa >> 16) & 0x000000FF);
printf("byte 3 : %02x\n", (hexa >> 24) & 0x000000FF);
return 0;
}
Program 4
24비트 트루칼라를 나타내는 RGB 표기법은 red, green, blue에 각각 8비트를 사용하여 색상을 표현한다. RGB 색상은 32비트로 저장되는데, 최하위 바이트로부터 red, green, blue의 순서로 색상정보를 저장하고, 최상위 바이트는 사용하지 않는다. Red, green, blue를 입력 받아서 RGB 색상을 만들어 출력하는 프로그램을 쓰시오. RGB 색상은 16진수로 아래 예시와 같이 출력한다.
#include <stdio.h>
int main()
{
int red = 0, green = 0, blue = 0, result =0;
printf("red : ");
scanf("%d", &red);
printf("green : ");
scanf("%d", &green);
printf("blue : ");
scanf("%d", &blue);
result = red | (green << 8) | (blue << 16);
printf("%x", result);
return 0;
}
Program 5
이차 방정식 의 근을 계산하는 프로그램을 작성하시오
- 사용자에게 이차 방정식의 계수 a, b, c를 입력하도록 한다.
- 만약 a가 0이면 근은 -c/b 이다.
- 만약 판별식(b^2-4ac)이 음수이면 실근은 존재하지 않는다.
- 위의 조건에 해당되지 않으면 다음과 같은 공식을 이용하여 실근을 구할 수 있다.
- 다른 결과 예시
- 이차 방정식의 해는 x=-1.33입니다. (조건 ②)
- 이차 방정식의 해는 존재하지 않습니다. (조건 ③)
#include <stdio.h>
#include <math.h>
int main()
{
float a = 0, b = 0, c = 0;
printf("이차방정식 (ax^2 + bx + c =0)의 해를 구하시오.\n");
printf("계수 a를 입력하시오 : ");
scanf("%f", &a);
printf("계수 b를 입력하시오 : ");
scanf("%f", &b);
printf("계수 c를 입력하시오 : ");
scanf("%f", &c);
if (a == 0) {
printf("이차방정식의 해는 %f입니다.\n", -1 * c / b);
}
else if (b * b - 4 * a * c < 0) {
printf("이차방정식의 해는 존재하지 않습니다.\n");
}
else {
printf("이차방정식의 해 x = %f, x = %f 입니다.\n", (-1 * b + sqrt(b * b - 4 * a * c)) / (2 * a), (-1 * b - sqrt(b * b - 4 * a * c)) / (2 * a));
}
return 0;
}
Program 6
세개의 정수를 입력 받아 가장 큰 수를 구하는 프로그램을 조건 연산자(삼항 연산자)와 조건문(if-else)을 각각 이용하여 작성하시오.
#include <stdio.h>
int main()
{
int a = 0, b = 0, c = 0;
scanf("%d %d %d", &a, &b, &c);
printf("삼항 연산자 : %d\n", ((a > b ? a : b) > c ? (a > b ? a : b) : c));
if (a > b) {
if (a > c) printf("조건문 : %d", a);
else printf("조건문 : %d", c);
}
else {
if (b > c) printf("조건문 : %d", b);
else printf("조건문 : %d", c);
}
printf("\n");
return 0;
}
Program 7
Red, Green, Blue를 의미하는 하나의 정수를 입력하고, 입력에 따라 “Red”, “Green”, “Blue”를 출력하는 프로그램을 쓰시오.
- enum color { RED, GREEN, BLUE }; 을 사용하시오.
#include <stdio.h>
enum color { RED, GREEN, BLUE };
int main()
{
enum color RGB;
int index = 0;
printf("세 정수 0,1,2 중의 하나를 입력 : ");
scanf("%d", &index);
switch (index) {
case RED:
printf("Red\n");
break;
case GREEN:
printf("Green\n");
break;
case BLUE:
printf("Blue\n");
break;
}
return 0;
}
Program 8
다음을 참고로 표준입력으로 받은 두 실수의 연산을 수행하는 프로그램을 작성하시오.
- 연산 종류는 문자 입력으로 받아서, 다음과 같은 입출력이 되도록 하시오.
#include <stdio.h>
int main()
{
float a, b;
char cal;
printf("두 실수 입력 : ");
scanf("%f %f", &a, &b);
printf("연산종류 선택 : ");
scanf(" %c", &cal);
switch (cal) {
case '+':
printf("%.2f %c %.2f = %.2f", a, cal, b, a + b);
break;
case '-':
printf("%.2f %c %.2f = %.2f", a, cal, b, a - b);
break;
case '*':
printf("%.2f %c %.2f = %.2f", a, cal, b, a * b);
break;
case '/':
printf("%.2f %c %.2f = %.2f", a, cal, b, a / b);
break;
}
return 0;
}
* 문제에서는 소수점 아래 두 자리만 표기 (일부 float 값은 컴퓨터가 정확하게 계산할 수 없음, 컴퓨터구조 게시물 참고)
Program 9
다음을 참고로 표준입력으로 받은 월(month)에 해당하는 분기를 출력하는 프로그램을 if 문을 사용하여 작성하시오.
- 1사분기: 1, 2, 3월, 2사분기: 4, 5, 6월, 3사분기: 7, 8, 9월, 4사분기: 10, 11, 12월
#include <stdio.h>
int main()
{
int quar = 0;
scanf("%d", &quar);
if (quar == 1) {
printf("1,2,3월\n");
}
else if (quar == 2) {
printf("4,5,6월\n");
}
else if (quar == 3) {
printf("7,8,9월\n");
}
else if (quar == 4) {
printf("10,11,12월\n");
}
return 0;
}
Program 10
표준입력으로 받은 년도와 달을 이용하여 월의 말일을 출력하는 프로그램을 작성하시오. 년도의 윤년을 판단하기 위해서는 아래를 참고하시오.
- 년도가 4로 나누어 떨어지는 해는 우선 윤년으로 한다.
- 위 조건에 해당하는 년도가 100으로 나누어 떨어지는 해는 평년으로 한다.
- 다만 400으로 나누어 떨어지는 해는 윤년으로 정한다.
#include <stdio.h>
int main()
{
int year, month, day;
scanf("%d %d", &year, &month);
if (month == 2) {
if (year % 4 == 0 && year % 100 != 0) {
day = 29;
}
else day = 28;
}
else {
switch (month) {
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
day = 31;
break;
case 4: case 6: case 9: case 11:
day = 30;
break;
}
}
printf("%d년 %d월의 말일은 %d일입니다.\n", year, month, day);
return 0;
}
'College Computer Science > C Language' 카테고리의 다른 글
[C 프로그래밍 실습] 함수 1 (Lab 05) (0) | 2020.11.21 |
---|---|
[C 프로그래밍 실습] 배열 (Lab 04) (0) | 2020.11.05 |
[C 프로그래밍 실습] Report 01 (0) | 2020.11.04 |
[C 프로그래밍 실습] 반복 / 포인터 기초 (Lab 03) (0) | 2020.10.27 |
[C 프로그래밍 실습] 자료형과 변수 / 전처리와 입출력 (Lab 01) (0) | 2020.10.13 |
댓글