Presentation is loading. Please wait.

Presentation is loading. Please wait.

Chapter 2 – 기본 프로그래밍 Outline 2.1 C 프로그램의 형태

Similar presentations


Presentation on theme: "Chapter 2 – 기본 프로그래밍 Outline 2.1 C 프로그램의 형태"— Presentation transcript:

1 Chapter 2 – 기본 프로그래밍 Outline 2.1 C 프로그램의 형태
2.2 출력 함수 printf()와 입력 함수 scanf() 2.3 출력 함수 putchar()와 입력 함수 getchar() 2.4 요약 2.5 예제

2 2.1 C 프로그램의 형태 - C 프로그램은 한 개의 main 함수가 필요하다.
- 이 함수의 몸체는 한 개의 블록(block)을 이루며, { 과 } 로 둘려 쌓여있다. - 몸체는 문장들을 열거하여 이루어진다. - 각 문장의 끝은 ;으로 끝난다. int main(void) { 문장; . . . }

3 2.1 C 프로그램의 형태 #include <stdio.h>
stdio.h를 해당 위치에 포함시키라는 전처리 (preprocessor) 명령 stdio.h는 특정 디렉토리(가령 /usr/include)의 file이다 입출력의 수행을 위해 항상 포함해야 한다. int main(void)  void int main() void는 인수가 없다는 의미로 생략해도 됨 main 함수 앞의 int는 정수값을 반환한다는 의미 printf(“Hello, world!\n”); “과 ” 사이의 문자열을 출력한다. \n을 출력하면 새 줄로 바뀐다. return 0; 여기서는 생략해도 무방하다. main함수가 종료되며 return뒤의 0을 반환한다. 정상적인 프로그램의 종료를 의미한다.

4 Hello, world! 1 /* File : prog2-1.c 2 첫번째 C 프로그램 */
#include <stdio.h> int main(void) 5 { printf(“Hello, world!\n”); return 0; 8 } prog2-1.c output Hello, world!

5 2.1 C 프로그램의 형태 printf(“ABCDEF”); printf(“abcdef”);
printf(“ \n”); 3 개의 문자열을 연속으로 한 줄에 출력한다. printf(“ABCDEF\n”); printf(“abcdef\n”); 각 문자열의 뒤에 줄바꿈 문자(\n)이 있으므로 1 줄에 1 개의 문자열 씩 출력한다

6 3 #include <stdio.h> 4 int main(void) { 5 printf(“ABCDEFG”);
/* File : prog2-2.c 다수의 문자열을 출력하는 프로그램 */ #include <stdio.h> int main(void) { printf(“ABCDEFG”); printf(“abcdefg”); printf(“ \n”); 8 } prog2-2.c output ABCDEFGabcdefg

7 3 #include <stdio.h> 4 int main(void) { 5 printf(“ABCDEFG\n”);
/* File : prog2-3.c 한 줄에 한 문자열 씩 출력하는 프로그램 */ #include <stdio.h> int main(void) { printf(“ABCDEFG\n”); printf(“abcdefg\n”); printf(“ \n”); 8 } prog2-3.c output ABCDEFG abcdefg

8 2.2 출력 함수 printf()와 입력 함수 scanf()
(예) %s는 문자열(string), %c는 문자(char), %d는 십진수 정수 printf(“abc”); 와 printf(“%s”, “abc”)는 출력이 같다. printf(“%c%c%c”, ‘a’, ‘b’, ‘c’); abc를 출력한다. 가령 두번째 %c는 ‘b’를 문자형으로 출력하게 한다.

9 2.2 출력 함수 printf()와 입력 함수 scanf()
printf(“%c%2c%3c”, ‘a’, ‘b’, ‘c’); a b c를 출력한다. %와 변환문자 사이의 자연수는 출력할 자리의 필드폭이다. 가령 %2c는 2자리를 잡고 인수 ‘b’를 문자(character)형으로 출력하게 한다. printf(“The sum is %d.\n”, z); Z값이 150인 경우의 출력: The sum is 150. 즉 첫 인수에서 %변환문자 꼴이 아닌 부분은 그대로 출력되고, %변환문자 부분은 가리키는 해당 인수를 변환하여 출력된다.

10 2.2 출력 함수 printf()와 입력 함수 scanf()
<변환 문자> scanf() 변환 변환 문자       입력 스트림에서 문자의 변환 방법 c              문자 d              십진수 f              실수(float) lf 또는 LF    실수(long float 즉 double) s              문자열 printf() 변환 문자 변환 문자      해당되는 인수의 출력 방법 c              문자 d              십진수 정수 e              과학적 표기법으로의 실수 f              실수 g              e-포맷과 f-포맷 중 짧은 것 s              문자열 

11 2.2 출력 함수 printf()와 입력 함수 scanf()
<정수의 취급> int x, y, z; - 세 개의 변수 x, y z가 모두 정수(integer)형 변수임을 선언하고 있다. - x, y, z 각각에는 정수만 배정할 수 있으며, 3.14 등의 실수를 저장하려 하면 에러가 난다. x = 123; - 변수 x에 정수값 123을 배정한다(assign)는 의미 - x값이 123과 같다는 수학적 의미가 아니다. - 물론 정수값 123을 배정한 후에는 x값이 123이 된다.

12 2.2 출력 함수 printf()와 입력 함수 scanf()
<정수의 취급> scanf(“%d”, &y); - 십진수의 정수를 읽어 들여 y에 저장하라. - &y는 y의 주소를 뜻하며, scanf의 경우, 읽어 들일 변수의 주소를 제공해야 한다. scanf(“%3d”, &y); - 자릿수 3을 명시했으므로 4567을 입력해도 3자리 456까지만 읽어 들이고, 다음 7은 다음 읽어 들일 때 사용한다.

13 3 #include <stdio.h> 4 int main(void) { 5 int x, y, z;
/* File : prog2-4.c 정수의 덧셈과 정수의 입출력 */ #include <stdio.h> int main(void) { int x, y, z; x = 123; scanf(“%d”, &y); z = x + y; printf(“The sum is %d.\n”, z); 10 } prog2-4.c output [해 설] 456 The sum is 579. 프로그램 동작시의 사용자의 입력부분을 이탤릭 체로 표시하였다.

14 2.2 출력 함수 printf()와 입력 함수 scanf()
<실수의 취급> float x, y, z; - 세 개의 변수 x, y z가 모두 실수(float)형 변수임을 선언하고 있다. - 실수는 부동소숫점(floating point) 수라고도 불린다. - x, y, z 에는 같은 실수만 배정할 수 있다. - 가령 정수 30은 실수 30.0으로 변환되어 배정된다. x = ; - 변수 x에 실수값 을 배정한다(assign). - x값이 123과 같다는 수학적 의미와는 다르다. - 물론 정수값 123을 배정한 후에는 x값이 123이 된다.

15 2.2 출력 함수 printf()와 입력 함수 scanf()
<실수의 취급> z = x + y; - 실수 x의 값과 실수 y의 값을 더하여, 실수 z에 배정한다. printf(“x + y = %f\n”, z); - 첫 인수를 출력하되, 실수형 자료 출력을 뜻하는 %f자리에는 z에 저장된 실수값으로 치환하여 출력한다. - z값이 가령 인 경우 컴퓨터가 저장하는 가장 가까운 값(가령 )으로 출력됨에 유의해야 한다.

16 3 #include <stdio.h> 4 int main(void) { 5 float x, y, z;
/* File : prog2-5.c 실수의 덧셈과 출력 */ #include <stdio.h> int main(void) { float x, y, z; x = ; y = ; z = x + y; printf(“x + y = %f\n”, z); 10 } prog2-5.c output x + y =

17 2.2 출력 함수 printf()와 입력 함수 scanf()
<문자와 문자열의 취급> printf(“%c%c%c%c ”, ‘Y’, ‘e’, ‘s’, ‘,’) ; - 네 개의 문자를 %c 즉 문자형 그대로 출력한다. 4번째 %c 뒤의 공란 포함 다섯 자가 출력된다. char c1, c2, c3, c4, *a; - c1, c2, c3, c4는 char형 변수로 선언된다. - *a(즉 주소 a가 가리키는 곳에 저장된 값)가 char형이다. 즉 a는 char 포인터임을 선언한다.

18 2.2 출력 함수 printf()와 입력 함수 scanf()
<문자와 문자열의 취급> a = “This is a computer.”; - 이 문자열이 저장된 메모리의 주소값이 a에 저장된다. - 문자열이 저장될 때에는 널문자가 추가된다. 따라서 이 문자열의 길이는 16이지만 저장을 위해서는 17바이트가 사용된다. printf(“%s\n”, a); - %s는 문자열을 출력하기 위해 사용하며, 포인터 a가 가리키는 문자열을 출력한다. - 물론 문자열 뒤에는 줄바꿈 문자(\n)가 출력된다.

19 3 #include <stdio.h> 4 int main(void) {
/* File : prog2-6a.c 문자열과 문자의 출력 */ #include <stdio.h> int main(void) { printf(“%c%c%c%c ”, ‘Y’, ‘e’, ‘s’, ‘,’); printf(“I am a computer.\n”); 7 } prog2-6a.c output Yes, I am a computer.

20 3 #include <stdio.h> 4 int main(void) {
/* File : prog2-6b.c 문자열과 문자의 출력 */ #include <stdio.h> int main(void) { char c1, c2, c3, c4, *a; c1 = ‘Y’; c2 = ‘e’; c3 = ‘s’; c4 = ‘,’; a = “I am a computer.”; printf(“%c%c%c%c ”, c1, c2, c3, c4); printf (“%s\n”, a); 11 } prog2-6b.c output Yes, I am a computer.

21 2.2 출력 함수 printf()와 입력 함수 scanf()
char adr[30]; - 문자 30개 저장할 수 있는 30바이트의 메모리를 잡고 adr에 그 시작 주소를 저장한다. - adr[0]에서 adr[29]까지 모두 30개의 문자가 저장될 수 있다. - adr은 &adr[0]와 같은 의미이다. 즉 배열의 맨 앞 문자의 주소를 뜻한다. scanf(“%s”, adr); - adr 포인터가 가리키는 곳에 문자열을 읽어 들인다. - 123 main Street를 입력하더라고 첫 공백이 발견한 곳에서 입력을 종료한다. - 즉 adr이 가리키는 곳에는 123만이 저장된다. - adr[0], adr[1], adr[2]에 각각 문자 ‘1’, ‘2’, ‘3’이 저장되고, adr[3]에 널문자(즉 0)이 저장된다.

22 3 #include <stdio.h> 4 int main(void) { 5 char adr[30];
/* File : prog2-7.c 문자열의 입력과 출력 */ #include <stdio.h> int main(void) { char adr[30]; printf (“Enter Address:”); scanf(“%s”, adr); printf (“Address is %s\n”, adr); 9 } prog2-7.c output Enter Address:123 Main Street Address is 123

23 prog2-7b.c 문자열 3개를 각각 읽어 들여 출력 output
/* File : prog2-7b.c 문자열의 입력과 출력 */ #include <stdio.h> int main(void) { char adr1[30], adr2[30], adr3[30]; printf (“Enter Address:”); scanf(“%s %s %s”, adr1, adr2, adr3); printf (“Address is %s %s %s\n”, adr1, adr2, adr3); 9 } prog2-7b.c 문자열 3개를 각각 읽어 들여 출력 output Enter Address:123 Main Street Address is 123 Main Street

24 2.3 출력 함수 putchar()와 입력 함수 getchar()
int c; putchar와 getchar함수는 문자를 다루지만, 그 값을 정수형 변수(즉 c)에 저장하여 사용한다. putchar(‘a’); 문자 a가 표준출력(즉 화면)에 출력된다. putchar(97); 문자 a가 출력된다. 97은 문자 a의 아스키 코드이기 때문이다. putchar(‘\n’); 줄바꿈 문자가 출력된다. c = getchar(); 표준 입력(즉 키보드)에서 한 개의 문자 만을 읽어 들여 c에 저장한다.

25 prog2-8.c getchar와 putchar output
/* File : prog2-8.c getchar와 putchar */ #include <stdio.h> int main(void) { int c; c = getchar(); putchar(c); 8 } prog2-8.c getchar와 putchar output Hello H

26 2.5 예 제 /* File : ex2-1.c C Language Programming 이라는 문자열을 화면에 출력 */ #include <stdio.h> int main(void) { printf(“C Language Programming\n”); } 예제 output C Language Programming

27 2 다음과 같은 패턴을 출력하는 프로그램을 작성하시오. */ 3 #include <stdio.h>
/* File : ex2-2.c 다음과 같은 패턴을 출력하는 프로그램을 작성하시오. */ #include <stdio.h> int main(void) { printf(“ CCC\n”); printf(“ CCCCCC\n”); printf(“ CCCCCCCC\n”); printf(“CCCC CCC\n”); printf(“CC\n”); printf(“CC CCCCC\n”); printf(“CC CC\n”); printf(“CC CC\n”); printf(“CC CCCCC\n”); printf(“CC\n”); printf(“CCCC CCC\n”); printf(“ CCCCCCCC\n”); printf(“ CCCCCC\n”); printf(“ CCC\n”); 20 } 예제 2.2

28 CCC CCCCCC CCCCCCCC CCCC CCC CC CC CCCCC CC CC 예제 2.2 output

29 2 변수 a에 9, b에 3을 배정한 후 두 변수의 곱셈,나눗셈,덧셈,뺄셈을 하시오.*/
1 /* File : ex2-3.c 2 변수 a에 9, b에 3을 배정한 후 두 변수의 곱셈,나눗셈,덧셈,뺄셈을 하시오.*/ #include <stdio.h> int main(void) { int a, b, c, d, e, f; a=9; b=3; c=a*b; d=a/b; e=a+b; f=a-b; printf(“%d*%d=%d\n”, a, b, c); printf(“%d/%d=%d\n”, a, b, d); printf(“%d+%d=%d\n”, a, b, e); printf(“%d-%d=%d\n”, a, b, f); 14 } 예제 output 9*3=27 9/3=3 9+3=12 9-3=6

30 2 a=3, b=1, c=6, d=3이라 할 때 (a-b)*(c-d)/(a+d)를 구하시오. */
/* File : ex2-4.c a=3, b=1, c=6, d=3이라 할 때 (a-b)*(c-d)/(a+d)를 구하시오. */ #include <stdio.h> int main(void) { int a, b, c, d; 7 a=d=3, b=1, c=6; printf(“(%d-%d)*(%d-%d)/(%d+%d)=%d\n”, a, b, c, d, a, d, (a-b)*(c-d)/(a+d)); 11 } 예제 output (3-1)*(6-3)/(3+3)=1

31 2 x, y, z에 100을 배정한 후 x/25, y/35, z/45의 몫과 나머지를 구하시오.*/
/* File : ex2-5.c 2 x, y, z에 100을 배정한 후 x/25, y/35, z/45의 몫과 나머지를 구하시오.*/ #include <stdio.h> int main(void) { int x, y, z; 7 x = y = z = 100; printf(“%d/25 = %d ... %d\n”, x, x/25, x%25); printf(“%d/35 = %d ... %d\n”, y, y/35, y%35); printf(“%d/45 = %d ... %d\n”, z, z/45, z%45); 12 } 예제 [해 설] output %는 정수의 나눗셈의 나머지를 구하는 연산자(modulus operator). 100/25 = 100/35 = 100/45 =

32 2 a=10.23, b=3.64, c=1.23 이라 할 때, 수식 (a+b)/c의 결과를 구하시오. */
/* File : ex2-6.c a=10.23, b=3.64, c=1.23 이라 할 때, 수식 (a+b)/c의 결과를 구하시오. */ #include <stdio.h> int main(void) { float a=10.23, b=3.64, c=1.23; float m; 8 m = (a+b)/c; printf(“(%f + %f) / %f = %f\n”, a, b, c, m); 11 } 예제 output ( ) / =

33 2 12345/321을 과학적 표기법(e형 또는 E형)으로 출력하는 프로그램을 작성하시오.*/
/* File : ex2-7.c /321을 과학적 표기법(e형 또는 E형)으로 출력하는 프로그램을 작성하시오.*/ #include <stdio.h> int main(void) { float a, b, c; a = 12345, b = 321; c = a / b; printf(“%e\n”, c); 10 } 예제 [해 설] output 줄7 : a, b가 float형이므로 정수 12345와 321이 float형으로 바뀌어 저장됨. e+001

34 2 ASCII 코드를 이용하여 “A B C D E”를 출력하는 프로그램을 작성하시오. */
/* File : ex2-8.c ASCII 코드를 이용하여 “A B C D E”를 출력하는 프로그램을 작성하시오. */ #include <stdio.h> int main(void) 5 { int a, b, c, d, e; a = 65, b = 66, c = 67, d = 68, e = 69; printf(“%c %c %c %c %c\n”, a, b, c, d, e); 9 } 예제 [해 설] output - 대문자 ‘A’, ‘B’, ‘C’, ‘D’, ‘E’의 아스키 코드는 각각 65, 66, 67, 68, 69이다. - 즉 문자를 표기하는 ‘A’는 실제는 1 바이트의 작은 정수 65로 저장된다. - 예를 들어 a = 65는 a = ‘A’와 동일하다. A B C D E

35 2 “Good Mornig!”을 “good”과 “Morning!”으로 분리하여 별개의 포인터가
/* File : ex2-9.c “Good Mornig!”을 “good”과 “Morning!”으로 분리하여 별개의 포인터가 가리키게 한 후 출력시키는 프로그램을 작성하시오. */ #include <stdio.h> int main(void) { char *p1, *p2; p1 = “Good”; p2 = “Morning!”; printf(“%s %s\n”, p1, p2); 11 } 예제 output Good Morning!

36 2 수치 1988을 필드폭 4자리에 좌측 정렬하여 출력한 후, 또한 필드폭 10자리에
/* File : ex2-10.c 수치 1988을 필드폭 4자리에 좌측 정렬하여 출력한 후, 또한 필드폭 10자리에 우측 정렬하여 출력하는 프로그램을 작성하시오. */ #include <stdio.h> int main(void) 6 { int a = 1988; /* 변수 선언 시에 직접 그 값을 배정할 수 있음 */ 8 printf(“%-4d\n”, a); printf(“%10d\n”, a); 11 } 예제 [해 설] output - “%4d\n”에서 %d는 십진 정수를 의미하며, 4는 해당 인수(즉 a)의 출력용 필드폭이 4자리라는 의미이며, %뒤의 -는 출력 시에 왼쪽으로 정렬하라는 의미이다. 1988

37 3 우측 정렬하여 출력하는 프로그램을 작성하시오. */ 4 #include <stdio.h>
/* File : ex2-11.c 를 좌측 정렬하여 출력한 후, 또한 필드폭 10자리에 우측 정렬하여 출력하는 프로그램을 작성하시오. */ #include <stdio.h> int main(void) 6 { const float a = ; 8 printf(“%-10.5f\n”, a); printf(“%10.5f\n”, a); 11 } 예제 [해 설] output - %10.5f는 필드폭을 10으로 잡고, 그 중 소수점 미만 5자리로 실수를 출력하라는 뜻이다. - % 뒤에 –가 있으면 좌측정렬이고 없으면 우측정렬이다. - const는 상수로 그 값이 변경되지 않음을 뜻하며, 위에서는 생략해도 무방하다.

38 2 다음같은 패턴을 출력하는 프로그램을 작성하시오. */ 3 #include <stdio.h>
/* File : ex2-12.c 다음같은 패턴을 출력하는 프로그램을 작성하시오. */ #include <stdio.h> int main(void) 5 { char a = ‘*’; printf(“%1c%2c%2c%2c%2c\n”, a, a, a, a, a); printf(“%2c%2c%2c%2c\n”, a, a, a, a); printf(“%3c%2c%2c\n”, a, a, a); printf(“%4c%2c\n”, a, a); printf(“%5c\n”, a); 12 } 예제 [해 설] output 예를 들어 마지막 printf문장의 첫 인수내의 %5c는 다음 인수인 a를 필드폭 5자리에 우측정렬하고, 문자로 출력하라는 의미이다. * * * * * * * * * * * * * * *

39 2 실수 두 개를 입력시켜 그 합을 구하는 프로그램을 작성하시오. */ 3 #include <stdio.h>
/* File : ex2-13.c 실수 두 개를 입력시켜 그 합을 구하는 프로그램을 작성하시오. */ #include <stdio.h> int main(void) 5 { float a, b; 7 scanf(“%f %f”, &a, &b); printf(“%f + %f = %f\n”, a, b, a+b); 10 } 예제 [해 설] output scanf등으로 입력받을 때에는, 저장하려는 변수의 주소를 인수로 사용한다. 즉 a에 입력값을 저장하려면, &a를 인수로 사용한다. =

40 2 키보드에서 한 문자를 입력시켜, 그 코드값을 출력하는 프로그램을 작성하시오. */
/* File : ex2-14.c 키보드에서 한 문자를 입력시켜, 그 코드값을 출력하는 프로그램을 작성하시오. */ #include <stdio.h> int main(void) 5 { printf(“%d\n”, getchar()); 7 } 가령 9를 입력하면 문자 ‘9’의 아스키 코드값 57 이 출력된다. 9 57

41 2 컴파일/링크시킨 file을 mycopy라 하자. */ 3 #include <stdio.h>
/* File : mycopy.c 컴파일/링크시킨 file을 mycopy라 하자. */ #include <stdio.h> int main(void) 5 { int c; while ((c=getchar()) != EOF) /* stdin에서 입력 */ putchar(c); /* stdout으로 출력 */ 9 } 예제 2.15 (입출력 방향전환) [해 설] - 표준입력에서 입력을 받아 그와 동일한 복사본을 표준출력으로 출력시키는 프로그램. - getchar()로 한 문자씩 c로 읽어들여 file의 끝(EOF)이 아니라면, putchar(c)로 출력한다.

42 <UNIX/LINUX 상에서의 동작> cat afile afile의 내용을 화면에 출력한다.
sort > tmp > tmp는 sort의 표준출력을 화면 대신 tmp라는 file로 방향전환한다. mycopy < afile > bfile mycopy의 표준입력을 키보드 대신 afile에서 받고, 표준출력은 화면대신 bfile로 방향 전환한다. 만약 입력을 화면에서 받을 경우 입력의 끝은 UNIX/LINUX의 경우 ctrl-D로 한다. DOS의 경우는 입력의 끝은 ctrl-Z로 표시한다. [해 설] output cat afile This is a test file. Second line exists. cc –o mycopy mycopy.c mycopy < afile > bfile cat bfile


Download ppt "Chapter 2 – 기본 프로그래밍 Outline 2.1 C 프로그램의 형태"

Similar presentations


Ads by Google