쉽게 풀어쓴 C 프로그래밍

Similar documents
Microsoft PowerPoint - Chapter8.pptx

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - chap-09.pptx

쉽게 풀어쓴 C 프로그래밍

슬라이드 1

<4D F736F F F696E74202D20C1A639C0E520C7D4BCF6BFCDBAAFBCF6>

쉽게 풀어쓴 C 프로그래밍

슬라이드 1

PowerPoint 프레젠테이션

Microsoft PowerPoint - ch04 - 함수 pm0130

PowerPoint 프레젠테이션

슬라이드 1

C 프로그래밊 개요

Microsoft PowerPoint - additional01.ppt [호환 모드]

Microsoft PowerPoint - chap10-함수의활용.pptx

11장 포인터

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

중간고사

Microsoft PowerPoint - chap-03.pptx

금오공대 컴퓨터공학전공 강의자료

C 언어 프로그래밊 과제 풀이

Microsoft PowerPoint - chap06-5 [호환 모드]

untitled

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - Lesson2.pptx

슬라이드 1

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

슬라이드 1

1 장 C 언어복습 표준입출력배열포인터배열과포인터함수 const와포인터구조체컴파일러사용방법 C++ 프로그래밍입문

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft PowerPoint - chap12-고급기능.pptx

Microsoft PowerPoint - 04_C_Language_Function

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

untitled

Infinity(∞) Strategy

Microsoft PowerPoint - 제11장 포인터(강의)

PowerPoint 프레젠테이션

설계란 무엇인가?

슬라이드 1

OCW_C언어 기초

프로그래밍개론및실습 2015 년 2 학기프로그래밍개론및실습과목으로본내용은강의교재인생능출판사, 두근두근 C 언어수업, 천인국지음을발췌수정하였음

Microsoft PowerPoint - 제11장 포인터

Microsoft PowerPoint - ch07 - 포인터 pm0415

Microsoft PowerPoint - [2009] 02.pptx

untitled

Microsoft PowerPoint - ch 전처리기, 다중 소스파일 pm1015

Microsoft PowerPoint - chap05.ppt

<4D F736F F F696E74202D20C1A633C0E52043C7C1B7CEB1D7B7A5B1B8BCBABFE4BCD2>

PowerPoint Template

Microsoft PowerPoint - 05장(함수) [호환 모드]

윤성우의 열혈 TCP/IP 소켓 프로그래밍

PowerPoint Presentation

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

Microsoft PowerPoint - chap-11.pptx

이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2

11장 포인터

Microsoft PowerPoint - chap11-포인터의활용.pptx

설계란 무엇인가?

Microsoft PowerPoint - chap03-변수와데이터형.pptx

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - chap05-제어문.pptx

Microsoft Word - FunctionCall

제 11 장포인터 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

ch15

금오공대 컴퓨터공학전공 강의자료

쉽게 풀어쓴 C 프로그래밍

PowerPoint 프레젠테이션

Microsoft PowerPoint - Chapter 1-rev

PowerPoint 프레젠테이션

PowerPoint Presentation

<4D F736F F F696E74202D20C1A63134C0E520C6F7C0CEC5CD5FC8B0BFEB>

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

PowerPoint Template

PowerPoint 프레젠테이션

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

OCW_C언어 기초

C 프로그램의 기본

프로그램의실행화면 주석 (comment) 두수의합 : 300 /* 두개의숫자의합을계산하는프로그램 */ 주석은코드를설명하는글입니다. 주석 3 가지방법의주석 주석의예 /* 한줄로된주석 */ /* 저자 : 홍길동날짜 : 2013.

슬라이드 1

Microsoft PowerPoint - Chapter 6.ppt

<4D F736F F F696E74202D20C1A63036C0E520BCB1C5C3B0FA20B9DDBAB928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - chap06-1Array.ppt

C 프로그래밊 개요

Microsoft PowerPoint - C++ 5 .pptx

PowerPoint 프레젠테이션

<4D F736F F F696E74202D20C1A63137C0E520B5BFC0FBB8DEB8F0B8AEBFCD20BFACB0E1B8AEBDBAC6AE>

02장.배열과 클래스

컴파일러

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - chap01-C언어개요.pptx

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

Microsoft PowerPoint - C프로그래밍-chap03.ppt [호환 모드]

11장 포인터

1. 표준입출력 C++ : C의모든라이브러리를포함 printf, scanf 함수사용가능예 : int, double, 문자열값을입력받고출력하기 #include <cstdio> int ivar; double dvar; char str[20]; printf("int, dou

<4D F736F F F696E74202D20C1A632C0E520C7C1B7CEB1D7B7A5B0B3B9DFB0FAC1A4>

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

C언어 및 실습 C Language and Practice

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

Transcription:

누구나즐기는 C 언어콘서트 제 7 장함수

이번장에서학습할내용 모듈화 함수의개념, 역할 함수작성방법 반환값 인수전달 함수를사용하는이유 규모가큰프로그램은전체문제를보다단순하고이해하기쉬운함수로나누어서프로그램을작성하여야한다.

함수가필요한이유 같은작업이되풀이되는경우

함수가있다면 함수는한번작성되면여러번사용 ( 호출 ) 이가능하다.

모듈의개념 모듈 (module) 독립되어있는프로그램의일부분 모듈러프로그래밍 모듈개념을사용하는프로그래밍기법 모듈러프로그래밍의장점 각모듈들은독자적으로개발가능 다른모듈과독립적으로변경가능 유지보수가쉬워진다. 모듈의재사용가능 C 에서는모듈 == 함수

함수의개념 함수 (function): 특정한작업을수행하는독립적인부분 함수호출 (function call): 함수를호출하여사용하는것 함수는입력을받으며출력을생성한다.

함수들의연결 프로그램은여러개의함수들로이루어진다. 함수호출을통하여서로서로연결된다. 제일먼저호출되는함수는 main() 이다.

함수의종류

중간점검 1. 함수가필요한이유는무엇인가? 2. 함수와프로그램의관계는? 3. 컴파일러에서지원되는함수를 함수라고한다.

이번장에서학습할내용 모듈화 함수의개념, 역할 함수작성방법 반환값 인수전달 함수를사용하는이유 규모가큰프로그램은전체문제를보다단순하고이해하기쉬운함수로나누어서프로그램을작성하여야한다.

함수의정의 반환형 (return type) 함수헤더 (function header) 함수몸체 (function body)

함수의구조

반환형 함수이름앞에반환하는데이터의유형을표시한다. char, int, long, double 등이가능하다. 반환형이없으면 void 로표시 int add(int x, int y). void print_info().

함수이름 일반적으로동사 + 명사 ( 예 ) compute_average(), get_integer() set_speed() int add(int x, int y) int result; result = x + y; return result;

매개변수 매개변수 (parameter): 함수가외부로부터전달받는데이터를가지고있는변수 int add(int x, int y) int result; result = x + y; return result;

지역변수 지역변수 (local variable): 함수안에서정의되는변수 int add(int x, int y) int result; result = x + y; return result;

함수정의예제 함수를프로그램을이루는부품이라고가정하자. 입력을받아서작업한후에결과를생성한다.

예제 #1 정수의제곱값을계산하는함수 반환값 : int 함수이름 : square 매개변수 : int n int square(int n) return(n*n);

예제 #2 두개의정수중에서큰수를계산하는함수 반환값 : int 함수이름 : get_max 매개변수 : int x, int y int get_max(int x, int y) if( x > y ) return(x); else return(y);

예제 #3 정수의거듭제곱값 (x y ) 을계산하는함수 반환값 : int 함수이름 : power 매개변수 : int x, int y int power(int x, int y) int i; long result = 1; for(i = 0; i < y; i++) result *= x; return result;

중간점검 1. 함수이름앞에 void 가있다면무슨의미인가? 2. 함수가작업을수행하는데필요한데이터로서외부에서주어지는것을무엇이라고하는가? 3. 함수몸체는어떤기호로둘러싸여있는가? 4. 함수의몸체안에서정의되는변수를무엇이라고하는가?

함수호출과반환 함수호출 (function call): 함수를사용하기위하여함수의이름을적어주는것 함수안의문장들이순차적으로실행된다. 문장의실행이끝나면호출한위치로되돌아간다. 결과값을전달할수있다.

인수와매개변수 인수 (argument): 실인수, 실매개변수라고도한다. 매개변수 (parameter): 형식인수, 형식매개변수라고도한다. int main(void) sum = add(2, 3); int add(int x, int y) int result; 인수 매개변수 result = x + y; return result;

반환값 반환값 (return value): 호출된함수가호출한곳으로작업의결과값을전달하는것 인수는여러개가가능하나반환값은하나만가능

값을반환하는문장 return 문장을사용하여서값을반환한다. int add(int x, int y) int result; result = x + y; return result; return 문장의사용예 return 0; return (x); return x+y;

함수원형 함수원형 (function prototyping): 컴파일러에게함수에대하여미리알리는것 // 정수의제곱을계산하는함수예제 #include <stdio.h> int square(int n); // 함수원형 int main(void) result = square(i); int square(int n) return(n * n); // 함수호출 // 함수정의 함수원형

예제 // 정수의제곱을계산하는함수예제 #include <stdio.h> int square(int n);// 함수원형 int main(void) int i, result; for(i = 0; i < 5; i++) result = square(i);// 함수호출 printf("%d \n", result); return 0; int square(int n)// 함수정의 return(n * n); 0 1 4 9 16

// 두수중에서큰수를찾는함수예제 #include <stdio.h> int get_max(int x, int y); int main(void) int a, b; printf(" 두개의정수를입력하시오 : "); scanf("%d %d", &a, &b); printf(" 두수중에서큰수는 %d 입니다.\n", get_max(a, b)); return 0; int get_max(int x, int y) if( x > y ) return(x); else return(y); 두개의정수를입력하시오 : 2 3 두수중에서큰수는 3입니다. 예제

조합 (combination) 계산함수 팩토리얼계산함수와 get_integer() 함수를호출하여조합을계산한다

함수호출계층구조

예제 #include <stdio.h> int get_integer(void); int combination(int n, int r); int factorial(int n); int main(void) int a, b; a = get_integer(); b = get_integer(); printf("c(%d, %d) = %d \n", a, b, combination(a, b)); return 0; int combination(int n, int r) return (factorial(n)/(factorial(r) * factorial(n-r)));

예제 int get_integer(void) int n; printf(" 정수를입력하시오 : "); scanf("%d", &n); return n; int factorial(int n) int i; long result = 1; for(i = 1; i <= n; i++) result *= i; return result; // result = result * i 정수를입력하시오 : 10 정수를입력하시오 : 3 C(10, 3) = 120

중간점검 1. 인수와매개변수는어떤관계가있는가? 2. 반환값이 double 형으로정의된함수에서정수를반환하면어떤일이발생하는가?

함수원형 함수원형 (function prototype) : 미리컴파일러에게함수에대한정보를알리는것 반환형함수이름 ( 매개변수 1, 매개변수 2,... );

함수원형예제 #include <stdio.h> // 함수원형 int compute_sum(int n); 정수를입력하시오 : 10 1 부터 10 까지의합은 55 입니다. int main(void) int n, sum; printf(" 정수를입력하시오 : "); scanf("%d", &n); sum = compute_sum(n); // 함수사용 printf("1부터 %d까지의합은 %d입니다. \n", n, sum); int compute_sum(int n) int i; int result = 0; for(i = 1; i <= n; i++) result += i; return result;

함수원형을사용하지않을려면 함수가미리정의되면된다. 그러나특수한경우에는이것이불가능하다. 따라서함수원형을사용하는것이바람직하다.

함수원형을사용하지않는예제 #include <stdio.h> // 함수정의 int compute_sum(int n) int i; int result = 0; for(i = 1; i <= n; i++) result += i; 정수를입력하시오 : 10 1 부터 10 까지의합은 55 입니다. return result; int main(void) int n, sum; printf(" 정수를입력하시오 : "); scanf("%d", &n); sum = compute_sum(n); // 함수사용 printf("1부터 %d까지의합은 %d입니다. \n", n, sum); return 0;

함수원형과헤더파일 보통은헤더파일에함수원형이선언되어있음

중간점검 1. 함수정의의첫번째줄에는어떤정보들이포함되는가? 이것을무엇이라고부르는가? 2. 함수가반환할수있는값의개수는? 3. 함수가값을반환하지않는다면반환형은어떻게정의되어야하는가? 4. 함수정의와함수원형의차이점은무엇인가? 5. 함수원형에반드시필요한것은아니지만대개매개변수들의이름을추가하는이유는무엇인가? 6. 다음과같은함수원형을보고우리가알수있는정보는어떤것들인가? double pow(double, double);

함수를사용하는이유 소스코드의중복을없애준다. 한번만들어진함수를여러번호출하여사용할수있다. 한번작성된함수를다른프로그램에서도사용할수있다. 복잡한문제를단순한부분으로분해할수있다. void print_heading(void) printf("*************************************"); printf(" NAME ADDRESS PHONE "); printf("*************************************"); int main(void) // 출력이필요한위치 #1 print_heading();... // 출력이필요한위치 #2 print_heading();...... int main(void)... read_list(); sort_list(); print_list();...

변수의범위 변수의범위 전역변수 지역변수 함수 함수 전역변수 지역변수 지역변수

지역변수 지역변수 (local variable): 함수나블록안에선언되는변수

지역변수의사용범위

블록안에서의지역변수

지역변수의생존기간 정의된블록이나함수안에서만생존한다.

지역변수의초기값

함수의매개변수 매개변수도일종의지역변수 함수를호출할때넣어주는인수값으로초기화

함수의매개변수 #include <stdio.h> int inc(int counter); int main(void) int i; i = 10; printf(" 함수호출전 i=%d\n", i); inc(i); printf(" 함수호출후 i=%d\n", i); return 0; int inc(int counter) counter++; return counter; 변수 i 의값이 counter 로복사된다. 함수호출전 i=10 함수호출후 i=10 main 함수안의변수 i 의값은변경되지않음

같은이름의지역변수

전역변수 전역변수 (global variable): 함수의외부에선언되는변수 초기값을주지않으면 0 이다.

전역변수의초기값과생존기간 #include <stdio.h> int counter; // 전역변수 void set_counter(int i) counter = i; // 직접사용가능 int main(void) printf("counter=%d\n", counter); counter = 100; // 직접사용가능 printf("counter=%d\n", counter); * 전역변수의초기값은 0 counter=0 counter=100 counter=20 * 생존기간은프로그램시작부터종료 set_counter(20); printf("counter=%d\n", counter); return 0;

전역변수의사용 // 전역변수를사용하여프로그램이복잡해지는경우 #include <stdio.h> void f(void); int i; int main(void) for(i = 0;i < 5; i++) f(); return 0; void f(void) for(i = 0;i < 10; i++) printf("#"); 출력은어떻게될까요? ##########

같은이름의전역변수와지역변수 // 동일한이름의전역변수와지역변수 #include <stdio.h> int sum = 1; int main(void) int i = 0; int sum = 0; // 전역변수 // 지역변수 지역변수가전역변수를가린다. for(i = 0; i <= 10; i++) sum += i; printf("sum = %d\n", sum); return 0; sum = 55

중간점검 1. 변수의범위는대개무엇으로결정되는가? 2. 변수의범위에는몇가지의종류가있는가? 3. 지역변수를블록의중간에서정의할수있는가? 4. 똑같은이름의지역변수가서로다른함수안에정의될수있는가? 5. 지역변수가선언된블록이종료되면지역변수는어떻게되는가? 6. 지역변수의초기값은얼마인가? 7. 함수의매개변수도지역변수인가? 8. 전역변수는어디에선언되는가? 9. 전역변수의생존기간과초기값은? 10. 똑같은이름의전역변수와지역변수가동시에존재하면어떻게되는가?

생존기간 정적할당 (static allocation): 프로그램실행시간동안계속유지 자동할당 (automatic allocation): 블록에들어갈때생성 블록에서나올때소멸 변수생성 생존기간을결정하는요인 변수가선언된위치 저장유형지정자 저장유형지정자 register static extern 변수소멸

저장유형지정자 static 정적변수 : 블록에서만사용되지만블록을벗어나도자동으로삭제되지않는변수 앞에 static 을붙인다. void sub() static int count;. 정적변수 return;

저장유형지정자 static #include <stdio.h> void sub(void); int main(void) int i; for(i = 0;i < 3; i++) sub(); return 0; 자동지역변수 void sub(void) int auto_count = 0; static int static_count = 0; auto_count=1 static_count=1 auto_count=1 static_count=2 auto_count=1 static_count=3 정적지역변수로서 static 을붙이면지역변수가정적변수로된다. auto_count++; static_count++; printf("auto_count=%d\n", auto_count); printf("static_count=%d\n", static_count);

저장유형지정자 register 레지스터 (register) 에변수를저장. register int i; for(i = 0;i < 100; i++) sum += i; CPU 안의레지스터에변수가저장됨

저장유형지정자 extern extern 은컴파일러에게변수가현재범위가아닌다른곳에서선언되었다는것을알린다. extern int all; int all; 범위 범위

extern 예제 linkage1.c #include <stdio.h> int all_files; // 다른소스파일에서도사용할수있는전역변수 extern void sub(); int main(void) 연결 sub(); printf("%d\n", all_files); return 0; linkage2.c extern int all_files; void sub(void) all_files = 10; 10

저장유형정리 일반적으로는지역변수사용권장 자주사용되는변수는레지스터유형 변수의값이함수호출이끝나도그값을유지하여야할필요가있다면지역정적 만약많은함수에서공유되어야하는변수라면외부참조변수

중간점검 1. 저장유형지정자에는어떤것들이있는가? 2. 지역변수를정적변수로만들려면어떤지정자를붙여야하는가? 3. 변수를 CPU 내부의레지스터에저장시키는지정자는? 4. 컴파일러에게변수가외부에선언되어있다고알리는지정자는? 5. extern 지정자를변수앞에붙이면무엇을의미하는가? 6. static 지정자를변수앞에붙이면무엇을의미하는가?

순환 (recursion) 이란? 알고리즘이나함수가수행도중에자기자신을다시호출하여문제를해결하는기법 ( 예제 ) 팩토리얼의정의 1 n! = n*( n 1)! n = 1 n 2 3! 은? 3! 를계산하려면 3! = 3*2! 2! 를계산하려면 2! = 2*1! 1! 은 1 3! 는? 1! 는? 6 2 1

팩토리얼구하기 팩토리얼프로그래밍 : (n-1)! 팩토리얼을현재작성중인함수를다시호출하여계산 ( 순환호출 ) int factorial(int n) if( n >= 1 ) return(1); else return (n * factorial(n-1) );

팩토리얼구하기 #2 팩토리얼의호출순서 factorial(3) = 3 * factorial(2) = 3 * 2 * factorial(1) = 3 * 2 * 1 = 3 * 2 = 6 4 3 factorial(3) if( 3 >= 1 ) return 1; else return (3 * factorial(3-1) ); factorial(2) if( 2 >= 1 ) return 1; else return (2 * factorial(2-1) ); factorial(1) if( 1 >= 1 ) return 1;... 1 2

// 재귀적인팩토리얼함수계산 #include <stdio.h> long factorial(int n); 팩토리얼예제 int main(void) int x = 0; long f; printf(" 정수를입력하시오 :"); scanf("%d", &x); f = factorial(x); printf("%d! 은 %d 입니다.\n", x, f); return 0;

팩토리얼예제 long factorial(int n) printf("factorial(%d)\n", n); 순환호출 if(n <= 1) return 1; else return n * factorial(n - 1); 정수를입력하시오 :5 factorial(5) factorial(4) factorial(3) factorial(2) factorial(1) 5! 은 120 입니다.

순환알고리즘의구조 순환알고리즘은다음과같은부분들을포함한다. 순환호출을하는부분 순환호출을멈추는부분 int factorial(int n) if( n == 1 ) return 1 순환을멈추는부분 else return n * factorial(n-1); 순환호출을하는부분 만약순환호출을멈추는부분이없다면?. 시스템오류가발생할때까지무한정호출하게된다.

순환 <-> 반복 컴퓨터에서의되풀이 순환 (recursion): 순환호출이용 반복 (iteration): for 나 while 을이용한반복 대부분의순환은반복으로바꾸어작성할수있다. 순환 순환적인문제에서는자연스러운방법 함수호출의오버헤드 반복 수행속도가빠르다. 순환적인문제에대해서는프로그램작성이아주어려울수도았다. 1!=1 2!=2 3!=6 3! 를계산하려면 3! = 3*2! 2! 를계산하려면 2! = 2*1! 2! 는? 1! 는? 2 1 1! 은 1

팩토리얼의반복적구현 1 n! = n*( n 1)*( n 2)* L *1 n = 1 n 2 int factorial_iter(int n) int k, value=1; for(k=1; k<=n; k++) value = value*k; return(value);

중간점검 1. factorial() 함수를재귀를사용하지않고반복문으로다시작성하여보자. 2. factorial() 함수안에 if( n <= 1 ) return; 이라는문장이없으면어떻게될까?

라이브러리함수 라이브러리함수 (library function): 컴파일러에서제공하는함수 표준입출력 수학연산 문자열처리 시간처리 오류처리 데이터검색과정렬

라이브러리사용

수학라이브러리함수

예제 #include <stdio.h> #include <math.h> int main() double pi = 3.1415926535; printf("sin()= %f\n", sin(pi/2.0)); printf("cos()= %f\n", cos(pi/2.0)); printf("tan()= %f\n", tan(0.5)); printf("log()= %f\n", log(10.0)); printf("log10()= %f\n", log10(100.0)); printf("exp()= %f\n", exp(10.0)); return 0; sin()= 1.000000 cos()= 0.000000 tan()= 0.546302 log()= 2.302585 log10()= 2.000000 exp()= 22026.465795 계속하려면아무키나누르십시오...

난수생성라이브러리함수 rand() 난수를생성하는함수 0 부터 RAND_MAX 까지의난수를생성

난수생성라이브러리함수 // 난수생성프로그램 #include <stdlib.h> #include <stdio.h> #include <time.h> // n 개의난수를화면에출력한다. void get_random( int n ) int i; for( i = 0; i < n; i++ ) printf( " %6d\n", rand() ); 16154 18011 20719 15002 25104 31802 587 8161 28527 8385 int main( void ) // 일반적으로난수발생기의시드 (seed) 를현재시간으로설정한다. // 현재시간은수행할때마다달라지기때문이다. srand( (unsigned)time( NULL ) ); get_random( 10 ); return 0;

중간점검 1. 90 도에서의싸인값을계산하는문장을작성하여보라. 2. rand() % 10 이계산하는값의범위는?

Q & A