컴퓨터의 기초 제 4강 - 표준 입출력, 함수의 기초 2006년 4월 10일
지난 주 실습 문제 정수 값을 입력받아 짝수/홀수인지 출력하기 #include <stdio.h> void main() { int value; scanf(“%d”,&value); if (value % 2 == 1) // (value & 1)도 맞다, 왜? printf(“odd\n”); else printf(“even\n”); }
궁금한 것 Q> C에서 입력과 출력을 다루는 명령어는 무엇무엇이 있나요? A> (동문서답) C에서는 입출력을 포함한 다양한 기능을 지원하는 표준 라이브러리 함수(standard library function)들을 제공합니다. Q> 그러니까 입출력에 무엇무엇이 있냐고요-_- A> 다음 슬라이드를 보시죠.
대표적인 표준 입출력 라이브러리 함수 scanf(입력형식, 입력받을 변수1의 주소, 입력받을 변수 2의 주소, …) 사용 예 scanf(“%d %d %d”,&a, &b, &c); 정수 3개를 입력받아 각각 정수형 변수 a b c에 넣습니다. Q> 변수 이름 앞에 ‘&’를 붙이는 이유는? printf(출력형식, 출력할 변수1, 출력할 변수2, …) printf(“a + b + c = %d\n”, a + b + c); “a + b + c = %d<엔터>”라는 문자열에서, %d 자리에 a + b + c를 계산한 값을 대신 넣고 출력합니다.
scanf/printf의 변환기호 int(정수)형 변수 char형 변수 : %c 문자열 : %s 실수(real number) %d (10진수), %o (8진수), %x (16진수) %u (unsigned int형 10진수) char형 변수 : %c 문자열 : %s 실수(real number) %f (float형 실수), %lf (double형 실수) %e (6.02e+23과 같은 지수형)
변환기호를 사용한 출력 예제 #include <stdio.h> void main() { printf(“10진수(100) = %d\n”, 100); printf(“8진수(100) = %o\n”, 100); printf(“16진수(100) = %x\n”, 100); printf(“부호없는 10진수(2의 31제곱) = %u\n”, 1 << 31); printf(“char형 = %c\n”, ‘A’); printf(“문자열 출력 = %s\n”, “\”문자열\””); printf(“실수 출력 = %lf\n”, 3.141592); }
예쁘게 변환해서 출력하기 %5d, %4f, %9s … %-5d, %-4f, %-9s … %.5f, %.2lf 숫자만큼 공간을 만들고 우측 정렬해서 변환! 나머지는 공백으로 채웁니다. %-5d, %-4f, %-9s … 위의 것과 비슷하나, 대신 좌측정렬을 하지요. %.5f, %.2lf 소수점 이하 n번째까지만 출력합니다. 그 밑의 자리에서 (정확하지 않은) 반올림을 한답니다.
그밖에 많은 라이브러리 함수들 인터넷에서 ‘C standard library’ 또는 ‘C 표준 라이브러리’로 검색해보세요! g모 사이트에서 검색 결과 : http://www.utas.edu.au/infosys/info/documentation/C/CStdLib.html 물론, MSDN(http://www.msdn.com)에도 있습니다. 궁금증 해결 #include <stdio.h> 의 의미는? C 표준 라이브러리 중, 표준 입출력에 관한 함수들을 사용하게 해달라는 뜻입니다.
지금부터 살펴볼 것 C에서의 함수 정의 및 사용법 기초
함수의 정의 우리가 학창시절 배운 함수의 표기법 C에서의 함수 정의 f(x) = 3x + 1 (x는 정수) int f(int x) { return x * 3 + 1; } 정수형 변수 x를 인자로 받아 x * 3 + 1의 결과를 내놓는 함수의 정의입니다.
C 함수의 특징 프로그램의 기본 구성 단위 일만 하는 함수도 있습니다. 프로그램을 실행하면 main함수를 부릅니다. void f(int x)와 같이 선언하면, 이 함수는 어떠한 값도 반환하지 않고, 단지 일만 합니다. 단순히 프로그램 안에서 하는 일을 나누기 위해 함수를 사용하는 경우도 있습니다. 어떤 함수들은, 일만 하고서 일이 제대로 수행되었는지 여부를 알리기 위해 반환값을 사용하는 경우도 있습니다. 예 : scanf()함수는 성공적으로 일을 마치면 입력받은 변수의 수를 반환합니다. 입력에 실패하면, 음수를 반환합니다.
함수의 사용예 #include<stdio.h> int f(int x){ return x * 3 + 1; } void process(int a){ printf(“3x + 1 = %d\n”, f(a)); void main(){ int a; scanf(“%d”, &a); // 정수를 입력받습니다. process(a);
Homework Assignment #4 2차 방정식의 해 구하기 double형 실수 a, b, c를 입력받아, ax^2 + bx + c의 꼴인 2차방정식의 두 실수 해를 출력하는 프로그램을 작성하세요. - 다음 슬라이드의 void solve(double a, double b, double c) 함수 내용을 채우면 됩니다. - 실수 해가 없는 경우도 처리하세요. 단, 해가 1개인 경우나 a가 0인 경우는 고려하지 않습니다. - 소수점 2째 자리까지만 출력합니다. - 표준 라이브러리 math.h에 정의된 double sqrt(double x) 함수를 사용하세요. 이 함수는 x의 제곱근을 반환합니다.
Homework 뼈대 #include <stdio.h> #include <math.h> // sqrt()함수를 사용하기 위해 /* 아래와 같이 함수이름, 인자와 리턴값의 타입만을 지정한 것을 함수의 prototype이라고 합니다. 함수의 원래 내용을 프로그램의 뒷부분에 적고 싶을 때는 이와 같이 앞부분에 미리 선언해주어야 합니다. */ void solve(double, double, double); void main() { double a, b, c; printf(“세 실수 a, b, c를 입력하세요\n”); scanf(“%lf %lf %lf”,&a, &b, &c); solve(a, b, c); } void solve(double a, double b, double c) // (내용을 구현하세요)
Any Questions?