04. 배열

2025. 6. 13. 16:21·C/Assignment

예제

예제 36

1부터 10까지의 수를 리스트에 저장하고 출력하기

i가 1부터 시작해 1씩 증가하며 10까지 반복하며 i 값을 리스트 a[ i-1 ]에 저장한다.

결국 a[0]에는 1, a[1]에는 2, a[2]에는 3, ..., a[9]에는 10이 저장된다.

# include<stdio.h>

int main(void)
{
    int i;
    int ary[10];
    for(i=1;i<11;i++)
    {
        ary[i-1] = i;
        printf("%d ",ary[i-1]);
    }

    return 0;
}

예제 37

10, 20, 30, ..., 100 저장하고, 거꾸로 출력하기

i가 1부터 1씩 증가하며 10이 될 때까지 반복하며 i*10을 a[i-1]에 저장한다. 그리고 i가 9부터 1씩 감소하며 0이 될 때까지 반복하며 a[i] 값을 출력한다.

# include<stdio.h>

int main(void)
{
    int i;
    int ary[10];
    for(i=1;i<11;i++)
    {
        ary[i-1] = i*10;
    }
    for(i=9;i>-1;i--)
    {
        printf("%d ",ary[i]);
    }

    return 0;
}

예제 38

리스트 요소 거꾸로 뒤집기

i가 0부터 1씩 증가하며 4가 될 때까지 반복하며 a(i)와 a(9-i)를 교환한다.

결국 a[0]과 a[9]가, a[1]과 a[8]이, a[2]와 a[7]이, a[3]과 a[6]이, a[4]와 a[5]가 교환된다.

a 값과 b 값을 교환하는 절차는 다음과 같다.

temp = a

a = b

b = temp

# include<stdio.h>

int main(void)
{
    int i;
    int temp;
    int a[10];
    for(i=0;i<10;i++)
    {
        a[i] = i+1;
    }
    for(i=0;i<5;i++)
    {
        temp = a[i];
        a[i] = a[9-i];
        a[9-i] = temp;
    }
    for(i=0;i<10;i++)
    {
        printf("%d ",a[i]);
    }
    return 0;
}

예제 39

리스트 a 요소 리스트 b에 거꾸로 저장하기

리스트 a 요소를 거꾸로 해서 리스트 b에 저장한다.

i가 0부터 1씩 증가하며 9가 될 때까지 반복하며 a[9-i]값을 b[i]에 저장한다. 결국 b[0]에는 a[9] 값이, b[1]에는 a[8] 값이, ..., b[9]에는 a[0] 값이 저장된다.

 

# include<stdio.h>

int main(void)
{
    int i;
    int temp;
    int a[10];
    int b[10];
    for(i=0;i<10;i++)
    {
        a[i] = i+1;
    }
    for(i=0;i<10;i++)
    {
        b[i] = a[9-i];
    }
    printf("\n");
    for(i=0;i<10;i++)
    {
        printf("%d ",a[i]);
    }
    printf("\n");
    for(i=0;i<10;i++)
    {
        printf("%d ",b[i]);
    }
    return 0;
}

예제 40

리스트 요소 왼쪽←으로 한 칸씩 원형으로 이동하기

리스트 요소를 왼쪽으로 한 칸씩 원형으로 이동하는 동작 전후 구조는 다음과 같다.

temp에 a[0] 값을 저장하고, i가 0부터 1씩 증가하며 8이 될 때까지 반복하며 a[i+1] 값을 a[i]에 저장한다.

그리고 temp 값을 a[9]에 저장한다.

# include<stdio.h>

int main(void)
{
    int i;
    int temp;
    int a[10];
    for(i=0;i<10;i++)
    {
        a[i] = i+1;
    }
    temp = a[0];
    for(i=0;i<9;i++)
    {
        a[i] = a[i+1];
    }
    a[9] = temp;
    for(i=0;i<10;i++)
    {
        printf("%d ",a[i]);
    }
    return 0;
}

예제 41

리스트 요소 중 최댓값 구하기

a[0] 값을 max에 저장하고, i가 1부터 1씩 증가하며 9가 될 때까지 반복하며 a[i] 값이 max 값보다 크면 a[i] 값을 max에 저장한다.

a[10]={10,70,100,30,50,20,60,80,90,40};

# include<stdio.h>

int main(void)
{
    int i;
    int max;
    int a[10] = {10,70,100,30,50,20,60,80,90,40};

    max = a[0];
    for(i=0;i<10;i++)
    {
        if(a[i]>max)
        max = a[i];
    }

    printf("%d",max);
    return 0;
}

예제 43

10진수를 2진수로 변환하여 리스트에 저장하기 (필수)

10진수를 입력받아, 2진수로 출력하는 프로그램을 개발하세요.

10진수를 2진수로 변환하는 과정을 이해하려면 진법의 개념을 먼저 이해해야 한다.

진법이란 사용할 수 있는 숫자의 개수와 위치 값을 정의해주는 수 체계이다.

한 자리에 사용할 수 있는 숫자의 개수는 해당 진법과 같으며, 사용할 수 있는 숫자는 0에서 시작해서 해당 진법의 수보다 1적은 수까지 가능하다.

그러므로 10진법에서 사용할 수 있는 숫자는 0, 1, 2, …, 8, 9로 10개가 되고, 2진법에서는 0과 1로 2개를 사용할 수 있다.

16진법과 같이 10진법보다 큰 진법의 경우에는 0부터 9까지의 수 외에도 다른 수가 더 필요한데 이런 경우에 A, B, C, D, E, F를 사용한다. 16진법의 A는 10진수 10을, B는 10진수 11을, …, F는 10진수 15를 의미한다.

컴퓨터에서 많이 사용되는 10진수, 2진수, 8진수 16진수의 관계를 표로 나타내면 다음과같다.

 

# include<stdio.h>

int main(void)
{
    int i = 0;
    int a = 37;
    int ary[10];

    while (a>0)
    {   
        ary[i] = a%2;
        a = a/2;
        i += 1;
    }

    for(int j=i-1;j>-1;j--) 
    {
        printf("%d\n",ary[j]);
    }

    return 0;
}

예제 44

배열에 저장된 2진수를 10진수로 변환하기

2진수를 한자리 10진수를 출력하는 프로그램을 만드세요.

2진수를 10진수로 변환하는 내용에 대해 살펴보자.

수 체계에 있어서 중요한 개념 중 하나는 자리 값인데, 모든 수의 각 숫자는 자리 값을가지고 있다.

각 숫자의 자리 값은 그 위치가 의미하는 제곱수를 해당 진법에 적용하면되는데, 각 위치가 의미하는 제곱수는 가장 오른쪽이 0이고 왼쪽으로 가면서 1을 더한 값이 된다.

예를 들면, 2진수 11001은 다음과 같은 절차를 거쳐 10진수 25가 된다.

이와 같이 2진수를 10진수로 변환할 때는 2진수 각 자리를 10진수로 변환하여 모두 더하면 된다.

단, 2진수는 5자리라 가정한다.

# include<stdio.h>

int main(void)
{
    int ary[5] = {1,1,0,0,1};
    int sum = 0;

    for(int i=4;i>-1;i--)
    {   
        int mul = 1;
        for(int j=0;j<i;j++)
        {
            mul = mul*2;
        }
        sum = sum + (ary[4-i]*mul);
    }
    printf("%d",sum);

    return 0;
}

예제 50

행 우선 2차원 배열

5행 5열 배열에 위와 같이 값을 저장하는 방법은 다음 과 같다.

행이 1일 때 열을 1부터 5까지 변화시키면서 해당 배열 요소에 1부터 5를 저장한다.

다음으로 행이 2로 하여 열을 1부터 5까지 변화시키면서 해당 배열 요소에 6부 터 10을 저장한다.

이런 방법으로 1부터 25까지의 수를 저장해간다.

# include<stdio.h>

int main(void)
{
    int ary[25] = {};
    int sum;
    int mul;

    for(int i=0;i<5;i++)
    {
        for(int j=1;j<6;j++)
        {
            mul = i * 5;
            sum = mul + j;
            ary[sum-1] = sum;
            printf("%2d ",ary[sum-1]);
        }
        printf("\n");
    }
    
    return 0;
}

예제 51

직각 삼각형 만들기

5행 5열 배열에 위와 같이 값을 저장하는 방법은 다 음과 같다.

우선, 열과 행의 주소가 같을 때 다음 행으로 넘어가 며 채워진다.

즉, 행이 1행에서 5행까지 변하는 동안 열 은 1열에서 현재 행 번호까지 증가한다.

그러므로 이 중 반복문을 이용해 안쪽의 열 반복문이 종료되는 위치를 바깥쪽의 행 번호로 설정한다.

# include<stdio.h>

int main(void)
{
    int ary[5][5] = {};
    int k = 1;

    for(int i=0;i<5;i++)
    {
        for(int j=0;j<i+1;j++)
        {
            ary[i][j] = k;
            k++;
        }
    }

    for(int i=0;i<5;i++)
    {
        for(int j=0;j<5;j++)
        {
            printf(" %2d ",ary[i][j]);
        }
        printf("\n");
    }
    
    return 0;
}

예제 52

‘ㄹ’자로 채우기

5행 5열 배열에 위와 같이 ‘ㄹ’자 모양으로 값을 저장하는 방법은 다음과 같다.

우선, 배열의 값 입력 방향은 열 방향이고 5열까지 채운 후

다음 행으로 넘어갈 때 마지막 열 번호가 다음 행 시작 열 번호가 된다.

첫 번째 행에서는 열 번호가 1씩 증가하고 주 번 째 행에서는 열 열호가 1씩 감소하고,

다시 세 번째 행에서는 열 번호가 1씩 증가함을 반복 한다

# include<stdio.h>

int main(void)
{
    int ary[5][5] = {};
    int k = 1;

    for(int i=0;i<5;i++)
    {
        if (i%2 != 0)
        {
            for(int j=4;j>-1;j--)
            {
                ary[i][j] = k;
                k++;
            }
        }
        else
        {
            for(int j=0;j<5;j++)
            {
                ary[i][j] = k;
                k++;
            }
        }

    }

    for(int i=0;i<5;i++)
    {
        for(int j=0;j<5;j++)
        {
            printf(" %2d ",ary[i][j]);
        }
        printf("\n");
    }
    
    return 0;
}

과제

과제 36

10부터 1까지의 수를 배열에 저장하고 출력하는 순서도와 C 프로그램 을 작성하여라

# include<stdio.h>

int main(void)
{
    int ary[10] = {};

    for(int i=10;i>0;i--)
    {
        ary[10-i] = i;
    }

    for(int i=0;i<10;i++)
    {
        printf(" %d ",ary[i]);
    }

    return 0;
}

과제 37

60, 70, 80, 90, 100을 배열에 저장하고 거꾸로 출력하는 순서도와 C 프로그램을 작성하여라

# include<stdio.h>

int main(void)
{
    int ary[5] = {60,70,80,90,100};
    
    for(int i=4;i>-1;i--)
    {
        printf("%d ", ary[i]);
    }

    return 0;
}

과제 38

배열 요소를 오른쪽으로 한 칸씩 원형으로 이동하는 순서도와 C 프로 그램을 작성하여라.

# include<stdio.h>

int main(void)
{
    int ary[5] = {60,70,80,90,100};
    int temp;
    
    temp = ary[4];
    for(int i=4;i>0;i--)
    {
        ary[i] = ary[i-1]; 
    }
    ary[0] = temp;

    for(int i=0;i<5;i++)
    {
        printf("%d ", ary[i]);
    }
    return 0;
}

과제 39

임의의 10개의 수를 저장하고 있는 배열에서 최솟값을 구하는 순서도 와 C 프로그램을 작성하여라

# include<stdio.h>

int main(void)
{
    int ary[10];

    for(int i=0;i<10;i++) //임의의 수 입력받아 배열 생성
    {
        printf("정수 : ");
        int num;
        scanf("%d",&num);
        ary[i] = num;
    }

    int min = ary[0]; //최솟값 판별
    for(int i=1;i<10;i++)
    {
        if(min>ary[i])
        min =ary[i];
    }

    printf("%d",min);

    return 0;
}

과제 40

입력 받은 10진수를 8진수로 변환하여 출력하는 순서도와 C 프로그램 을 작성하여라

# include<stdio.h>

int main(void)
{
    printf("정수 : ");
    int num;
    scanf("%d",&num);
    int ary[32] = {};
    int i = 0;

    while(num>0)
    {
        ary[i] = num%8;
        num = num/8;
        i++;
    }

    for(int j=i-1;j>-1;j--)
    {
        printf("%d",ary[j]);
    }

    return 0;
}

과제 41

배열에 저장된 8진수를 10진수로 변환하는 순서도와 C 프로그램을 작성하여라

# include<stdio.h>

int main(void)
{
    int ary[32] = {1,2,7};
    int sum = 0;
    int mul;

    for(int i=3;i>0;i--)
    {
        mul = 1;
        for(int j=0;j<i-1;j++)
        {
            mul = mul * 8;
        }
        sum = sum + (ary[3-i] * mul);
    }
    
    printf("%d",sum);

    return 0;
}

과제 45

5행 5열 배열에 다음과 같이 저장한 후 출력하는 순서도와 C 프로그램 을 작성하여라.

# include<stdio.h>

int main(void)
{
    int ary[5][5] = {};
    int k = 1;
    int i;
    int j;

    for(i=0;i<5;i++)
    {
        for(j=4;j>3-i;j--)
        {
            ary[i][j] = k;
            k++;
        }
    }

    for(i=0;i<5;i++)
    {
        for(j=0;j<5;j++)
        {
            if (ary[i][j] != 0)
            printf(" %2d ",ary[i][j]);
            else
            printf("    ");
        }
        printf("\n");
    }
    return 0;
}

'C > Assignment' 카테고리의 다른 글

CS study 4  (0) 2025.08.05
CS study3  (1) 2025.08.05
03. 반복구조  (1) 2025.06.12
CS study2  (0) 2025.06.11
02. 선택구조  (0) 2025.06.11
'C/Assignment' 카테고리의 다른 글
  • CS study 4
  • CS study3
  • 03. 반복구조
  • CS study2
m_Dev
m_Dev
  • m_Dev
    m_Dev
    m_Dev
  • 전체
    오늘
    어제
    • 분류 전체보기
      • MAIN STUDY
        • 정보보안
        • 빅데이터
        • 정보처리
        • 컴퓨터 구조
        • 기타
      • JOB
        • Study
        • Project
      • LMS 7
        • 개발일지
      • FRAMEWORK
        • Qt
        • MFC
        • Winform
        • WPF
        • MAUI
      • NETWORK
        • Study
        • Assignment
      • PYTHON
        • Set
        • Study
        • Assignment
        • Project
      • C
        • Set
        • Study
        • Assignment
        • Project
      • C++
        • Set
        • Study
        • Assignment
        • Project
      • C#
        • Set
        • Study
        • Assignment
        • Project
      • DATABASE
        • MySQL
        • SQLite
      • IDE
        • VisualStudioCode
        • VisualStudio
        • Pycharm
        • Colab
      • 기타
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
m_Dev
04. 배열
상단으로

티스토리툴바