220829 C언어#8, 앱인벤터#10

김혜진·2022년 8월 29일
0

C언어

목록 보기
8/13

C언어 #8

배열

배열의 초기화

  • 배열의 길이와 초기값의 개수가 일치하는 경우 가장 이상적인 초기화 형태이다.
int array[5] = {1,2,3,4,5};

배열의 요소 == 변수

#include<stdio.h>

int main(void) {

	int total = 0;
	int arr[5] = { 1,2,3,4,5 };

	total = arr[0] + arr[1] + arr[2] + arr[3] + arr[4];
	printf("배열의 총합은 %d입니다.\n", total);
	
	return 0;
}

출력결과
배열의 총합은 15입니다.

  • 배열의 길이보다 초기값의 개수가 작은 경우
int array[5] = { 1,2 };
#include<stdio.h>

int main(void) {

	int total = 0;
	int arr[5] = { 1,2 };

	total = arr[0] + arr[1] + arr[2] + arr[3] + arr[4];
	printf("배열의 총합은 %d입니다.\n", total);
	
	return 0;
}

출력결과
배열의 총합은 3입니다.

array[3,4,5]는 각각 0으로 초기화 된다.

  • 배열의 길이보다 초기값의 개수가 큰 경우 "오버플로우"
#include<stdio.h>

int main(void) {

	int total = 0;
	int arr[5] = { 1,2,3,4,5,6 };

	total = arr[0] + arr[1] + arr[2] + arr[3] + arr[4];
	printf("배열의 총합은 %d입니다.\n", total);
	
	return 0;
}

용량 초과로 에러를 유발하게 된다.

  • 배열의 길이가 빠져 있는 경우
int array[] = { 1,3,5,7,9 };
#include<stdio.h>

int main(void) {

	int total = 0;
	int arr[] = { 1,3,5,7,9 };

	total = arr[0] + arr[1] + arr[2] + arr[3] + arr[4];
	printf("배열의 총합은 %d입니다.\n", total);
	
	return 0;
}

출력결과
배열의 총합은 25입니다.

초기값의 개수를 보고 컴파일러는 배열의 길이를 계산한다.
배열의 길이는 5로 설정한다.

배열의 복사

배열은 요소끼리 복사해야 한다.

#include<stdio.h>

int main(void) {

	int total = 0;
	int arr[5] = { 1,2,3,4,5 };
	int dest[5];
	
	dest[0] = arr[0];
	dest[1] = arr[1];
	dest[2] = arr[2];
	dest[3] = arr[3];
	dest[4] = arr[4];

	total = dest[0] + dest[1] + dest[2] + dest[3] + dest[4];
	printf("배열의 총합은 %d입니다.\n", total);
	
	return 0;
}

출력결과
배열의 총합은 15입니다.

for문으로 바꾸기

#include<stdio.h>

int main(void) {

	int total = 0;
	int arr[5] = { 1,2,3,4,5 };
	int dest[5];

	for (int i = 0; i < 5; i++) {
		dest[i] = arr[i];
		total += dest[i];
	}

	printf("배열의 총합은 %d입니다.\n", total);
	
	return 0;
}

● 길이가 3인 배열 arr1, arr2 선언 후 arr1을 arr2에 복사하고 arr2 배열의 요소 출력

#include<stdio.h>

int main(void) {
	int arr1[3] = { 1,2,3 };
	int arr2[3];

	for (int i = 0; i < 3; i++) {
		arr2[i] = arr1[i];
		printf("%d ", arr2[i]);
	}

	return 0;
}

출력결과
1 2 3

● 배열 요소를 역순으로 저장하고 복사, 출력

#include<stdio.h>

int main(void) {
	int arr1[5] = { 1,2,3,4,5 };
	int arr2[5];

	for (int i = 0; i < 5 ; i++) {
		arr2[i] = arr1[4-i];
		printf("배열 arr2[%d] =  %d\n", i, arr2[i]);
	}

	return 0;
}

출력결과
배열 arr2[0] = 5
배열 arr2[1] = 4
배열 arr2[2] = 3
배열 arr2[3] = 2
배열 arr2[4] = 1

배열과 문자열

  • 문자열 변수란
    printf("HelloWorld");의 문자열인 HelloWorld는 그 자체로 상수
    문자열의 이름도 없으므로 변수가 아닌 상수
char str[12] = "Hello World"

문자열을 세어보면 총 11개인데, 11+1로 1개 더 설정한 이유는 문자열의 끝에 null문자가 추가되기 때문이다. (\0)

null 문자를 쓰는 이유?

#include<stdio.h>

int main(void) {
	char str[] = "Hello World";
	printf("*** 문자열 변경 전 ***\n");
	printf("%s\n\n", str);

	str[6] = 'K';
	str[7] = 'o';
	str[8] = 'r';
	str[9] = 'e';
	str[10] = 'a';

	printf("*** 문자열 변경 후 ***\n");
	printf("%s \n\n", str);

	return 0;
}

출력결과
*** 문자열 변경 전 ***
Hello World

*** 문자열 변경 후 ***
Hello Korea

null 문자에 관하여

문자열의 끝에는 null 문자가 추가된다.

  • null 문자의 필요성
char str[100] = "Beautiful";

문자수는 9개, 배열의 개수는 100개, 91개의 공간이 빈다
91개의 공간에는 쓰레기 값으로 채워져 있다.
사람은 구분이 가능하지만, 컴퓨터는 구분이 불가능하다.
컴퓨터가 문자열의 끝을 인식하기 위해 \0을 표시한다.
"Beautiful"의 공간은 9개가 아니라 null을 포함하여 10개이다.

컴퓨터에게 \0(null)값 까지만 해석하라는 의미
때문에 모든 문자열은 저장하기 위한 공간이 +1이 필요하다. 자동으로 포함됨.

#include<stdio.h>

int main(void) {

	char str1[100] = "Beautiful";

	for (int i = 0; i < 10; i++) {
		printf("%c ", str1[i]);
	}
	printf("\n");
	printf("str1 = %s \n", str1);

	return 0;
}

출력결과
B e a u t i f u l
str1 = Beautiful

int main(void) {

	char str1[] = "hello world";
	printf("str1 = %s\n", str1);

	str1[3] = '\0';
	printf("str1 = %s\n", str1);

	str1[0] = '\0';
	printf("str1 = %s\n", str1);

	return 0;
}

출력결과
str1 = hello world
str1 = hel
str1 =


앱인벤터 #10

오늘 뭐 먹지?

  • Screen2 디자인
  • Screen2 블록

  • Screen3 디자인

  • Screen3블록

인공지능 앱

  • 디자인

확장 기능 Look 다운로드

  • 블록
profile
알고 쓰자!

0개의 댓글