기본 문법 활용하기 - 1

2022. 8. 31. 15:09정처기(필기)/프로그래밍언어활용

(1) 진수

- 특정 개수의 숫자만을 이용하여 수를 나타내는 수 체계이다.

- 10진수 이하일 때는 0~9를 사용하지만, 10진수 초과할 경우는 영어 알파벳을 이용한다.

 

1. 진수 변환

[1] : 10진수를 n진수로 변환

- 10진수 값을 몫이 n보다 작을 때까지 n으로 나누고 나머지 값들을 표시한 후에 나머지 값들을 읽는다. 

 

[2] : n진수를 10진수로 변환

- n진수에서 마지막 자리는 자리 숫자에 자리값인 n0을 곱하고, 마지막에서 두번째 자리는 자리 숫자에 자리값인 n1을 곱하고, 마지막에서 세 번째 자리는 자리 숫자에 자릿값인 n2를 곱하고, .....

 

 

(2) 아스키 코드

- 미국 ANSI에서 표준화한 정보교환용 부호체계이다.

- 영문 키보드로 입력할 수 있는 모든 기호가 할당된 기본적인 부호체계이다. 

 

  • 0 -> NULL
  • 32 -> ' '(Space)
  • 48 -> 0
  • 49 -> 1
  • 65 -> A
  • 66 -> B
  • 67 -> C
  • 68 -> D
  • 97 -> a
  • 98 -> b
  • 99 -> c
  • 100 -> d

 

(3) 데이터 타입

- 데이터 타입은 프로그래밍 언어에서 실수치, 정수 자료형과 같은 여러 종류의 데이터를 식별하는 형태이다.

- 메모리 공간을 효율적으로 사용하고 2진수 데이터를 다양한 형태로 사용하기 위해 존재한다.

 

1. 데이터 타입 유형

유형 설명
불린
(Boolean)
조건이 참인지 거짓인지 판단하고자 할 때 사용하는 데이터 타입
C언어에서는 미지원
자바에서는 참일 경우 true, 거짓일 경우 false로 표현
파이썬에서는 참일 경우 True, 거짓일 경우 False로 표현함
문자
(Character)
문자 하나를 저장하고자 할 때 사용하는 데이터 타입
메모리에 저장은 숫자로 저장됨
문자열 타입
(String)
나열된 여러 개의 문자를 저장하고자 할 대 사용하는 타입
C언어는 char 배열을 사용하여 구현
정수 타입
(Integer)
정숫값을 저장하고자 할 때 사용하는 데이터 타입
부동 소수점
(Floating Point)
소수점은 포함하는 실숫값을 저장하고자 할 때 사용하는 데이터 타입

 

(4) 기본 저장 공간

 

1. 변수

[1] : 일반 변수

- 변수는 저장하고자 하는 어떤 값이 있을 때, 그 값을 주기억장치에 기억하기 위한 공간이다.

- 자료형과 변수명을 작성하여 변수를 생성하는 과정이다.

- C, 자바에서는 변수 선언을 하고, 파이썬에서는 별도로 변수 선언을 하지 않는다.

 

[2] : static 변수

- static 변수는 프로그램이 시작될 때 변수를 초기화하고, 프로그램이 종료되기 전까지 메모리가 유지되는 변수이다.

- 변수를 static으로 생성하면 처음에 한 번만 초기화가 되며, 함수에 의해서 변수 선언 부분이 여러 번 호출되더라도 초기화되지 않는다. 

 

 

2. 배열

- 배열은 같은 타입의 변수들로 이루어진 집합이다.

 

[1] : C언어에서 배열 선언

- 배열 요소 개수에 정의된 숫자만큼 같은 타입의 데이터 공간이 할당된다.

- 초깃값을 선언하지 않응ㄹ 경우 쓰레깃값이 저장된다.

- 배열 요소 개수보다 적은 개수만큼 초기화할 경우 초깃값이 명시되지 않은 값들은 자동으로 0으로 초기화된다.

 

 

[2] : 자바에서 배열 선언

- 배열 요소 개수에 정의된 숫자만큼 같은 타입의 데이터 공간이 선언된다.

- 배열 요소 개수를 명시하지 않고 초깃값이 정의되어 있을 경우 초깃값 개수만큼 공간이 선언된다.

- 초깃값을 선언하지 않을 경우 정수일 때는 0, 실수일 때는 0.0, 문자열일 때는 NULL이 저장되어 있다.

- 불린, 문자, 정수, 실수 등을 배열로 선언할 때 사용한다.

- 자바에서 배열의 크기를 구할 때는 length 속성을 사용한다.

 

 

[3] : 2차원 배열 선언

 

① C언어의 2차원 배열 선언

- (행의 개수) * (열의 개수)에 정의된 숫자만큼 같은 타입의 데이터 공간이 할당된다.

- 초깃값을 선언하지 않으면 쓰레깃값이 정의된다.

- (행의 개수) * (열의 개수)보다 적은 개수만큼 초기화할 경우 초깃값이 명시되지 않은 값들은 0으로 초기화된다. 

 

 

② 자바의 2차원 배열 선언

- 배열 요소 개수에 정의된 숫자만큼 같은 타입의 데이터 공간이 선언된다.

- 배열 요소 개수를 명시하지 않고 초깃값이 정의되어 있을 경우 초깃값 개수만큼 공간이 선언된다.

- 초깃값을 선언하지 않을 경우 정수일 때는 0, 실수일 때는 0.0, 문자열일 때는 NULL이 저장되어 있다.

- 불린, 문자, 정수, 실수 등을 배열로 선언할 때 사용한다.

- 자바에서 배열의 크기를 구할 때는 length 속성을 사용한다. 

 

 

3. 포인터

- 포인터는 변수의 주솟값을 저장하는 공간이다. 

ex)

int a = 10;

int *b = &a;

 

선언법

데이터_타입* 포인터_변수명 = &변수명;

-> 데이터 타입 뒤에 *를 붙이면 주소를 저장하는 포인터 변수라는 의미이고, 일반 변수명에 &를 붙이면 해당 변수명의 주솟값이다.

-> int형 변수를 가리키는 포인터 변수 선언 시 int*를, char형 변수를 가리키는 포인터 변수 선언 시 char*를, float형 변수를 가리키는 포인터 변수 선언 시 float*를 사용해야 한다.

- 주소에 해당하는 값을 가리킬 때에는 *를 사용한다.

 

ex)

int a = 10;

int* b = &a;

printf("%d %d", a, *b);    //b가 가리키는(*) 값은 a이므로 *b와 a는 같음

 

 

4. 배열과 포인터

[1] : 1차원 배열과 1차원 포인터

- 1차원 배열에서 배열명만 단독으로 사용할 경우 1차원 포인터와 동일하다.

- 1차원 배열일 때 배열명[요소] 형태, *(배열명+요소), 1차원 포인터일때 포인터[요소] 형태, *(포인터+요소)일 경우 값을 가리킨다.

- 데이터_타입 배열명[요소];일때 다음 코드는 동일하다.

 

배열의 주소 : 배열명 == &배열명[0];

배열의 0번지 값 : 배열명[0] == *배열명;

 

[2] : 2차원 배열과 1차원 포인터

- 2차원 배열에서 배열명만 단독으로 사용할 경우 2차원 포인터와 동일하다.

- 2차원 배열일 때 배열명[요소] 형태, *(배열명+요소)는 1차원 포인터와 동일하고, 1차원 포인터에 대해 *과 [ ]을 이용해야 값을 가리킬 수 있다. 

#include <stdio.h>
void main() {
	int a[3][2] = {1,2,3,4,5,6};
    int *p = a[1];
    
    printf("%d %d %d\n", *a[0], *a[1], *a[2]);		//1 3 5
    
    //a 형태는 2차원 포인터와 같으므로 *을 두 번 붙여야 값을 가리킬 수 있음
    printf("%d %d %d\n", **a, **(a+1), **(a+2));	//1 3 5
    
    
    printf("%d %d \n", *p, *(p+1));			//3   4
    
    printf("%d %d\n", p[0], [1]);			//3   4
    

}

 

[3] : 2차원 배열과 포인터 배열

#include <stdio.h>
void main() {
	int a[3][2] = {1, 2, 3, 4, 5, 6};
    int *p[3] = {a[2], a[0], a[1]};
    
    printf("%d %d %d\n", a[0][0], a[1][0], a[2][0]);	//1    3    5
    
    printf("%d %d %d\n", *a[0], *a[1], *a[2]);			//1    3    5
    
    printf("%d %d %d\n", p[1][0], p[2][0], p[0][0]);	//1    3    5
    
    printf("%d %d %d\n", *p[1], *p[2], *p[0]);			//1    3    5
}

 

[4] : 2차원 배열과 2차원 포인터

- 2차원 배열에서 배열명만 단독으로 사용할 경우 2차원 포인터와 동일하다. 

- 2차원 배열일 때 배열명[요소],[요소], *배열명[요소], **(배열명+요소)일 경우 값을 가리킨다.

 

#include <stdio.h>
void main() {
	int a[3][2] = {1, 2, 3, 4, 5, 6};
    int (*p)[2] = a;
    
    int (*q)[2] = a+1;
    
    printf("%d %d %d\n", a[0][0], a[0][1], a[1][0]);	//1  2  3
    
    printf("%d %d %d\n", p[0][0], p[0][1], p[1][0]); 	//1  2  3
    
    printf("%d %d %d\n", q[0][0], q[0][1], q[1][0]);	//3  4  5

}

 

[5] : 1차원 배열과 문자열

- 문자열을 초기화할 때 마지막에 NULL 문자가 삽입되므로 초기화하는 글자수보다 1 이상 큰 값으로 배열을 선언한다. 

- printf 함수에 %s를 이용하여 문자열을 읽고 출력하는데, printf 파라미터로 문자를 읽기 시작할 시작 주소를 알려주면 시작 주소부터 NULL 직전 값까지 읽어서 출력한다.

 

#include <stdio.h>
void main() {
	char a[7] = "Hello";
    
    printf("%s\n", a);	//Hello
    
    printf("%s\n", a+1);	//ello
    
    a[4] = NULL;
    printf("%s\n", a+1);	//ell

}

 

[6] : 2차원 배열의 문자열

- 문자열을 여러 개 정의할 때 2차원 배열을 사용한다.

- printf 함수에서 %s를 이용하여 문자열을 읽고 출력하는데, printf 파라미터로 문자를 읽기 시작할 시작 주소를 알려주면 시작 주소부터 NULL 직전값까지 읽어서 출력한다. 

#include <stdio.h>
void main() {
	char a[2][8] = {"Hello", "Jonny"};
    
    printf("%s\n", a[0]);	//Hello
    
    printf("%s\n", a[1]);	//Jonny
    
    a[0][4] = NULL;
    
    printf("%s\n", a[0]+2);		//ll
    
    printf("%s\n", a[1]+3);		//nny

}