#정리
# 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;
}