You are on page 1of 19

Review 배열

1. 배열 원소의 번호 혹은 위치를 무엇이라고 하는가 ? _____________

2. n 개의 원소를 가지는 배열의 경우 , 첫 번째 인덱스의 번호는 무엇인가 ?

___________

3. n 개의 원소를 가지는 배열의 경우 , 마지막 인덱스의 번호는 무엇인가 ?

____________

4. 배열의 초기화에서 초기값의 개수가 배열 원소의 개수보다 적은 경우에는 어떻게

되는가 ? 반대로 많은 경우에는 어떻게 되는가 ?

____________________________________

5. 배열의 크기를 주지 않고 초기값의 개수로 배열의 크기를 결정할 수 있는가 ?

6. 배열의 크기를 모르는 상태에서 자동적으로 계산하려면 어떻게 하는가 ?

1
Review 배열

▶ 배열의 선언

• 배열은 배열명과 변수의 개수 , 변수의 자료형으로 선언한다 .

• 배열을 선언하면 변수의 개수만큼 연속된 기억공간을 할당한다


.
Review 배열
▶ 배열의 사용

• 배열의 기억공간을 사용할 때는 각 기억공간이 배열에서 차지하는 위치


를 사용한다 .

• 배열을 구성하는 기억공간들을 배열의 요소 (element) 라고 하며 각 요


소가 배열에서 차지하는 위치를 첨자 (index) 라고 한다 .

• 배열의 첨자는 0 부터 시작한다 .


배열 Q&A

Q. 배열 원소들의 개수보다 더 큰 인덱스를 사용하면 어떤 일이 발생


?
A. C 컴파일러는 이 오류를 잡아내지 못함 .
컴파일도 되고 실행도 되지만 원하는 결과가 나오지 않음
또 실행 도중 민감한 데이터를 건드리면 프로그램이 다운되거나
컴퓨터가 다운됨 .

Q. 만약 배열을 초기화하지 않고 사용하면 어떻게 되는가 ?


A. 이 오류도 컴파일러가 잡아내지 못한다 . 함수 안에서 선언된 배
열이면 쓰레기값들을 갖게 되므로 항상 초기화하여 사용한다 .

4
실습 Review

7주1강
6주2강

5
7 주 1 강 배열 [ 실습 1]
배열의 초기화
#include <stdio.h>

int main()
{
int aa[4] = {100, 200, 300, 400};
int bb[] = {100, 200, 300, 400};
int cc[4] = {100, 200};
int dd[4] = {0};
int i;

for (i=0 ; i<=3 ; i++)


printf("aa[%d]==>%d\t", i, aa[i] );
printf("\n");

for (i=0 ; i<=3 ; i++)


printf("bb[%d]==>%d\t", i, bb[i] );
printf("\n");

for (i=0 ; i<=3 ; i++)


printf("cc[%d]==>%d\t", i, cc[i] );
printf("\n");
6
for (i=0 ; i<=3 ; i++)
7 주 1 강 배열 [ 실습 2]
배열과 반복문

#include <stdio.h>

int main()
{
int su[4];
int i, sum=0, product=1;

for(i=0; i<4; i++)


{
printf("%d 번째 숫자를 입력하세요 :", i+1);
scanf("%d", &su[i]);
sum+=su[i];
product*=su[i];
}
printf(" 합계 ==>%d\n", sum);
printf(" 곱셈 ==>%d\n", product);
7
7 주 1 강 배열 [ 실습 3]
배열 원소의 개수 계산 (grade)

1 2 3 4 5 6
grade[0]grade[1]grade[2]grade[3]grade[4]grade[5]

(grade[0])
#include <stdio.h>

int main()
{
int grade[] = { 1, 2, 3, 4, 5, 6 };
int i, size;

size = sizeof(grade)/sizeof(grade[0]); // 배열요소의 개수 계산

for(i = 0; i < size ; i++)


printf("%d ", grade[i]);

printf("\n");

8
return 0;
7 주 1 강 배열 [ 실습 4]
문자열 배열의 문자 역순 출력

#include <stdio.h>

int main()
{
char ss[5] = "abcd";
char tt[5];
int i;

for(i=0 ; i<4 ; i++) // 역순으로 바꾸는 루프


{
tt[i] = ss[3-i];
}
tt[4] = '\0';

printf(" 거꾸로출력한결과 ==> %s \n", tt);


}

9
7 주 1 강 배열 [ 실습 5]
가장 큰 배열 원소 값 찾기

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

int main() int main()


{ {
double su[5], max; double su[5], max;
int i; int i;

printf(" 다섯 개의 숫자를 입력하세요 :"); printf(" 다섯 개의 숫자를 입력하세요 :");


scanf("%lf", &su[0]);
for(i=0; i<5; i++) // 정수 입력 루프 max=su[0]; // 배열 첫번째 요소 가장 큰값이라 가정
scanf("%lf", &su[i]);
for(i=1; i<5; i++) // 정수 입력 , 큰 값 비교 루프
max=su[0]; /* 배열 첫번째 요소 가장 큰값이라 {
가정 */ scanf("%lf", &su[i]);
if(su[i]>max) max=su[i];
for(i=1; i<5; i++) // 두번째부터 큰값비교루프 }
if(su[i]>max) max=su[i];
printf(" 가장 큰 값은 %lf 입니다 .\n", max);
printf(" 가장 큰 값은 %lf 입니다 .\n", max); 10
7 주 1 강 배열 [ 실습 6]
배열과 반복문 응용

#include <stdio.h>
#define STUDENTS 5

int main(void)
{
int grade[STUDENTS] = { 30, 20, 10, 40, 50 }; // 정수 배열
int i, s;

for(i=0; i<STUDENTS; i++) // 정수 배열의 크기만큼 반복


{
printf(" 번호 %d:",i);
for(s=0; s<grade[i]; s++) // 원소의 값만큼 반복
printf("*");
printf("\n");
}

return 0; 11
7 주 1 강 배열 [ 실습 7]
배열 응용 #include <stdio.h>
#define MONTHS 12

int main(void)
{
int thisyear[MONTHS]; // 올해 월별 강수량
int lastyear[MONTHS]={20,70,30,29,90,120, // 작년 월별 강수량
200,240,110,70,50,85};
int i; // 반복 제어 변수
int sum=0; // 강수량 총합
int maxmonth=0; // 강수량 최대인 달
int max_rain=0; // 강수량 최대인 달의 강수량

for(i=0; i<MONTHS; i++) // 강수량 입력 및 총합 계산


{
printf("%d 월 강우량 :", i+1);
scanf("%d", &thisyear[i]);
sum+=thisyear[i];
}

for(i=0; i<MONTHS; i++)// 강수량 최대인 달


{
if(thisyear[i]>max_rain)
12
{
7 주 1 강 배열 [ 실습 7]
배열 응용
printf("\n********* 올해 강우량 통계 ********\n");
printf(" 올해의 평균 강우량 :%d\n",sum/MONTHS);
printf(" 올해 강우량이 가장 많은 달 :%d 월 \n", maxmonth+1);
printf(" 올해의 월별 강우량 :\n");

for(i=0; i<MONTHS; i++)// 올해 강수량 출력


{
printf("%d\t", thisyear[i]);
if((i+1)%5==0) printf("\n");
}
printf("\n\n********* 작년과의 비교 ***********\n");
printf(" 올해의 월별 강우량 :\n");
for(i=0; i<MONTHS; i++)// 작년 강수량 출력
{
printf("%d\t", lastyear[i]);
if((i+1)%5==0) printf("\n");
}

printf("\n 작년보다 강우량이 많은 달 :\n");


for(i=0; i<MONTHS; i++) // 작년 강수량과 달별 비교
if(thisyear[i]>lastyear[i])
13
printf("%d 월 \n", i+1);
6 주 2 강 함수 2 [ 실습 1]
사칙 연산 수행
#include <stdio.h>

int calc(int v1, int v2, int op)


{
int result;

switch (op)
{
case 1 : result = v1 + v2; break;
case 2 : result = v1 - v2; break;
case 3 : result = v1 * v2; break;
case 4 : result = v1 / v2; break;
}

return result;
}

int main()
{
int res;
int oper, a, b;

printf(" 계산 입력 (1:+, 2:-, 3:*, 4:/) : ");


scanf("%d", &oper);

printf(" 계산할 두 숫자를 입력 : ");


scanf("%d %d", &a, &b); 14
6 주 2 강 함수 2 [ 실습 2]
구구단 출력
#include <stdio.h>

void gugu(int dan);

int main()
{
int input;

printf(" 출력하고 싶은 단을 입력 : ");


scanf("%d", &input);

gugu(input);
}

void gugu(int dan)


{
int i;
15
6 주 2 강 함수 2 [ 실습 3]
정사각형 출력
#include <stdio.h>

void draw_rect(int side)


{
int i, j;
for (i=0; i<side; i++)
{
for(j=0; j<side; j++)
printf("*");
printf("\n");
}
}

int main()
{
int num;

printf(" 한줄에 * 이 몇개인 정사각형을 만드시겠습니까 ?");


scanf("%d", &num); 16
6 주 2 강 함수 2 [ 실습 4]
#include <stdio.h>

int even(int n);


int absolute(int n);
int sign(int n);

int main() int even(int n)


{ {
int su;
if (n%2==0) return 1;
printf(" 정수를 입력하시오 :");
scanf("%d", &su); return 0;
}
if(even(su))
printf(" 주어진 정수는 짝수입니다 .\n"); int absolute(int n)
else
{
printf(" 주어진 정수는 홀수입니다 .\n");
if(n<0) return -n;
printf(" 주어진 정수의 절대값은 %d 입니다 .\n", absolute(su));
return n;
switch(sign(su)) }
{
case -1:
int sign(int n)
printf(" 주어진 정수는 음수입니다 .\n");
break;
{
case 1: if(n==0)
printf(" 주어진 정수는 양수입니다 .\n"); return 0;
break; else if(n<0) 17
case 0:
6 주 2 강 함수 2 [ 실습 5]
 팩토리얼 계산
9!=1*2*3*4*5*6*7*8*9
#include <stdio.h>

int factorial(int n)
{
int i;
unsigned int fac=1;

for(i=1; i<=n; i++)


fac*=i;

printf("%u\n", fac);

return fac;
}

int main()
{
int su;

printf(" 구하고자 하는 팩토리얼 수를 입력 :"); 18


scanf("%d", &su);
6 주 2 강 함수 2 [ 실습 6]
 2 부터 100 사이의 모든 소수를 출력
#include <stdio.h>

int prime_check(int n)
{
int i, j;
int sosu; // 소수인지 아닌지를 판별

for(i=2; i<=n; i++) //2 부터 100 사이 수


{
sosu=1;// 해당 수가 소수라고 가정
for(j=2; j<=i-1; j++) //2 부터 ( 해당수 -1) 사이의 수 하나하나로 나누어 본다
.
{
if(i%j==0) // 소수가 아님
sosu=0;
}
if(sosu) // 소수이면 출력
printf("%d\n", i);
}
return 0;
}

int main() 19

You might also like