【数组】 表驱动法——判断月份所含天数以及宏定义和枚举

目录

一、表驱动法

二、宏定义和枚举

1.宏定义

2.枚举


 

一、表驱动法

       当我们需要编写一个判断月份有多少天的程序时,首先想到的可能是用if else来解决,但是这样便血的话程序会变得特别冗余!!!!

if ( month = 1 ) //先不考虑闰年与平年!!
   days = 31
else if ( month = 2 ) 
   days = 28
else if ( month = 3 ) 
   days = 31
else if ( month = 4 )
   days = 30
else if ( month = 5 ) 
   days = 31
else if ( month = 6 ) 
   days = 30
else if ( month = 7 ) 
   days = 31
else if ( month = 8 ) 
   days = 31
else if ( month = 9 ) 
   days = 30
else if ( month = 10 )
   days = 31
else if ( month = 11 ) 
   days = 30
else if ( month = 12 ) 
   days = 31 End If

显然十分复杂,那么什么办法能让程序变得简洁明了呢——表驱动法

函数和数组的应用可以使程序变得简洁,就像这样

#include<stdio.h>
int days_of_month(int month, int year);

int main(void)
{
	int month, year;
	printf("请输入月份,年份:");
	scanf_s("%d,%d", &month, &year);
	printf("总共有%d天", days_of_month(month, year));
	return 0;
}
int days_of_month(int month, int year) {
	int day_array[12] = { 31,29,31,30,31,30,31,31,30,31,30,31 };//先不考虑闰年与平年
	return day_array[month - 1];
}

用数组来定义一个判断月份天数的函数,这样会让程序变得更加清晰明了。

但是!!!!2月的跟闰年平年有关!!!!

所以我们就需要在函数中二月份的那里用条件运算符进行判断!!就像这样

#include<stdio.h>
int days_of_month(int month, int year);

int main(void)
{
	int month, year;
	printf("请输入月份,年份:");
	scanf_s("%d,%d", &month, &year);
	printf("总共有%d天", days_of_month(month, year));
	return 0;
}
int days_of_month(int month, int year) {
	int day_array[12] = { 31,(year % 4 == 0) ? 29 : 28,31,30,31,30,31,31,30,31,30,31 };
	return day_array[month - 1];
}

条件运算符的使用在前面已经提到过了,就不多赘述了 。

表驱动法就使得我们的程序更加简洁,更加高大上(滑稽


二、宏定义和枚举

1.宏定义

宏定义就可以理解为全局的常量(只是这么理解),就像是定义一个PI

#include<stdio.h>
#define PI 3.14
int main(void)
{
	int r = 2;
	float s = PI * r * r;
	printf("圆的面积为:%f", s);
	return 0;
}

 我们下面就可以直接使用PI


2.枚举

当我们想要定义周一到周日时,我们可能会想到上面的宏定义,但是定义起来比较麻烦

#define MON  1
#define TUE  2
#define WED  3
#define THU  4
#define FRI  5
#define SAT  6
#define SUN  7

这时我们就用到了枚举: 

#include<stdio.h>
int main(void)
{
	//枚举的定义,只需要给定一个赋值,其他的依次加一,如果不赋值的话,默认第一个为0哦
	enum DAY {
		MON = 1, TUE, WED, THU, FRI, SAT, SUN
};
	//枚举的使用
	enum DAY d = MON;
	printf("%d", d);
	return 0;
}

在定义枚举时,我们通常有着三种方式:

1.先定义枚举类型,再定义枚举变量

enum DAY
{
      MON=1, TUE, WED, THU, FRI, SAT, SUN
};
enum DAY d;

2、定义枚举类型的同时定义枚举变量

enum DAY
{
      MON=1, TUE, WED, THU, FRI, SAT, SUN
} d;

 3、省略枚举名称,直接定义枚举变量

enum
{
      MON=1, TUE, WED, THU, FRI, SAT, SUN
} d;

 显然第三种最为简洁,所以我最开始的程序也可以写成

#include<stdio.h>
int main(void)
{
	enum DAY {
		MON = 1, TUE, WED, THU, FRI, SAT, SUN
}d = THU;
	printf("%d", d);
	return 0;
}

但如果你在定义枚举的时候,假设MON = 1, TUE=33, WED, THU, FRI, SAT, SUN,后面的WED就是34,因为是从离他左边最近的一个定义过的元素依次加一!

今天就到这里

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值