본문 바로가기

코린이

Day13 본문

C언어/C언어 기본문법

Day13

winsome99 2022. 11. 16. 01:46
반응형

 

배열

오늘 배울 것은 배열이다. 배열은 일정한 간격을 두고 붙여놓은 것으로 특정 자료형을 가진 변수를 여러 개 선언하는 개념이다. 배열을 선언하는 방법은 자료형 배열명 [공간의 개수];으로 선언해 준다.

배열에는 각각의 공간을 나타내주는 숫자들이 있는데 이를 index(인덱스)라고 부른다.

인덱스는 0~ (선언한 공간의 개수 -1)까지 갖고 있다. 그 이유는 0부터 시작하기 때문이다!

int arr[n-1]까지의 공간의 개수가 있다. 그리고 배열을 사용할 때는 반복문을 적절하게 사용해 줘야 한다.

배열을 선언하면서 초기화를 진행할 수 있는데 이때는 int arr[5] ={3,1,4,6,8}; 이러한 형식으로 초기화 값을 정해줄 수 있다. int arr[5] = {0, }; 형식으로 하면 모든 공간을 0으로 초기화 할수 있다.

 

#include<stdio.h>

int main(){

    int arr[10];
	
	arr[0] = 10;
	arr[9] = 20;
	printf("출력: %d %d", arr[0],arr[9]);

    return 0;
}
 

출력하면 값은 10, 20이 나온다.

 

#include<stdio.h>

int main(){

    int arr[10];
    
    printf("입력: ");
	scanf("%d %d %d %d %d %d %d %d %d %d", &arr[0], &arr[1], &arr[2], &arr[3], &arr[4], &arr[5], &arr[6], &arr[7], &arr[8], & arr[9]);
	printf("출력: %d %d %d %d %d %d %d %d %d %d",arr[0], arr[1], arr[2], arr[3],  arr[4],  arr[5],  arr[6],  arr[7],  arr[8],  arr[9]);

    return 0;
}
 

10개의 배열을 나열한 코드로 아래와 같이 정수 10개를 출력해준다.

 

#include<stdio.h>

int main(){

    int arr[10] = {0,1,2,3,4,5,6,7,8,9};
	int j = 0;
	printf("입력: ");
	
	for (int i = 0; i < 10; i++){
		scanf("%d", &arr[i]);
	}
	printf("출력: \n");
	for (int i = 0; i < 10; i++)  {	
		printf("arr[%d]:%d\n", j++, arr[i]);
	}
    return 0;
}
 

이번에는 좀 더 간편하게 어디에 배열이 저장되었는지 보여주는 코드를 작성하였다.

 

 
 
#include<stdio.h>

int main(){

    10진수를 입력 받아서 2진수로 나타내주는 프로그램

	int su;
	int arr[10];

	printf("10진수 입력: ");
	

	for (int i = 0; su > 0 ; i++)
	{
		scanf("%d", &su);
		arr[i] = su % 2;
		if (su != 0)
		{

		}
	for (int i=0 ; i>=0; i--)
		printf("2진수 출력:%d \n", arr[i]);
	}
    return 0;
}
 

다음으로는 10진수를 2진수로 변환하는 방법으로 변환할 10진수를 몫이 0이 될때까지 2로 나누고 몫이 0이 됐다면 그동안의 나머지를 역순으로 읽어준다.

ex) 87을 2로 나누었을때

87

43...1

21...1

10...1

5...0

2...1

1...0

0...1

역순으로 읽으면 101 0111 = 64+16+4+2+1 = 87이 나온다.

#include<stdio.h>

int main(){

	int num = 0;
	int arr[32];
	int position = 0;


	printf("10진수 입력: ");
	scanf("%d",&num);

	printf("2진수 출력: ");
	while (1) {
		arr[position] = num % 2;
			num /= 2;
			position++;
	
			if (num ==0)
				break;
	}
	for (int i = position - 1; i >= 0; i--) {
		printf("%d",arr[i]);
	}
    return 0;
}
 

10진수를 입력 받아서 2진수로 나타내주는 프로그램으로 위에 87을 코드에 넣어보면

 

 
 
#include <stdio.h>

int main() {
    int binary[32] = {0, };
	int num = 0;
	int index= 0;

	printf("10진수 입력: ");
	scanf("%d",&num);
	
	while (num) { 
		binary[index++] = num % 2;
		num /= 2;
	}
	printf("2진수 출력:");
	for (int i = 4 * ((index -1) / 4 + 1) - 1; i >= 0; i--) {
		printf("%d", binary[i]);
		if (i % 4 == 0)//i ==4 || i==8 || i==12로 논리식으로도 할 수 있다
			printf(" ");
	}

    return 0;
}
 

다음과 같이 1010111로 출력되는 모습을 볼 수 있다.

 

위에 코드는 좀 더 응용을해서 만든 코드로 전에 했던 2진수를 구하는 코드보다 더 정확하게 만들어진코드이다.

우선 int binary[32] = {0,}에서 32로 할당한 이유는 int형이 4byte이고 bit로는 32bit이다 2진수의 자리로는 32자리까지 표현 가능해서 32로 할당해주었고 while문에서 num은 4면 2로 바뀌고 1의 경우에도 참으로 되면서 내부에는 0으로 바뀌고 0은 거짓이므로 바깥 쪽으로 탈출하는 조건을 가진다.

마지막으로 if문에서(i % 4== 0)는 i ==4 || i==8 || i==12로 논리식으로도 할 수 있다


배열 배우다가 머리 터지는 줄 알았다... 이해가 잘... ㅋㅋㅋㅋㅋ

 

반응형

'C언어 > C언어 기본문법' 카테고리의 다른 글

Day15  (0) 2022.11.22
Day14  (0) 2022.11.19
Day12  (0) 2022.11.14
Day11  (0) 2022.11.11
Day10  (0) 2022.11.10
Comments