Notice
Recent Posts
Recent Comments
Link
완숙의 블로그
배열 2(Array) 본문
배열 2
문자배열
char 형 문자를 여러 개 모아놓은 문자 집합
- 문자 : 작은 따옴표 ' '
- 문자열 : 큰 따옴표 " "
- '\0' (NULL) : 문자열 끝에 항상 문자코드 '\0'을 덧붙여야 함
char str[5] = {'A', 'B', 'C', 'D', '\0'}; // 옳은 선언
char str[4] = {'A', 'B', 'C', 'D'} // 잘못된 선언
char str[] = "ABCD"; // 옳은 선언
char str[5]; // 옳은 선언
str[0] = 'A';
str[1] = 'B';
...
str[4] = '\0';
- 이러한 특징 때문에 배열의 크기는 실제 문자열의 크기 + 1 로 선언해야 함
#include <stdio.h>
int main() {
int i;
char str[4] = {'A', 'B', 'C', '\0'};
char student[] = "john";
printf("문자열을 동시에 출력하는 경우\n");
printf("학생의 이름은 %s이다.\n\n", student);
printf("문자열을 한 글자씩 출력하는 경우\n");
for(i = 0; str[i] != '\0'; i++)
printf("%c\n", str[i]);
return 0;
}
// 프로세스가 시작되었습니다..
> 문자열을 동시에 출력하는 경우
학생의 이름은 john이다.
문자열을 한 글자씩 출력하는 경우
A
B
C
// 프로세스가 종료되었습니다.
반복문에서 문자열의 종료 조건
for (i = 0; str[i]; i++)
printf("%c\n", str[i]);
while(str[i])
... ...
- 문자열 끝에 제어 문자 NULL이 있기에 가능함
문자와 문자열의 차이
- \0이 추가된 형태로 존재함
배열과 주소
메모리가 할당된 변수에 접근하는 방법
- 변수명으로 접근
- 변수의 주소값으로 접근 : 변수 앞 &를 붙임
scanf
int a;
scanf("%d", &a);
- a라는 변수를 선언해라. 자료형은 int로
- 10을 입력했다면 a라는 변수를 선언한 주소에 넣어라
Problem
#include <stdio.h>
int main() {
int a[4] = {10, 20, 30, 40};
int i, aryLength;
aryLength = sizeof(a) / sizeof(int);
printf("배열의 원소값을 출력하면\n");
for (i = 0; i < aryLength; i++)
{
printf("a[%d] = %d\n", i, a[i]);
}
printf("배열 원소의 주소를 출력하면\n");
for(i = 0; i < aryLength; i++)
{
printf("&a[%d] = %p\n", i, &a[i]);
}
return 0;
}
// 프로세스가 시작되었습니다..
> 배열의 원소값을 출력하면
a[0] = 10
a[1] = 20
a[2] = 30
a[3] = 40
배열 원소의 주소를 출력하면
&a[0] = 0x7ffea13627a0
&a[1] = 0x7ffea13627a4
&a[2] = 0x7ffea13627a8
&a[3] = 0x7ffea13627ac
// 프로세스가 종료되었습니다.
배열과 주소와의 관계
- 배열은 동일한 자료형을 동시에 선언하는 것
- 메모리에 배열의 원소 개수만큼의 공간이 동시에 할당됨
배열명으로 주소를 표시하는 방법
Problem 1
#include <stdio.h>
int main() {
double b[] = {2.3, 3.0, 4.1, 5.5};
int a[4] = {10, 20, 30, 40};
int i, aryLenDouble, aryLenint;
aryLenDouble = sizeof(b) / sizeof(double);
aryLenint = sizeof(a) / sizeof(int);
printf("double형 배열 원소의 주소를 출력하면\n");
for (i = 0; i < aryLenDouble; i++)
{
printf("b + %d = %p\n",i, b+i);
}
printf("int형 배열 원소의 주소를 출력하면\n");
for (i = 0; i < aryLenint; i++)
{
printf("a + %d = %p\n",i, a+i);
}
return 0;
}
// 프로세스가 시작되었습니다..
> double형 배열 원소의 주소를 출력하면
b + 0 = 0x7fff85c209b0 // 8씩 증가
b + 1 = 0x7fff85c209b8
b + 2 = 0x7fff85c209c0
b + 3 = 0x7fff85c209c8
int형 배열 원소의 주소를 출력하면
a + 0 = 0x7fff85c209a0 // 4씩 증가
a + 1 = 0x7fff85c209a4
a + 2 = 0x7fff85c209a8
a + 3 = 0x7fff85c209ac
// 프로세스가 종료되었습니다.
Problem 2
#include <stdio.h>
int main() {
int i, j;
int s1[4][3], s2[4][3];
int x[4][3] = {{46, 79, 78},
{35, 57, 28},
{43, 68, 76},
{56, 78, 98}};
int y[4][3] = {{78,35,99},
{85, 82, 34},
{58, 69, 29},
{34, 59, 35}};
// 합
for (i = 0; i < 4; i++){
for (j = 0; j < 3; j++){
s1[i][j] = x[i][j] + y[i][j];
}
}
// 합 출력
printf("\n두 행렬 합\n");
printf("--------------\n");
for(i=0; i<4; i++){
for (j = 0; j<3; j++){
printf("%4d", s1[i][j]);
}
printf("\n");
}
printf("--------------\n");
// 차
for (i = 0; i < 4; i++){
for (j = 0; j < 3; j++){
s2[i][j] = x[i][j] - y[i][j];
}
}
// 차 출력
printf("\n두 행렬 차\n");
printf("--------------\n");
for(i=0; i<4; i++){
for (j = 0; j<3; j++){
printf("%4d", s2[i][j]);
}
printf("\n");
}
printf("--------------\n");
return 0;
}
// 프로세스가 시작되었습니다..
>
두 행렬 합
--------------
124 114 177
120 139 62
101 137 105
90 137 133
--------------
두 행렬 차
--------------
-32 44 -21
-50 -25 -6
-15 -1 47
22 19 63
--------------
// 프로세스가 종료되었습니다.
실습
Problem 1
#include <stdio.h>
int main() {
int check = 0;
char def[5] = {"1234"};
char pw[5];
do{
printf("비밀번호 4자리를 입력하시오!");
scanf("%s", &pw);
check = 0;
for (int i = 0; i<4; i++){
if (pw[i] != def[i]){
check = 1;
break;
}
}
if (check == 0)
printf("비밀번호가 일치합니다!");
}while(check);
return 0;
}
// 프로세스가 시작되었습니다..
> ev비밀번호 4자리를 입력하시오!ekv
비밀번호 4자리를 입력하시오!vrvr
비밀번호 4자리를 입력하시오!rvrv
비밀번호 4자리를 입력하시오!rvrvr
비밀번호 4자리를 입력하시오!rrrrrr
비밀번호 4자리를 입력하시오!1234
비밀번호가 일치합니다!
프로세스가 종료되었습니다.
// 프로세스가 종료되었습니다.
Problem 2
#include <stdio.h>
int main() {
int matrix1[3][2] = {{3,5},
{7,9},
{1,3}};
int matrix2[2][3] = {{2,4,6},
{8,2,4}};
int ans[3][3] = {0};
for(int i = 0; i < 3; i++){
for(int j = 0; j < 3; j++){
for(int k = 0; k < 2; k++){
ans[i][j] += matrix1[i][k] * matrix2[k][j];
}
}
}
for (int i = 0; i < 3; i++){
for (int j = 0; j < 3; j++){
printf("%2d ", ans[i][j]);
}
printf("\n");
}
return 0;
}
// 프로세스가 시작되었습니다..
> 46 22 38
86 46 78
26 10 18
// 프로세스가 종료되었습니다.
'Programing Language > C' 카테고리의 다른 글
함수 2 (재귀함수) (0) | 2019.01.15 |
---|---|
함수 1 (0) | 2019.01.14 |
배열 1(Array) (0) | 2019.01.10 |
반복문 2 (0) | 2019.01.08 |
반복문 1 (0) | 2019.01.07 |
Comments