웹_프론트_백엔드/단과

[단과_C] 2020.02.25

shine94 2020. 2. 26. 13:19

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