프로그래밍실습 제 11 강.

Slides:



Advertisements
Similar presentations
Chapter 12. 배열. 배열  동일한 항목들이 동일한 크기로 연속적으로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는 자료 구조.
Advertisements

6 장. printf 와 scanf 함수에 대한 고찰 printf 함수 이야기 printf 는 문자열을 출력하는 함수이다. – 예제 printf1.c 참조 printf 는 특수 문자 출력이 가능하다. 특수 문자의 미 \a 경고음 소리 발생 \b 백스페이스 (backspace)
1. 2 차원 배열  배열은 동일한 데이터 유형으로 여러 개의 변수를 사용할 경우 같은 이 름으로 지정하여 간편하게 사용할 수 있도록 하는 것으로서 앞에서 1 차원 배열을 공부하였습니다.  2 차원 배열은 바둑판을 생각하면 되며, 1 차원 배열에서 사용하는 첨자를 2.
재료수치해석 HW # 박재혁.
Part 03 상수, 변수, 자료형 ©우균, 창병모 © 우균, 창병모.
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express Slide 1 (of 27)
2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
Report #5 - due: 4/13 다음 10*5의 희소 행렬 A, B를 고려하라.
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
프로그래밍실습 제 5 강.
Chapter 7. 조건문.
#include <stdio.h> int main(void) { float radius; // 원의 반지름
Report #2 - Solution 문제 #1: 다음과 같이 프로그램을 작성하라.
컴퓨터 프로그래밍 기초 [Final] 기말고사
3. printf()와 데이터 형식.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 12. 포인터의 이해.
5장 배열 작성자 : 변재현.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
8장 함수 함수의 필요성 라이브러리 함수와 사용자 정의 함수 함수의 정의, 원형, 호출 배열을 함수 인자로 전달 재귀호출.
C 언어 연습문제 (formatted I/O)
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
6주차: Functions in C and Others
프로그래밍실습 제 4 강.
2주차: 변수, 수식, Control Flow.
6장. printf와 scanf 함수에 대한 고찰
2007 1학기 11 프로젝트 기초 실습.
14장. 포인터와 함수에 대한 이해.
11장. 1차원 배열.
C 2장. C 프로그램 시작하기 #include <stdio.h> int main(void) { int num;
C 프로그래밍 C언어 (CSE2035) (Chap11. Derived types-enumerated, structure, and union) (1-1) Sungwook Kim Sogang University Seoul, Korea Tel:
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
어서와 C언어는 처음이지 제14장.
어서와 C언어는 처음이지 제15장.
3장 상수 변수 기본 자료형 키워드와 식별자 상수와 변수 기본 자료형 형변환 자료형의 재정의.
Report #3 - due: 4/6 100*100의 2개의 희소 행렬 A, B를 전달 받아서 이들의 덧셈을 구하고, 그 결과의 행렬 C를 반환하는 add_sparse_matrix(A, B, C)를 다음과 같이 작성하라. 희소 행렬은 sparse_matrix 타입으로 표현된다.
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express Slide 1 (of 22)
3장. 변수와 연산자 교안 : 전자정보통신 홈페이지 / 커뮤니티/ 학술세미나
에어 조건문.
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
2장. 변수와 타입.
제 1 강.
컴퓨터 프로그래밍 기초 - 5th : 조건문(if, else if, else, switch-case) -
처음으로 배우는 C 프로그래밍 제4부 복합 데이터 형 제 7 장 배열.
Choi Seong Yun 컴퓨터 프로그래밍 기초 #06 : 반복문 Choi Seong Yun
김선균 컴퓨터 프로그래밍 기초 - 7th : 함수 - 김선균
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
5장 선택제어문 if 선택문 switch-case 선택문 다양한 프로그램 작성 조건 연산자.
Chapter 08. 함수.
컴퓨터 프로그래밍 기초 [01] Visual Studio 설치 및 사용방법
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
함수(Function) ◈ 함수의 개념 및 사용 이유 ◈ 함수 정의, 호출 및 선언 ◈ 지역변수와 전역변수 ◈ return 문
[ 단원 04 ] 반복과 배열.
프로그램 개발 방법론 부재 : 연습문제 (6장) 학번: 이름:김치우.
제 6 장 함수(functions).
제 15 강 문자와 코드 shcho.pe.kr.
에어 PHP 입문.
4장. 데이터 표현 방식의 이해. 4장. 데이터 표현 방식의 이해 4-1 컴퓨터의 데이터 표현 진법에 대한 이해 n 진수 표현 방식 : n개의 문자를 이용해서 데이터를 표현 그림 4-1.
2장 PHP 기초 PHP의 시작과 끝을 이해한다. 주석문에 대하여 이해한다. echo 문을 이용하여 화면에 출력하
Homework #12 (1/2) 프로그램을 작성하고, 프로그램과 실행 결과를 프린트하여 제출한다.
7주차: Functions and Arrays
함수, 모듈.
컴퓨터 프로그래밍 기초 - 9th : 배열 / 포인터 -
Static과 const 선언 조 병 규 한 국 교 통 대 학 교 SQ Lab..
실습과제 (변수와 자료형, ) 1. 다음 작업 (가), (나), (다)를 수행하는 프로그램 작성
제 29 강 스트링(string) 다루기 s a i s . s T i h t g r i n.
1. 지역변수와 전역변수 2. auto, register 3. static,extern 4. 도움말 사용법
어서와 C언어는 처음이지 제21장.
수업 내용 수업 목표 강의 내용 강의 계획서 교과서 및 참고도서 평가 방법 수강생의 학습 방법 제안 강의자료 사이트
실 습 2.
함수 정의, void 자료형 함수 원형선언 함수 호출 변수 영역 규칙 재귀 함수
Presentation transcript:

프로그래밍실습 제 11 강

강의 내용 함수의 사용 (복습) 여러 개의 인자 사용 함수형과 인자형 함수의 사용에서 중요한 점 부함수와 순환문의 사용 return 문이 없는 함수: void 형 함수 부함수를 이용한 배수 판정 부함수를 이용한 평균 계산 응용프로그램: 각 자릿수 별 정수 출력 사용된 숫자의 개수 return문의 기타 사항

함수의 사용 (복습) #include<stdio.h> main() // 주함수 { double sub(int), a; int num=70; a=sub(num); // 부함수 호출 printf("%.4f\n",a); } double sub(int n) // 부함수 정의 return (double)n/3.; (1) 이 프로그램의 실행 결과는? 23.3333 (2) 부함수의 인자형은? int (3) 부함수의 함수형은? double

여러 개의 인자 사용 두 개의 정수를 부함수로 전달하면 그 합를 10으로 나눈 나머지를 반환하는 프로그램을 만들어 보자 #include<stdio.h> main() { int remainder(int,int); //부함수 선언 int a,b,r; scanf("%d%d",&a,&b); r=remainder(a,b); //변수 a와 b의 ‘값’이 부함수로 전달됨 printf("%d\n",r); } int remainder(int num1, int num2) //부함수 정의 int rem; rem=(num1+num2)%10; return rem; // 나머지가 반환됨

앞의 예는 다음과 같이 변형 가능하다. #include<stdio.h> int remainder(a,b) //부함수 정의 int a,b; { return (a+b)%10; } main() int a,b; //부함수 선언이 필요 없음 scanf("%d%d",&a,&b); printf("%d\n",remainder(a,b));

함수형과 인자형: 다음 C프로그램은 무슨 기능을 하는가? #include<stdio.h> main() { int a; char grade(int); scanf("%d",&a); printf("%c\n",grade(a)); } char grade(int a) //함수형은 char, 인자형은 int if(a>=80) return 'A'; else if(a>=60) return 'B'; else return 'C';

함수의 사용에서 중요한 점 한 함수에서 그 아래에 나오는 다른 함수를 호출하여 사용하기 위해서는 다른 변수 선언과 마찬가지로 함수도 미리 선언되어야 한다.(함수의 선언과 함수의 정의는 다르다.) 함수에서 사용되는 모든 변수는 함수의 인자(parameter)를 통해 그 함수로 전달되거나 함수 내에서 미리 선언되어야 한다. 함수내에서 선언된 변수는 지역변수라 불리며 선언된 함수 내에서만 사용 가능하다. 함수에서 계산된 결과를 다른 함수로 전달 하기 위해서는 return문을 사용하여야 한다. 함수형은 반환(return) 되는 변수나 상수의 형과 일치한다. 함수의 인자가 없는 경우 인자형에 void라는 말을 생략할 수 있다. 반환되는 값이 없는 함수의 형은 void이며 주함수를 제외하고는 void라는 말을 생략할 수 없다.(반환되는 값이 없는 경우 return문을 사용하지 않는다.) 함수의 시작과 끝은 중괄호 { }로 나타낸다. 주의: 함수의 정의가 끝난 중괄호 } 뒤에 세미콜론을 붙이면 안 된다.

부함수와 순환문의 사용 이번에는 함수 f 를 사용하여 f(x)값을 27부터 30까지 0.3 간격으로

#include<stdio.h> #include<math.h> main() { double x,f(double); int i; for(i=0;i<=10;i++){ //첨자는 정수형 x=27.+0.3*i; printf("f(%lf)=%f\n",x,f(x)); } double f(double x) return sqrt(x)+3./7.*x+sin(x);

출력: f(27.000000)=17.723957 f(27.300000)=17.752268 f(27.600000)=17.706519 f(27.900000)=17.604841 f(28.200000)=17.470347 f(28.500000)=17.329069 f(28.800000)=17.207631 f(29.100000)=17.130871 f(29.400000)=17.119622 f(29.700000)=17.188855 f(30.000000)=17.346337

다음 프로그램의 실행 결과는? #include<stdio.h> main() { int sub(int c); int a=10, b; b=sub(a); printf("main: a=%d b=%d\n",a,b); } int sub(int num) int a,b; // 주함수의 a, b와 무관한 변수임(지역변수) a=123; b=234; printf("sub: a=%d b=%d\n",a,b); return num*2; 출력: sub: a=123 b=234 main: a=10 b=20

return 문이 없는 함수: void 형 함수 (1) #include<stdio.h> main() { void sub(double a); double b=1.2; sub(b); } void sub(double c) printf("%g\n",c*c); //return문 없음 출력: 1.44

return 문이 없는 함수: void 형 함수 (2) #include<stdio.h> main() { void line(void); int i; line(); for(i=1;i<=5;i++){ printf("i=%d\n",i); } void line(void) //함수형과 인자형이 모두 void printf("---------------\n");

출력: --------------- i=1 i=2 i=3 i=4 i=5

부함수를 이용한 배수 판정 양의 정수 n과 m을 입력하면 n이 m의 배수인지 판정하는 프로그램을 부함수를 이용하여 작성하라. 힌트: 부함수 부분은 다음과 같다: char multiple(int n, int m) { if(n%m==0) return 'Y'; else return 'N'; }

#include<stdio.h> main() { int n,m; char multiple(int,int); printf("양의 정수 n과 m을 입력하십시오.\n"); scanf("%d%d",&n,&m); if(multiple(n,m)=='Y') printf("%d은(는) %d의 배수 입니다.\n",n,m); else printf("%d은(는) %d의 배수가 아닙니다.\n",n,m); } char multiple(int n, int m) if(n%m==0) return 'Y'; return 'N';

부함수를 이용한 평균 계산 두 정수 m과 n을 입력하면 두 수의 평균을 부함수에서 구하여 주함수에서 그 결과를 출력하는 프로그램을 작성하라. #include<stdio.h> main() { int m,n; double average(int,int); printf("m, n 입력: "); scanf("%d%d",&m,&n); printf("평균: %g\n",average(m,n)); } double average(int m, int n) return (double)(m+n)/2.;

입출력 예: m, n 입력: 80 83 평균: 81.5

응용프로그램: 각 자릿수 별 정수 출력 양의 정수 하나를 입력하면 각 자리의 정수를 하나씩 모두 출력하는 프로그램을 작성하여 보자. 입출력 예: 자연수 입력: 386 6 <- 1의 자리 수 8 <- 10의 자리 수 3 <- 100의 자리 수 힌트: 변수 a의 값이 현재 386일 때 현재의 a값을 10으로 나눈 몫은 38( -> a에 저장), 나머지는 6 <- 일의 자리 수 현재의 a값을 10으로 나눈 몫은 3( -> a에 저장), 나머지는 8 <- 십의 자리 수 현재의 a값을 10으로 나눈 몫은 0( -> a에 저장), 나머지는 3 <- 백의 자리 수

#include<stdio.h> main() { int a,r,d; printf("자연수 입력: "); scanf("%d",&a); d=1; do{ r=a%10; a/=10; printf("%d <-%d의 자리 수\n",r,d); d*=10; } while(a!=0); }

사용된 숫자의 개수 앞의 예를 활용하여 1부터 1000까지의 정수를 모두 적을 때 사용되는 숫자 0, 1, 2, …, 9의 개수는 각각 몇인지 구하는 프로그램을 작성하여보자.

#include<stdio.h> #define N 1000 main() { int i,j,a,k,r; int num[10]={0}; // 0 ~ 9 각 숫자별 사용 횟수 for(i=1;i<=N;i++){ k=0; a=i; do{ r=a%10; for(j=0;j<=9;j++) if(r==j) num[j]++; a/=10; k++; } while(a!=0); } printf("1부터 %d까지 사용된 숫자의 개수:\n",N); for(i=0;i<=9;i++) printf("%d의 개수: %d\n",i,num[i]);

출력: 1부터 1000까지 사용된 숫자의 개수: 0의 개수: 192 1의 개수: 301 2의 개수: 300 3의 개수: 300 4의 개수: 300 5의 개수: 300 6의 개수: 300 7의 개수: 300 8의 개수: 300 9의 개수: 300

return문의 기타 사항 return문을 사용하여 값을 되돌리면 호출된 함수의 수행이 종료되고 함수를 호출한 곳으로 돌아간다. 또한 함수 형과 무관하게 return;이 사용될 수 있고, 특히 주함수(main 함수)에서 return;을 사용하면 그 위치에서 프로그램의 실행이 종료된다. 예: (void형 부함수에서 return;의 사용) #include<stdio.h> main() { void sub(void); printf("main 1\n"); sub(); printf("main 2\n"); printf("main 3\n"); printf("main 4\n"); } void sub(void) printf(" sub 1\n"); return; //이 아래 부분은 수행되지 않음 printf(" sub 2\n"); printf(" sub 3\n"); 왼쪽 프로그램의 출력: main 1 sub 1 main 2 main 3 main 4

예: (주함수에서 return;을 만나면 그 순간 프로그램의 실행이 종료된다.) #include<stdio.h> main() { int sub(void), i; printf("main 1\n"); i=sub(); printf("main 2: i=%d\n",i); return; //이 아래 주함수 부분은 더 이상 수행되지 않음.(프로그램 실행 종료) printf("main 3\n"); printf("main 4\n"); } int sub(void) printf("sub 1\n"); return 10; //부함수 호출시 이 아래 부분은 더 이상 수행되지 않음. printf("sub 2\n"); printf("sub 3\n"); 출력: main 1 sub 1 main 2: i=10

다음과 예와 같이 return;을 사용하여, 잘못된 입력이 들어올 경우 프로그램의 실행을 멈추게 할 수 있다. #include<stdio.h> main() { int a; printf("0 아닌 정수 입력: "); scanf("%d",&a); if(a==0){ printf("입력 오류!\n"); return; } printf("123/a=%d\n",123/a); 함수의 호출 끝내기 또는 프로그램의 실행 끝내기 참조