목차
A. 선언, 사용 |
B. 문자를 저장하는 배열 |
C. 정리하기 |
A. 선언, 사용
____1. 선언, 사용, 초기화
int ary[5]; // 4바이트 * 5 배열 선언
ary[0] = 10; //사용할 때(첫번째 요소를 10으로)
scanf("%d",&ary[3]); //키보드로부터 입력받아 4번째 요소에 저장
값을저장하지 않으면 가비지 값이 출력,
int ary[5] ={1,2,3,4,5}; //선언과 동시에 초기화, 중괄호로 묶어서.
int ary[5] ={1,2,3}; // 왼ㅉ고부터 차례로 3개 초기화하고 남은 요소는 0으로 채움.
int ary[1000] ={0}; //많은 배열 요소를같은 값으로 초기화.
int ary[] = {1,2,3}; //요소 개수생략가능.
double형 배열과 char형 뱌열을 선언하고 초기화
____2. 반복문
for (i = 0; i < 5; i++)
{
scanf(("%d",&arr[i]);
}
뱌열은 반복문과 조합하는 일이 많다.
____3. sizeof연산자 활용한 배열처리
-배열 요소의 개수가 가변적일 때나 모를 때는 sizeof연산자를 이용하면 된다.
#include <stdio.h>
int main(void)
{
int score[5];
int i;
int total = 0;
double avg;
int count; // 배열 요소의 개수를 저장할 변수
count = sizeof(score) / sizeof(score[0]); // 배열 요소의 개수 계산
for (i = 0; i < count; i++) // 11행에서 계산한 count만큼 반복
{
scanf("%d", &score[i]);
}
for (i = 0; i < count; i++) // 11행에서 계산한 count만큼 반복
{
total += score[i];
}
avg = total / (double)count; // 총합을 count로 나누어 평균 계산
for (i = 0; i < count; i++) // 11행에서 계산한 count만큼 반복
{
printf("%5d", score[i]);
}
printf("\n");
printf("평균 : %.1lf\n", avg);
return 0;
}
count = sizeof(score) / sizeof(score[0]); // 배열 요소의 개수 계산, 결과로 배열 요소의 개수가 나온다.
avg = total / (double)count; // 총합을 count로 나누어 평균 계산 , 평균을 구할 때도 쓴다.
B. 문자를 저장하는 배열
-문자열을 저장할 때 주로 씀.
____1. char형 배열-선언 초기화
- 저장 할 문자 길이보다 최소 1 이상 커야 함. \0(널 문자)가 마지막에 와서 끝을 알려 주어야 해서.
#include <stdio.h>
int main(void)
{
char str[80] = "applejam"; // 문자열 초기화
printf("최초 문자열 : % s\n", str); // 초기화 문자열 출력
printf("문자열 입력 : ");
scanf("%s", str); // 새로운 문자열 입력
printf("입력 후 문자열 : %s\n", str); // 입력된 문자열 출력
return 0;
}
- 초기화할 때, 일반배열과 같이 중괄호로해도 되지만, 보통 문자열 상수로 초기화함.
char str[80] = "applejam"; // 문자열 초기화
널 문자는 남는 char형 배열에 저장 널 문자는 아스키 코드값이 0인 문자로, 결국 남는 배열에 0을 저장하는 것.
문자상수로 나타낼 때 \0 으로 씀. 문자열의 끝을 표시. 배열의 크기가 저장한 문자열보다 크더라도 자장한 문자열만큼 표시하기 위한 용도.
- 주의사항
배열 크기는 넉넉하게
최소한 문자열 길이+1
____2. 문자열 대입
-
#include <stdio.h>
#include <string.h> // 문자열 관련 함수 원형을 모아놓은 헤더 파일
int main(void)
{
char str1[80] = "cat";
char str2[80];
strcpy(str1, "tiger"); // str1 배열에 "tiger" 복사
strcpy(str2, str1); // str2 배열에 str1 배열의 문자열 복사
printf("%s, %s\n", str1, str2);
return 0;
}
strcpy char형 배열에 새로운 문자열을 저장하는 함수
저장할 문자열의 길이를 파악해서 딱 그 길이만큼만 배열에 복사.(널 길이 포함)
string.h에 있음.
strcpy(str1, "tiger"); // str1 배열에 "tiger" 복사
strcpy(str2, str1); // str2 배열에 str1 배열의 문자열 복사
배열명은 배열 시작 위치 주소를 가리키기 때문에 문자열 대입 연산자의 왼쪽에 배열명이 올 수 없다.(포인터에서 재확인)
____3. 전용 입출력 함수:gets,puts
- scanf는 빈 칸이 있으면 그 전까지만 입력받음.
gets는 빈 칸 포함 한 줄 입력. puts 는 출력(char형 배열명을 주면 문자열출력 후 자동 줄 바꿈.)
문자열 입력 중간에 빈칸이나 탭 문자 사용가능, 엔터키 누르기 전까지 전체를 하나의 문자열로 저장.
입력할 배열의 크기를 검사하지 않으므로 배열보다 긴 문자열을 입력하면 메모리 영역 침범 가능. 입력하는 사람이 메모리 접근 가능.
문자열 끝에 널 문자가 없으면 나올 때 까지 출력-에러도날 수 있음.
대제목C. 정리하기
____1. 요약
배열-관련된 많은 변수를 한 번에 선언하는 효과
초기화엔 중괄호. 활용은 주로 반복문과 sizeof연산.
chha형 배열은 문자열 저장하는 변수의 역할 문자열로 직접 초기화 가능(중괄호 없이)char형 배열에는 대입 연산자가 아니라 strcpy 함수로 문자열 저장
____2 .문제풀이
-대소문자 변환프로그램: 키보드 입력으로 문장을 받아서 소문자로 바꾸기. 바뀐 뀐문장과 문자의 수도 출력하기
#include <stdio.h>
#include <ctype.h>
int main(void) {
char str[100];
int count = 0;
printf("문장 입력: ");
gets(str);
for(int i=0;i<strlen(str);i++)
{
if(isupper(str[i]))
{
str[i]=tolower(str[i]);
count++;
}
}
printf("바뀐 문장: ");
puts(str);
printf("바뀐 문자 수: %d",count);
return 0;
}
____3. 궁금한 점
https://velog.io/@sp1rit/%ED%91%9C%EC%A4%80-%EC%9E%85%EC%B6%9C%EB%A0%A5%EA%B3%BC-%EB%B2%84%ED%8D%BC
https://8ublictip.tistory.com/7
https://m.blog.naver.com/squel819/100070716966
https://andyader.blogspot.com/2014/03/gets.html
-
'Tech > Coding' 카테고리의 다른 글
🐨알고리즘] 비트 필드를 활용한 다이나믹 프로그래밍 (1) | 2024.03.24 |
---|---|
C 언어 기본] 포인터 (1) | 2024.03.23 |
🐨그리디 알고리즘 (3) | 2024.03.19 |
C언어 기본] 01 프로그램 만들기 (0) | 2024.03.04 |
10844번 쉬운 계단 수 (0) | 2024.03.03 |