배열
- 배열을 사용하면 한 번에 여러 개의 변수를 생성할 수 있다.
- int s[10];
배열의 특징
- 배열은 메모리의 연속적인 공간에 저장된다. 예를 들어, 배열 요소 s[0]과 s[1]은 실제 메모리 상에서도 서로 붙어있다.
- 배열의 가장 큰 장점은 서로 관련된 데이터를 차례로 접근하여서 처리할 수 있다는 점이다.
배열 선언
int scores[10]; //자료형, 배열 이름, 요소의 개수
int score[60]; //60개의 int형 값을 가지는 배열 score
float cost[12]; //12개의 float형 값을 가지는 배열 cost
char name[50]; //50개의 char형 값을 가지는 배열 name
기호 상수 사용
#define SIZE 30 //기호 상수 사용
int score[SIZE];
배열 기초 예제
//배열 기초 예제
#include <stdio.h>
#define SIZE 5
int main(void) {
int i;
int score[SIZE];
for (i = 0; i < SIZE; i++) {
score[i] = (i+1) * 10;
printf("scores[%d] = %d\n", i, score[i]);
}
return 0;
}
배열 난수로 채우기
//배열 난수로 채우기
#include <stdio.h>
#include <stdlib.h>
#define SIZE 5
int main(void) {
int i = 0;
int scores[SIZE];
srand((unsigned)time(NULL));
for (i = 0; i < SIZE; i++) {
scores[i] = rand() % 100;
printf("scores[%d] = %d\n", i, scores[i]);
}
return 0;
}
//성적 평균 계산하기
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define SIZE 5
int main(void) {
int i = 0;
int sum = 0;
int scores[SIZE];
for (i = 0; i < SIZE; i++) {
printf("학생들의 성적을 입력하시오: ");
scanf("%d", &scores[i]); //배열 scores[i]를 입력받는다.
sum += scores[i];
}
double average = (double)sum / SIZE;
printf("성적 평균 = %lf\n", average);
return 0;
}
배열의 초기화
//배열의 초기화 예제
#include <stdio.h>
#define SIZE 5
int main(void) {
int i = 0;
int scores[SIZE] = { 31, 63, 62, 87, 14 }; //배열의 초기화
for (i = 0; i < SIZE; i++) {
printf("scores[%d] = %d\n", i, scores[i]); //socres[i] 초기화되어 있기 때문에 다시 정의할 필요 없음
}
return 0;
}
Lab: 주사위 던지기
//주사위 던지기
#include <stdio.h>
#include <stdlib.h>
#define SIZE 6
int main(void) {
printf("=====================\n");
printf("숫자 빈도\n");
printf("=====================\n");
int i = 0;
int frequency[SIZE] = { 0 }; //주사위의 면의 빈도를 0으로 초기화!
srand((unsigned)time(NULL));
for (i = 0; i < 1000; i++) {
frequency[rand() % 6]++; //0~5까지의 수 중 하나 증가
}
for (i = 0; i < SIZE; i++) {
printf(" %d %d\n", i, frequency[i]);
}
return 0;
}
Lab: 극장 예약 시스템
//극장 예약 시스템
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define SIZE 10
int main(void) {
char ans1;
int i;
int seat[SIZE] = { 0 };
while (1) {
printf("좌석을 예약하시겠습니까?(y 또는 n) ");
scanf(" %c", &ans1); //%c앞에 공백 추가!
if (ans1 == 'n')
break;
printf("------------------------\n");
printf("1 2 3 4 5 6 7 8 9\n");
printf("------------------------\n");
for (i = 0; i < 10; i++) {
printf("%d ", seat[i]);
}
printf("\n");
int where; //몇 번째 좌석
printf("몇 번째 좌석을 예약하시겠습니까? ");
scanf("%d", &where);
if (seat[where - 1] == 0) {
printf("예약되었습니다.\n");
seat[where - 1]++;
}
else {
printf("이미 예약된 자리입니다.\n");
}
}
return 0;
}
- scanf(" %c", &ans1);: 사용자로부터 입력을 받을 때 %c 형식 지정자 앞에 공백을 추가하여, 이전 입력에서 남은 엔터 등을 소비합니다. 이렇게 하면 이후에 입력이 원하는 대로 작동합니다.
Lab: 최솟값 찾기
//최솟값 찾기
#include <stdio.h>
#include <stdlib.h>
#define SIZE 10
int main(void) {
int i;
int price[SIZE];
srand((unsigned)time(NULL));
printf("---------------------------\n");
for (i = 0; i < SIZE; i++) {
printf("%d ", i + 1);
}
printf("\n---------------------------\n");
for (i = 0; i < SIZE; i++) {
price[i] = (rand() % 100) + 1;
printf("%d ", price[i]);;
}
int min = price[0]; //최솟값 임의로 설정
for (i = 1; i < SIZE; i++) { //새로운 for문에서 작성해야 함
if (price[i] < min)
min = price[i];
}
printf("\n\n최솟값은 %d입니다.\n", min);
return 0;
}
- 최솟값 임의로 설정하고, for문을 다시 작성해야 함
배열과 함수
//배열이 함수의 인수인 경우
#include <stdio.h>
#define STUDENT 5
int get_average(int scores[], int n); //평균 구하는 함수
int main(void) {
int scores[STUDENT] = { 1, 2, 3, 4, 5 };
int avg;
avg = get_average(scores, STUDENT); //배열이 인수인 경우, 배열의 주소가 전달됨
printf("평균은 %d입니다.\n", avg);
return 0;
}
int get_average(int scores[], int n) { //배열의 원본이 scores[]로 전달됨
int i;
double sum = 0;
for (i = 0; i < n; i++)
sum += scores[i];
return sum / n;
}
//배열이 함수의 인수인 경우 - 2
#include <stdio.h>
#define SIZE 7
void modify_array(int a[], int size); //함수 미리 선언
void print_array(int a[], int size);
int main(void) {
int list[SIZE] = { 1, 2, 3, 4, 5, 6, 7 };
print_array(list, SIZE); //함수 호출
modify_array(list, SIZE);
print_array(list, SIZE);
return 0;
}
void modify_array(int a[], int size) { //modify_array 함수
int i;
for (i = 0; i < SIZE; i++) {
a[i]++;
}
}
void print_array(int a[], int size) { //print_array 함수
int i;
for (i = 0; i < SIZE; i++) {
printf("%d ", a[i]);
}
printf("\n");
}
2차원 배열
//2차원 배열의 활용
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ROWS 3
#define COLS 5
int main(void) {
int s[ROWS][COLS]; //2차원 배열 선언
int i, j; //2개의 인덱스 변수
srand((unsigned)time(NULL));
for (i = 0; i < ROWS; i++) {
for (j = 0; j < COLS; j++) {
s[i][j] = rand() % 100;
}
}
for (i = 0; i < ROWS; i++) {
for (j = 0; j < COLS; j++) {
printf("%d ", s[i][j]);
}
printf("%\n");
}
return 0;
}
2차원 배열의 초기화
//2차원 배열의 초기화
#include <stdio.h>
#define ROWS 3
#define COLS 5
int main(void) {
int a[ROWS][COLS] = { {1, 2, 3, 4, 5}, {1, 2, 3, 4, 5}, {1, 2, 3, 4, 5} };
int i;
for (i = 0; i < ROWS; i++) {
double final_scores = a[i][0] * 0.3 + a[i][1] * 0.4 + a[i][2] * 0.2 + a[i][3] * 0.1 - a[i][4];
printf("학생 %d의 최종성적 = %f\n", i + 1, final_scores);
}
return 0;
}
행렬
//다차원 배열을 이용한 행렬의 표현
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define ROWS 2
#define COLS 2
int main(void) {
int i, j;
int x[ROWS][COLS];
int y[ROWS][COLS];
int z[ROWS][COLS];
for (i = 0; i < ROWS; i++) {
for (j = 0; j < COLS; j++) {
scanf("%d", &x[i][j]);
}
}
for (i = 0; i < ROWS; i++) {
for (j = 0; j < COLS; j++) {
scanf("%d", &y[i][j]);
}
}
for (i = 0; i < ROWS; i++) {
for (j = 0; j < COLS; j++) {
z[i][j] = x[i][j] + y[i][j];
printf("%d ", z[i][j]);
}
printf("\n");
}
return 0;
}
'Programming > 컴퓨터프로그래밍및실습' 카테고리의 다른 글
[컴프실] 제10장-2: 정렬 (0) | 2023.07.23 |
---|---|
[컴프실] 9~12일차 실습문제 (0) | 2023.07.20 |
[컴프실] 제9장: 함수와 변수 (0) | 2023.07.17 |
[컴프실] 제8장: 함수 (0) | 2023.07.16 |
[컴프실] 제7장: 반복문 (0) | 2023.07.11 |