배열 활용해보기

CHOI·2021년 6월 20일
0

C 언어

목록 보기
14/28
post-thumbnail

배열 가지고 놀기

각 위치의 숫자 출력하기

#include <stdio.h>
int main(){
    
    int arr[] = {2, 10, 30, 21, 34, 23, 53, 21, 9, 1};
    
    for (int i=0;i<10;i++){
        printf("%d 번째 숫자 : %d \n",i+1,arr[i]);
        
    }
    return 0 ;
    
}
1 번째 숫자 : 2 
2 번째 숫자 : 10 
3 번째 숫자 : 30 
4 번째 숫자 : 21 
5 번째 숫자 : 34 
6 번째 숫자 : 23 
7 번째 숫자 : 53 
8 번째 숫자 : 21 
9 번째 숫자 : 9 
10 번째 숫자 : 1

학생의 수와 점수를 입력하고 합격/불합격 출력하기

#include <stdio.h>
int main(){
    int n,i, avg = 0;
    
    printf("몇 명의 점수를 입력 할건가요? :");
    scanf("%d",&n);
    
    int arr[n];
    
    for (i=0;i<n;i++){
        printf("%d 번째 학생의 점수:",i+1);
        scanf("%d",&arr[i]);
        avg = avg + arr[i];
        
    }
    avg = avg / n;
    printf("반의 평균은 %d\n",avg);

    for (i=0;i<n;i++){
        printf("%d 번째 학생 : ",i+1);

        if (arr[i] >= avg){
            printf("합격 \n");
        }
        else{
            printf("불합격 \n");
        }
        
    }
    return 0 ;
    
}
몇 명의 점수를 입력 할건가요? :3
1 번째 학생의 점수:10
2 번째 학생의 점수:20
3 번째 학생의 점수:30
반의 평균은 20
1 번째 학생 : 불합격 
2 번째 학생 : 합격 
3 번째 학생 : 합격

여기서 특이하게 배열의 크기를 지정할 때 특정 값을 준 것이 아니라 변수를 주었는데 이는 원래 C에서는 불가능하다. C++에서는 가능하지만 말이다. 그말은 즉 사실 배열의 크기를 지정할 떄 변수를 사용하면 안된다는 것이다. 이에 대한 내용은 추후 다시 다루어 보자.

소수 구하기

약수가 1과 자기자신밖에 없는 숫자, 소수(Prime number) 1000개 구하는 프로그램 만들기

#include<stdio.h>
int main(){
    
    int num = 5;
    int prime[1000];
    prime[0] = 2;
    prime[1] = 3;
    int counting;
    int arr_num = 2;
    for (;;){
        counting = 0;
        for (int i=0;i<arr_num;i++){
            if (num % prime[i] != 0){
                counting += 1;
            } else {
                break;
            }
        }
        if (arr_num ==counting){
            prime[arr_num] = num;
            arr_num += 1;
        }
        if (arr_num == 999) break;
            
        
        //printf("%d \n",num);
        num += 2 ;
    }
    //printf("%d",arr_num);
    for (int i = 0;i<arr_num;i++){
        printf("%d \n",prime[i]);
    }
    
    return 0;
}
... (생략) ...
소수 : 7727
소수 : 7741
소수 : 7753
소수 : 7757
소수 : 7759
소수 : 7789
소수 : 7793
소수 : 7817
소수 : 7823
소수 : 7829
소수 : 7841
소수 : 7853
소수 : 7867
소수 : 7873
소수 : 7877
소수 : 7879
소수 : 7883
소수 : 7901
소수 : 7907
소수 : 7919

상수( Constant )

상수는 변수와 정반대로 한 번 그 값이 주어지고 나면 다시는 그 값이 변하지 않는다.

const (상수의 형) (상수 이름) = (상수의 값); 이런식으로 사용한다. 실제 예시를 보면

#include <stdio.h>
int main() {
  const int a = 3;

  printf("%d", a);  
  return 0;
}
3

상수 같은 경우 한 번 선언을 하면 그 값을 입력하지 않아도 컴파일 오류가 발생하고 그 값을 바꿔도 오류가 발생 한다. 그러면 여기서 이러한 생각을 할 수 있다. 즉 상수는 어떠한 짓을 하여도 값을 바꿀수 없는 불변의 데이터다.

배열의 크기를 상수로 주면 안될까?

앞서 학생의 합격/불합격을 구하는 프로그램을 작성할 때 마지막에 배열의 크기를 변수로 주면 안된다고 했었다.

그렇다면 상수로 줄 수 있을까?? 아래 코드를 보면 그러한 생각이 사라진다.

#include <stdio.h>
int main() {
  int b = 3;
  const int a = b;
  char c[a];
  return 0;
}

이는 즉 상수 a 로 배열의 크기를 할당하게 되면 다시 말해서 변수 b 의 크기로 배열의 크기를 할당 할 수 있다는 말이기 때문에 이전에 '배열의 크기는 변수로 할당할 수 없다'라는 말에 모순이 된다.

초기화 되지 않은 변수

#include <stdio.h>
int main() {
  int arr[3] = {1};
  printf("니 값은 모니 : %d", arr[1]);

  return 0;
}
니 값은 모니 : 0

여기서 우리는 arr[1] 를 따로 정의 하지 않았는데도 0이 출력되는 것을 볼 수 있다.

왜 이런 결과가 나올까?

int arr[3] = {1};

와 같이 정의한다면 컴파일러가 내부적으로 아래와 같이 생각하기 때문이다.

int arr[3] = {1, 0, 0};

따라서, 자동적으로 우리가 특별히 초기화 하지 않은 원소들에는 0 이 들어가게 된다.

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

역시, 해보면

int arr2[5] = {1, 2, 3, 0, 0}

과 같이 한 것과 똑같이 된다.

profile
벨로그보단 티스토리를 사용합니다! https://flight-developer-stroy.tistory.com/

0개의 댓글