有一段时间没认真写过C代码了,顺便回顾一下基础语法:
2022联发科实习笔试题:
(15分) [简答题] 给出2022年的某一个日期(月日用空格分隔) e.g. 5 30,输出以下内容:
1)该日期是否为有效日期(如2月29为无效日期) (Valid/Invalid)
2)若该日期有效,则同时输出该日期为该年第几天
思路:
- 2022年12个月每个月的天数是固定的,可以用一个数组保存下来;
- 如果输入的月数小于1或者大于12,输入日期无效;输入的日数在当月范围之外,则输入日期无效;
- 若日期有效,用1月至输入月份之前的所有天数加上输入的日数,就是输入日期在该年的第几天。
代码如下:
#include<stdio.h>
int main(){
int month,day;
void datafind(int month,int day); //函数声明;
printf("please input month and day:\n");
scanf("%d %d", &month,&day); //键盘输入日期;
datafind(month,day);
return 0;
}
void datafind(int month,int day)
{ int monthdays[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int dayth=0;
if(month<=12 && month>=1)
{
if (day <= monthdays[month-1]) //输入日期有效
{
switch(month)
{ case 1 :dayth=day;break;
case 2 :dayth=day+31; break;
case 3 :dayth=day+31+28; break;
case 4 :dayth=day+31+28+31;break;
case 5 :dayth=day+31+28+31+30; break;
case 6 :dayth=day+31+28+31+30+31;break;
case 7 :dayth=day+31+28+31+30+31+30;break;
case 8 :dayth=day+31+28+31+30+31+30+31;break;
case 9 :dayth=day+31+28+31+30+31+30+31+31;break;
case 10:dayth=day+31+28+31+30+31+30+31+31+30;break;
case 11:dayth=day+31+28+31+30+31+30+31+31+30+31;break;
case 12:dayth=day+31+28+31+30+31+30+31+31+30+31+30; break;
default: printf("Invalid\n");
}
printf("Valid\n");
printf("The input date [%d][%d]is the %d day of this year \n",month,day,dayth);
}
else //输入当月的日数无效,输入日期无效
{
printf("Invalid\n");
}
}
else //输入月份无效,输入日期无效
{
printf("Invalid\n");
}
}