得到n个时间的合, 设置上限为360天

博客给出代码用于统计一周有效学习时间,并展示了运行结果,聚焦信息技术领域中代码实现统计功能。

代码如下, 用来统计一周有效学习时间为多少

#include<stdio.h>
#include<string.h>
#include<Windows.h>
#define CHARNUM 30
struct mytime {
	int hour=0;
	int minute=0;
};
//将字符串输入转为结构体输出
mytime transform(char time_name[]) {
	mytime atime;
	if (strlen(time_name) > 5) { printf("时间格式错误\n"); return atime; }
	else {
		int tem = 0;
		int ahour[CHARNUM] = { 0 };
		int aminute[CHARNUM] = { 0 };
		//获得':'所在的位置, 用tem存储位置
		for (int i = 0; i < CHARNUM; i++) {
			if (time_name[i] != ':') { tem++; }
			else if (time_name[i] == ':') { break; }
		}
		//使用atoi函数将字符串转成int类型
		if((tem!=1)&&(tem!=2)) { printf("时间格式错误\n"); return atime; }
		if ((0 <= atoi(&time_name[0]) <= 24) && (0 <= atoi(&time_name[tem + 1]) <= 60)) {
			atime.hour = atoi(&time_name[0]);
			atime.minute = atoi(&time_name[tem + 1]);
		}
		else{ printf("时间格式错误\n"); return atime; }
		return atime;
	}
}
//对时间求和
mytime overtime(mytime timearr[],int time_num) {
	mytime sum;
	int minute1 = 0;
	for (int i = 0; i < time_num; i++) {
		sum.hour = timearr[i].hour + sum.hour;
		minute1 = timearr[i].minute + minute1;
	}
	sum.hour = sum.hour+(minute1 / 60);
	sum.minute = minute1 % 60;
	return sum;
}
mytime getAverage(mytime sum, int days) {
	mytime average;
	int aveMinute = 0;
	int sumMinute = (sum.hour * 60) + sum.minute;
	//由于除法的限制, 只能取近似值
	aveMinute = sumMinute / days;
	average.hour = aveMinute/60;
	average.minute = aveMinute%60;
	printf("平均每天学习%d时%d分\n",average.hour,average.minute);
	return average;
}
int main() {
	char str1[CHARNUM];
	int num = 0;
	printf("请输入要输入的时间的个数: ");
	scanf_s("%d", &num);
	mytime timearr[CHARNUM];
	gets_s(str1);
	printf("------------------------请输入时间, 要求xx:xx的格式, 例如10:30 or 9:01------------------------\n");
	for (int i = 0; i < num; i++) {
		printf("请输入第%d个时间: ", i+1);
		gets_s(str1);
		timearr[i] = transform(str1);
		if (timearr[i].hour == 0 && timearr[i].minute == 0) {
			i--;
			printf("请重新输入\n");
		}
		memset(str1, -2, sizeof(str1));
	}
	mytime final = overtime(timearr, num);
	printf("\n");
	printf("%d个时间的和为%d时%d分\n",num,final.hour,final.minute);
	getAverage(final, num);
	getchar();
}

运行结果如下,

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值