利用for循环计算通过用户输入的年月日后判断在该天是在“打鱼”还是在“晒网”:
中国有句俗语叫“三天打鱼两天晒网”,某人从1900年1月1日起开始“三天打鱼两天晒网”,问这个人在1944年3月1日这一天是在“打鱼”还是在“晒网”
根据提议可以将解题过程分为以下三步:
1.计算1900年1.1开始支1944.3.1日共多少天
2.由于“打鱼”和“晒网”的周期为5,所以将计算出的天数用5去除
3.根据余数判断是在“打鱼”还是在“晒网”
如果余数为1,2,3则是在打鱼 否则是在晒网
tips:某个年份能否被4除尽且不能被100除尽或能被400除尽,则该年是闰年,否则是平年
出于严谨性,我们需要对输入的年月日进行规范验证,如果没有需求也可放弃验证的代码编写,直接写对天数进行统计的方法
//定义全局变量
int year, month, date;//声明(定义)接收年月日的变量
int day_count;//定义统计天数的变量
int i, j;//定义辅助变量
//对天数进行统计的方法
int DayCount() {
for (i = 1990; i < year; i++)
{
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
day_count += 366;
}
else
{
day_count += 365;
}
}
for (j = 1; j < month; j++)//统计从1990-1-1到year年month-1月月末总共有多少天
{
switch (j)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
day_count += 31;
break;
case 4:
case 6:
case 9:
case 11:
day_count += 30;
break;
case 2:
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)//判断年份是闰年还是平年 进而对二月的天数进行判断
{
day_count += 29;
}
else
{
day_count += 28;
}
break;
}
}
day_count += date;//统计1990-1-1到year-month-date总共有多少天
i = day_count % 5;//对总天数进行取模 通过余数判断是在打鱼还是在晒网
switch (i)
{
case 1:
case 2:
case 3:
printf("%d-%d-%d是在打鱼", year, month, date);
break;
case 4:
case 0:
printf("%d-%d-%d是在晒网", year, month, date);
break;
default:
break;
}
return 0;
}
int DYSW() {
printf("请输入1990年1月1日之后的某个日期,格式为xxxx-xx-xx:");//输入日期
scanf("%d-%d-%d",&year,&month,&date);//取地址,接收输入的值
if (year < 1990) {//对输入的年份进行限制
printf("输入的年份非法");
exit(0);
}
if (month > 12 || month < 1) {//判断月份是否在1-12,对输入的月大于12或者小于1月进行限制
printf("输入的月份非法");
exit(0);
}
switch (month)//判断日期是否符合常识
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
if (date > 31 || date < 1) {
printf("输入的日期非法");
exit(0);
}
break;
case 4:
case 6:
case 9:
case 11:
if (date > 30 || date < 1) {
printf("输入的日期非法");
exit(0);
}
break;
case 2:
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)//判断年份是闰年还是平年 进而对二月的天数进行判断
{
if (date > 29 || date < 1)
{
printf("输入的日期非法");
exit(0);
}
}
else if (date > 28 || date < 1)
{
printf("输入的日期非法");
exit(0);
}
break;
}
//调用对天数进行统计的方法
DayCount();
return 0;
}
tips:
在调用DayCount()方法时,该方法需要写在DYSW()方法之前,否则会弹未找到标识符错误 就像登账号一样,这个DYSW()方法就像密码框一样,
我们总是要在密码框中先输入密码才行,不能点了登录才来写密码
将DayCount()方法写在DYSW()方法后面就像是点击了登录才想起来输入密码,这样是不可行的
但在编写代码时我们还是一步一步的写,先写DYSW(),然后再写DayCount(),也可以将DayCount()中的代码块全部写入DYSW()中
简易计算器实现简单的四则运算,仅仅是从左到右的计算,暂未实现数学中的规则运算:
本次运算是先将第一个数和第二个数进行计算,将结果存放在一个变量中,然后判断第二个操作符,如果为等于“=”,则输出结果,否则则继续进行下一步运算。
int JSQ(void) {
//定义变量
int a1, a2, a3, a4;//定义四个整型变量,用于运算的操作数
char opt;//定义操作符
int r1, r2, r3;//用于接收结果值
//输入数据
//输入提示
printf("请输入您要计算的+-*/四则运算(不带括号和空格,以=结尾,此计算器暂只能从左往右计算):\n");
//第一个运算单元
scanf("%d", &a1);//读取第一个操作数
opt = getchar();//读取第一个操作数
scanf("%d", &a2);//读取第二个操作数
//进行第一次运算
switch (opt)
{
case '+' : //操作数为+
r1 = a1 + a2; //将a1 + a2 赋值给 r1
break;
case '-': //操作数为-
r1 = a1 - a2; //将a1 - a2 赋值给 r1
break;
case '*': //操作数为*
r1 = a1 * a2; //将a1 * a2 赋值给 r1
break;
case '/': //操作数为/
if (a2!=0)
{
r1 = a1 / a2; //将a1 / a2 赋值给 r1
}
else
{
printf("\n除数不能为0!\n");
}
break;
default:
printf("\n输入错误!");
break;
}
opt = getchar();//读取第二个操作符
if (opt== '=')
{
printf("\n傻瓜式计算器结果为:%d\n", r1);//输出结果
exit(0);//程序结束
}
//接收第三个操作数
scanf("%d", &a3);//读取第三个操作数
//第二次运算
switch (opt)
{
case '+': //操作数为+
r2 = r1 + a3; //将r1 + a3 赋值给 r2
break;
case '-': //操作数为-
r2 = r1 - a3; //将r1 - a3 赋值给 r2
break;
case '*': //操作数为*
r2 = r1 * a3; //将r1 * a3 赋值给 r2
break;
case '/': //操作数为/
if (a3 != 0)
{
r2 = r1 / a3; //将a1 / a2 赋值给 r1
}
else
{
printf("\n除数不能为0!\n");
}
break;
default:
printf("\n输入错误!");
break;
}
opt = getchar();//读取第三个操作符
if (opt == '=')
{
printf("\n傻瓜式计算器结果为:%d\n", r2);//输出结果
exit(0);//程序结束
}
//接收第四个操作数
scanf("%d", &a4);//读取第四个个操作数
//第二次运算
switch (opt)
{
case '+': //操作数为+
r3 = r2 + a4;
break;
case '-': //操作数为-
r3 = r2 - a4;
break;
case '*': //操作数为*
r3 = r2 * a4;
break;
case '/': //操作数为/
if (a4 != 0)
{
r3 = r2 / a4;
}
else
{
printf("\n除数不能为0!\n");
}
break;
default:
printf("\n输入错误!");
break;
}
opt = getchar();//读取第四个个操作符
if (opt == '=')
{
printf("\n傻瓜式计算器结果为:%d\n", r3);//输出结果
exit(0);//程序结束
}
}