0802结构体作业

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;
}

运行结果如下

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值