# 함수
- 특정한 작업을 수행하도록 설계된 독립적인 프로그램
- 모든 함수는 서로 독립적
- 이러한 함수들이 정해진 순서에 따라 실행됨으로써 프로그램의 기능 수행
- C 프로그램은 함수들로 구성
- 전체 실행 내용을 몇 개의 모듈로 분류
- 함수들은 서로를 자유로이 호출 가능
# 함수의 장점
- 프로그램 수정이 용이하다
- 함수 재사용으로 코드 중복 최소화
- 프로그램 기능 한 눈에 파악할 수 있다. 👉유지관리가 쉽다.
#함수의 정의
- 매개변수가 없으면 void형으로 사용
- 반환 자료형에서 void 반듣시 명시 (생략시 int로 처리)
- 매개변수 (void)와 ()는 동일한 의미
# 함수의 원형 선언
- 함수는 변수와 같이 사용되기 전에 미리 선언
- 원형선언은 일반적으로 main()함수 이전에 한다.
- 원형선언은 함수정의 부분의 헤더부분에 세미콜론(;)추가
# 함수의 호출
- 매개변수
- 실 매개변수 : 함수를 호출하는 함수에 쓰이는 매개변수
- 형식 매개변수: 호출당하는 함수(피 호출함수)에 쓰이는 매개변수
- 실 매개변수와 형식 매개변수 사이에는 자료형과 변수의 개수가 일치해야한다.
- 자료형이 일치하지 않을 경우 형 변환 발생
- 변수의 개수가 일치하지 않을 경우 컴파일 에러 발생
- 결과값 반환(return)
- 함수를 끝내고 제어와 함수 수행결과를 호출함수로 넘긴다.
- return 0; 정상 종료
//입력되는 소문자 <-> 대문자 변환
#include <stdio.h>
#include <ctype.h>
int main(){
char ch, ch1, ch2;
printf("문자를 입력하세요.");
ch = getchar();
if(isupper(ch)){ //대문자 판별
printf("%c is a uppercase \n", ch);
ch1=tolower(ch); //소문자로 변환
printf("%c is a lowercase \n", ch1);
}
else if(islower(ch)){
printf("%c is a lowercase \n", ch);
ch2 = toupper(ch);
printf("%c is a uppercase \n", ch2);
}else
printf("%c is not alpha character \n", ch1);
}
# 함수
- 표준함수
- 표준함수의 사용: 함수의 원형이 보관되어 있는 헤더파일을 #include 해야 한다.
- 표준함수의 실체는 라이브러리 파일에 수
- 헤더 파일: stdio.h, conio.h, math.h, string.h, stdlib.h, ctype.h 등
- stdio.h : 입출력, 파일관련 함수
- conio.h: 콘솔 입출력함수 (putch(), getch(), 등)
- string.h: 문자열 처리 함수
- stdlib.h: 수치변환, 난수 관련(rand(), srand()),정렬, 검색함수
- 사용자 정의 함수
- 사용자 정의 함수의 원형을 선언해야 한다.
- 원형 선언: 사용자 정의 함수의 헤더 부분에 세미콜론(;) 추가.
#include <stdio.h>
#include <string.h> // 문자열 처리 함수의 원형
int main(){
char string[]="abcdefghijklmnopqrstuvwxyz";
unsigned i, len;
puts(string); //puts 함수는 문자열 출력 및 자동 줄바꿈
len=strlen(string); //문자열 길이 구하기
for(i=0; i<len; i++){
string[i] = string [i] & 0xDF; //0xDF는 2진수로 1101 1111
}
puts(string);
}
//abcdefghijklmnopqrstuvwxyz
//ABCDEFGHIJKLMNOPQRSTUVWXYZ
01100001 (소문자a)
& 11011111 (0xDF)
---------------------
01000001 (대문자 A)
- 소문자에 `& 0xDF` 연산을 하면 대문자로 변환이 된다.
- string.h
//문자열의 복사 ,연결, 길이 구하는 프로그램
#include <stdio.h>
#include <string.h>
int main(){
char string[200];
char s[200];
printf("문장을 입력한 후, Enter키를 치세요! \n");
printf("아무것도 입력하지 않으면 프로그램은 종료됩니다. ");
do{
gets(string);
if(strlen(string) == 0) //문자열의 길이가 0인 경우 loop 종료
break;
strcpy(s,string);
printf("복사된 문자: %s 문자길이: %d \n\n", s, strlen(s));
printf("문자열의 길이는 %d입니다. \n\n", strlen(string));
strcat(string, s); // strcat() 문자열 연결 함수
printf("%s \n", string); //string에 합쳐져서 출력됨.
}while(1); //조건이 항상 참이므로 loop 반복
}
- ctype.h
//입력되는 문자가 영문자인지 판별
#include <stdio.h>
#include <ctype.h>
int main(){
char ch;
printf("문자나 숫자를 입력하세요. \n");
ch=getchar();
if(isalpha(ch))
printf("%c is alpha character. \n", ch);
else
printf("%c is not alpha character. \n", ch);
if(isdigit(ch))
printf("%c is number. \n", ch);
else
printf("%c is not number. \n", ch);
}
# 실습 (난수 함수)
// 입력된 수를 seed 값으로 하여 난수 구하는 프로그램
#include <stdio.h>
#include <stdlib.h>
int main(){
int i,a;
printf("input number: ");
scanf("%d", &a);
srand(a); //난수발생함수의 난수 시작값 seed 설정
for(i=0; i<=5; i++)
printf("%d \n", rand()); //0에서 32767 사이의 연속적인 난수 제공 함수
}
# 피보나치 수열 출력
#include <stdio.h>
unsigned fibonacci(void);
int main(){
int k;
printf(" k | fibonacci \n");
printf("***************\n");
for (k=1; k<=10; k++)
printf("%2d | %6u\n", k, fibonacci());
}
unsigned fibonacci(void){
static unsigned f=0, pre_f=1; // 정적변수로 함수를 반환해도 이전 피보나치 값이 저장되어 있음.
unsigned re;
re=f;
//printf("현재 re: %6u, f: %6u ", re, f);
f+=pre_f; // 새로운 피보나치값 생성
//printf("현재 f: %6u, pre_f: %6u ", f, pre_f);
pre_f = re;
//printf("현재 re: %6u, pre_f: %6u \n", re, pre_f);
return re;
}
// 출력값
k | fibonacci
***************
1 | 0
2 | 1
3 | 1
4 | 2
5 | 3
6 | 5
7 | 8
8 | 13
9 | 21
10 | 34
# 매개변수 사이의 자료 전달
- 값에 의한 자료 전달(call by value)
- 기본적인 자료 전달 방법
- 실매개변수와 형식매개변수 사이에 값의 전달
- 호출한 함수의 실행이 끝난 다음 전달받은 값을 되돌려받지 못한다.
- 참조에 의한 자료 전달(call by reference)
- 실매개변수와 형식매개변수 값을 서로 교환할 수 있는 자료전달 방법
- 값을 전달하는 것이 아니라 실 매개변수의 값이 들어있는 주소 값이 전달된다.
반응형
'프로그래밍 > C 프로그래밍' 카테고리의 다른 글
[C언어] 포인터 및 참조 (0) | 2024.06.05 |
---|---|
[C언어] 배열 (0) | 2024.06.04 |
[C언어] 선택제어문/반복제어문 (0) | 2024.06.04 |
[C언어] 입출력함수와 연산자 (1) | 2024.06.04 |
[C] 선행처리기 매크로 (0) | 2024.06.04 |