programming/C프로그래밍 개념

[C프로그래밍 새내기를 위한 첫 C 언어 책] Chapter3(입력과 출력) 정리 및 연습문제

주니어개발자 2019. 6. 24. 20:20

내용 정리

 

※ 필드 폭, 정밀도

필드폭: 자료를 출력하는 데 사용할 전체 칸   
%+필드폭d: 부호 출력
%-필드폭d: 왼쪽 정렬 (사용 안 하면 오른쪽 정렬)

정밀도: 소수점 아래 자리 수 지정
%. 정밀도 f: 정밀도 3이라면 소수 4자리에서 반올림하여 나타낸다.

 

아래의 예제를 확인하면 확실히 이해할 수 있을 것이다.

 

1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
 
int main()
{
    double avg = 83.768;
 
    printf("avg = %5.1f\n", avg);
    printf("avg = %7.3f\n", avg);
    printf("avg = %.2f\n", avg);
    printf("avg = %5f\n", avg);
    return 0;
}

 

 

출력함수

printf
주의점: "(큰 따옴표) 출력하기 위해 이스케이프 문자인 사용


 ex) printf("My name is 'C'.");  → 작은 따옴표는 이스케이프 문자 필요 없음
     printf("You said \"Hello!\".");   큰 따옴표 이스케이프 문자 필요함!

문자 저장에는 작은 따옴표도 이스케이프 문자 필요
ex) char ch = '\'';

 

 

- putchar

문자 전용 출력 함수

변환 명세 필요 없음, 실행 속도 빠르다.  문자 출력 용이

 

ex) char grade = 'A';

putchar(grade);

putchar('+');

 

 A+ 출력, 개행하려면 putchar('\n');

 

 

- puts

문자열 전용 출력함수

변환 명세 필요 없음, 개행 문자 자동출력

puts("Hello!"); == printf("Hello!\n");

printf("% s\n", "Hello!");

 

 

입력함수

- scanf

scanf함수를 사용할 때는 키보드에서 입력되는 값을 주기억장치 몇 번지에 저장할지 명시해야 한다.

 기억 장소를 구해주는 연산자 &(앰퍼센트)를 사용

 

하지만 문자열을 저장하는 변수명이나 배열명은 그 자체가 문자열을 저장할 주기억장치의 시작 주소이므로 &를 붙이지 않는다.

 

문자열은 스페이스바, 탭키 전까지의 문자열이 변수에 저장

 

 

- getchar

문자 전용 입력함수

getchar() 형태로만 사용, 한 문자 입력을 받는다.

 

 

- gets

문자열 전용 입력함수

변환 명세 필요 없으며, 엔터키를 입력하기 전까지 모든 문자가 문자열로 저장.(공백 포함)

 

 

※fflush(stdin) 문자 입력과 버퍼 지우기

버퍼에 남아있는 개행 문자 때문에 문자를 입력할 때 오류 발생!

버퍼 안의 내용을 모두 지운 뒤 입력을 받아야 한다.

 

문자, 문자열 자료형 앞에 사용  공백도 입력문자로 사용하기 때문(숫자는 상관없음)

 

예제를 통해 입력 함수와 버퍼를 지워야 하는 이유를 확인해 보자

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
 
int main()
{
    char a, b, c;
    int d, e;
 
    printf("1.문자입력:");
    a = getchar();
    printf("2.숫자입력:");
    d = scanf("%d"&d);
    //fflush(stdin);
    printf("3.문자입력:");
    a = getchar();
 
    return 0;
}

 

14열의 입력 함수가 처리될 때 버퍼에 있는 개행 문자가 삽입되어

입력을 수행하지 않고 메인 함수가 마무리된다.

 

따라서 12행의 주석처리를 해제하면 정상적으로 작동한다.


연습문제 풀이

 

7,8,9,10번을 풀어보겠다.

 

 

문제 7: 키보드에서 문자를 한 개 입력받은 후, 그 문자에 해당하는 ASCII코드 값을 구하는 프로그램을 작성하시오.

 

 

1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
 
//연습문제7
int main()
{
    char ch;
    printf("문자를 입력하세요.:");
    ch = getchar();
    printf("%c의 ASCII코드 값은 %d입니다.\n", ch, ch);
    return 0;
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4f; text-decoration:none">Colored by Color Scripter

 

문자, 숫자간 변환은 변환명세만 신경쓰면 된다.

 

 

 

문제 8: 키보드에서 8진수 정수와 16진수 정수를 하나씩 입력받은 후, 이 입력 값들과 두 정수의 합을 10진 정수로 출력하는 프로그램을 작성하시오.

 
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
 
//연습문제8
int main()
{
    int oct, hex;
    printf("8진수 16진수를 순서대로 입력하세요.:");
    scanf("%o %x"&oct, &hex);
    printf("%o(8) + %x(16) = %d", oct, hex, oct + hex);
    return 0;
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4f; text-decoration:none">Colored by Color Scripter

 

문제 8 실행 결과

 

역시 변환명세만 신경쓰면 진수변경 용이하다.

 

 

 

문제 9: 반지름을 입력받아 원의 둘레와 면적, 그리고 구의 부피를 구한 후 세 개의 결과 값의 소수 자리를 세로로 맞추어 출력하시오.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
 
//연습문제9
int main()
{
    int r;
    double pi = 3.141592;
    printf("반지름(cm)을 입력하세요: ");
    scanf("%d"&r);
    printf("둘레= %7.2lf cm\n",pi* r* 2);
    printf("면적= %7.2lf cm2\n", pi* r * r);
    printf("부피= %7.2lf cm3\n", (4.0/3.0)*pi*r*r*r);
    return 0;
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4f; text-decoration:none">Colored by Color Scripter
 

필드폭, 정밀도 문제이다. 맨 위의 예제에서 자세히 다뤘으니 설명은 패스

 

 

 

문제 10: 키와 몸무게를 입력받아 키에 맞는 표준 체중을 구한 후 자신의 몸무게와 표준 체중과의 차이를 출력하는 프로그램을 작성하시오.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
 
//연습문제10
int main()
    double height, weight;
 
    printf("키(cm)를 입력히세요.:");
    scanf("%lf"&height);
    printf("몸무게(kg)를 입력히세요.:");
    scanf("%lf"&weight);
 
    printf("당신의 키는 %.1lfcm (%.1lffeet)입니다.\n",height,height/30.48);
    printf("당신의 체중은 %.1lfkg (%.1lflb)입니다.\n",weight,weight*2.20459);
    printf("표준 체중 %.1lf과의 차이는 %+.1lfkg입니다.\n", (height - 100)*0.9, weight - ((height - 100)*0.9));
    return 0;
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4f; text-decoration:none">Colored by Color Scripter

 

문제 10 실행결과

조금 더 살을 찌워보자...