2015-1 3. 조건문과반복문 March 7, 2015 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 : ytkim@yu.ac.kr)
Outline 제어문, 조건문이란? if, if else, 다중 if 문 예 : 이차방정식, 산술계산기 switch, break, continue goto 반복문이란? while, do while, for 중첩반복문 (nested loop) break, continue 3-2
조건문의예 만약비가오지않으면테니스를친다. 만약결석이 1/3이상이면 F학점을받는다. 만약시간이없는경우에는택시를탄다. 만약날씨가좋고공휴일이면공원에산책을간다. 점수가 60점이상이면합격이고그렇지않으면불합격이다. 3-3
if 문 조건에따라서결정을내리는경우에사용 if( 조건식 ) 문장 ; 조건식이참으로계산되면 문장이실행된다. 3-4
// if 문을사용하여절대값을구하는프로그램 #include <stdio.h> int main(void) int number; 예제 printf(" 정수를입력하시오 :"); scanf("%d", &number); 만약사용자가 -5 를입력하였다면 if( number < 0 ) number = -number; -5 < 0 이므로해당조건문실행 printf(" 절대값은 %d 입니다. n", number); 정수를입력하시오. -5 절대값은 5 입니다. return 0; 3-5
if-else 문 날씨가좋은가? 거짓 참 테니스를친다. 공부를한다. if( 조건식 ) 문장1; else 문장2; 조건식이참이면실행된다. 조건식이거짓이면실행된다. 3-6
if-else 문 3-7
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 미만이면실행 3-8
학점결정코드 복잡한조건식도가능 if( score >= 80 && score < 90 ) grade = 'B'; 공백문자들의개수를세는코드 if( ch == ch == n ch == t ) white_space++; 3-9
예제 // 윤년판단프로그램 #include <stdio.h> 연도를입력하시오 : 2005 2005년은윤년이아닙니다. int main(void) int year; printf(" 연도를입력하시오 : "); scanf("%d", &year); if((year % 4 == 0 && year % 100!= 0) year % 400 == 0) printf("%d 년은윤년입니다.\n", year); else printf("%d 년은윤년이아닙니다.\n", year); PASS return 0; 3-10
중첩 if if( score >= 80 ) if( score >= 90 ) printf(" 당신의학점은 A입니다.\n"); If 문안의문장자리에 if 문이들어간경우 if( score >= 80 ) if( score >= 90 ) printf(" 당신의학점은 A입니다.\n"); else printf(" 당신의학점은 B입니다.\n"); If 문안의문장자리에 if-else 문이들어간경우 3-11
if 와 else 의매칭문제 else 절은가장가까운 if 절과매치된다. if(score > 80) if( score >= 90) printf( 당신의학점은 A입니다 n ); X O else printf( 당신의학점은 B입니다 n ) if( score >= 80 ) if( score >= 90 ) printf(" 당신의학점은 A입니다.\n"); else printf(" 당신의학점은 A나 B가아닙니다.\n"); 만약다른 if 절과 else 절을매치시키려면중괄호를사용하여블록으로묶는다. 3-12
정수 3 개중의최소값찾기 #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; else min = n3; printf(" 제일작은수는 %d 입니다 \n", min); return 0; 10 < 20 이고 10 < 30 이므로실행 정수 3 개를입력하시오 :10 20 30 제일작은수는 10 입니다. 3-13
연속적인 if if( 조건식1 ) 문장1; else if( 조건식2 ) 문장2; else if( 조건식3 ) 문장3; else 문장4; 3-14
// 문자들을분류하는프로그램 #include <stdio.h> int main(void) char ch; printf(" 문자를입력하시오 : "); scanf("%c", &ch); 문자분류예제 PASS 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); else printf("%c 는기타문자입니다.\n", ch); 문자를입력하시오 : c 는소문자입니다. c return 0; 3-15
#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; else printf(" 지원되지않는연산자입니다. "); printf("%d %c %d = %d ", x, op, y, result); return 0; 3-16 수식을입력하시오 ( 예 : 2 + 5) >>2 + 5 2 + 5 = 7
switch 문 여러가지경우중에서하나를선택하는데사용 switch( 조건식 ) case c1: 문장 1; break; case c2: 문장 2; break;...... case cn: 문장 n; break; default: 문장 d; break; 제어식의값이 c1 이면실행된다. 제어식의값이 c2 이면실행된다. 일치하는값이없으면실행된다. 3-17
switch 문의실행순서 break 는문장의실행을끝내고 switch 문을탈출하는데사용합니다. 3-18
예제 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; 3-19 정수를입력하시오 : 하나 1
break 가생략되는경우 break 를만날때까지계속문장을실행합니다. 3-20
의도적인 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 개의경우를하나로묶어서처리하기위하여이러한기법을사용 3-21
default 문 어떤 case 문과도일치되지않는경우에선택 3-22
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"); else printf(" 많음 \n"); switch(number) case 0: printf(" 없음 \n"); break; case 1: printf(" 하나 \n"); break; case 2: printf( 둘 \n"); break; default: printf(" 많음 \n"); break; 3-23
switch 문에서주의할점 switch(number) case x: // 변수는사용할수없다. printf("x와일치합니다. "); break; case (x+2): // 변수가들어간수식은사용할수없다. printf(" 수식과일치합니다. "); break; case 0.001: // 실수는사용할수없다. printf(" 실수 "); break; case 001 : // 문자열은사용할수없다. printf(" 문자열 "); break; 3-24
// 달의일수를계산하는프로그램 #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; 3-25 달을입력하시오 : 12 12 월의일수는 31 입니다.
#include <stdio.h> int main(void) char op; int x, y, result; 실습 : 산술계산기 수식을입력하시오 ( 예 : 2 + 5) >>2 + 5 2 + 5 = 7 10 % 3 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; 3-26
Goto 문 조건없이어떤위치로점프 사용하지않는것이좋음 3-27
예제 // 구구단출력프로그램 #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; I == 10 까지반복 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 3-28
반복문 Q) 반복구조는왜필요한가? A) 같은처리과정을되풀이하는것이필요하기때문이다. 학생 30 명의평균성적을구하려면같은과정을 30 번반복하여야한다. 3-29
반복문의종류 10kg 이빠질때까지반복하세요 while 100 번반복하세요. 반복문 for 3-30
while 문 주어진조건이만족되는동안문장들을반복실행한다. while( 조건식 ) 문장 ; 3-31
예제 #include <stdio.h> int main(void) int meter=0; int i = 0; 0 마일은 0 미터입니다. 1 마일은 1609 미터입니다. 2 마일은 1609 미터입니다. while(i < 3) meter = i * 1609; printf("%d 마일은 %d 미터입니다 \n", i, meter); i++; // i = i+1 과동일 return 0; i 값이 3 으로증가하였지만조건에만족하지않아출력하지못하고프로그램을종료한다. i 01 32 1609 3218 0 meter * 1609 = < 3 3-32
3-33
예제 // 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 과동일 2 n * 출력하고싶은단 : 2 2*1=2 2*2=4 2*3=6 2*4=8 2*5=10... 2*9=18 i 45 923 1 return 0; 3-34
예제 // 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 과동일 10 2345 1 n ==================== n n의제곱 ==================== 1 1 2 4 3 9 4 16 5 25... 10 100 return 0; 3-35
센티널 (sentinel, 보초 ) 의이용 센티널 : 입력되는데이터의끝을알리는특수한값 100, 200, 300, 400, 500, -1 센티널 3-36
센티넬예제 1/2 // while 문을이용한성적의평균구하기프로그램 #include <stdio.h> int main(void) int grade, n; float sum, average; // 필요한변수들을초기화한다. n = 0; sum = 0; grade = 0; printf(" 종료시음수입력 \n"); 3-37
센티넬예제 2/2 // 성적을입력받아서합계를구하고학생수를센다. while (grade >= 0) printf(" 성적을입력하시오 : "); scanf("%d", &grade); sum += grade; n++; 149 150 80 30 150 0 0 sum 40 32 1 n 50 average 30 50 70-1 grade sum = sum - grade; // 마지막데이터를제거한다. n--; // 마지막데이터를제거한다. // 평균을계산하고화면에출력한다. average = sum / n; printf(" 성적의평균은 %f 입니다.\n", average); 종료시음수입력성적을입력하시오 : 30 성적을입력하시오 : 50 성적을입력하시오 : 70 성적을입력하시오 : -1 성적의평균은 50.000000입니다. return 0; 3-38
예제 : 최대값 #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+z 10 20 30 5 ^Z 최소값은 5 3-39
if 문과 while 문의비교 if( 조건 )...... 조건이만족되면한번만실행된다. while( 조건 )...... 조건이만족되면여러번반복실행된다. 3-40
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++;. 조건뒤에 ; 이있음 3-41
do...while 문 반복조건을루프의끝에서검사 do 문장 while( 조건 ) 3-42
do-while 문 적어도한번은반복문장을실행한다. 문장 참 조건 거짓 3-43
예제 // 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 선택된메뉴 =1 i 01 3-44
for 루프 정해진횟수만큼반복하는구조 3-45
for 문의구조 for ( 초기식 ; 조건식 ; 증감식 ) 문장 ; 1 초기식을실행한다. 2 반복조건을나타내는조건식을계산한다. 3 수식의값이거짓이면 for 문의실행이종료된다. 4 수식의값이참이면문장이실행된다. 5 증감식을실행하고 2로돌아간다. 3-46
for 문의구조 int i; for(i = 0; i < 10; i++) printf("hello World!\n"); 3-47
for 문의실행과정 3-48
for 문의실행과정 int i; for(i = 0; i < 10; i++) printf("hello World!\n"); 반복횟수 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 거짓중지 3-49
// 반복을이용한정수합프로그램 #include <stdio.h> int main(void) int i, sum; sum = 0; for(i = 1;i <= 10; i++) sum += i; // sum = sum + i; 와같음 예제 i 가 10 보다작거나같은때까지 10 번반복 시작 i=1, sum=0 i <= 10 YES sum = sum + i i++ NO Sum 출력 printf("1 부터 10 까지정수의합 = %d\n",sum); 1 부터 10 까지정수의합 = 55 return 0; 3-50
예제 // 반복을이용한세제곱값구하기 #include <stdio.h> int main(void) int i, n; i 123 3 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); 정수를입력하시오 : 3 ==================== i i의세제곱 ==================== 1 1 2 8 3 27 return 0; 3-51
예제 // 반복을이용한네모그리기 #include <stdio.h> int main(void) int i; printf("**********"); for(i = 0;i < 5; i++) printf("* *"); printf("**********"); return 0; ********** * * * * * * * * * * ********** 3-52
while 루프와 for 루프와의관계 초기식 while ( 조건식 ) 문장 1 ; 문장 2 ;... 증감식 ; for ( 초기식 ; 조건식 ; 증감식 ) 문장 1 ; 문장 2 ;... 3-53
팩토리얼계산예제 (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; 3-54
다양한증감수식의형태 for (i = 10; i > 0; i-- ) printf("hello World!\n"); 뺄셈사용 for (i = 0; i < 10; i += 2 ) printf("hello World!\n"); 2 씩증가 for (i = 1; i < 10; i *= 2 ) printf("hello World!\n"); 2 를곱한다. for (i = 0; i < 100; i = (i * i) + 2 ) printf("hello World!\n"); 어떤수식이라도가능 3-55
디양한 for 루프 for ( ; i<100; i++ ) printf("hello World!\n"); 한부분이없을수도있다. for (i = 0, k = 0; i < 100; i++ ) printf("hello World!\n"); 2 개이상의변수초기화 for (printf(" 반복시작 ), i = 0; i < 100; i++ ) printf("hello World!\n"); 어떤수식도가능 for ( ; ; ) printf("hello World!\n"); 무한반복루프 3-56
중첩반복문 중첩반복문 (nested loop): 반복문안에다른반복문이위치 3-57
예제 // 중첩 for 문을이용하여 * 기호를사각형 // 모양으로출력하는프로그램 #include <stdio.h> x 92 1201 0 부터 9 까지 10 번반복 int main(void) int x, y; for(y = 0;y < 5; y++) for(x = 0;x < 10; x++) printf("*"); printf("\n"); 2 1 0 부터 4 까지 5 번반복 ********** \n ********** \n ********** \n ********** \n ********** \n 2014 10 y return 0; 3-58
예제 // break 를이용하여무한루프를탈출한다. #include <stdio.h> #include <math.h> int main(void) double v; 12.0 9.0-1 v while(1) printf(" 실수값을입력하시오 : "); scanf("%lf", &v); if( v < 0.0 ) break; printf("%f 의제곱근은 %f\n", v, sqrt(v)); 실수값을입력하시오 : 9.0 9.000000의제곱근은 3.000000입니다. 실수값을입력하시오 : 12.0 12.000000의제곱근은 3.464102입니다. 실수값을입력하시오 : -1 return 0; 3-59
// break 를이용하여무한루프를탈출한다. #include <stdio.h> int main(void) float grade, sum = 0.0, average; int count = 0; 예제 학생성적을입력하시오 : 90 학생성적을입력하시오 : 90 학생성적을입력하시오 : 80 학생성적을입력하시오 : 70 학생성적을입력하시오 : -1 학생들의성적의평균은 82.500000 입니다. while(1) printf(" 학생성적을입력하시오 : "); scanf("%f", &grade); if( grade < 0.0 ) break; count++; sum += grade; average = sum / count; printf(" 학생들의평균은 %f입니다.\n", average); return 0; 음수입력시 while 문을나옴 3-60 grade < 0.0 NO count ++ sum += grade YES break
예제 #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; * ** *** **** ***** 3-61
break 문 break 문은반복루프를빠져나오는데사용된다. 3-62
예제 #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 배가되면 3-63
예제 // break를이용하여무한루프를탈출한다. #include <stdio.h> #include <math.h> 실수값을입력하시오 : 9.0 9.000000 의제곱근은 3.000000 입니다. 실수값을입력하시오 : 25.0 25.000000 의제곱근은 5.000000 입니다. 실수값을입력하시오 : -1 int main(void) double v; while(1) printf(" 실수값을입력하시오 : "); scanf("%lf", &v); if( v < 0.0 ) break; printf("%f의제곱근은 %f입니다.", v, sqrt(v)); return 0; 음수이면빠져나간다 3-64
goto 문의사용 #include <stdio.h> int main(void) int x, y; OUT: for(y = 1; y < 10000; y++) for(x = 1; x < 50; x++) if( _kbhit() ) goto OUT; printf("*"); printf("\n"); return 0; OUT 으로 goto ********************************************** *** ********************************************** *** *********** 3-65
continue 문 현재의반복을중단하고다음반복을시작하게한다. 3-66
예제 #include <stdio.h> int main(void) int i; for(i=0 ; i<10 ; i++) if( i%3 == 0 ) continue; printf("%d ", i); 3 의배수는건너뛴다. return 0; 1 2 4 5 7 8 3-67
예제 // 소문자를대문자로변경한다. #include <stdio.h> int main(void) char letter; while(1) printf(" 소문자를입력하시오 : "); scanf(" %c", &letter); if( letter == 'Q' ) break ; if( letter < 'a' letter > 'z' ) continue ; QbB aa letter 소문자를입력하시오 : a 변환된대문자는 A입니다.. 소문자를입력하시오 : b 변환된대문자는 B입니다. 소문자를입력하시오 : Q letter -= 32; printf(" 변환된대문자는 %c 입니다.\n", letter); return 0; 3-68
예제 #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; 3-69
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 // 세번째행의원소들의초기값 ; 행의개수를지정하지않을경우에컴파일러가자동으로행의개수를결정 3-70
Matrix multiplication Calculation of each element a 00 b 00 + a 01 b 10 + a 02 b 20 a 00 b 01 + a 01 b 11 + a 02 b 21 a 00 b 02 + a 01 b 12 + a 02 b 22 a 00 a 01 a 02 b 00 b 01 b 02 a 10 b 00 + a 11 b 10 + a 12 b 20 a 10 b 01 + a 11 b 11 + a 12 b 21 a 10 b 02 + a 11 b 12 + a 12 b 22 = a 10 a 11 a 12 X b 10 b 11 b 12 a 20 a 21 a 22 b 20 b 21 b 22 a 20 b 00 + a 21 b 10 + a 22 b 20 a 20 b 01 + a 21 b 11 + a 22 b 21 a 20 b 02 + a 21 b 12 + a 22 b 22 3-71
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) 3-72
multiplication of 2 matrices Procedure 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-loop 4. for(i=0; i<size; i++) 5. for(j=0; j<size; j++) 6. C[i][j] = 0; // initialize 7. for(k=0; k<size; k++) 8. C[i][j] += A[i][k] * B[k][j] 9. end for 10. end for 11. end for 12. End Algorithm 3-73
Homework 3 3.1 표준입력장치 ( 키보드 ) 에서문자 1개를입력받은후, 이문자가대문자, 소문자, 모음, 자음, 숫자, 기호인지구분하고, 그결과를출력하는알고리즘을 pseudo code로작성하고, 이에대한 C 프로그램을작성하라. (ASCII 표를참조할것.) 3.2 2015년의 1월 ~ 12월달력을월별로출력하는알고리즘의 pseudo code를작성하라. 2015년 1월 1일은목요일이며, 윤년인가를확인하여, 이에따라정확한 2월출력이될수있게할것. 각달의달력에서는요일이표시되어야하며, 1 주일단위로줄바꿈이표시되어야한다. 이알고리즘을 C 프로그램으로작성하고, 주석문이포함된소스코드와함께그실행결과화면을캡쳐하여제출하라. 3-74
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 9 2 2 4 6 8 10 12 14 16 18 3.... 4. 5 6 7 8 9 9 18 27 36 45 54 63 72 81 3-75