본문 바로가기
프로그램

[C언어]배열의 선언과 배열을 이용한 기초예시 9강

by y은광 2024. 9. 12.
728x90

C 언어에서 배열(array)이란 동일한 데이터 타입의 요소들을 연속적으로 저장하는 데이터 구조입니다. 배열을 사용하면 여러 개의 변수를 하나의 이름으로 그룹화하여 관리할 수 있습니다. 이에 따라 배열을 사용하면 대용량의 데이터를 사용하는 프로그램을 쉽게 작성할 수 있습니다. 

 

1. 배열 선언

배열이라는 여러 개의 상자를 만들고 적당한 배열 이름을 준비하고 타입을 지정합니다.  배열을 이루고 있는 각각의 상자를 배열 요소(array element)라고 합니다. 배열 요소는 번호가 붙어 있는데 이것을 인덱스(index)라고 합니다. num[0], num[1]....num[9]료 표시합니다. 형이름  배열이름[요소 수];

  • int num[10]; int형 값을 10개 선언할 수 있습니다. 10 개의 정수형 타입의 요소는 num배열 인덱스 0부터 9까지
    • num[0]=5 부터 num[9]=3 까지 저장, num[10]=8존재하지 않은 인데스로 저장 안 됨 
  • int num[5] = {3,5,8}; 일 때 인덱스 0부터 2 까지 인덱스에 저장
    • num[0]=3 ,num[1]=5, num[2]=8, num[3]=0, num[4]=0
    • int num[ ]={3,5,8,9,10}; 초기값의 개수에 따라 배열크기 결정
  • float val[5]; 5개의 실수형 타입의 요소 s배열 인덱스 0부터 4까지 
  • char str[40]; 40개의 문자형 타입의 요소 str배열 인텍스 0부터 39
  • a[0]=94; 94를 a배열 0번째 인덱스에 저장

2. 배열의 이용 기초예시

  • 표준입력한 성적 실행하기
#include <stdio.h>
int main(void)
{
int num[5]; // num이라는 상자에 5개의 숫자를 넣을 수 있음
int i, j;
printf("5명의 성적을 입력하세요: \n");
for (i=1;i<=5;i++) { // i값을 5번 반복함
scanf("% d", &num[i]); // 5명의 성적을 입력함
}
for (j=1;j<=5;j++){
printf( "%d번째 성적은 %d점입니다!\n", j, num[j]); //앞에 정수는 요소, 뒤에 정수는 성적임
}
return 0;
}

배열1

 

  • 성적 초기화하고 실행하기
#include<stdio.h>
int main(void)
{
int num[5] = {98, 85, 89, 96, 87}; //중괄호로 5명의 성적을 초기화함
int i;
for (i=0;i<5;i++){ //5명의 성적을 반복하여 실행
 printf("%d번째 사람의 성적은 %d 입니다. \n", i, num[i]);
}
return 0;
}

배열2

 

  • 성적 내림차순 정렬
#include<stdio.h>
#define AP 5 // AP 에 5가 지정됨 (대문자로 정의 하며 ;없음)
int main(void)
{
int num[AP]; // num 상자에 5개의 개수 저장 가능
int sub;
int i, j, a, b;
printf(" %d명의 성적을 입력하세요. \n", AP);
for(i=0;i<AP; i++){
scanf( "%d", &num[i]);
}
for(a=0;a<AP-1;a++) { // a변수는 앞사람성적임 0으로 초기화하여 4까지 수행 5번
  for(b=b+1;b<AP;b++) { //b변수는 다음사람성적임 5까지 수행 
if(num[b]>num[a]){ //a의성적과 b성적을 비교하여 b성적이 크다면 앞으로 자리를 변경(내림차순)
  sub=num[b];  // b성적을 sub방에 보관
  num[b]=num[a]; // a성적을 b으로 이동
  num[a]=sub; // sub방에 있는 b성적을 a성적으로 이동 성적이 좋은 사람이 앞으로 이동함
}
}
}
for(j=0;j<AP;j++){ // 정렬된 순서대로 나열함
printf("%d등 성적은  %d점입니다\n", j+1, num[j]); // 배열은 0부터 시작하기 때문에 번호출력 시 +1함
}
return 0;
}

배열3

 

  • 문자열 배열 출력
#include <stdio.h>
int main(void)
{
char abc[100]; // abc상자에 문자 100개 저장 가능
printf("원하는 문자열을 입력하세요.\n");
scanf("%s", abc); // 문자열 선언 시 &없음
printf(" 입력한 문자열은 %s입니다 .\n", abc); // 문자열 출력
return 0;
}

배열4

 

  • 문자열 길이 실행하기
#include<stdio.h>
int main(void)
{
char abc[ ] = "Goddess"; // "큰 따옴표"로 문자선언
int i,j;
j=0;
for(i=0;abc[i]!='\0';i++) { // != '\0'  0과 같지 않을 때까지 abc 방에 있는 문자를 반복해서 읽음
j++; // 하나씩 읽을 때마다 숫자를 누적함
}
printf( "%s의 문자열 길이는 %d입니다.\n", abc, j); // 문자와 전체길이 숫자
return 0;
}

문자열배열7

  • 문자열 치환하기
#include<stdio.h>
int main(void)
{
char abc[100]; // abc상자에 100개 문자 저장가능
int i;
printf( "원하는 문자열을 입력하세요 \n");
scanf("%s", abc); // 문자열일 때 & 없음
for(i=0;abc[i]!= '\0';i++){ // abc상자에 0이 없을 때까지 i값을 반복해서 읽어 들임
if(abc[i] == 'b') { //abc상자에 있는 문자 중 b알파벳이 있다면
abc[i]='k'; // k알파벳을 그 자리에 넣음=치환
}
}
printf(" %s로 변경했어요 \n", abc);
return 0;
}

배열6

 

 

  • 히스토그램 그리기
#include<stdio.h>
#define SI 10 // SI에 10을 저장 (대문자로 정의하며 ;없음)
int main(void)
{
 int num[SI] = { 9, 15, 8, 6, 19, 12, 7,6, 10,24}; // num상자에 10개의 자료 저장
int i,j;
printf(" element       value        histogram \n");
for (i=0; i<SI; ++i) { // 0부터 9까지 반복실행, ++i 전위증가 i값을 먼저 1 증가 후 그 값을 반환
printf(" %d  \t %d \t ",i, num{i]); // 요소 i 번째와 그 요소의 num상자의 숫자 출력
for(j=1;j<=num[i];j++) // num상자의 각 값을 반복, j++ 후위증가 j의 현재값을 반환 후, 1 증가
printf("*"); // 각 인덱스값을 "*'로 출력
printf("\n");
}
return 0;
}

 

히스토그램

감사합니다.