c언어 기초

1차원 배열

달달고냥 2017. 3. 30. 19:41

1. 배열이란 무엇인가?


둘 이상의 변수를 동시에 선언하는 효과를 지닌다.

많은 양의 데이터를 일괄적으로 처리해야 하는 경우에 유용하다.

지역적 특성을 지닐 수도 있고, 전역적 특성을 지닐 수도 있다.


배열 선언에 있어서 필요한 것 세 가지
- 배열 길이 : 배열을 구성하는 변수의 개수 (반드시 상수를 사용)
- 배열 요소 자료형 : 배열을 구성하는 변수의 자료형
- 배열 이름 : 배열에 접근할 때 사용되는 이름




2, 1차원 배열의 접근

배열 요소의 위치를 표현 : 인덱스(index)

인덱스는 0에서부터 시작


*배열 선언과 접근의 예


int main(void)

{

    int array[10]; // 배열 선언

    array[0]=10;       // 첫 번째 요소 접근

    array[1]=20;       // 두 번째 요소 접근

    array[2]=30;       // 세 번째 요소 접근

    . . . . .

    return 0;

}


 







#include <stdio.h>


int main(void)

{

     double total;

     double val[5];


     val[0]=1.01;

     val[1]=2.02;

     val[2]=3.03;

     val[3]=4.04;

     val[4]=5.05;


     total=val[0]+val[1]+val[2]+val[3]+val[4];

     printf("평균 : %lf \n", total/5);


     return 0;

}


3. 선언과 동시에 초기화

int main(void)

{

   int arr1[5]={1, 2, 3, 4, 5};

   int arr2[ ]={1, 3, 5, 7, 9};

   int arr3[5]={1, 2}

}





4. 배열 기반 문자열 변수

- 문자열 상수

문자열이면서 상수의 특징을 지닌다


    printf("Hello World! \n");



-문자열 변수

문자열이면서 변수의 특징을 지닌다

    char str1[5]="Good";

    char str2[]="morning";



 #include <stdio.h>


 int main(void)

 {

     char str1[5]="Good";

     char str2[]="morning";


     printf("%s \n", str1);

     printf("%s %s \n ", str1, str2);


     return 0;

 }


ex ) 5 명의 학생의 성적을 입력 받고 총 합계와 평균 구하기


#include <stdio.h>
int main()
{
      int grade[5];
      int i,sum = 0;
      for(i=0;i<5;i++){
          printf("%d 번째 학생의 성적 : ",i+1);
          scanf("%d",&grade[i]);
      }
      printf("<< 입력한 학생들의 성적 >>\n");
      for(i=0;i<5;i++){
          printf("%d ",grade[i]);
          sum += grade[i];
      }
      printf("\n학생들의  총  합계  : %d\n",sum); 
      printf("학생들의 평균 점수  : %.2f\n",(float)sum/5); 
   return 0;
}




5. 문자열의 특징

문자열은 널(null)문자를 끝에 지닌다.

널(null) 문자 : '\0'(아스키 코드 값으로 0)


int main(void)

{

    char str[6]="Hello";

    printf("Hello");  

    . . . . .


 



널(null) 문자를 지녀야 하는 이유
문자열의 끝을 표현하기 위해서
쓰레기 값과 실제 문자열의 경계를 나타내기 위해
printf 함수는 널 문자를 통해서 출력의 범위를 결정 짓는다. 

int main(void)

{

    char str[100]=”Hello World!”;

    printf(“%s \n”, str);

    . . . . .

}

문자열과 char형 배열의 차이점
char arr1[ ] = "abc";
char arr2[ ] = {'a', 'b', 'c'};
char arr3[ ] = {'a', 'b', 'c', '\0'};

int main(void)
  {
       int i;
       char ch;
       char str[6]="Hello";

       printf("--변경 전 문자열--\n");
       printf("%s \n", str);

       for(i=0; i<6; i++)
            printf("%c | ", str[i]);

       /* 문자열 변경 */
       for(i=0; i<3; i++)
       {
            ch=str[4-i];
            str[4-i]=str[i];
            str[i]=ch;
       }

        printf("\n\n--변경 후 문자열--\n");
        printf("%s \n", str);
        return 0;
}

ex ) 문자열 다루기 


#include <stdio.h>

int main()

{

      char String[10] = "Apple"; //초기값 설정

      char String1[10];

      int i;

      String1[0] = 'O';

      String1[1] = 'r';

      String1[2] = 'a';

      String1[3] = 'n';

      String1[4] = 'g';

      String1[5] = 'e';

      String1[6] = '\0'; //문자열 마지막에 NULL문자 삽입

      printf("String = ");

      for(i=0;i<sizeof(String);i++){

          if(String[i]==NULL){break;} //String[i]가 NULL문자일 시 for문 종료

          printf("%c",String[i]);

      }

      printf("\nString1 = %s \n",String1); 

return 0;

}



 ex ) 문자열 대 소문자 변환


String = Apple
문자열을 소문자로 변환
String = apple
문자열을 대문자로 변환
String = APPLE

 #include <stdio.h>


int main()

{

      char A[2];

      char tmp;

      A[0] = 'A';

      A[1] = 'B';

      printf("%c , %c\n",A[0],A[1]);

  ①  tmp = A[0]; 

  ②  A[0] = A[1]; 

  ③  A[1] = tmp;  

      printf("%c , %c\n",A[0],A[1]); 

   return 0;

}


 



배열
Sort
대량의 데이터를 어떤 순서에 따라 정렬하는 것
오름차순(작은수부터)과 내림차순(큰 수부터)으로  나뉜다.
sort의 종류
- 버블소트 , 삽입 소트, 히프소트 ,퀵 소트 , 힙 소트 등등
- 버블 sort
인접원소를 비교해서 더 큰 원소를 뒤로 보내는 방식
병 밑바닥에서 생긴 버블이 점점 더 커지는 것에 비유
매우 간단히 구현이 가능하지만 많은 양일 경우에는 비효율 적이다.