U E D R , A S I H C RSS

새싹교실/2017/꽃밭/0404

Difference between r1.18 and the current

@@ -1,23 +1,25 @@
[새싹교실/2017/꽃밭/0403|◀이전수업]▒▒▒▒▒[새싹교실/2017/꽃밭/0410|다음수업▶]
[[TableOfContents]]
= 수업 내용 =
== 무한 루프, break & continue ==
반복문을 쓰다 보면 무한히 반복하게 해야할 때가 있습니다.
무한 반복문은 이렇게 만들 수 있죠.

attachment:infinite_loop.png?
attachment:infinite_loop1.png?width=340&height=250
attachment:infinite_loop2.png?width=340&height=250

근데 프로그램을 종료하려면 언젠가는 반복문을 빠져나와야 하는데,
무한루프에서는 어떻게 빠져나오죠?
그 때 {{{{color:red}'''break'''}}}문을 이용하면 됩니다.
break를 만나면 바로 반복문 밖으로 빠져나오게 되지요.

attachment:break.png?
attachment:break.png?width=340&height=250

그런데 완전히 빠져나오고 싶지는 않고
뒷부분을 skip하고 싶을 때도 있죠.
그 때 사용하는 것이 {{{{color:red}'''continue'''}}}입니다.

attachment:continue.png?
attachment:continue.png?width=340&height=250

continue를 만나면 뒷 부분을 건너 뛰고 다시 처음부터 반복하게 됩니다.
그러나 사실 이 경우는 뒷부분이 항상 실행이 안 되기 때문에 있으나마나죠.
@@ -41,34 +43,127 @@
그러면 변수 100개를 일일이 선언하실 건가요? 너무 귀찮죠.
그 때 배열을 이용하면 100개라 할지라도 간편하게 선언할 수 있습니다.

attachment:array1.png?
attachment:array1.png?width=600&height=200

배열은 메모리상에서 이렇게 나타낼 수 있습니다.

attachment:array2.png?
attachment:array2.png?width=600&height=200

각각의 원소는 student[0], student[1], ...., student[99]로, 번호를 붙여서 부릅니다.
배열 원소는 항상 {{{{color:red}'''0'''}}}번부터 시작합니다. 꼭 기억하세요!
그렇다면 원소가 n개일 때, 가장 마지막 원소는 몇 번일까요?
0번부터 시작했으니 '''n-1'''번이 되겠죠.
그럼 i번 원소는 몇 번째 원소일까요?
0번부터 시작했으니 '''i+1'''번째입니다.

그렇다면 원소가 n개일 때,
마지막 원소는 '''n-1'''번입니다.
i번 원소는 '''i+1'''번째 원소이지요.

= 실습 1 =
퀴즈! int a[100]의 원소를 차례로 출력하려면 for문 안에 어떤 내용이 들어가야 할까요?
{{{
for ( ; ; ){
printf("%d ", a[i]);
}
}}}
 
 
 
= 실습 = 
attachment:loop_break_cnt.png?width=600&height=200
 
* 슈도 코드
{{{
for(무한){
if(양수면)
덧셈
else if(음수면)
다시 받기
else
프로그램 종료
}
}}}
= 과제 소개 =
여러분, 천천히 생각해보세요!! 여러분은 머리가 좋아서 충분히 여유를 가지고 설계하면 풀 수 있습니다~

attachment:HW_loop_adv.png?width=500&height=220
attachment:loop_break_cnt_adv.png?width=600&height=220

= 과제 제출 =
== 현지 ==
{{{
#include <stdio.h>

}}}
 
int main(void)
{
int max = 0;
int num;
int sum = 0;
for (;;)
{
 
printf("\n숫자를 입력하세요: ");
scanf_s("%d", &num);
if (num > 0)
{
 
sum = sum + num;
if (num > max)
{max = num;} 
 
} 
else if (num < 0)
{
 
printf("\n음수를 입력하셨습니다. \n다시 입력하세요");
continue;
 
}
else {
 
printf("\n프로그램을 종료합니다.");
break;
 
}
 
}
printf("입력한 숫자의 합:%d ",sum);
printf("가장 큰 수는 %d입니다.\n ",max);
system("pause");
return 0;
}
== 혜민 ==
{{{
/*
* biggest 초기화
*/

#include<stdio.h>
int main() {
int n,sum=0,biggest;
for ( ; ; ) {
printf("숫자를 입력하세요 : ");
scanf("%d", &n);
if (n > 0) {
sum = sum + n;
if (biggest < n) {
biggest = n;
}
}
else if (n < 0) {
 
printf("음수를 입력하셨어요. 다시 입력하세요.\n");
continue;
 
}
else {
printf("프로그램을 종료합니다.");
break;
}
 
}
printf("입력한 숫자의 합 : %d",sum);
printf("가장 큰 수는 %d입니다.", biggest);
return 0;
}
}}}
== 유진 ==
{{{
@@ -84,8 +179,12 @@

== 현지 ==

눈으로 보기엔 쉬워보였는데 막상 해보려니 어려웠다.
그래도 이번 기회를 통해 무한루프와 배열을 어떻게 사용하는 것인지 알게 되었고 프로그래밍 수업시간에도 이번에 배운내용을 통해 쉽게 과제를 해결할 수 있었다.
== 혜민 ==
아직 잘 모르는 부분이 많다. 수학처럼 생각해야할 것이 많아서 시간이 오래걸리지만 작은 것 하나라도 알아갈 수 있어서 좋고 처음부터 너무 잘하려고 하지 않고 차근차근 배워야겠다. 숙제도 어렵지만 언니가 피드백을 잘해주셔서 도움이 많이 될 것 같다.

------------
[새싹교실/2017/꽃밭/0403|◀이전수업]▒▒▒▒▒[새싹교실/2017/꽃밭/0410|다음수업▶]
[새싹교실/2017] [새싹교실/2017/꽃밭]



1. 수업 내용

1.1. 무한 루프, break & continue

반복문을 쓰다 보면 무한히 반복하게 해야할 때가 있습니다.
무한 반복문은 이렇게 만들 수 있죠.

infinite_loop1.png
[PNG image (8.38 KB)]

infinite_loop2.png
[PNG image (9.49 KB)]


근데 프로그램을 종료하려면 언젠가는 반복문을 빠져나와야 하는데,
무한루프에서는 어떻게 빠져나오죠?
그 때 break문을 이용하면 됩니다.
break를 만나면 바로 반복문 밖으로 빠져나오게 되지요.

break.png
[PNG image (17.51 KB)]


그런데 완전히 빠져나오고 싶지는 않고
뒷부분을 skip하고 싶을 때도 있죠.
그 때 사용하는 것이 continue입니다.

continue.png
[PNG image (17.89 KB)]


continue를 만나면 뒷 부분을 건너 뛰고 다시 처음부터 반복하게 됩니다.
그러나 사실 이 경우는 뒷부분이 항상 실행이 안 되기 때문에 있으나마나죠.
그래서 break와 continue는 조건문과 같이 쓰입니다.
      while(true){
         code1...
         code2...
         if( 조건1 ) break;    // 조건1을 만족하면 while문을 빠져나와라
         code3...
         code4...
         if( 조건2 ) continue; // 조건2를 만족하면 code5를 실행하지 말고 다시 code1부터 실행해라
         code5...
     }

1.2. 배열

배열은 변수 여러 개를 모은 것입니다.

성적 처리 프로그램을 만든다고 합시다.
학생 100명의 성적을 저장해야 해요.
그러면 변수 100개를 일일이 선언하실 건가요? 너무 귀찮죠.
그 때 배열을 이용하면 100개라 할지라도 간편하게 선언할 수 있습니다.

array1.png
[PNG image (12.27 KB)]


배열은 메모리상에서 이렇게 나타낼 수 있습니다.

array2.png
[PNG image (12.79 KB)]


각각의 원소는 student0, student1, ...., student99로, 번호를 붙여서 부릅니다.
배열 원소는 항상 0번부터 시작합니다. 꼭 기억하세요!

그렇다면 원소가 n개일 때,
마지막 원소는 n-1번입니다.
i번 원소는 i+1번째 원소이지요.

퀴즈! int a100의 원소를 차례로 출력하려면 for문 안에 어떤 내용이 들어가야 할까요?
   for (      ;       ;      ){
	printf("%d ", a[i]);
   }



2. 실습

loop_break_cnt.png
[PNG image (61.22 KB)]


  • 슈도 코드

    for(무한){
         if(양수면)
           덧셈
         else if(음수면)
           다시 받기
         else
            프로그램 종료
     }

3. 과제 소개

여러분, 천천히 생각해보세요!! 여러분은 머리가 좋아서 충분히 여유를 가지고 설계하면 풀 수 있습니다~

loop_break_cnt_adv.png
[PNG image (59.72 KB)]


4. 과제 제출

4.1. 현지

#include <stdio.h>


int main(void)
{
int max = 0;
int num;
int sum = 0;
for (;;)
{

printf("\n숫자를 입력하세요: ");
scanf_s("%d", &num);
if (num > 0)
{

sum = sum + num;
if (num > max)
{max = num;}

}
else if (num < 0)
{

printf("\n음수를 입력하셨습니다. \n다시 입력하세요");
continue;

}
else {

printf("\n프로그램을 종료합니다.");
break;

}

}
printf("입력한 숫자의 합:%d ",sum);
printf("가장 큰 수는 %d입니다.\n ",max);
system("pause");
return 0;
}

4.2. 혜민

/*
 * biggest 초기화
*/

#include<stdio.h>
int main() {
	int n,sum=0,biggest;
	for ( ; ; ) {
		printf("숫자를 입력하세요 : ");
		scanf("%d", &n);
		if (n > 0) {
			sum = sum + n;
			if (biggest < n) {
				biggest = n;
			}
			
		}
		else if (n < 0) {

			printf("음수를 입력하셨어요. 다시 입력하세요.\n");
			continue;

		}
		else {
			printf("프로그램을 종료합니다.");
			break;
		}
		

	}
	printf("입력한 숫자의 합 : %d",sum);
	printf("가장 큰 수는 %d입니다.", biggest);
	return 0;
}

4.3. 유진


5. 후기

5.1. 물주는사람

실습 난이도가 조금 높았나 싶기도 하지만, 난이도가 문제가 아니라
제가 좀 더 명료하고 쉽게 가르쳐줘야겠다는 생각이 들었습니당
새싹들의 무한한 잠재력을 꺼내주고 싶어요!

5.2. 유진


5.3. 현지


눈으로 보기엔 쉬워보였는데 막상 해보려니 어려웠다.
그래도 이번 기회를 통해 무한루프와 배열을 어떻게 사용하는 것인지 알게 되었고 프로그래밍 수업시간에도 이번에 배운내용을 통해 쉽게 과제를 해결할 수 있었다.

5.4. 혜민

아직 잘 모르는 부분이 많다. 수학처럼 생각해야할 것이 많아서 시간이 오래걸리지만 작은 것 하나라도 알아갈 수 있어서 좋고 처음부터 너무 잘하려고 하지 않고 차근차근 배워야겠다. 숙제도 어렵지만 언니가 피드백을 잘해주셔서 도움이 많이 될 것 같다.



Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:30:05
Processing time 0.0350 sec