본문 바로가기
Drill/프로그래밍언어

[프로그래밍언어]쉽게 풀어쓴 C언어 Express 4장 변수와 자료형 Programming

by wintercamo3482 2024. 11. 19.

01 사용자로부터 하나의 실수를 입력받아서 소수점 표기 방법과 지수 표기 방법으로 동시에 출력하는 프로그램을 작성하라.

#include <stdio.h>

int main(void)
{
    double x;

    printf("실수를 입력하시오: ");
    scanf("%lf", &x);

    printf("실수형식으로는 %lf입니다\n", x);
    printf("지수형식으로는 %e입니다\n", x);

    return 0;
}

 

double로 입력 받은 실수를 형식 지정자를 사용해서 실수(%f 혹은 %lf)나 지수(%e 혹은 %E)로 출력하면 된다.

02 사용자로부터 정수를 16진수로 입력받아서, 8진수, 10진수, 16진수 형태로 출력하는 프로그램을 작성하라.

#include <stdio.h>

int main(void)
{
    int data;

    printf("16진수 정수를 입력하시오: ");
    scanf("%x", &data);

    printf("8진수로는 %#o입니다\n", data);
    printf("10진수로는 %d입니다\n", data);
    printf("16진수로는 %#x입니다\n", data);

    return 0;
}

 

16진수로 입력을 받으려면 scanf에서 형식 지정자를 %x로 한다. 즉, 8진수로 입력받을 경우엔 %o로 하면 된다.

 

출력할 때 8진수나 16진수라는 것을 표현하고 싶을 때면 %o 및 %x 사이에 #을 넣으면 된다.

03 int형 변수 x와 y의 값을 서로 교환하는 프로그램을 작성하여 보자. 별도의 변수가 필요하면 정의하여서 사용한다. 변수 x와 y는 10, 20의 값으로 초기화하라.

#include <stdio.h>

int main(void)
{
    int x = 10;
    int y = 20;
    int tmp = 0;

    printf("x=%d y=%d\n", x, y);

    tmp = x;
    x = y;
    y = tmp;

    printf("x=%d y=%d\n", x, y);

    return 0;
}

 

x의 값을 tmp에 복사했다. 그리고 y의 값을 x에 대입하여 x의 값을 20으로 swap.

 

그리고 기존 x의 값이 저장된 tmp의 값을 y에 대입하여 y가 10을 갖도록 작성했다.

04 상자의 부피를 구하는 프로그램을 작성하여 보자. 부피는 길이*너비*높이로 계산된다. 길이, 너비, 높이는 모두 double형의 실수로 입력받아 보자.

#include <stdio.h>

int main(void)
{
    double w, h, d, result;

    printf("상자의 가로 세로 높이를 한번에 입력: ");
    scanf("%lf %lf %lf", &w, &h, &d);

    result = w * h * d;

    printf("상자의 부피는 %lf입니다\n", result);

    return 0;
}

 

저번 문제풀이 과정에서도 이와 같이 다수의 입력을 받는 것을 해본 적이 있는 거 같은데, 위 코드처럼 한다면 입력 값 구분은 스페이스바 문자로 해주면 된다.

05 우리나라에서 많이 사용되는 면적의 단위인 평을 제곱미터로 환산하는 프로그램을 작성하시오. 여기서 1평은 3.3㎡이다. 변수들의 자료형은 어떤 것을 선택하는 것이 좋은가? 기호 상수를 이용하여 1평당 제곱미터를 나타내어라.

#include <stdio.h>
#define SQMETER_PER_PYEONG 3.3058

int main(void)
{
    double pyeong, result;

    printf("평을 입력하세요: ");
    scanf("%lf", &pyeong);

    result = pyeong * SQMETER_PER_PYEONG;

    printf("%lf평방미터입니다.\n", result);

    return 0;
}

 

전처리기 #define을 사용해도 좋고, main 함수 내에서 const double을 사용하여 실수 상수를 정의해도 좋다.

06 다음과 같은 수식의 값을 계산하여 화면에 출력하는 프로그램을 작성하시오. 지수 표기법을 사용하여 변수들을 초기화한다.

#include <stdio.h>

int main(void)
{
    double front = 3.32e-3;
    double rear = 9.76e-8;

    double result = front + rear;

    printf("%lf\n", result);

    return 0;
}

 

result라는 변수를 선언과 동시에 다른 변수의 연산 결과로 초기화했다.

연산 전이나 후나 둘 다 소수점 이하의 수가 나오기 때문에 double 자료형을 사용했다.

07 물리학에서 운동에너지는 E=mv^2 / 2.0으로 계산된다. 사용자로부터 질량(m)과 속도(v)를 받아서 운동에너지(E)를 계산하는 프로그램을 작성하여 보자. 모든 변수는 double형을 사용하라.

#include <stdio.h>

int main(void)
{
    double mass, speed, kenergy;

    printf("질량(Kg): ");
    scanf("%lf", &mass);

    printf("속도(m/s): ");
    scanf("%lf", &speed);

    kenergy = 0.5 * mass * speed * speed;

    printf("운동에너지(J): %lf\n", kenergy);

    return 0;
}

 

마찬가지로 실수를 입력받고 연산한 결과를 실수로 출력하는 문항. 어렵지 않다.

08 사용자가 아스키 코드값을 입력하면 그 아스키 코드값에 해당하는 문자를 출력하는 프로그램을 작성하라.

#include <stdio.h>

int main(void)
{
    int i;

    printf("아스키 코드값을 입력하시오: ");
    scanf("%d", &i);

    printf("문자:%c입니다.\n", i);

    return 0;
}

 

정수를 입력받고 출력할 때 형식 지정자를 %d가 아니라 %c로 출력하면 해당되는 ASCII 문자가 출력된다.

09 'a'+1, 'a'+2, 'a'+3을 문자 형식(%c)으로 출력하는 프로그램을 작성하시오. 이 프로그램에서 알 수 있는 것은 무엇인가?

#include <stdio.h>

int main(void)
{
    printf("%c ", 'a' + 1);
    printf("%c ", 'a' + 2);
    printf("%c\n", 'a' + 3);

    return 0;
}

 

a라는 문자는 ASCII에서 97에 해당하는 값이다. b는 98, c는 99이다.

10 경보음이 울린 후에 다음과 같은 메시지를 출력하고 다시 경보음이 울리는 프로그램을 작성하여 보자.

#include <stdio.h>
#include <Windows.h>

int main(void)
{
    printf("\a");
    Sleep(3000);

    printf("화재가 발생하였습니다.\n");
    printf("\a");

    return 0;
}

 

일부 시스템에선 연속적인 경보음을 무시하고 한 번만 들려줄 수도 있고, 각 코드 라인의 처리속도가 너무 빨라 한 번만 들리는 것 같은 현상이 발생할 수도 있다.

 

그럴 땐 중간에 위 코드처럼 딜레이를 넣어주면 된다.

Windows 환경에선 Windows.h 헤더를 포함한 다음 Sleep(<밀리초 단위>) 메소드를 사용하면 된다. 즉, 위 코드에선 3초 딜레이를 주었다.

 

Ubuntu와 같은 Linux 환경에선 unistd.h 헤더를 포함한 다음 sleep(<초 단위>) 메소드를 사용하면 된다.

11 다음과 같이 화면에 출력하는 프로그램을 작성하라.

#include <stdio.h>

int main(void)
{
    printf("\"ASCII Code\", \'%c\', \'%c\', \'%c\'\n", 'A', 'B', 'C');
    printf("\\t \\a\a \\n\n");

    return 0;
}

 

출력하려는데 출력이 안 되는 특수문자들은 대부분 앞에 역슬래시(한글 키보드에선 원화 키)를 추가하면 된다.