본문 바로가기

C lang

[C language] Geany편집기 - 5. array(배열), multi array(2차 배열)

#정리

# array
(1. number array)
//java나 c같이 타입을 명시하는 언어의 경우, 배열을 사용할 때 동일 타입의 값들만 배열로 묶을 수 있다.
  - 선언부의 타입이 없는 언어들은 필요한대로 섞어서 넣어도 문제가 되지 않는다.
//배열 수 지정하지 않아도 문제없음//0하나만 넣으면 모든 배열값 0으로 초기화된다.
//배열의 길이 확인
 - 배열안에 있는 값의 타입을 알고 Byte 수로 계산해야함
//사이즈를 활용해서 배열을 출력하거나 입력할 수 있다.
//define정의를 통해 간편하게 배열 크기를 확인하고 조절할 수 있다.
//배열 갯수보다 작게 값을 초기화 하면 나머지 방에는 0으로 값이 초기화된다.
//문자열처럼 배열도 선언 이후 간단히 값을 넣을 수 없다. 
 - 각 방(arr2[0])마다 별도로 넣어줘야한다.

(2. character array)
//1.배열 크기 지정 없이 초기화하는 방법
 - 한 칸당 두 글자(a2,b2)를 넣을 수 없다.
//2. 배열 크기와 함께 초기화 하는 방법
 - " "로 값을 넣는 게 아니라서, null 값이 들어갈 방을 만들어주지 않아도 된다.
//3.배열 선언 이후 값을 주는 방법 - for문을 이용해서 배열 값을 줄 수 있다.
 - 문자도 정수로 인식하여 값을 더함으로 다른 문자를 나오게 할 수 있다.
//4.스트링 처럼 " "로 초기화 하는 방법 - null값이 들어갈 방을 하나 더 만들어줘야한다.
 - "문자열"로 넣은 경우, strlen로 사이즈를 확인할 수 있다.  
 * printf("abc4 length: %d\n",strlen(abc4));


# multi array -2차 배열
(1. 숫자로된 2차 배열)
//suss[2][3] >> "2행 3열 - 3개짜리가 2줄이다." 로 기억하면 편리하다. 

(2. 문자열로 이루어진 2차 배열)
// %s로 문자열 처럼 출력할 수 있다. 
 - 문자열 처럼 출력할 때는 방크기를 (제일 긴 값의 크기 +1)해줘야 한다.
//{ }형태로 초기화 했을 때, 문자열 값 변경 - 일일히 바꿔줘야한다.
 - abcss3[1][0] = 'h'; / abcss3[1][1] = 'a'; / abcss3[1][2] = 'n';
//" "형태로 초기화 했을 때, 문자열 값 변경 - strcpy함수 사용 >> 헤더 선언 필요
 - strcpy(names1[0], "white");
//scanf 로 값 받아서 배열원소에 삽입이 가능하다.
 - scanf("%s",name3[x]); 형태로 s타입으로 받아서 바로 배열에 넣을 수 있다. 

 

 

 

 

# array - 1. number array 

//java나 c같이 타입을 명시하는 언어의 경우, 배열을 사용할 때 동일 타입의 값들만 배열로 묶을 수 있다.

  - 선언부의 타입이 없는 언어들은 필요한대로 섞어서 넣어도 문제가 되지 않는다.

//배열 수 지정하지 않아도 문제없음
//0하나만 넣으면 모든 배열값 0으로 초기화된다.
//배열의 길이 확인 - 배열안에 있는 값의 타입을 알고 Byte 수로 계산해야함
//사이즈를 활용해서 배열을 출력하거나 입력할 수 있다.
//define정의를 통해 간편하게 배열 크기를 확인하고 조절할 수 있다.

//배열 갯수보다 작게 값을 초기화 하면 나머지 방에는 0으로 값이 초기화된다.

//문자열처럼 배열도 선언 이후 간단히 값을 넣을 수 없다. 

 - 각 방(arr2[0])마다 별도로 넣어줘야한다.

이렇게 간단하게는 못 넣는다.

 

 

--예문 코드 보기--

더보기
#include <stdio.h>

#define SUS3_LENGTH 6
#define SUS4_LENGTH 3

int main(int argc, char **argv)
{
	printf("array....\n");
	
	//배열 선언 (int) 및 초기화 { }
	//int arr[5] = {11,22}; // >> {11,22,0,0,0}으로 초기화됨.
	int arr[5] = {11,22,33,44,55};
	printf("arr[0]: %d\n",arr[0]);
	printf("arr[1]: %d\n",arr[1]);
	printf("arr[2]: %d\n",arr[2]);
	printf("arr[3]: %d\n",arr[3]);
	printf("arr[4]: %d\n",arr[4]);
	
	
	printf("========================\n");
	
	//배열 수 지정하지 않아도 문제없음
	int sus[] = {1,2,3,4,5};
	printf("sus[0]: %d\n",sus[0]);
	printf("sus[1]: %d\n",sus[1]);
	printf("sus[2]: %d\n",sus[2]);
	printf("sus[3]: %d\n",sus[3]);
	printf("sus[4]: %d\n",sus[4]);
	
	printf("========================\n");
	
	//0하나만 넣거나 아무것도 넣지 않으면, 모든 배열값 0으로 초기화된다.
	int sus2[5] = {};
	printf("sus2[0]: %d\n",sus2[0]);
	printf("sus2[1]: %d\n",sus2[1]);
	printf("sus2[2]: %d\n",sus2[2]);
	printf("sus2[3]: %d\n",sus2[3]);
	printf("sus2[4]: %d\n",sus2[4]);
	
	//배열의 길이 확인 - 배열안에 있는 값의 타입을 알고 바이트 수로 계산해야함
	//printf("sus2 length: %d\n",sus2.length);//error
	printf("sus2 length: %d\n",sizeof(sus2)/sizeof(int));
	
	//사이즈를 활용해서 배열을 출력하거나 입력할 수 있다.
	for(int i=0;i<sizeof(sus2)/sizeof(int);i++){
			sus2[i] =111;
	}
	
	for(int i=0;i<sizeof(sus2)/sizeof(int);i++){
			printf("sus2[%d]: %d\n",i,sus2[i]);
	}
	
	
	printf("========================\n");
	
	//define정의를 통해 간편하게 배열 크기를 확인하고 조절할 수 있다.
	int sus3[SUS3_LENGTH] = {0};
	printf("sus3 length: %d\n",SUS3_LENGTH);
	
	for(int i=0;i<SUS3_LENGTH;i++){
			sus3[i] =222;
	}
	
	
	for(int i=0;i<SUS3_LENGTH;i++){
			printf("sus3[%d]: %d\n",i,sus3[i]);
	}
	
	printf("========================\n");
	//double array4 :size of, define

	double sus4[SUS4_LENGTH] = {0};
	printf("sus4 length: %d\n",SUS4_LENGTH);
	
	for(int i=0;i<SUS4_LENGTH;i++){
			sus4[i] =33.3;
	}
	
	for(int i=0;i<SUS4_LENGTH;i++){
			printf("sus4[%d]: %lf\n",i,sus4[i]);
	}
	
	
	return 0;
}

 

 

--------------------------------------------------------

 

# array - 2. character array

//1.배열 크기 지정 없이 초기화하는 방법
 - 한 칸당 두 글자(a2,b2)를 넣을 수 없다.
//2. 배열 크기와 함께 초기화 하는 방법
 - " "로 값을 넣는 게 아니라서, null 값이 들어갈 방을 만들어주지 않아도 된다.
//3.배열 선언 이후 값을 주는 방법
 - for문을 이용해서 배열 값을 줄 수 있다.
 - 문자도 정수로 인식하여 값을 더함으로 다른 문자를 나오게 할 수 있다.
//4.스트링 처럼 " "로 초기화 하는 방법
 - null값이 들어갈 방을 하나 더 만들어줘야한다.
 - "문자열"로 넣은 경우, strlen로 사이즈를 확인할 수 있다. 
   * printf("abc4 length: %d\n",strlen(abc4));

 

--예문 코드 보기--

더보기
#include <stdio.h>
#include <string.h>

int main(int argc, char **argv)
{
	printf("character array....\n");
	//1.배열 크기 지정 없이 초기화하는 방법
	//한 칸당 두 글자(a2,b2)를 넣을 수 없다.
	char abc[] = {'a','b','c'};
	printf("abc length: %d\n",sizeof(abc)/sizeof(char));
	for(int i=0;i<sizeof(abc)/sizeof(char);i++){
			printf("abc[%d]: %d,%c\n",i,abc[i],abc[i]);
	}
		
	printf("===========abc2=============\n");
	//2. 배열 크기와 함께 초기화 하는 방법
	//" "로 값을 넣는 게 아니라서, null 값이 들어갈 방을 만들어주지 않아도 된다.
	char abc2[3] = {'d','e','f'};
	printf("abc2 length: %d\n",sizeof(abc2)/sizeof(char));
	for(int i=0;i<sizeof(abc2)/sizeof(char);i++){
			printf("abc2[%d]: %d,%c\n",i,abc2[i],abc2[i]);
	}
		
	printf("=============abc3===========\n");
	//3.배열 선언 이후 값을 주는 방법
	char abc3[3];
	//abc3[0] = 'x';
	//abc3[1] = 'y';
	//abc3[2] = 'z';
	printf("abc3 length: %d\n",sizeof(abc3)/sizeof(char));
	//for문을 이용해서 배열 값을 줄 수 있다.
	for(int i=0;i<sizeof(abc3)/sizeof(char);i++){
		//문자도 정수로 인식하여 값을 더함으로 다른 문자를 나오게 할 수 있다.
			abc3[i] ='x'+i;
	}
	
	for(int i=0;i<sizeof(abc3)/sizeof(char);i++){
			printf("abc3[%d]: %d,%c\n",i,abc3[i],abc3[i]);
	}
	
	printf("============abc4============\n");
	//4.스트링 처럼 " "로 초기화 하는 방법
	//null값이 들어갈 방을 하나 더 만들어줘야한다.
	char abc4[4] = "abc";
	
	for(int i=0;i<sizeof(abc4)/sizeof(char);i++){
			printf("abc4[%d]: %d,%c\n",i,abc4[i],abc4[i]);
	}
	printf("========================\n");
	//" "(스트링)로 넣은 경우, strlen로 사이즈를 확인할 수 있다. 
	printf("abc4 length: %d\n",strlen(abc4));
	
	for(int i=0;i<sizeof(abc4)/sizeof(char);i++){
		printf("abc4[%d]: %d,%c\n",i,abc4[i],abc4[i]);
	}
	
	return 0;
}

 


 

 

# multi array - 1. 숫자로된 2차 배열

//suss[2][3] >> "2행 3열 - 3개짜리가 2줄이다." 로 기억하면 편리하다. 

 

 

--예문 코드 보기--

더보기
#include <stdio.h>

#define NUMS_LENGTH 3 
#define NUMSS_LENGTH 2

int main(int argc, char **argv)
{
	printf("multi array....\n");
	int sus[4] = {1,2,3,4};
	//2행3열 - 3개짜리가 2줄이다. 
	int suss[2][3] = {{1,2,3},{1,2,3}};
	printf("sus length: %d\n",sizeof(sus)/sizeof(int));
	
	printf("suss sizeof: %d\n",sizeof(suss));
	printf("suss sizeof: %d\n",sizeof(sus));
	
	printf("suss sizeof: %d\n",sizeof(suss[0]));
	printf("suss length: %d\n",sizeof(suss)/sizeof(suss[0]));
	
	printf("============ for - for ==========\n");
	//for- for로 2차배열 값 출력
	int x,i;
	for(x=0;x<sizeof(suss)/sizeof(suss[0]);x++){
		for(i=0;i<sizeof(suss[0])/sizeof(int);i++){
			printf("suss[%d][%d]: %d \n",x,i,suss[x][i]);
		}
		printf("\n");
	}
	
	printf("============= double multi array ===========\n");
	//double multi array 2행3열 : sizeof , define	
	double numss[2][3] = {{1.1,2.1,3.1},{1.2,2.2,3.2}};
	for(x=0;x<sizeof(numss)/sizeof(numss[0]);x++){
		for(i=0;i<sizeof(numss[0])/sizeof(double);i++){
			printf(" numss[%d][%d]: %.2lf\n",x,i,numss[x][i]);
		}
		printf("\n");
	}
	
	double numss2[NUMSS_LENGTH][NUMS_LENGTH] = {{1.1,2.1,3.1},{1.2,2.2,3.2}};
	for(x=0;x<NUMSS_LENGTH;x++){
		for(i=0;i<NUMS_LENGTH;i++){
			printf(" numss2[%d][%d]: %.2lf\n",x,i,numss2[x][i]);
		}
		printf("\n");
	}
	return 0;
}

 

 

--------------------------------------------------------

 

 

# multi array - 2. 문자열로 이루어진 2차 배열

// %s로 문자열 처럼 출력할 수 있다. 

 - 문자열 처럼 출력할 때는 방크기를 (제일 긴 값의 크기 +1)해줘야 한다.

//{ }형태로 초기화 했을 때, 문자열 값 변경 - 일일히 바꿔줘야한다.
 - abcss3[1][0] = 'h'; / abcss3[1][1] = 'a'; / abcss3[1][2] = 'n';
//" "형태로 초기화 했을 때, 문자열 값 변경 - strcpy함수 사용 >> 헤더 선언 필요
 - strcpy(names1[0], "white");

 

--예문 코드 보기--

더보기
#include <stdio.h>
#include <string.h>

#define ABCS_LENGTH 3 
#define ABCSS_LENGTH 2

int main(int argc, char **argv)
{
	printf("character multi array....\n");
	
	//'k','i','m'
	//'k','i','m'
	
	printf("============= character multi array 1 -{ } ===========\n");
	char abcss[2][3] = {{'k','i','m'},{'l','e','e'}};
	
	for(int x=0;x<sizeof(abcss)/sizeof(abcss[0]);x++){
		for(int i=0;i<sizeof(abcss[0])/sizeof(char);i++){
			printf("abcss[%d][%d]: %c\n",x,i,abcss[x][i]);
		}
		printf("\n");
	}
	
	
	char abcss2[ABCSS_LENGTH][ABCS_LENGTH] = {{'k','i','m'},{'l','e','e'}};
	
	for(int x=0;x<ABCSS_LENGTH;x++){
		for(int i=0;i<ABCS_LENGTH;i++){
			printf("abcss2[%d][%d]: %c\n",x,i,abcss2[x][i]);
		}
		printf("\n");
	}
	
	//문자열 처럼 출력할 때는 방크기를 +1해줘야 한다.
	char abcss3[2][4] = {{'k','i','m'},{'l','e','e'}};
	
	//문자열 값 변경
	abcss3[1][0] = 'h';
	abcss3[1][1] = 'a';
	abcss3[1][2] = 'n';
	
	for(int x=0;x<sizeof(abcss3)/sizeof(abcss3[0]);x++){
			printf("abcss3[%d]: %s\n",x,abcss3[x]);
	}
	
	printf("============= character multi array 2 - " " ===========\n");
	//가장 긴 값보다 +1하여 방 크기를 설정한다. >> "green" +1 = 6
	char names1[3][6] = {"red","green","blue"};
	
	//문자열 값 변경
	strcpy(names1[0], "white");
	
	for(int x=0;x<sizeof(names1)/sizeof(names1[0]);x++){
		printf("names1[%d]: %s\n",x,names1[x]);
	}
	
	
	printf("\n");
	char names2[3][6] = {"kim","park","han"};
	
	for(int x=0;x<sizeof(names2)/sizeof(names2[0]);x++){
		printf("names2[%d]: %s\n",x,names2[x]);
	}

	return 0;
}

 

 

//scanf 로 값 받아서 배열원소에 삽입이 가능하다.

 - scanf("%s",name3[x]); 형태로 s타입으로 받아서 바로 배열에 넣을 수 있다. 

 

--예문 코드 보기--

더보기
	//scanf로 입력받기
	
	char names3[3][9];
	for(int x=0;x<sizeof(names3)/sizeof(names3[0]);x++){
		printf("input Name[8byte]: \n");
		scanf("%s",names3[x]);
	}
	for(int x=0;x<sizeof(names3)/sizeof(names3[0]);x++){
		printf("names3[%d]: %s\n",x,names3[x]);
	}

 

 


 

# mission : score array : 학생 3명의 성적 처리 프로그램 작성

// C에서는 사람이 아니라, 과목별로 값을 배열에 모야놓아야 한다. (이름하고 숫자 타입이 다르기 때문) 

 

--예문 코드 보기--

더보기
#include <stdio.h>

#define SCORE_LENGTH 3

int main(int argc, char **argv)
{
	printf("score array...\n");
	//scanf, man count 3
	//names array
	//kors array
	//engs array
	//maths array
		
	char names[SCORE_LENGTH][8] = {"kim", "lee", "han"};
	int kors[SCORE_LENGTH] = {99, 88, 77};
	int engs[SCORE_LENGTH] = {88, 77, 66};
	int maths[SCORE_LENGTH] = {77, 66, 55};
	
	for(int x=0;x<SCORE_LENGTH;x++){
		printf("input Name[8byte]: ");
		scanf("%s",names[x]);
		
		printf("input kor[0-100]: ");
		scanf("%d",&kors[x]);
		
		printf("input eng[0-100]: ");
		scanf("%d",&engs[x]);
		
		printf("input math[0-100]: ");
		scanf("%d",&maths[x]);
	}
	
	printf("============= score result ===========\n");

	for(int x=0;x<sizeof(names)/sizeof(names[0]);x++){
		
		int total = kors[x] + maths[x] + engs[x];
		float avg = total/3;
		char grade = 'A'; 
		
		if(avg>=90){
			grade = 'A'; 
		}else if(avg>=80){
			grade = 'B'; 
		}else if(avg>=70){
			grade = 'C'; 
		}else if(avg>=60){
			grade = 'D'; 
		}else{
			grade = 'F'; 
		}
		
		printf("student: %s, %d, %d, %d\n",names[x], kors[x],engs[x],maths[x]);
		printf("total: %d, avg: %.2f, grade: %c \n",total, avg, grade);
		
		printf("\n");
	}

	return 0;
}