01maxof3num.cpp
/*
* 【基本题】有三个整数a、b、c,由键盘输入,输出其最大的数。
*/
#include <stdio.h>
/*
* 返回 3个整数的 最大值
*/
int max(int a, int b, int c)
{
int temp = 0;
a > b ? temp = a : temp = b;
c > temp ? temp = c : temp = temp;
return temp;
}
int main()
{
int a;
int b;
int c;
printf("请输入3个整数(如:3 14 36) : \n");
scanf("%d%d%d", &a, &b, &c);
printf("最大的数为:%d\n", max(a, b, c));
getchar();
getchar();
return 0;
}
02outputEverNum.cpp
/*
* 【基本题】给一个不多于5位的正整数,要求如下:
* 1、求出它是几位数
* 2、分别输出每一位数字
* 3、按逆序输出各位数字,例如原数为321,应输出123
*
*/
#include <stdio.h>
//求出它是几位数
int digNum(int dig)
{
int i = 0;
while(dig)
{
dig /= 10;
i++;
}
return i;
}
//递归输出每一位数字
void showNum(int num)
{
if(num < 10)
{
printf("%d ", num);
}
else
{
showNum(num/10);
showNum(num%10);
}
}
//按逆序输出各位数字,例如原数为321,应输出123
void showRevNum(int num)
{
if(num < 10)
{
printf("%d ", num);
}
else
{
showRevNum(num%10);
showRevNum(num/10);
}
}
int main()
{
int flag = 1;
int num;
while(flag)
{
printf("请输入一个不多于5位的正整数 : \n");
scanf("%d", &num);
if(num / 100000 > 0 || num <= 0) printf("输入有误\n");
else flag = 0;
}
printf("%d 位\n", digNum(num));
printf("正序输出\n");
showNum(num);
printf("\n逆序输出\n");
showRevNum(num);
getchar();
getchar();
return 0;
}
05showNextTime.cpp
/*
* 【选做题】输入一个时间(年、月、日、时、分、秒),判断时间是否合法,输出下一秒的时间
* 例如:输入2000-2-29 23:59:59
* 输出2000-3-1 0:0:0
*
*/
#include <stdio.h>
struct Date
{
int year;
int month;
int day;
int hour;
int minute;
int second;
};
//判断是否是闰年
bool isLeapYear(int year)
{
return ((year%4==0 && year%100!=0) || (year%400==0));
}
//判断时间是否合法
bool isLegalDate(Date date)
{
int Month_Day[2][12] = {
{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
{31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}};
if(date.year <= 0) return false;
if(date.month <= 0 || date.month > 12) return false;
if(date.day <= 0 || date.day > Month_Day[isLeapYear(date.year)][date.month-1]) return false;
if(date.hour < 0 || date.hour > 23) return false;
if(date.minute < 0 || date.minute >= 60) return false;
if(date.second < 0 || date.second >= 60) return false;
return true;
}
//计算下一秒时间
Date nextSec(Date date)
{
int Month_Day[2][12] = {
{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
{31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}};
int c1 = 0; //下面的进位
int c2 = 0; // 向上的进位
date.second ++;
//秒
c1 = date.second / 60;
date.second %= 60;
//分
date.minute += c1;
c1 = date.minute / 60;
date.minute %= 60;
//时
date.hour += c1;
c1 = date.hour / 24;
date.hour %= 24;
//日
date.day += c1;
c1 = date.day / Month_Day[isLeapYear(date.year)][date.month-1];
date.day %= Month_Day[isLeapYear(date.year)][date.month-1];
// 月
date.month += c1;
c1 = date.month / 12;
date.month %= 12;
// 年
date.year += c1;
return date;
}
int main()
{
Date d1;
scanf("%d-%d-%d %d:%d:%d", &d1.year, &d1.month, &d1.day, &d1.hour, &d1.minute, &d1.second);
if(!isLegalDate(d1))
{
printf("不合法\n");
getchar();
getchar();
return 0;
}
Date nextDate = nextSec(d1);
printf("%d-%d-%d %d:%d:%d\n", nextDate.year, nextDate.month, nextDate.day, nextDate.hour, nextDate.minute, nextDate.second);
getchar();
getchar();
return 0;
}
06threeFishTwoWeb.cpp
/*
* 【选做题】中国有句俗语叫“三天打鱼两天晒网”。
* 某人从1990年1月1日起开始“三天打鱼两天晒网”,
* 问这个人在以后的某一天中是“打鱼”还是“晒网”?
*/
#include <stdio.h>
//判断是否是闰年
bool isLeapYear(int year)
{
return ((year%4==0 && year%100!=0) || (year%400==0));
}
int daysOfDate(int year, int month, int day)
{
int Month_Day[2][12] = {
{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
{31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}};
int days = 0;
for(int i=1; i<year; i++)
{
days = days + 365 + isLeapYear(i);
}
for(int i=1; i<month; i++)
{
days = days + Month_Day[isLeapYear(year)][month-1];
}
days += day;
return days;
}
int main()
{
int year;
int month;
int day;
scanf("%d-%d-%d", &year, &month, &day);
int cha=daysOfDate(year,month,day) - daysOfDate(1990,1,1);
int yu = cha % 5;
if(yu >=0 && yu <= 2)
{
printf("打渔");
}
else
{
printf("晒网");
}
getchar();
getchar();
return 0;
}