2019-01-16

Hyeonu_Chun·2021년 6월 21일
0

HW44

#pragma warning (disable : 4996)
#include <stdio.h>

void inputInt(int *,int *);
int inputCh(int, int);
void output(int,int,int);
void myflush();

int main() {
	int start, finish, num;
	inputInt(&start, &finish);
	num = inputCh(start, finish);
	output(start, finish, num);
	return 0;
}

void inputInt(int *start, int *finish) {
	int num;
	while (1) {
		printf("# 시작 값을 입력하시오 : ");
		scanf("%d", &num);
		if (getchar() == '\n') {
			if(num >= 0) *start = num;
			break;
		}
		else myflush();
	}
	while (1) {
		printf("# 끝 값을 입력하시오 : ");
		scanf("%d", &num);
		if (getchar() == '\n') {
			if (num >= 0) {
				if (num > *start) {
					*finish = num;
					break;
				}
			}
		}
		else myflush();
	}
	return;
}

int inputCh(int start, int finish) {
	char ch;
	while (1) {
		printf("* %d~%d 까지의 짝수의 합을 구할까요? 홀수의 합을 구할까요?(짝수:e/홀수:o) : ", start, finish);
		scanf("%c", &ch);
		if (getchar() == '\n') {
			if (ch == 'e') return 1;
			else if (ch == 'o') return 0;
		}
		else myflush();
	}
}

void output(int start, int finish, int num) {
	int sum = 0;
	if (num == 1) {
		printf("  %d~%d 까지의 짝수( \b", start, finish);
		for (int i = start; i <= finish; i++) {
			if (i % 2 == 0) {
				printf(" %d", i);
				sum += i;
			}
		}
		printf(")의 합은 %d 입니다.", sum);
	}
	else {
		printf("  %d~%d 까지의 홀수( \b", start, finish);
		for (int i = start; i <= finish;i++) {
			if (i % 2 == 1) {
				printf(" %d", i);
				sum += i;
			}
		}
		printf(")의 합은 %d 입니다.", sum);
	}
	return;
}

void myflush() {
	while (getchar() != '\n');
	return;
}

HW46

#pragma warning (disable : 4996)
#include <stdio.h>
#include <string.h>

int yearCheck(int);
void inputDay(int *);
int errorCheck(int *);
int dayCalc(int *);
void output(int *, int);
void myflush();

int main() {
	int res;
	while (1) {
		int num[3] = { 0, };
		inputDay(num);
		if (num[0] == 0 || num[1] == 0 || num[2] == 0) break;
		else {
			res = dayCalc(num);
			output(num, res);
		}
	}
	return 0;
}

void inputDay(int *num) {
	int res;
	while (1) {
		printf("* 년 월 일을 입력하시오 : ");
		scanf("%d %d %d", num, num + 1, num + 2);
		if (getchar() == '\n') {
			res = errorCheck(num);
			if (res == 1) break;
			continue;
		}
		else {
			num[0] = 0;
			break;
		}
		myflush();
	}
	return;
}

int errorCheck(int *num) {
	int month[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
	if (num[1] >= 1 && num[1] <= 12) {
		if (yearCheck(num[0]) == 1) {
			if (num[1] == 2) {
				if (num[2] >= 1 && num[2] <= 29) return 1;
			}
			else {
				if (num[2] >= 1 && num[2] <= month[num[1] - 1]) return 1;
			}
		}
		else {
			if (num[2] >= 1 && num[2] <= month[num[1] - 1]) return 1;
		}
	}
	return 0;
}

int dayCalc(int *num) {
	int sum = 0;
	int month[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
	for (int i = 1900; i < num[0]; i++) {
		if (yearCheck(i) == 1) {
			sum += 366;
		}
		else {
			sum += 365;
		}
	}
	if (yearCheck(num[0]) == 1) {
		if (num[1] <= 2) {
			for (int i = 0; i < (num[1] - 1); i++) {
				sum += month[i];
			}
			sum += num[2];
		}
		else {
			for (int i = 0; i < (num[1] - 1);i++) {
				sum += month[i];
			}
			sum += num[2] + 1;
		}
	}
	else {
		for (int i = 0;i < (num[1] - 1);i++) {
			sum += month[i];
		}
		sum += num[2];
	}
	return sum;
}

void output(int *num, int res) {
	char day[10];
	switch (res % 7) {
	case 0: strcpy(day, "일요일"); break;
	case 1: strcpy(day, "월요일"); break;
	case 2: strcpy(day, "화요일"); break;
	case 3: strcpy(day, "수요일"); break;
	case 4: strcpy(day, "목요일"); break;
	case 5: strcpy(day, "금요일"); break;
	case 6: strcpy(day, "토요일"); break;
	}
	printf("  %d년 %d월 %d일은 %s입니다.\n\n", num[0], num[1], num[2], day);
	return;
}

int yearCheck(int num) {
	if (num % 4 != 0) {
		return 0;
	}
	else {
		if (num % 100 != 0) {
			return 1;
		}
		else {
			if (num % 400 == 0) {
				return 1;
			}
			else {
				return 0;
			}
		}
	}
}

void myflush() {
	while (getchar() != '\n');
	return;
}
profile
Stay hungry, stay foolish

0개의 댓글