2019-01-16
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;
}
Reference
この問題について(2019-01-16), 我々は、より多くの情報をここで見つけました https://velog.io/@hyeonu_chun/2019-01-16テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol