ch03 - 조건문과...

75
3. 조건문과 반복문 2015-1 Programming Language March 7, 2015 Prof. Young-Tak Kim Advanced Networking Technology Lab. (YU-ANTL) Dept. of Information & Comm. Eng, College of Engineering, Yeungnam University, KOREA (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : [email protected])

Transcript of ch03 - 조건문과...

Page 1: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

3. 조건문과 반복문

2015-1 Programming Language

March 7, 2015

Prof. Young-Tak KimAdvanced Networking Technology Lab. (YU-ANTL)

Dept. of Information & Comm. Eng, College of Engineering, Yeungnam University, KOREA

(Tel : +82-53-810-2497; Fax : +82-53-810-4742http://antl.yu.ac.kr/; E-mail : [email protected])

Page 2: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 2

Outline

제어문, 조건문이란 ? if, if – else, 다중 if 문예: 이차방정식, 산술계산기switch, break, continuegoto

반복문이란 ? while, do – while, for중첩 반복문 (nested loop) break, continue

Page 3: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 3

조건문의 예만약 비가 오지 않으면 테니스를 친다.만약 결석이 1/3이상이면 F학점을 받는다.만약 시간이 없는 경우에는 택시를 탄다.만약 날씨가 좋고 공휴일이면 공원에 산책을 간다.점수가 60점 이상이면 합격이고 그렇지 않으면

불합격이다.

Page 4: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 4

if문

조건에 따라서 결정을 내리는 경우에 사용

if( 조건식 )문장;

조건식이 참으로 계산되면

문장이 실행된다.

Page 5: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 5

// if 문을 사용하여 절대값을 구하는 프로그램

#include <stdio.h>

int main(void){

int number;

printf("정수를 입력하시오:"); scanf("%d", &number);

if( number < 0 ) number = -number;

printf("절대값은 %d 입니다.₩n", number);

return 0; }

예제

정수를 입력하시오.-5절대값은 5 입니다.

만약사용자가 -5를입력하였다면

-5 < 0이므로해당 조건문

실행

Page 6: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 6

if-else 문

날씨가 ?날씨가 좋은가?

테니스를 친다.참

거짓

공부를 한다.

if( 조건식 )문장1;

else 문장2;

조건식이 참이면 실행된다.

조건식이 거짓이면 실행된다.

Page 7: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 7

if-else 문

Page 8: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 8

if-else 문if ( score >= 60 )

printf("합격입니다.\n");else

printf("불합격입니다.\n");

score가 60이상이면 실행

score가 60미만이면 실행

if ( score >= 60 ) {

printf("합격입니다.\n"); printf("장학금도 받을 수 있습니다.\n");

} else{

printf("불합격입니다.\n"); printf("더욱 열심히 공부하세요.\n");

}

score가 60이상이면 실행

score가 60미만이면 실행

Page 9: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 9

복잡한 조건식도 가능

학점 결정 코드

if( score >= 80 && score < 90 )grade = 'B';

공백 문자들의 개수를 세는 코드

if( ch == ‘ ‘ || ch == ‘₩n’ || ch == ‘₩t’ )white_space++;

Page 10: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 10

// 윤년 판단 프로그램

#include <stdio.h>

int main(void){

int year;

printf("연도를 입력하시오: "); scanf("%d", &year);

if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) printf("%d년은 윤년입니다.\n", year);

elseprintf("%d년은 윤년이 아닙니다.\n", year);

return 0; }

예제연도를 입력하시오:2005년은 윤년이 아닙니다.

2005

PASS

Page 11: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 11

중첩 if

if( score >= 80 ) if( score >= 90 )

printf("당신의 학점은 A입니다.\n");

if( score >= 80 ) if( score >= 90 )

printf("당신의 학점은 A입니다.\n");else

printf("당신의 학점은 B입니다.\n");

If 문안의 문장자리에 if문이들어간 경우

If 문안의 문장자리에 if-else 문이 들어간 경우

Page 12: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 12

if와 else의 매칭 문제

if(score > 80)if( score >= 90)

printf(“당신의 학점은 A입니다₩n”);else

printf(“당신의 학점은 B입니다₩n”)X

O

else 절은 가장 가까운 if절과 매치된다.

만약 다른 if절과 else 절을 매치시키려면 중괄호를 사용하여 블록

으로 묶는다.

if( score >= 80 ) {if( score >= 90 )

printf("당신의 학점은 A입니다.\n"); } elseprintf("당신의 학점은 A나 B가 아닙니다.\n");

Page 13: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 13

정수 3개중의 최소값 찾기

정수 3개를 입력하시오:10 20 30제일 작은 수는 10입니다.

10 < 20 이고 10 < 30 이므로 실행

#include <stdio.h>int main(void){

int n1, n2, n3, min;

printf("정수 3개를입력하시오:");scanf("%d %d %d", &n1, &n2, &n3);

if( n1 < n2 )if( n1 < n3 )

min = n1;else

min = n3;else

if( n2 < n3 )min = n2;

elsemin = n3;

printf("제일작은수는 %d입니다\n", min);return 0;

}

Page 14: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 14

연속적인 if

if( 조건식1 ) 문장1;

else if( 조건식2 ) 문장2;

else if( 조건식3 ) 문장3;

else문장4;

Page 15: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 15

// 문자들을 분류하는 프로그램

#include <stdio.h>

int main(void){

char ch;

printf("문자를 입력하시오: "); scanf("%c", &ch);

if( ch >= 'A' && ch <= 'Z' )printf("%c는 대문자입니다.\n", ch);

else if( ch >= 'a' && ch <= 'z' )printf("%c는 소문자입니다.\n", ch);

else if( ch >= '0' && ch <= '9' )printf("%c는 숫자입니다.\n", ch);

elseprintf("%c는 기타문자입니다.\n", ch);

return 0; }

문자 분류 예제

문자를 입력하시오: c는 소문자입니다.

cPASS

Page 16: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 16

#include <stdio.h>int main(void){

char op;int x, y, result;

printf("수식을 입력하시오");printf("(예: 2 + 5) ");printf(">>");scanf("%d %c %d", &x, &op, &y);

if( op == '+' )result = x + y;

else if( op == '-' )result = x - y;

else if( op == '*' )result = x * y;

else if( op == '/' )result = x / y;

else if( op == '%' )result = x % y;

elseprintf("지원되지 않는 연산자입니다. ");

printf("%d %c %d = %d ", x, op, y, result);return 0;

}

간단한 수식 계산

수식을 입력하시오(예: 2 + 5)>>2 + 52 + 5 = 7

Page 17: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 17

여러가지 경우 중에서 하나를 선택하는데 사용

switch 문

switch(조건식) {

case c1: 문장1; break;

case c2: 문장2; break;

...

... case cn:

문장n; break;

default: 문장d; break;

}

제어식의 값이 c1이면 실행된다.

제어식의 값이 c2이면 실행된다.

일치하는 값이 없으면 실행된다.

Page 18: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 18

switch 문의 실행 순서

break는 문장의실행을 끝내고

switch 문을 탈출하는데 사용합니

다.

Page 19: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 19

예제int main(void){

int number;

printf("정수를 입력하시오:"); scanf("%d", &number); switch(number) {

case 0: printf("없음₩n"); break ;

case 1: printf("하나₩n"); break ;

case 2: printf("둘₩n"); break ;

default: printf("많음₩n"); break;

} }

정수를 입력하시오: 하나

1

Page 20: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 20

break가 생략되는 경우

break를 만날 때까지 계속 문장을 실행합니다.

Page 21: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 21

의도적인 break생략switch(number)

{ case 0:

printf("없음₩n"); break;

case 1: printf("하나₩n"); break;

case 2: case 3:

printf("두서너개₩n"); break;

default: printf("많음₩n"); break;

}

2개의 경우를 하나로 묶어서 처리하기위하여 이러한 기법

을 사용

Page 22: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 22

default 문

어떤 case문과도 일치되지 않는 경우에 선택

Page 23: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 23

switch 문과 if-else 문

int main(void) { int number; scanf("%d", &number);

if( number == 0 ) printf("없음\n");

else if( number == 1 ) printf("하나\n");

else if( number == 2 ) printf("둘\n");

elseprintf("많음\n");

}

switch(number) {

case 0: printf("없음\n"); break;

case 1: printf("하나\n"); break;

case 2: printf(“둘\n"); break;

default: printf("많음\n"); break;

}

Page 24: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 24

switch 문에서 주의할 점

switch(number){

case x: // 변수는 사용할 수 없다. printf("x와 일치합니다. ");break;

case (x+2): // 변수가 들어간 수식은 사용할 수 없다. printf("수식과 일치합니다. ");break;

case 0.001: // 실수는 사용할 수 없다. printf("실수");break;

case “001”: // 문자열은 사용할 수 없다. printf("문자열");break;

}

Page 25: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 25

예제// 달의 일수를 계산하는 프로그램#include <stdio.h>

int main(void){

int month, days;

printf("달을 입력하시오: "); scanf("%d", &month);

switch(month) {

case 2: days = 28; break;

case 4: case 6: case 9: case 11:

days = 30; break;

default: days = 31; break;

} printf("%d월의 일수는 %d입니다.₩n", month, days); return 0;

}

달을 입력하시오: 1212월의 일수는 31입니다.

Page 26: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 26

실습: 산술 계산기#include <stdio.h>

int main(void){

char op;int x, y, result;

printf("수식을 입력하시오");printf("(예: 2 + 5) ");printf(">>");scanf("%d %c %d", &x, &op, &y);switch(op){

case '+':result = x + y;break;

case '-':result = x - y;break;

…default:

printf("지원되지 않는 연산자입니다. ");break;

}printf("%d %c %d = %d ", x, op, y, result);return 0;

}

수식을 입력하시오(예: 2 + 5)>>2 + 52 + 5 = 7

10 % 3

Page 27: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 27

Goto문

조건없이 어떤 위치로 점프사용하지 않는 것이 좋음

Page 28: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 28

예제// 구구단출력프로그램#include <stdio.h>

int main(void){

int i = 1;

loop: printf("%d * %d = %d ₩n", 3, i, 3 * i); i++; if( i == 10 ) goto end; goto loop;

end: return 0;

}

3 * 1 = 3 3 * 2 = 6 3 * 3 = 9 3 * 4 = 12 3 * 5 = 15 3 * 6 = 18 3 * 7 = 21 3 * 8 = 24 3 * 9 = 27

I == 10까지 반복

Page 29: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 29

반복문

Q) 반복 구조는 왜 필요한가?

A) 같은 처리 과정을 되풀이하는 것이 필요하기 때문이다. 학생 30명의 평균 성적을 구하려면 같은 과정을 30번 반복하여야 한다.

Page 30: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 30

반복문의 종류

반복문

while

for

10kg이 빠질때까지 반복

하세요

100번 반복하세요.

Page 31: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 31

while 문

주어진 조건이 만족되는 동안 문장들을 반복 실행한다.

while( 조건식 )문장;

Page 32: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 32

#include <stdio.h>

int main(void){

int meter=0; int i = 0;

while(i < 3) {

meter = i * 1609; printf("%d 마일은 %d 미터입니다\n", i, meter); i++; // i = i+1 과 동일

} return 0;

}

예제

01 < 3

01609

2

3218meter

3i

*1609

=

i 값이 3으로 증가하였지만 조건에 만족 하지 않아출력하지 못하고 프로그램을 종료한다.

0마일은 0미터 입니다.

1마일은 1609미터 입니다.2마일은 1609미터 입니다.

Page 33: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 33

Page 34: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 34

// while 문을 이용한 구구단 출력 프로그램

#include <stdio.h>

int main(void){

int n; int i = 1;

printf("출력하고 싶은 단: "); scanf("%d", &n);

while (i <= 9) {

printf("%d*%d = %d \n", n, i, n*i); i++; // i = i+1 과 동일

}

return 0; }

예제

1

출력하고 싶은 단: 2

2n *

23

2*1=22*2=42*3=62*4=82*5=10

2*9=18

45

.

..

9i

Page 35: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 35

// while 문을 이용한 제곱값 출력 프로그램

#include <stdio.h>

int main(void){

int n;

printf("====================\n");printf(" n n의 제곱 \n");printf("====================\n");

n = 1; while (n <= 10) {

printf("%5d %5d\n", n, n*n); n++; // n= n+1 과 동일

}

return 0; }

예제

==================== n n의 제곱

====================

1

1 12 43 94 165 25

10 100

.

..

234510n

Page 36: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 36

센티널(sentinel, 보초) 의 이용

센티널: 입력되는 데이터의 끝을 알리는 특수한 값

100, 200, 300, 400, 500, -1

센티널

Page 37: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 37

// while 문을 이용한 성적의 평균 구하기 프로그램

#include <stdio.h>

int main(void){

int grade, n; float sum, average;

// 필요한 변수들을 초기화한다.n = 0; sum = 0; grade = 0;

printf("종료 시 음수 입력\n");

센티넬 예제 1/2

Page 38: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 38

// 성적을 입력 받아서 합계를 구하고 학생 수를 센다. while (grade >= 0) {

printf("성적을 입력하시오: "); scanf("%d", &grade);

sum += grade; n++;

}

sum = sum - grade; // 마지막 데이터를 제거한다. n--; // 마지막 데이터를 제거한다. // 평균을 계산하고 화면에 출력한다.average = sum / n; printf("성적의 평균은 %f입니다.\n", average);

return 0; }

센티넬 예제 2/2

0

0 0

종료 시 음수 입력성적을 입력하시오 : 30성적을 입력하시오 : 50성적을 입력하시오 : 70

3030

1

5080

2

70150

3

성적을 입력하시오 : -1

-1grade

149

4

150sum

3n 50

average

성적의 평균은 50.000000입니다.

Page 39: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 39

예제: 최대값

#include <stdio.h>#include <limits.h>

int main(void){

int number, min_value = INT_MAX;printf("정수를 입력하시오\n종료는 Ctrl+z\n");while(scanf("%d", &number) != EOF){

if( number < min_value )min_value = number;

}printf("최소값은 %d“, min_value);return 0;

}

정수를 입력하시오종료는 Ctrl+z1020305^Z최소값은 5

Page 40: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 40

if 문과 while 문의 비교

if( 조건 ){......}

while( 조건 ){......

}

조건이 만족되면 한번만 실행

된다.

조건이 만족되면여러 번 반복 실

행된다.

Page 41: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 41

while 문에서 주의할 점int i = 1;while(i < 10){

printf("반복중입니다\n"): i--;

}

int i = 0;while(i < 3)

printf("반복중입니다\n"): i++; .

int i = 0;while(i < 3) ;{

printf("반복중입니다\n"): i++; .

}

변수가 증가 아니라 감소

반복 루프에 포함되어 있지않다.

조건뒤에 ;이 있음

Page 42: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 42

do...while문

반복 조건을 루프의 끝에서 검사

do문장

while(조건)

Page 43: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 43

do-while 문

적어도 한번은 반복문장을 실행한다.

문장

조건

거짓

Page 44: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 44

// do..while 문을 이용한 메뉴

#include <stdio.h>

int main(void){

int i = 0; do{

printf("1---새로 만들기\n"); printf("2---파일 열기\n"); printf("3---파일 닫기\n"); printf("하나를 선택 하시오:\n"); scanf("%d", &i);

} while(i < 1 || i > 3);

printf("선택된 메뉴=%d\n",i); return 0;

}

예제

1---새로 만들기2---파일 열기

3---파일 닫기

하나를 선택 하시오:1

01i

선택된 메뉴=1

Page 45: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 45

for 루프정해진 횟수만큼 반복하는 구조

Page 46: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 46

for 문의 구조for ( 초기식; 조건식; 증감식)

문장;

① 초기식을 실행한다. ② 반복 조건을 나타내는 조건식을 계산한다. ③ 수식의 값이 거짓이면 for 문의 실행이 종

료된다. ④ 수식의 값이 참이면 문장이 실행된다. ⑤ 증감식을 실행하고 ②로 돌아간다.

Page 47: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 47

for 문의 구조

int i;for(i = 0; i < 10; i++)

printf("Hello World!\n");

Page 48: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 48

for문의 실행과정

Page 49: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 49

for문의 실행과정

반복횟수 i의 값 i<10 반복여부

1번째 반복 0 참 반복

2번째 반복 1 참 반복

3번째 반복 2 참 반복

4번째 반복 3 참 반복

5번째 반복 4 참 반복

6번째 반복 5 참 반복

7번째 반복 6 참 반복

8번째 반복 7 참 반복

9번째 반복 8 참 반복

10번째 반복 9 참 반복

11번째 반복 10 거짓 중지

int i;for(i = 0; i < 10; i++)

printf("Hello World!\n");

Page 50: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 50

// 반복을 이용한 정수합 프로그램

#include <stdio.h>

int main(void){

int i, sum;

sum = 0;for(i = 1;i <= 10; i++)

sum += i; // sum = sum + i;와 같음

printf("1부터 10까지 정수의 합= %d\n",sum);

return 0; }

예제시작

i=1 , sum=0

i <= 10

sum = sum + i

i++

Sum출력

NO

YES

i가 10보다 작거나 같은 때까지 10번 반복

1부터 10까지 정수의 합 = 55

Page 51: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 51

// 반복을 이용한 세제곱값구하기

#include <stdio.h>

int main(void){

int i, n;

printf("정수를 입력하시오:"); scanf("%d", &n);

printf("====================\n"); printf(" i i의 세제곱\n"); printf("====================\n"); for(i = 1;i <= n; i++)

printf("%5d %5d\n", i, i*i*i);

return 0; }

예제

1 3n

==================== i i의 세제곱

==================== 1 12 83 27

정수를 입력하시오:3

23i

Page 52: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 52

예제

// 반복을 이용한 네모 그리기#include <stdio.h>

int main(void){

int i;printf("**********");

for(i = 0;i < 5; i++)printf("* *");

printf("**********");

return 0;}

*********** ** ** ** ** ***********

Page 53: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 53

while 루프와 for 루프와의 관계

{

초기식

while ( 조건식 )

}

장문장1 ;

장문장2 ;

증감증감식 ;

for ( 초기식 ;조건식 ;증감증감식 )

{

}

장문장1 ;

장문장2 ;...

...

Page 54: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 54

팩토리얼 계산 예제(while 버전)

// 반복을 이용한 팩토리얼 구하기#include <stdio.h>

int main(void){

long fact = 1;int i = 1, n;printf("정수를 입력하시요: ");scanf("%d", &n);while (i <= n){

fact = fact * i;i++;

}printf("%d!은 %d입니다.", n, fact);return 0;

}

Page 55: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 55

다양한 증감수식의 형태

for (i = 10; i > 0; i-- )printf("Hello World!\n");

for (i = 0; i < 10; i += 2 )printf("Hello World!\n");

for (i = 1; i < 10; i *= 2 )printf("Hello World!\n");

for (i = 0; i < 100; i = (i * i) + 2 )printf("Hello World!\n");

뺄셈 사용

2씩 증가

2를 곱한다.

어떤 수식이라도 가능

Page 56: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 56

디양한 for 루프

for ( ; i<100; i++ )printf("Hello World!\n");

for (i = 0, k = 0; i < 100; i++ )printf("Hello World!\n");

for (printf("반복시작”), i = 0; i < 100; i++ )printf("Hello World!\n");

한부분이 없을 수도 있다.

2개 이상의 변수 초기화

어떤 수식도 가능

for ( ; ; )printf("Hello World!\n");

무한 반복 루프

Page 57: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 57

중첩 반복문중첩 반복문(nested loop): 반복문 안에 다른 반복문이 위치

Page 58: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 58

// 중첩 for 문을 이용하여 *기호를 사각형

// 모양으로 출력하는 프로그램

#include <stdio.h>

int main(void){

int x, y;

for(y = 0;y < 5; y++) {

for(x = 0;x < 10; x++) printf("*");

printf("\n"); }

return 0; }

예제

*

102014

1201

*

2

*

9x

0부터 9까지 10번 반복

*******

y

\n

0부터 4까지 5번 반복

********** \n********** \n********** \n********** \n

Page 59: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 59

// break를 이용하여 무한루프를 탈출한다. #include <stdio.h>#include <math.h>

int main(void){

double v;

while(1) {

printf("실수 값을 입력하시오: "); scanf("%lf", &v); if( v < 0.0 )

break;printf("%f의 제곱근은 %f\n", v, sqrt(v));

}

return 0; }

예제

실수 값을 입력하시오: 9.0

9.0

9.000000의 제곱근은 3.000000입니다. 실수 값을 입력하시오: 12.0

12.0

12.000000의 제곱근은 3.464102입니다.

실수 값을 입력하시오: -1

-1v

Page 60: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 60

// break를 이용하여 무한루프를 탈출한다. #include <stdio.h>

int main(void){

float grade, sum = 0.0, average; int count = 0;

while(1) {

printf("학생 성적을 입력하시오: "); scanf("%f", &grade);

if( grade < 0.0 ) break;

count++; sum += grade;

} average = sum / count; printf("학생들의 평균은 %f입니다.\n", average); return 0;

}

예제

grade < 0.0

count ++

sum += grade

break

YES

NO음수 입력 시while문을 나옴

학생 성적을 입력하시오: 90 학생 성적을 입력하시오: 90 학생 성적을 입력하시오: 80 학생 성적을 입력하시오: 70 학생 성적을 입력하시오: -1 학생들의 성적의 평균은 82.500000입니다.

Page 61: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 61

예제

#include <stdio.h>int main(void){

int x, y;

for(y = 1; y <= 5; y++){

for(x = 0; x < y; x++)printf("*");

printf(“\n"); // 내부 반복문이 종료될 때마다 실행}return 0;

}

***************

Page 62: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 62

break 문break 문은 반복 루프를 빠져 나오는데 사용된다.

Page 63: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 63

예제

#include <stdio.h>#define SEED_MONEY 1000000

int main(void){

int year=0, money=SEED_MONEY;while(1){

year++;money += money*0.30;if( money > 10*SEED_MONEY )

break;}printf("%d", year);return 0;

}

원금의 10배가 되면

Page 64: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 64

예제

// break를 이용하여 무한루프를 탈출한다.#include <stdio.h>#include <math.h>

int main(void){

double v;while(1){

printf("실수값을 입력하시오: ");scanf("%lf", &v);if( v < 0.0 )

break;printf("%f의 제곱근은 %f입니다.", v, sqrt(v));

return 0;}

음수이면 빠져나간다

실수값을 입력하시오: 9.09.000000의 제곱근은

3.000000입니다.실수값을 입력하시오: 25.0

25.000000의 제곱근은5.000000입니다.

실수값을 입력하시오: -1

Page 65: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 65

goto문의 사용#include <stdio.h>

int main(void){

int x, y;

for(y = 1; y < 10000; y++) {

for(x = 1; x < 50; x++) {

if( _kbhit() ) goto OUT; printf("*");

} printf("\n");

} OUT:

return 0; }

OUT 으로 goto

*************************************************

*************************************************

***********

Page 66: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 66

현재의 반복을 중단하고 다음 반복을 시작하게 한다.

continue 문

Page 67: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 67

#include <stdio.h>int main(void){

int i;for(i=0 ; i<10 ; i++)

if( i%3 == 0 )continue;

printf("%d ", i);

return 0;}

예제

1 2 4 5 7 8

3의 배수 는 건너뛴다.

Page 68: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 68

// 소문자를 대문자로 변경한다. #include <stdio.h>

int main(void){

char letter;

while(1) {

printf("소문자를 입력하시오: "); scanf(" %c", &letter);

if( letter == 'Q' ) break ;

if( letter < 'a' || letter > 'z' ) continue ;

letter -= 32; printf("변환된 대문자는 %c입니다.\n", letter);

}

return 0; }

예제

소문자를 입력하시오 : a

aA

변환된 대문자는 A입니다.. 소문자를 입력하시오 : b

bB

변환된 대문자는 B입니다. 소문자를 입력하시오 : Q

Qletter

Page 69: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 69

#include <stdio.h>#define START_DAY 3 // 첫번째 날이 수요일#define DAYS_OF_MONTH 31 // 달의 일수

int main(void){

int day, date; printf("=====================\n"); printf("일 월 화 수 목 금 토\n"); printf("=====================\n"); // 월요일부터 수요일까지for(day = 0; day < START_DAY ; day++)

printf(" "); // 공백 출력for(date = 1; date <= DAYS_OF_MONTH ; date++) {

if( day == 7 ) {

day = 0; // 일요일이면 줄바꿈을 출력printf("\n");

} day++; printf("%2d ", date); // 날을 출력한다.

} printf("\n=====================\n"); return 0;

}

예제

Page 70: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 70

2-Dimentional Array (2차원 배열)

2차원 배열의 초기화

행의 개수를 지정하지 않을 경우에 컴파일러가 자동으로 행의개수를 결정

int s[3][5] = {{0, 1, 2, 3, 4}, // 첫 번째 행의 원소들의 초기값{10, 11, 12, 13, 14}, // 두 번째 행의 원소들의 초기값{20, 21, 22, 23, 24} // 세 번째 행의 원소들의 초기값

};

혹은,

int s[][5] = {{0, 1, 2, 3, 4}, // 첫 번째 행의 원소들의 초기값{10, 11, 12, 13, 14}, // 두 번째 행의 원소들의 초기값{20, 21, 22, 23, 24} // 세 번째 행의 원소들의 초기값

};

Page 71: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 71

Matrix multiplication

Calculation of each element

=

a00 a01 a02

a10 a11 a12

a20 a21 a22

X

b00 b01 b02

b10 b11 b12

b20 b21 b22

a00b00+ a01b10+ a02b20

a00b01+ a01b11+ a02b21

a00b02+ a01b12+ a02b22

a10b00+ a11b10+ a12b20

a10b01+ a11b11+ a12b21

a10b02+ a11b12+ a12b22

a20b00+ a21b10+ a22b20

a20b01+ a21b11+ a22b21

a20b02+ a21b12+ a22b22

Page 72: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 72

printMtrx()Procedure printMtrx(int mA[][SIZE], int num_rows, int num_cols){

for (int i = 0; i< num_rows; i++) {

for (int j = 0; j< num_cols; j++){

if (첫번째 행(row), 첫번째 열 (col))‘’ 출력 후 해당 데이터 출력;

else if (첫번째 행, 마지막 열)데이터 출력 후, ‘’ 출력;

else if (첫번째 행과 마지막 행이 아니며, 첫번째 열)‘’ 출력 후, 데이터 출력;

else if (첫번째 행과 마지막 행이 아니며, 마지막 열)데이터 출력 후, ‘’ 출력;

else if (마지막 행, 첫번째 열)‘’ 출력 후, 데이터 출력

else if (마지막 행, 마지막 열)데이터 출력 후, ‘’ 출력;

else데이터 출력;

}printf("₩n");

}}

출력결과

확장 완성형코드

사용 방법

─ 0xa6, 0xa1 printf(“ %c%c”, 0xa6, 0xa1)

│ 0xa6, 0xa2 printf(“ %c%c”, 0xa6, 0xa2)

┌ 0xa6, 0xa3 printf(“ %c%c”, 0xa6, 0xa3)

┐ 0xa6, 0xa4 printf(“ %c%c”, 0xa6, 0xa4)

┘ 0xa6, 0xa5 printf(“ %c%c”, 0xa6, 0xa5)

└ 0xa6, 0xa6 printf(“ %c%c”, 0xa6, 0xa6)

Page 73: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 73

multiplication of 2 matricesProcedure multiplyMtrx(A[][SIZE], B[][SIZE], C[][SIZE], int SIZE)1. // A[][] and B[][] are delivered as arguments.2. // C[][] = A[][] x B[][]3. // i, j and k are index of three-level nested for-loop4. for(i=0; i<SIZE; i++)5. for(j=0; j<SIZE; j++)6. C[i][j] = 0; // initialize7. for(k=0; k<SIZE; k++)8. C[i][j] += A[i][k] * B[k][j]9. end for10. end for11. end for12. End Algorithm

Page 74: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 74

Homework 3

3.1 표준입력장치 (키보드)에서 문자 1개를 입력 받은 후, 이 문자가대문자, 소문자, 모음, 자음, 숫자, 기호인지 구분하고, 그 결과를출력하는 알고리즘을 pseudo code로 작성하고, 이에 대한 C 프로그램을 작성하라. (ASCII 표를 참조할 것.)

3.2 2015년의 1월 ~ 12월 달력을 월별로 출력하는 알고리즘의pseudo code를 작성하라. 2015년 1월 1일은 목요일이며, 윤년인가를 확인하여, 이에 따라 정확한 2월 출력이 될 수 있게 할 것. 각달의 달력에서는 요일이 표시되어야 하며, 1 주일단위로 줄바꿈이표시되어야 한다. 이 알고리즘을 C 프로그램으로 작성하고, 주석문이 포함된 소스코드와 함께 그 실행결과 화면을 캡쳐하여제출하라.

Page 75: ch03 - 조건문과 반복문-150313pm0215elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016-09-09 · Advanced Networking Tech. Lab. Yeungnam University (yuANTL)Programming

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kim3 - 75

Homework 3

3.3 중첩 반복문을 사용하여 구구단 표를 출력하는 알고리즘의 pseudo code를 작성하라. 이 프로그램은 다음과 같은 형식으로 구구단 표를출력하여야 한다. 출력되는 값은 4자리씩을 가지며, 오른쪽 맞춤으로printf()의 출력 포멧을 설정할 것. 이 알고리즘을 C 프로그램으로작성하고, 주석문이 포함된 소스코드와 함께 그 실행결과 화면을 캡쳐하여제출하라.

| 1 2 3 4 5 6 7 8 9 ==|===========================================1 | 1 2 3 4 5 6 7 8 92 | 2 4 6 8 10 12 14 16 183 | . . . . 4 | . 5 | 6 |7 |8 |9 | 9 18 27 36 45 54 63 72 81