티스토리 뷰

반응형

개발자의 C언어 독학 기초 # 배열의 기초

배열은 선언된 변수 타입의 집합이라고 할 수 있다.

즉 int로 배열의 type을 선언하면 int 형의 값들만 가지게 된다.

 

변수의 선언은 다음과 같이 선언하지만

int a = 0; //(변수 type) (변수 이름);

배열은 다음과 같이 선언된다.

int a[5] = {1,2,3,4,5}; //(배열의 type)(배열의 이름)[원소개수];

이와같이 선언되면

a[0]는 1, a[1]는 2,,, a[4]는 5를 가지게 된다.

 

배열의 선언과 초기화는 다음과 같이 한다.

원소의자료형 배열이름[크기];
원소의자료형 배열이름[크기] = {원소값,원소값,원소값};

​만약 배열을 선언하고 초기화하지 않으면 임의의 쓰레값(알수 없는 임의의 값)이 들어가 있게 된다.

모든 변수의 사용에 앞서 초기화를 반드시 해줘야 한다.

만약 정수형으로 선언하고 0으로 초기화 할때 간단한 방법은

int a[10] = {0,};

이와같이 하면 10개의 배열 원소의 값이 0으로 초기화 된다.

 

또는 초기화할때 원소를값을 채워넣게 되면 배열의 크기를 넣지 않아도 컴파일러가 알아서 크기를 할당하게 된다.

int a[ ] = {0,1,2,3,4};

이렇게 한 경우 a는 자동으로 4개의 배열크기를 가지게 된다.

 

 

이전 for 루프 강의에서 사용된 소스코드를 배열로 사용하는 형태로 바꾸어 봤다.

https://cflab2017.tistory.com/8?category=770291

 

개발자의 C언어 독학 기초 # 루프 for 사용법

개발자의 C언어 독학 기초 # 루프 for 사용법 이번 기초 강의는 C언어의 문법중에 기초 명령중 루프 명령중 for에 대해 설명한다. ​ for는 반복이 필요한 경우에 사용되는 명령이다. 아래와 같이 반

cflab2017.tistory.com

숫자를 랜덤으로 생성하던 함수를 제거하고 배열로 교체하면 아래와 같이 된다.

우선 기초 단계로 1차원 배열을 선언하고 그 값을 가져와서 계산에 사용하는 형태이다.

실행 결과는 동일하다.

배열 사용의 주의점은

첫번째, 배열의 사이즈는 고정되어야 한다. (int a[10])

이유는 컴파일러가 메모리를 할당해야 하기 때문이다.

고정하지 않는다면 컴파일러가 에러를 표시 한다.

두번째, 배열에 값을 넣을때 사이즈를 넘지 않도록 해야 한다.

넘게 된다면 알수없는 메모리 영엑에 값이 쓰여서 예측 불가능한 오동작이 발생하게 된다.

[강의 소스코드]

#include <stdio.h>
#include <time.h> 
#include <windows.h>

void main(void)
{
	int num1, num2, result, sum;
	int score;
	system("chcp 65001"); //gcc 한글 깨짐
	system("cls"); //화면지움
	
	int arr1[10] = {1,2,3,4,5,6,7,8,9,10};
	int arr2[10] = {10,20,30,40,50,60,70,80,90,100};
		
	score = 0;
	for(int cnt=0; cnt<10; cnt++)
	{
		num1 = arr1[cnt];
		num2 = arr2[cnt];
		
		sum = num1+ num2; //답을 구한다.

	//문제를 출제한다.
		printf("\n %02d번째 문제 %d + %d = ",(cnt+1), num1, num2);
		
	//답을 입력받는다.
		scanf("%d", &result);

	//결과를 표시한다.
		if(sum == result)
		{
			printf("       정답입니다.\n");
			score += 10;
		}else{
			printf("       오답입니다. 정답은 %d 입니다.\n", sum);
		}
	}
	printf("-------------------------------------\n");
	printf(" 100점 만점에 %d입니다.\n",score);
	printf("-------------------------------------\n");
	
	system("pause");	
	return;
}
반응형