1. 문자열
: 문자 배열
문자열을 문자배열에 넣으면 각 문자가 각 방에 순서대로 들어간다.
%s라는 서식문자로 배열의 시작주소를 알려주면 널문자까지 읽는다.
널문자('\0') : 문자열의 끝을 알려주는 역할
널(NULL), 0 : 포인터 초기값
2. 오늘 실습코드
1) string.c
#include<stdio.h>
void main() {
//const char nation[6] = "korea";
char nation[6] = "korea";
//접근해서 수정하는 것을 막아준다.
//따라서 scanf_s()로 입력받을 수 없다.
const char* nation2 = "japan";
//포인터자료형 앞에 const는 참조상수
//포인터명 앞에 const는 상수
const char* const nation3 = "china";
printf("%s\n", nation);
//nation = "japan";
nation2 = "korea";
//nation3 = "korea";
}
2) stringTest.c
#include<stdio.h>
#include<string.h>
void main() {
char nation[6] = "korea";
//scanf("%s", 배열명)
//배열의 크기보다 입력받은 값이 커도 다 대입된다.
//데이터 손실!
//scanf_s("%s", 배열명, sizeof(배열명))
//배열의 크기보다 입력받은 값이 크면
//아무것도 들어가지 않는다.
//데이터 손실 방지!
//printf("국가 : ");
//scanf_s("%s", nation, sizeof(nation));
//strcpy_s 문자열 복사
//strcpy_s(nation, sizeof(nation), "china");
//printf("%s\n", nation);
//strlen 널문자 포함 안 된 문자열 길이 구하기
printf("%d\n", strlen(nation));
//strcmp("값1", "값2");
//1 : 값1의 첫문자가 값2의 첫문자보다 클 때(아스키 코드 값이 클 때)
printf("%d\n", strcmp(nation, "china"));
//0 : 두 문자열이 같을 때
printf("%d\n", strcmp(nation, "korea"));
//-1 : 값1의 첫문자가 값2의 첫문자보다 작을 때(아스키 코드 값이 작을 때)
printf("%d\n", strcmp(nation, "rome"));
}
3) owner.c
#include<stdio.h>
#define L 3
void main() {
//1층 1호 2호 3호
int arIncome[L] = { 0 , };
//총 월세, 평균 월세(백원단위)
int total = 0;
double avg = 0.0;
for (int i = 0; i < L; i++) {
printf("%d호 월세 입력(단위:만원)\n", i + 1);
scanf_s("%d", arIncome + i);
total += arIncome[i];
}
avg = (total + 0.0) / L;
printf("1층 총 월세 : %d만원\n", total);
printf("1층 평균 월세 : %.2f만원\n", avg);
}
4) owner2.c
#include<stdio.h>
#define L 3
void main() {
//나이키
//강남점, 홍대점, 이태원점
//입력 예) 강남점 매출액 입력(단위 : 만원)
//나이키 총 매출액과 평균 매출액(천원단위) 출력
//평균 매출액보다 높은 매장은 인센티브 매장으로 출력
//출력 예)
//인센티브 매장
//홍대점
//이태원점
//문자열 배열(지점명)
const char* arBranch[] = { "강남점", "홍대점", "이태원점" };
//정수 배열(매출액)
int arIncome[L] = { 0 , };
//나이키 총 매출액
int total = 0;
//나이키 평균 매출액
double avg = 0.0;
//Flag
//int는 4byte이다. 메모리를 절약하기 위해서
//문자로 선언한다.
//int check = 0;
char check = '0';
//지점 개수만큼 반복
for (int i = 0; i < L; i++) {
//각 지점명을 순서대로 출력
printf("%s 매출액 입력(단위:만원)\n", arBranch[i]);
//입력받은 매출액을 순서대로 arIncome에 저장
scanf_s("%d", arIncome + i);
//입력받은 매출액을 total에 누적
total += arIncome[i];
}
//누적된 총 매출액을 지점개수로 나누어 평균 추출
avg = (double)total / L;
/*결과 출력*/
printf("나이키 총 매출액 : %d만원\n", total);
printf("나이키 평균 매출액 : %.1f만원\n", avg);
printf("==================================\n");
/*평균보다 높은 매출액 매장 출력*/
printf("★인센티브 매장★\n");
for (int i = 0; i < L; i++) {
//모든 매장의 매출액을 평균과 비교
if (arIncome[i] > avg) {
//인센티브 매장은 이 영역으로 들어옴
printf("%s(%d만원)\n", arBranch[i], arIncome[i]);
//인센티브를 받을 매장이 한 개라도 있다면
//check를 '1'로 변경
//check = 1;
check = '1';
}
}
//check에 -48을 해주면 정수 0(거짓)또는 1(참)로 바뀐다.
//위의 for문에서 if문에 한 번도 들어가지 않았다면
//들어가서 "없습니다."를 출력한다.
//if (!check) {
if (!(check - 48)) {
//'0' : 48 - 48 == 0
//'1' : 49 - 48 == 1
printf("없습니다.\n");
}
}
'웹_프론트_백엔드 > 단과' 카테고리의 다른 글
[단과_C] 2020.02.27 (0) | 2020.02.27 |
---|---|
[단과_C] 2020.02.26 (0) | 2020.02.27 |
[단과_JAVA] 2020.02.25 (0) | 2020.02.26 |
[단과_C] 2020.02.24 (0) | 2020.02.25 |
[단과_JAVA] 2020.02.24 (0) | 2020.02.25 |