본문 바로가기
언어/C

[C] 1차원 배열

by merona99 2018. 10. 2.
반응형

1차원 배열



배열 : '둘 이상의 변수를 모아 놓은 것'

   다수의 데이터를 저장하고 처리하는 경우에 유용


<배열의 기본적인 선언>


선언에 필요한 세가지

int 

배열을 이루는 요소(변수)의 자료형 

merona 

배열의 이름 

[7] 

배열의 길이 

=> "int형 변수 7개로 이뤄진 배열을 선언하되, 그 배열의 이름은 merona이다!"

* 7개의 int형 변수가 '나란히' 선언되어 있음



* 배열의 길이 정보상수

* 배열의 위치 정보를 명시하는 인덱스 값은 1이 아닌 0에서부터 시작



<배열의 초기화 방법>


(1)

초기화 리스트를 다 적어줌.


(2)

초기화 리스트가 선언되면 배열의 길이정보를 생략할 수o

컴파일러가 초기화 리스트의 수를 참조하여 길이정보를 채워줌.


(3)

뒤에 남은요소들은 0으로 채워짐.

1,2,0,0,0 식임.



<배열을 이용한 문자열 변수의 표현>

-char형 배열을 이용하면 문자열의 저장뿐만 아니라 문자열의 변경도 가능해짐.

-즉, 변수형태의 문자열 선언이 가능해짐.

-" "로 선언




'널(null)'문자

-char형 배열을 선언할 경우에 특수문자 '\0'이 자동으로 삽입이 됨.


ex) \0

char형 str의 배열의 문자열의 길이는 눈으로 보면 공백까지 포함해 13개 인것 같지만, 문자열의 끝에 \0이 자동으로 삽입되어 길이가 14가 됨.



'scanf' 함수를 이용한 문자열의 입력

= %s사용 ('printf'를 사용할 떄 서식문자%s와 같음)

-scanf 함수호출을 통해서 입력 받은 문자열의 끝에도 널 문자가 삽입되었음을 뜻 함.

 (다른 자료형을 입력받을 때도 항상 널문자가 삽입됨)



널 문자가 존재하면 문자열, 존재하지 않으면 문자열이 아님.


문자 배열

마지막에 널 문자가 없음.

따라서 문자배열



문자열

마지막에 널 문자가 있음.

따라서 문자열


*문자열의 판단여부에 있어서 선언방법은 중요하지X.

어떻게 선언이 되든 널 문자가 마지막에 존재하면 이는 C언어의 관점에서 문자열이 되는 것.



* str[8] = '\o';    =    str[8] = 0;

=> 널 문자의 아스키 코드 값은0


*scanf 함수가 데이터를 구분 짓는 기준이 공백임.

따라서 scanf 함수는 공백을 포함하는 문장을 입력 받기에는 적절하지 않음.




문제1. 한개의 단어 입력후 단어의 길이 출력.

//첨에 sizeof로 했다가 길이가 100이 나와서 이렇게 고쳤다..ㅋㅋㅋ



문제2. 영단어 입력후 역순으로 출력.

우선 while문에서 str의 길이를 num에다가 저장한다.

for문이 가장 핵심인데 반복횟수는 num의 1/2이다. 왜냐하면 한번에 역순된 배열문자가 str[0], str[num-i-1]에 저장되기 때문이다.

for문 구성을 보면 temp는 임시로 str의 기존값을 저장하는 용도고, str[i]는 역순된 문자열의 끝부터 저장, str[(num-i)-1]는 바뀐 str의 첫번째 부분부터 저장한다.

그리고 왜 -1을 해주냐 하면 null문자가 포함되어 있기때문에 null문자의 개수도 빼 준 것이다.

즉, i=0일때를 보자면 temp = str[0]; 으로 temp[0]에 m이 저장된다.

str[0] = str[(9 - 0) -1]; 이니까 str[0]에 str[8], 즉, '\0'이 저장된다.    //위 문제에서 str의 길이는 9임.    

str[(9 - 0) -1] = temp[0]; 에서 str[8]에 m이 저장된다.

즉, 한번의 반복str[0] = '\n'과 str[8] = m 두개의 역순된 값이 저장된다.

이렇게 입력한 단어의 길이의 반절만큼 반복하면 역순된 값이 나온다.


//이해하는데 힘들었다.




문제3. 영단어 입력후 아스키 코드의 값이 가장 큰 문자를 출력.

MAX랑 jht랑 비교해서 더 큰 수가 나오게 됨.

MAX초기값으로 0을주고 jht의문자들이랑 비교함.

반응형

'언어 > C' 카테고리의 다른 글

[C] 포인터와 배열(☆)  (0) 2018.10.09
[C] 포인터  (0) 2018.10.06
[C] 반복문 (C언어정석_5)  (0) 2018.10.01
[C] 도전프밍1  (0) 2018.09.30
[C] 매크로와 typedef (C언어정석_4)  (0) 2018.09.19

댓글