1. 编写一个函数,计算该日在本年中是第几天,注意闰年问题。
要求(定义一个结构体变量(包含年、月、日)。)
#include <stdio.h>
#include <string.h>
struct stu
{
int year;
int month;
int day;
};
void test_date(void)
{
struct stu date;
printf("请输入年月日来判断他是第几天:\n");
scanf("%d",&date.year);
scanf("%d",&date.month);
scanf("%d",&date.day);
int days;
if(date.year%4==0 && date.year/100==0 ||date.year%400==0)
{
date.day +=1;
}
switch(date.month)
{
case 1:
days=date.day;
break;
case 2:
days=date.day+31;
break;
case 3:
days=date.day+59;
break;
case 4:
days=date.day+90;
break;
case 5:
days=date.day+120;
break;
case 6:
days=date.day+151;
break;
case 7:
days=date.day+181;
break;
case 8:
days=date.day+212;
break;
case 9:
days=date.day+243;
break;
case 10:
days=date.day+273;
break;
case 11:
days=date.day+304;
break;
case 12:
days=date.day+334;
break;
}
// if(date.year%4==0 && date.year/100==0 ||date.year%400==0)
// {
// date.day +=1;
// }
printf("%d月%d日是%d年的第%d天",date.month,date.day,date.year,days);
}
int main()
{
test_date();
return 0;
}
运行结果如下
2.有10个学生,每个学生的数据包括学号、 姓名、3门课程的成绩,从键盘输人10个学
生数据,要求输出3门课程总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课程成绩、平均分数)。
#include <stdio.h>
#include <string.h>
struct stu
{
int id;
char name[20];
float score1;
float score2;
float score3;
float avg;
};
void stu_fun(struct stu bb[3],int n)
{
int i;
float temp=0;
int s;
for(i=0;i<3;i++)
{
//float temp;
if(temp<bb[i].avg)
{
temp=bb[i].avg;
s=i;
}
}
//printf("%f",temp);
printf("学号=%d 姓名=%s 第一门成绩%f 第二门成绩%f 第三门成绩%f\n",bb[s].id,bb[s].name,bb[s].score1,bb[s].score2,bb[s].score3);
printf("%f平均分为:",temp);
}
void stu_avg(struct stu b[3],int n)
{
int i;
float num=0;
for(i=0;i<3;i++)
{
num=b[i].score1+b[i].score2+b[i].score3;
b[i].avg=num/3;
printf("第%d位学生的平均成绩为:%f\n",i+1,b[i].avg);
}
}
void print_stu_arr(struct stu aa[3],int n)
{
int i;
for(i=0;i<3;i++)
{
printf("学号=%d 姓名=%s 第一门成绩%f 第二门成绩%f 第三门成绩%f\n",aa[i].id,aa[i].name,aa[i].score1,aa[i].score2,aa[i].score3);
}
}
void test_student(void)
{
struct stu a[3];
int i;
for(i=0;i<3;i++)
{
printf("请输入第%d个学生的学号、姓名、3门课程成绩:\n",i+1);
scanf("%d",&a[i].id);
getchar();
gets(a[i].name);
scanf("%f",&a[i].score1);
scanf("%f",&a[i].score2);
scanf("%f",&a[i].score3);
//printf("学号=%d 姓名=%s 第一门成绩%f 第二门成绩%f 第三门成绩%f",a.id,a.name,a.score1,a.score2,a.score3);
//print_stu_arr(a,3);
}
print_stu_arr(a,3);
stu_avg(a,3);
stu_fun(a,3);
}
int main()
{
test_student();
return 0;
}
运行结果如下
3.编程,输入2个时刻,定义一个时间的结构体(包括时,分,秒),计算2个
时刻之间的时间差
#include <stdio.h>
#include <string.h>
struct stu
{
int hour;
int minute;
int second;
};
void cha(struct stu time2,struct stu time3)
{
struct stu tr;
int a,b,x;
a=(time2.hour*3600+time2.minute*60+time2.second);
b=(time3.hour*3600+time3.minute*60+time3.second);
x=fabs(a-b);
tr.hour=x/3600;
x %=60;
tr.minute=x/60;
x %=60;
//tr.minute=(int)fabs(time2.hour*3600+time2.minute*60+time2.second-(time3.hour*3600+time3.minute*60+time3.second))/3600;
//tr.second=(int)fabs(time2.hour*3600+time2.minute*60+time2.second-(time3.hour*3600+time3.minute*60+time3.second))%3600;
printf("%d %d %d",tr.hour,tr.minute,tr.second);
}
void test(void)
{
struct stu time;
printf("请输入第一个时间:\n");
scanf("%d %d %d",&time.hour,&time.minute,&time.second);
struct stu time1;
printf("请输入第二个时间:\n");
scanf("%d %d %d",&time1.hour,&time1.minute,&time1.second);
cha(time,time1);
}
int main()
{
test();
return 0;
}
运行结果如下