C - 배열
배열
동일한 일련의 데이터 타입들을 연속적으로 나열한 것.
배열의 선언
int a[10] // 크기가 10인 정수 배열 a 선언
배열의 크기 가져오기
sizeof() 연산자: 메모리에서 차지하는 공간의 크기를 가져오는 연산자
#include<stdio.h>
main() {
int a[10];
printf("%d",sizeof a);
}
또는
#include<stdio.h>
main() {
int a[10];
printf("%d",sizeof(a));
}
sizeof() 연산를 이용하여 배열의 크기를 구할 수 있다.
#include<stdio.h>
main() {
int a[10];
printf("%d",sizeof(a)/sizeof(int));
}
배열을 이용한 for 문
#include<stdio.h>
main() {
int s[10] = {10,14,3,5,9,20,7,2,5,4};
int i;
int count = 0;
for(i=0;i<(sizeof(s)/sizeof(int));i++) {
printf("s[%d]=%d",i,s[i]);
}
}
printf("count = %d",count);
}
예시
합계 구하기, 평균 구하기
#include<stdio.h>
main() {
int s[10] = {10,14,3,5,9,20,7,2,5,4};
int i, sum = 0; // 합계를 저장할 변수 sum 선언
float avr; // 평균을 저장할 변수 avr 선언
int s_length = (sizeof(s)/sizeof(int)
for(i=0;i<s_length);i++) {
sum += s[i]; // 배열 s의 모든 정수 값들을 sum에 더하기
}
avr = (float) sum / s_length // 평균 구하기
printf("sum = %d, avr = %d",sum,avr);
}
최소값 구하기
#include<stdio.h>
main() {
int s[10] = {10,14,3,5,9,20,7,2,5,4};
int i, min = s[0];
for(i=0;i<(sizeof(s)/sizeof(int));i++) {
if(min>s[i]) {
min = s[i];
}
}
printf("min = %d",min);
}
짝수 개수 구하기
#include<stdio.h>
main() {
int s[10] = {10,14,3,5,9,20,7,2,5,4};
int i;
int count = 0;
for(i=0;i<(sizeof(s)/sizeof(int));i++) {
if(s[i] % 2 == 0) {
count++;
}
}
printf("count = %d",count); // count = 5
}
버블 정렬(Bubble sort)
#include <stdio.h>
main() {
int x[]={10,17,22,14,19,4,25,12,35,9};
int t,i,k;
// t = temp : 두 데이터의 값을 교환(swap)해줄 때 사용.
printf("\n");
for(k=(sizeof (x)/sizeof (int));k>1;k--) {
for(i=0;i<k;i++) {
if(x[i]>x[i+1]) { // 큰 값이 뒤쪽(오른쪽)으로 가도록 함.
// swap : 두 데이터의 값을 교환해줌.
t = x[i];
x[i] = x[i+1];
x[i+1] = t;
}
}
}
for(i=0;i<10;i++) {
printf("%d ",x[i]);
}
}
위처럼 nested for 문 (for문 안에 for문)을 사용하여 순차
달력 만들기
한 달 예시로 출력
#include <stdio.h>
main() {
int day_cnt;
for(day_cnt=1;day_cnt<=31;day_cnt++) {
if(day_cnt%7==1 && day_cnt != 1)
printf("\n");
printf("%2d ",day_cnt);
}
}
2월이 28일이라 가정했을 때
#include <stdio.h>
main() {
int day_cnt,month_cnt;
// day_cnt : 각 달마다 숫자를 찍어냄. ex. 1월의 경우 31일까지 있으므로, 1,2,..,31
// month_cnt : 일년동안 각 달의 일수를 요소로 담고 있는 month 배열의 인덱스 값을 저장하기 위함.
// ex. 2월에 대해서 출력하고 싶을 경우 month[month_cnt] 값은 28이다.
int temp = 0;
// 달력의 가로 폭에 맞춰서 요일에 대응하는 날짜에 숫자를 찍기 위한 값.
// 예를 들어, 이번 달이 수요일에 끝나고 다음 달이 목요일부터 시작한다고 할때
// 이번달 마지막 주에 날짜를 출력한 횟수를 temp에 저장해두고, 다음 달에 temp만큼 공백을 찍어준다.
int i;
// 공백을 출력해주기 위한 임시 변수.
int month[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
for(month_cnt = 0;month_cnt<sizeof (month)/sizeof (int);month_cnt++) {
printf("<<%d월>>\n",month_cnt + 1); // month_cnt는 배열의 인덱스로 사용할 값이지만, +1 을 해주면 현재 달의 숫자와 같다.
printf("월 화 수 목 금 토 일\n");
for(i=0;i<temp;i++) {
printf(" ");
}
// 달 마다 1일이 월요일부터 시작되는 문제를 막기 위해서
// 해당 달이 시작되고서 저번 달에 진행된 요일의 다음 요일부터 1일을 시작하도록 함.
for(day_cnt=1;day_cnt<=month[month_cnt];day_cnt++) {
if(temp == 21) {
printf("\n");
temp = 0;
}
printf("%2d ",day_cnt);
temp += 3;
}
// 해당 달에 대해서 날짜 수를 모두 출력했으면 점선을 출력한다.
printf("\n------\n");
}
}
2차원 배열
부호 절대치 sign magnitude
보수
k에 대한 n의 보수 -> k가 n이 되기 위해 보충해준 수. k에 대한 n-1의 보수 -> k가 n-1이 되기 위해 보충해준 수.
9의 보수 개념
8 - (2) = 6 8 + (7) = 15 => 5 => 5+1 => 6
10의 보수 개념
1의 보수
표현 범위 : -(2^(n-1)-1) ~ +(2^(n-1)-1)
2의 보수
표현 범위 : -(2^(n-1)) ~ +(2^(n-1)-1)
댓글남기기