반복문의 기능 반복문 반복문 특정 영역을 특정 조건이 만족하는 동안에 반복 실행하기 위한 문장 while문 do ~ while문 for문
while문 while 문 while(반복조건) // 반복 조건이 될 때까지 { // 반복내용을 반복실행 반복내용 } i=0; { // 반복내용을 반복실행 반복내용 } i=0; while( i<3) { printf("%d \n",i); i++; }
while 문의 중괄호 무한 루프(반복) while 문 반복하고자 하는 영역이 둘 이상의 문장으로 구성되는 경우에 필수 반복하고자 하는 영역이 둘 이상의 문장으로 구성되는 경우에 필수 무한 루프(반복) 반복의 조건이 true가 되므로 무한정 반복 while(i<10) printf("Hello World! \n"), i++; while( 1 ) // 반복의 조건 대신 0 이 아닌 정수를 넣는다. { printf("Hello World! \n"); i++; }
while문 예제 while 문 #include <stdio.h> int main(void) { int i=0; printf("Hello World! \n"); i++; } return 0;
연습문제 1. 사용자로부터 원하는 반복횟수를 입력 받아서 반복횟수 만큼 “Hello World!를 출력하는 프로그램을 작성 2. 사용자로부터 정수 n을 입력 받고 정수 n의 구구단을 출력하는 프로그램 작성 (예 n이 5인 경우 5단을 출력시키는 프로그램 작성)
while 문의 중첩 중첩 while 문 while문 안에 while문을 포함시킨다는 뜻 반복 구조 내에서 또 하나의 반복 구조 형성
중첩 while 문의 예제 중첩 while 문 void main(void) { int i=0, j=0; while(i<2) printf("*** 현재 i는 %d *** \n", i); while(j<2) printf("*** 현재 j는 %d *** \n", j); j++; } i++; j=0; }
연습문제 1.중첩 와일문을 사용하여 구구단을 2단부터 9단까지 출력하는 프로그램을 작성하시오
do~while문 while문 do~while문 do~while문은 일단 한번 실행하고 나서 조건 검사를 진행 조건이 만족되지 않으면 루프를 한번도 실행 안됨
do ~ while문 사용 예 do~while문 do { 반복내용 }while(반복조건); do { printf(“Hello world! \n”); i++; } while(i<10);
do ~ while문 예제 do~while문 int main(void) { int val; int i=1; printf("출력하고자 하는 구구단, 몇단? "); scanf("%d", &val); do printf("%d*%d=%d \n", val, i, val*i); i++; }while(i<10); return 0; }
do ~ while문 예제 do~while문 /* add_end.c */ #include <stdio.h> int main(void) { int total=0; int val=0; do printf("숫자 입력 (0 to quit) : "); scanf("%d", &val); total+=val; }while(val!=0); printf("Total : %d \n", total); return 0; }
연습문제 사용자로부터 원하는 정수 n을 입력 받고 n의 구구단을 역순으로 출력하는 프로그램을 작성 (조건. 반복문은 do ~ while 문을 사용한다) 사용자가 7을 입력하면 7단이 역순으로 출력된다.
for 문 for문 초기문, 조건문, 증감문 모두를 기본적으로 포함! 가장 많이 사용되는 반복문
for 문 For문과 while문의 비교
for 문 For문의 반복 과정의 이해
for문 예제 for 문 #include <stdio.h> int main(void) { int i; for(i=0; i<10; i++) printf(“Hello World! \n”); } return 0;
for문 예제 for 문 #include <stdio.h> void main(void) { int total=0; int i, n; printf("0 부터 n까지의 덧셈, n은?"); scanf("%d", &n); for(i=0; i<n+1; i++) total+=i; printf("0부터 %d까지의 덧셈결과: %d\n", n, total) ; }
for문 예제 for 문 void main(void) { float total=0.f, input=0.f; int count=0; for(; input>=0.0f; ){ printf("양의 실수 입력(minus to quite):"); scanf("%f", &input); total+=input; count++; printf("지금까지의 평균: %f\n", total/count); }
for문 예제 for 문 void main(void) { int a, b; for( ; ; ){ printf("두 개의 정수 입력:"); scanf("%d %d", &a, &b); printf("두 수의 합: %d\n", a+b); }
for문 중첩예제 중첩 for 문 void main(void) { int row, col; for(row=0 ; row<3; row++){ printf("*** 현재 row는 %d ***\n:", row); for(col=0; col<2; col++){ printf("현재 col는%d\n", col); }
연습문제 1. 두 개의 정수를 입력 받아서 그 사이에 존재하는 정수들의 합을 구하는 프로그램 작성 예) 3, 5를 입력 받으면 3+4+5가 답 조건) 첫 번째 입력 받은 숫자보다 두 번째 입력 받은 숫자가 더 큼 2. 중첩 for문을 사용하여 구구단 2단부터 9단까지 출력하는 프로그램을 작성하시오.
상황에 흐름의 분기 제어문 두개의 실수 입력 덧셈기능 나눗셈기능 뺄셈기능 곱셈기능 두개의 실수 입력 덧셈기능 나눗셈기능 원하는 연산
if문에 의한 조건문 if 문 “만약에 어떠한 조건이 만족된다면” 조건이 만족되는 경우에 한해서 실행 if(실행조건) { 실행하고자 하는 내용 }
if문 예제 if 문 void main(void) { int val; printf("정수를 하나 입력하세요:"); scanf("%d", &val); if(val<0) printf("입력 값은 0보다 작다\n"); if(val>0) printf("입력 값은 0보다 크다\n"); if(val==0) printf("입력 값은 0이다\n"); }
if문 예제 if 문 #include <stdio.h> if(opt==2){ result=val1 - val2; void main(void) { int opt; float val1, val2, result; printf("덧셈 1, 뺄셈 2, 곱셈 3, 나눗셈 4 \n"); printf("선택?:"); scanf("%d", &opt); if(opt>4) printf("잘못 선택 하셨습니다"); printf("두개의 실수 입력하세요:"); scanf("%f %f", &val1, &val2); if(opt==1){ result=val1+val2; printf("결과: %f \n", result); } if(opt==2){ result=val1 - val2; printf("결과: %f \n", result); } if(opt==3){ result=val1 * val2; if(opt==4){ result=val1 / val2;
if문 예제 if 문 #include <stdio.h> int main(void) { int i; for(i=1; i<100; i++) if(i%3==0 && i%4==0) printf("3의배수이자4의배수: %d \n", i); } return 0;;
if~else if~else if문장과 더불어 하나의 문장을 구성하여 사용 if(조건) { 조건 만족 시 } else 조건 불만족 시
if~ else 문 예제 if~else void main(void) { int val; printf("정수를 하나 입력하세요:"); scanf("%d", &val); if(val<0) printf("입력 값은 0보다 작다\n"); else printf("입력 값이 0이거나 그 보다 크다\n"); }
if, else if, else if, else if, else if(조건 A) { 조건 A 만족 시 실행 “요거” } else if(조건 B) 조건 B 만족 시 실행 “이거” else if(조건 C) 조건 C 만족 시 실행 “그거” else 조건 A, B, C 불만족 시 실행 “저거”
if, else if, else if, else if, else 예제 else if(opt==2){ #include <stdio.h> void main(void) { int opt; float val1, val2, result; printf("덧셈 1, 뺄셈 2, 곱셈 3, 나눗셈 4 \n"); printf("선택?:"); scanf("%d", &opt); printf("두개의 실수 입력하세요:"); scanf("%f %f", &val1, &val2); if(opt==1){ result=val1+val2; printf("결과: %f \n", result); } else if(opt==2){ result=val1 - val2; printf("결과: %f \n", result); } else if(opt==3){ result=val1 * val2; else if(opt==4){ result=val1 / val2; else printf("잘못 선택 하셨습니다");
조건 연산자(삼항 연산자) 조건 연산자 if~else문을 간결히 표현하는데 사용 조건이 true이면 A 조건 ? A : B 조건이 false이면 B 조건 ? A : B y<0이 true이면 x=10 y>=0이 false이면 x=20 X=(y<0)? 10: 20 y>0이 true이면 x=a*b y<=0이 false이면 x=a/b X=(y>0)? a*b: a/b
조건 연산자 예제 조건 연산자 void main(void) { int x; char ch; printf("정수 입력:"); scanf("%d", &x); ch=(x<0) ? '-' : '+'; (ch=='+') ? printf("양수\n") : printf("음수\n"); printf("절대값 %d \n", (x<0)? -1*x: x); }
연습문제 1. 1부터 99사이에 있는 정수 중에서 7의 배수이거나 9의 배수인 정수를 출력하는 프로그램을 작성. 단! 7의 배수이자 9의 배수인 수는 한번만 출력 2. 두 개의 정수를 입력 받아서 두수의 차를 계산하는 프로그램 작성. 단, 무조건 큰 수에서 작은 수를 뺀 결과를 출력!, 만약에 4, 16이라면 16-4로 계산 값은 무조건 양수! (단 삼항 연산자 사용)
루프생략과 탈출: continue, break break & continue 루프생략과 탈출: continue, break break: 반복문을 빠져 나올 때 사용 continue: 다음 번 반복으로 넘어 갈 때 사용
continue 와 break 예제 break & continue void main(void) { int sum=0; int num=0; while(1) sum+=num; if(sum>5000) break; num++; } printf("sum:%d\n", sum); printf("num:%d\n", num);
continue 와 break 예제 break & continue void main(void) { int i; printf("start! \n"); for(i=0; i<20; i++) if(i%2==0 || i%3==0) continue; printf("%d\n", i); } printf("end!\n");
연습문제 For문을 사용하여 1~100까지의 짝수의 합만을 구하고 그 합이 1000 <실행결과> i 값이 64일 때 합이 1000을 넘었습니다.
switch 문 switch문의 구조
switch 문 Switch문에서의 break 의미
switch문 예제 switch 문 #include <stdio.h> void main(void) { int n; printf("정수를 하나 입력 하세요(1-5) : "); scanf("%d", &n); switch(n) case 1: printf("1이 선택 되었습니다.\n"); break; case 2: printf("2가 선택 되었습니다.\n"); case 3: printf("3이 선택 되었습니다.\n"); case 4: printf("4가 선택 되었습니다.\n"); case 5: printf("5가 선택 되었습니다.\n"); default: printf("선택이 잘못 되었습니다.\n"); }
switch 문 switch vs. if~else 1 분기의 경우 수가 많아지면 가급적 switch문으로...
switch 문 switch vs. if~else 2 switch문에서는 비교 연산이 올 수 없다.
연습문제 if 문으로 프로그램한 계산기 프로그램을 스위치 문으로 프로그램을 작성하시오. 1 ~ 5 까지의 하나의 정수를 입력하면 해당하는 영어를 출력하시오. 입력 1: ONE 입력 2: TWO 입력 3: THREE 입력 4: FOUR 입력 5: FIVE 그 외 수: I don’t know
int main(void) { 함수의 몸체 } main 함수 다시 보기 : 함수의 기본 형태 함수 반환형태 함수이름 입력 인자 함수시작 함수 끝
함수를 정의하는 이유 4가지 형태의 함수 함수 모듈화에 의한 프로그램의 질 향상이 가능 유지 보수 및 확장의 용이성 문제 해결의 용이성 : "Divide and Conquer!" 4가지 형태의 함수 전달 인자 有, 반환 값 有 전달 인자 有, 반환 값 無 전달 인자 無, 반환 값 有 전달 인자 無, 반환 값 無
전달 인자 有, 반환 값 有 함수 int Add(int i, int j) { int result = i+j; return result; }
함수 호출 과정의 이해 함수 1 2 3 4 5 int main(void) #include <stdio.h> int Add(int i, int j) { int result = i + j; return result; } int main(void) int d; d = Add(3, 4); printf("%d \n", d); return 0; #include <stdio.h> int Add(int i, int j) { int result = i + j; return result; } 3 4 int main(void) int d; d = Add(3, 4); printf("%d \n", d); return 0; 2 1 5
전달 인자 有, 반환 값 無 전달 인자 無, 반환 값 有 함수 void Result_Print(int val) { printf("덧셈에 대한 결과 : %d \n", val); printf("****** END ******** \n"); } 전달 인자 無, 반환 값 有 int Input(void) { int input; scanf("%d", &input); return input; }
전달 인자 無, 반환 값 無 함수 void Intro(void) { printf("****** START ****** \n"); printf("두개의 정수 입력 : "); }
함수 선언의 중요성 함수 컴파일러의 특성상, 함수는 호출되기 전에 미리 정의 #include <stdio.h> int Add(int i, int j) { int result = i + j; return result; } int main(void) int d; d = Add(3, 4); printf("%d \n", d); return 0; #include <stdio.h> int Add(int i, int j); int main(void) { int d; d = Add(3, 4); printf("%d \n", d); return 0; } int Add(int i, int j) int result = i + j; return result;
함수 선언의 의미 함수 이후에 정의될 함수에 대한 정보 제공 함수 원형 선언 함수 정의 #include <stdio.h> int Add(int i, int j); int main(void) { int d; d = Add(3, 4); printf("%d \n", d); return 0; } int Add(int i, int j) int result = i + j; return result; 함수 원형 선언 함수 정의
함수 예제 함수 int Add(int i, int j) { int result=i+j; return result; } int Input(void) int input; scanf("%d", &input); return input; void Result_Print(int val) printf("덧셈결과: %d\n", val); void Intro(void) printf("두 개의 정수 입력: "); #include <stdio.h> int Add(int a, int b); int Input(void); void Result_Print(int val); void Intro(void); int main(void) { int a, b; int output; Intro(); a=Input(); b=Input(); output = Add(a, b); Result_Print(output); return 0; }
함수 예제 함수 #include <stdio.h> int Large_Num(int a, int b); int main(void) { printf("3과 4중에서 큰 수는 %d 이다 \n", Large_Num(3, 4)); printf("7과 2중에서 큰 수는 %d 이다 \n", Large_Num(7, 2)); return 0; } int Large_Num(int a, int b) if(a>b) return a; else return b;
함수 예제 함수 #include <stdio.h> int Abso_Large(int a, int b); // 절대값이 큰 정수 반환 int Abso_Val(int val); // 전달 인자의 절대값을 반환 int main(void) { int a, b; printf("두 개의 정수 입력: "); scanf("%d %d", &a, &b); printf("%d와 %d중 큰 절대값: %d \n", a, b, Abso_Large(a, b)); return 0; } int Abso_Large(int a, int b) if(Abso_Val(a) > Abso_Val(b)) return a; else return b; int Abso_Val(int val) if(val<0) return val*(-1); else return val;
연습문제 1. 세 개의 정수를 입력 받아서 그 중 가장 큰 수를 반환하는 함수와 가장 작은 수를 반환하는 함수작성 이 함수들을 main문에 적용
변수의 특성에 따른 분류 변수 지역 변수(Local Variable) 전역 변수(Global Variable) 중 괄호 내에 선언되는 변수 전역 변수(Global Variable) 함수 내에 선언되지 않는 변수 정적 변수(Static Variable) 함수 내부, 외부 모두 선언 가능 레지스터 변수(Register Variable) 선언에 제한이 많이 따름
변수의 사용 범위 전역변수와, 지역변수로 나뉘는 차이 변수 변수선언 위치에 따라서 전역변수, 지역변수로 나뉨 메모리상 존재하는 기간 변수에 접근할 수 있는 영역 #include<stdio,.h> Int b=0 Int main(void) { Int a=10; }
지역 변수의 접근 범위 지역변수 지역 변수는 선언 된 함수 내에서만 접근 가능 범위 1 범위 2 int fct_one(void) { int one=0; return 0; } int fct_two(void) int two=0; 범위 1 범위 2
지역 변수의 메모리상 존재 기간 지역변수 1단계 Val=10 Memory 할당 int fct_one(void) { int one=10; return 0; } int fct_two(void) int one=20; int two=30; int main(void) int val=10; fct_one(); fct_two(); Memory 1단계 Val=10 int main(void) { int value=10; …… } 할당
지역변수 2단계 one=10 Val=10 Memory 할당 제거 int fct_one(void) int one=10; int main(void) { int value=10; fct_one(); …… } int fct_one(void) int one=10; return 0; Val=10 Memory one=10 할당 제거
지역변수 3단계 two=30 one=20 Val=10 Memory 할당 제거 int fct_two(void) int main(void) { int value=10; fct_one(); fct_two(); } int fct_two(void) int one=20; int two=30; return 0; 할당 제거 Val=10 Memory one=20 two=30
지역변수 4단계 Val=10 Memory 제거 int main(void) { int value=10; fct_one(); fct_two(); return 0; } 제거 Val=10 Memory
-while, for, if 와 같은 문장에 의해 형성되는 지역 내에서 선언되는 변수 지역변수 또 다른 형태의 지역 변수 -while, for, if 와 같은 문장에 의해 형성되는 지역 내에서 선언되는 변수 int main(void) { int i; for(…) … } if(…) return 0;
While, for, if문장에서의 지역 변수 지역변수 int main(void) { int i; for(i=0; i<3; i++) int a=0; a++; printf("%d번째 for 루프, 지역변수 a는 %d \n", i, a); } if(i==3) int a=10; printf("if문 내에 존재하는 지역 변수 a는 %d \n", a); return 0;
While, for, if문장에서의 지역 변수 지역변수 main문의 지역변수 if문의 지역변수 #include <stdio.h> int main(void) { int val=1; if(1) //무조건 true int val=0; val+=10; printf("if의 지역변수 val: %d\n", val); } printf("main의 지역변수 val: %d\n", val); return 0; main문의 지역변수 if문의 지역변수
지역 변수와 매개 변수 지역변수 매개 변수도 지역 변수의 일종이다. 매개변수 int fction (int a, int b) { return a+b; } 매개변수
전역 변수 전역 변수의 또 다른 특징 전역변수 프로그램 어디에서나 접근이 가능한 변수 특정 영역(함수, 반복문...)에 속하지 않는다. 프로그램이 종료될 때까지 존재 전역 변수의 또 다른 특징 같은 이름의 지역 변수에 의해서 가려지기도 한다.
전역 변수 예제 전역변수 #include <stdio.h> int val; void add(int n); int main(void) { printf("val : %d \n", val); add(3); printf("val: %d \n", val); val++; return 0; } void add(int n) val+=n;
같은 이름의 전역 변수와 지역 변수가 존재 전역변수 #include <stdio.h> int val; // 전역변수 val void fct(void); int main(void) { val=10; printf("val : %d \n", val); fct(); printf("val: %d \n", val); return 0; } void fct(void) int val=20; // 지역변수 val val++;
static 변수 보다 빠르게! register 변수 static 변수 함수 내부 및 외부에 선언 가능 한번만 초기화된다 : 전역 변수의 특징 함수 내부에서 선언될 경우 함수 내에서만 접근이 가능 : 지역 변수의 특징 보다 빠르게! register 변수 int main(void) { int a ; register int b; // 레지스터 변수 b 선언 . . . . .
static 변수 예제 static 변수 #include <stdio.h> void fct(void); int main(void) { int i; for(i=0; i<5; i++) fct(); return 0; } void fct(void) int val=0; // static int val=0; val++; printf("%d\n", val);
연습문제 1. 곱셈기능을 지니는 함수를 하나 구현하고 main 함수에서 호출하는 프로그램작성. 이러한 작업은 0을 두 개의 숫자를 입력할 때까지 계속 진행. 그리고, 프로그램이 종료되면 연산이 몇 번 하였는지 출력 <실행 예:> 두 개의 숫자 입력:1 3 연산결과: 3 두 개의 숫자 입력: 3 2 연산결과: 6 두 개의 숫자 입력: 0 0 총 2번 연산하였습니다.