웹_프론트_백엔드/단과

[단과_C] 2020.02.26

shine94 2020. 2. 27. 17:08

1. 2차원 배열
 : 배열 안에 배열
   한 번 접근해도 주소값(행)
   두 번 접근해야 값(열)


2. 1차원 배열이 여러 개 필요할 때, 같은 자료형이라면 2차원 배열로 선언한다.


3. 2차원 배열 선언
   자료형 배열명[][] = { { 값1, 값2, ... }, { 값3, 값4, ... }, ... };
   자료형 배열명[행][열] = { { 값1, 값2, ... }, { 값3, 값4, ... }, ... };
   자료형 배열명[행][열] = { 초기값, };



3. *(*(arrData + 행) + 열) : arrData[행][열]



4. 문자열 배열
   char arData[문자열 개수][문자열의 문자 개수] = { "", "", ... };
   
   문자열은 문자배열

   즉, 1차원 배열이다.
   

   따라서 여러 개의 문자열을 저장하고자 한다면 2차원 배열이 필요하다
   문자열마다 문자의 개수는 다르므로 동적배열을 사용해야 하고
   정적배열을 사용해야할 때에는 열 개수를 충분히 할당해 준다.

 


5. 2차원 배열의 사용
   int arrData[2][3] = { { 3, 4, 5 }, { 9, 8, 7 } };
   * 시작주소는 100번지라고 가정한다.
     100 104 108  /  112 116 120

 

 

6. 정방 배열
 : 모든 행의 열 개수가 모두 같은 배열

 


7. 비정방 배열
 : 행 별로 열 개수가 하나라도 다른 배열


8. [2][3][4][5] 의면행열

 

 

9. 오늘 실습코드
1) arrTest.c

#include<stdio.h>
#define ROW 2
#define COL 3

void main() {
	//아주 불편하다
	//불편한 이유? 변수가 2개 필요한 상황에서 하나로 해결하려고 해서
	//결론! 변수가 2개 필요할때 for문을 2개를 쓰는데 훨씬 편하다
	int arrData[ROW][COL] = { {3, 4, 5}, {9, 8, 7} };
	int length = ROW * COL;

	for (int i = 0; i < length; i++) {
		//행 : 000 111  012 345 / 3	:  i / 3
		//열 : 012 012  012 345 % 3	:  i % 3
		arrData[i / 3][i % 3] = (i + 1) * 2;
	}

	for (int i = 0; i < length; i++) {
		if (i != 0 && i % 3 == 0) { printf("\n"); }

		//printf("%02d ", arrData[i / 3][i % 3]);
		printf("%2d ", arrData[i / 3][i % 3]);
	}
	printf("\n");
}

 

2) nestedFor.c

#include<stdio.h>

void main() {

	for (int i = 1; i < 10; i++) {
		for (int j = 1; j < 10; j++) {
			printf("%d*%d=%d\n", i, j, i*j);
		}
		printf("\n");
	}

	//구구단 1단~9단까지 출력
	//for문 한 번만 사용(변수도 한 개만 사용)
	//for (int i = 0; i < 81; i++) {
	//	printf("%d*%d=%d\n", i / 9 + 1, i % 9 + 1, (i / 9 + 1) * (i % 9 + 1));
	//}

	//for (int i = 1; i < 90; i++) {
	//	if (i % 10 == 0) {
	//		continue;
	//	}
	//	printf("%d*%d=%d\n", i / 10 + 1, i % 10, (i / 10 + 1) * (i % 10));
	//}
}

 

3) arrTest2.c 

#include<stdio.h>
#define R 2
#define C 3

void main() {
	//1층 1호 2호 3호
	//2층 1호 2호 3호
	int arrData[R][C] = { 0, };

	int arTotal[R] = { 0, };
	double arAvg[R] = { 0.0, };
	
	int total = 0;
	double avg = 0.0;

	for (int i = 0; i < R; i++) {
		for (int j = 0; j < C; j++) {
			printf("%d층 %d호 월세 입력(단위 : 만원)\n", i+1, j+1);
			scanf_s("%d", arrData[i]+j);
			total += arrData[i][j];
			arTotal[i] += arrData[i][j];
		}
		arAvg[i] = (arTotal[i] + 0.0) / C;
	}
	avg = (double)total / (R * C);
}

'웹_프론트_백엔드 > 단과' 카테고리의 다른 글

[단과_C] 2020.03.12  (0) 2020.03.13
[단과_C] 2020.02.27  (0) 2020.02.27
[단과_C] 2020.02.25  (0) 2020.02.26
[단과_JAVA] 2020.02.25  (0) 2020.02.26
[단과_C] 2020.02.24  (0) 2020.02.25