目录
一、表驱动法
当我们需要编写一个判断月份有多少天的程序时,首先想到的可能是用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,因为是从离他左边最近的一个定义过的元素依次加一!
今天就到这里