Task03 基于枚举的日期转换、比较大小、数字排序

一、日期转换

具体任务:2020年有366天,将2020年1月1日作为计数起点,即计数1,2020年12月31日作为计数终点,即计数366。计数1代表“2020年1月1日-星期三”,计数10代表“2020年1月10日-星期五”。通过键盘输入一个1~366之间的值,包括1和366,将其转换为年、月、日、星期,并输出到控制台窗口。
代码:

#include <stdio.h>
#include <stdlib.h>


int main(void)
{
    int tick = 0;
    short month, day;
    int week1 = 0;
    enum week
    {
        Sunday, Monday, Tuesday, Wednesday, Thusday, Friday, Saturday
    };
    //枚举定义星期,默认其变量对应数字为0,1,2...,刚好在求余数后与switch语句结合能用上。

    printf("今天是2020年1月1日-星期三\n");
    printf("请输入一个值\n");
    scanf_s("%d", &tick);

    if (tick <= 31)
    {
        month = 1;
        day = tick;
    }
    else if ((tick > 31) & (tick <= 60))
    {
        month = 2;
        day = tick - 31;
    }
    else if ((tick > 60) & (tick <= 91))
    {
        month = 3;
        day = tick - 60;
    }
    else if ((tick > 91) & (tick <= 121))
    {
        month = 4;
        day = tick - 91;
    }
    else if ((tick > 121) & (tick <= 152))
    {
        month = 5;
        day = tick - 121;
    }
    else if ((tick > 152) & (tick <= 182))
    {
        month = 6;
        day = tick - 152;
    }
    else if ((tick > 182) & (tick <= 213))
    {
        month = 7;
        day = tick - 182;
    }
    else if ((tick > 213) & (tick <= 244))
    {
        month = 8;
        day = tick - 213;
    }
    else if ((tick > 244) & (tick <= 274))
    {
        month = 9;
        day = tick - 244;
    }
    else if ((tick > 274) & (tick <= 305))
    {
        month = 10;
        day = tick - 274;
    }
    else if ((tick > 305) & (tick <= 335))
    {
        month = 11;
        day = tick - 305;
    }
    else if ((tick > 335) & (tick <= 366))
    {
        month = 12;
        day = tick - 335;
    }

    week1 = (tick % 7) + 2;
    if (week1 > 7)
    {
        week1 = week1 - 7;
    }
    else
    {
        week1 = (tick % 7) + 2;
    }

    switch (week1)
    {
    case Sunday:
        printf("2020年%d月%d日-星期日", month, day);
        break;
    case Monday:
        printf("2020年%d月%d日-星期一", month, day);
        break;
    case Tuesday:
        printf("2020年%d月%d日-星期二", month, day);
        break;
    case Wednesday:
        printf("2020年%d月%d日-星期三", month, day);
        break;
    case Thusday:
        printf("2020年%d月%d日-星期四", month, day);
        break;
    case Friday:
        printf("2020年%d月%d日-星期五", month, day);
        break;
    case Saturday:
        printf("2020年%d月%d日-星期六", month, day);
        break;
    }
    system("pause");

    return 0;
}

二、比较大小

具体任务:通过键盘输入2个数,判断大小,并输出结果到控制台窗口。
代码

#include <stdio.h>
#include <stdlib.h>

typedef enum    //定义枚举(较大较小变量)
{
	Max=0, Min
}EnumCompare;

static int compare(int a, int b, unsigned char type);  //声明比较函数(数据类型+变量,枚举定义变量:unsigned char type

int main(void)
{
	int a, b;      //定义变量内存
	int Max=0;     //一定要先给一个初始值,否则会出现未初始化内存
	int Min=1;

	printf("请输入一个数字\n");
	scanf_s("%d", &a);
	printf("请再输入一个数字\n");
	scanf_s("%d", &b);

	Max = compare(a, b, Max);      //调用函数
	Min = compare(a, b, Min);

	system("pause");
	return 0;
}
static int compare(int a, int b, unsigned char type)//阐述比较函数
{
	switch (type)//枚举的值
	{
	case Max:
		if (a > b)
			printf("%d>%d\n", a, b);
		else
			printf("两个数字相等\n");
		break;
	case Min:
		 if (a < b)
		printf("%d<%d\n", a, b);
		 else
			 printf("两个数字相等\n");
		 break;
	}
	return 0;
}

三、冒泡排序

具体任务:通过键盘输入10个数,判断大小,并输出结果到控制台窗口。

代码

#include <stdio.h>
#include <stdlib.h>

typedef enum     //实在想不出来枚举值对应什么变量/函数,可以让他变成枚举值对应每个部分
{
	Compare = 0,
	Input,
    Output,
 }Enumplan;

static void paixu(int a[], unsigned char type);//声明函数

int main()
{
	int a[10]{ 0 };

	printf("请输入10个数:\n");
	paixu(a, Input); //此形式对应着声明时的函数形式

	paixu(a, Compare);  

	printf("排序结果为:\n");
	paixu(a, Output);
	
	return 0;
}

static void paixu(int a[], unsigned char type) //赋予排序函数,后面不要加分号啊啊啊啊
{
	switch (type)
	{
	case Compare:
		int i,j, t;//i已经定义过了,所以只需要定义剩下的就好
		for (j = 0; j <= 8; j++)//一个循环内两两比较,要比较的趟数(10个数,比较9次,从0开始,比较到8)
			for (i = 0; i <= 8 - j; i++)//要缩小范围循环比较的次数
				if (a[i] > a[i + 1])
				{
					t = a[i];
					a[i] = a[i + 1];
					a[i + 1] = t;
				}
		break;

	case Input:
		for (i = 0; i < 10; i++);
		{
			scanf_s("%d", &a[i]);
		}
		break;

	case Output:
		for ( i = 0; i < 10; i++);
		{
			printf("%d\t", &a[i]);
		}
		break;

	
	}
	
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值