C 언어 입출력 및 형식 지정자 활용 문제

문제 1

다음 코드가 실행될 때 입력 데이터가 12345□678인 경우 변수 x, y의 값은 무엇인가?

int x;
float y;
scanf("%3d%f", &x, &y);
  • A. 12345 678.000000
  • B. 123 678.000000
  • C. 123 45.678000
  • D. 123 45.000000

해설:

%3d는 정수를 읽되 최대 3자리까지만 허용하므로 123x에 저장된다. 이후 %f는 남은 부분에서 실수를 찾으려 하지만, 공백 다음에 유효한 실수가 없기 때문에 y는 초기화되지 않은 상태로 남는다.

정답: B


문제 2

다음 프로그램에서 입력이 12a345b789일 때 출력 결과는?

#include <stdio.h>

void main() {
    char c1, c2;
    int a1, a2;

    c1 = getchar();
    scanf("%2d", &a1);
    c2 = getchar();
    scanf("%3d", &a2);

    printf("%d, %d, %c, %c\n", a1, a2, c1, c2);
}
  • A. 2, 345, 1, a
  • B. 12, 345, a, b
  • C. 2a, 45b, 1, 3
  • D. 2, 789, 1, a

해설:

  1. getchar(): 첫 문자 '1'을 c1에 할당.
  2. %2d: 두 번째와 세 번째 문자인 '2'를 숫자로 해석하여 a1 = 2.
  3. getchar(): 네 번째 문자 'a'를 c2에 할당.
  4. %3d: 다섯 번째부터 일곱 번째까지의 문자 '3','4','5'를 읽어 a2 = 345.

정답: A


문제 3

다음 프로그램의 출력 결과는?

#include <stdio.h>

void main() {
    int k = 17;
    printf("%d, %o, %x\n", k, k, k);
}

해설:

  • %d: 십진수로 출력 → 17
  • %o: 팔진수로 출력 → 21
  • %x: 십육진수로 출력 → 11

출력 결과: 17, 21, 11


문제 4

다음 프로그램의 출력 결과는?

#include <stdio.h>

void main() {
    printf("*%f, %4.3f*\n", 3.14, 3.1415);
}

해설:

  • %f: 기본적으로 소수점 아래 6자리를 포함하여 출력 → 3.140000
  • %4.3f: 전체 너비 4칸 중 소수점 아래 3자리까지 표시 → 반올림 후 3.142

출력 결과: *3.140000, 3.142*


문제 5

Dev-C++에서 대문자를 입력받아 해당 소문자를 출력하는 프로그램 작성.

#include <stdio.h>

int main() {
    char ch;
    scanf("%c", &ch);
    printf("%c\n", ch + 32); // ASCII 기준 대소문자 차이는 32
    return 0;
}

예: 입력 A → 출력 a


문제 6

다음 프로그램의 문제점을 분석하고 수정하라.

#include <stdio.h>

int main() {
    int a;
    int b;       // 오류: char형으로 선언해야 함
    float c;

    printf("Please input an integer:");
    scanf("%d",&a);
    printf("integer:%d\n",a);     // 오류: &d → %d

    printf("Please input a character:");
    scanf("%c",&b);               // 오류: 개행 문자(\n)가 버퍼에 남아있음
    printf("character:%c\n",b);

    printf("Please input a float number:");
    scanf("%f",&c);
    printf("float:%f\n",b);        // 오류: b가 아닌 c를 출력해야 함

    return 0;
}

문제 요약:

  • bchar 타입이어야 함.
  • 두 번째 scanf("%c") 전에 남아 있는 개행 문자 제거 필요.
  • printf 문 내 오타 수정 (&d%d)
  • 마지막 printf에서 c를 출력해야 함.

수정된 코드:

#include <stdio.h>

int main() {
    int a;
    char b;
    float c;

    printf("Please input an integer: ");
    scanf("%d", &a);
    printf("integer: %d\n", a);

    getchar(); // 이전 입력 버퍼 비우기

    printf("Please input a character: ");
    scanf("%c", &b);
    printf("character: %c\n", b);

    printf("Please input a float number: ");
    scanf("%f", &c);
    printf("float: %f\n", c);

    return 0;
}

태그: C scanf Printf 형식지정자 입출력

6월 11일 20:23에 게시됨