본문 바로가기
문제풀이/문제풀이 중심의 C 언어 연습

[C] [문제풀이 중심의 C 언어 연습] 3장 실습 문제

by 민됴리 2020. 8. 6.
반응형

1999년 9월 1일에 발행된

김용일, 강문설 저자의

문제풀이 중심의 C언어 연습

3장 실습 문제입니다.

 

책에 오타나 오류가 있는 문제가 적지 않게 있는데

그런 부분에 대해서는 언급해 드리겠습니다.

 

궁금한 점은 댓글로 남겨주세요.

 


 

3-1. 한 문자를 입력하고 출력 (scanf, printf 함수 사용)

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void) {

    char ch;

    printf("한 문자 입력: ");
    scanf(" %c", &ch);
    printf("출력: %c", ch);

    return 0;
}

Visual Studio 2019에서 scanf 함수를 사용하려면 상단의 코드와 같이 "#define _CRT_SECURE_NO_WARNINGS"를 적어줘야 합니다. 그렇지 않으면 "error C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details."와 같은 문구가 뜨면서 빌드가 실패할 것입니다. 다른 방법으로도 해결이 가능하지만 이게 제일 간편하므로 이 방법을 추천드립니다. 나중에 기회가 되면 다른 해결 방법들과 왜 이런 일이 발생하는지에 대해 다루겠습니다.

 

3-2. 한 문자를 입력하고 출력 (getchar, putchar 함수 사용)

#include <stdio.h>

int main(void) {

    printf("한 문자 입력: ");
    char ch = getchar();
    printf("출력: ");
    putchar(ch);

    return 0;
}

 

3-3. 한 문자를 입력받고 그 문자의 ASCII값 출력 (getchar함수 사용)

#include <stdio.h>

int main(void) {

    char ch;

    printf("한 문자 입력: ");
    ch = getchar();
    printf("입력한 문자(%c)의 ASCII값: %d", ch, ch);

    return 0;
}

 

3-4. 문제에서 요구하는 방식으로 정수 출력

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void) {

    int no;
    int in;
    int out;

    printf("no, in, out: ");
    scanf(" %d %d %d", &no, &in, &out);

    printf("%5d%-6d%06d", no, in, out);

    return 0;
}

 

3-5. 문제에서 요구하는 방식으로 실수 출력

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void) {

    double no;
    double in;
    double out;

    printf("no: ");
    scanf(" %lf", &no);
    printf("in: ");
    scanf(" %lf", &in);
    printf("out: ");
    scanf(" %lf", &out);
    printf("%5.2f%-6.1f%06.0f", no, in, out);

    return 0;
}

 

3-6. 정수 두 개를 입력받아서 합 출력

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void) {

    int no;
    int count;

    printf("정수 입력: ");
    scanf(" %d %d", &no, &count);

    printf("%d과 %d의 합은 %d입니다.", no, count, no + count);

    return 0;
}

 

3-7. 양수 입력받아서 8진수와 16진수 형태로 출력

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void) {

    int no;

    printf("양의 정수: ");
    scanf(" %d", &no);

    printf("8진수: %o\n", no);
    printf("16진수: %x", no);

    return 0;
}

 

3-8. 실수값을 입력받아서 1/2 크기만큼 출력

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void) {

    double num;

    printf("실수값을 입력하세요: ");
    scanf(" %lf", &num);
    printf("결과: %.2f", num / 2);

    return 0;
}

 

3-9. 정수 5개를 입력받아서 입력받은 정수들과 평균 출력

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void) {

    int num1, num2, num3, num4, num5;
    printf("정수 5개 입력: ");
    scanf(" %d %d %d %d %d", &num1, &num2, &num3, &num4, &num5);

    printf("%6d\n", num1);
    printf("%6d\n", num2);
    printf("%6d\n", num3);
    printf("%6d\n", num4);
    printf("%6d\n", num5);
    printf("__________\n");
    printf("%6.1f", (num1 + num2 + num3 + num4 + num5) / 5.0);

    return 0;
}

 

3-10. 화씨온도를 입력받아서 섭씨온도로 출력

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void) {

    int degree;

    printf("화씨온도를 입력하세요: ");
    scanf(" %d", &degree);
    printf("섭씨온도는 %d도 입니다.", (degree - 32) * 5 / 9);

    return 0;
}

9번째 줄에서 "(degree - 32) * 5 / 9"를 "5 / 9 * (degree - 32)"로 적으면 논리 오류가 발생합니다. 왜냐하면 5 / 9는 정수와 정수의 연산이기 때문에 결괏값 또한 정수인 0이 되기 때문입니다. 따라서 위와 같이 순서를 잘 정하거나, 형 변환(type casting)을 해주셔야 합니다.

 

3-11. 실수를 입력받아서 소수점 이하 3자리, 2자리, 1자리로 출력

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void) {

    double num;

    printf("실수를 입력하세요 (소수점 4자리까지): ");
    scanf(" %lf", &num);
    printf("소수점 3자리: %.3f\n", num);
    printf("소수점 2자리: %.2f\n", num);
    printf("소수점 1자리: %.1f", num);

    return 0;
}

 

3-12. 이름과 나이를 입력받아서 출력

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void) {

    char name[10];
    int age;

    printf("이름: ");
    scanf(" %s", name);
    printf("나이: ");
    scanf(" %d", &age);
    printf("%s의 나이는 %d살입니다.", name, age);

    return 0;
}

 

3-13. 주소를 입력받아 출력 (gets함수 사용)

#include <stdio.h>

int main(void) {

    char address[60];

    printf("주소: ");
    gets(address);
    printf("%s", address);

    return 0;
}

 

반응형