函数的应用
一般来说,在C语言里,算法逻辑都是通过函数来实现的。然后在main函数里直接调用这些函数。下面我们来应用函数,实现一些简单的算法和计算。
1,判断一年是否为润年
我们知道,如果一年能够被4整除并且不能被100整除那么它就是润年,或者一年能够被100整除同时也能被400整除那么它也是润年。根据这个判断标准,可以写出如下的函数来计算:
bool is_leap_year(int year)
{
return year%(year%100?400:4)?true:false;
}
int main(void)
{
int year = 1996;
printf(“%d %s a leap year”,year,is_leap_year(year)?”is”,”is not”);
return 0;
}
2,将一个字符变为小写字母
大写字母与小写字母之间的转换公式为:
char ch=’A’;
char lowerch=ch +’a’-‘A’;
同时还要在转换的时候,判断输入参数是否为大写字母,判断条件为:
ch>=’A’&&ch<=’Z’
所以,可以得出如下函数:
int tolower(char ch)
{
If(ch>==’A’&&ch<=’Z’)
{
ch += ‘a’-‘A’;
}
return ch;
}
3,将一个字符串逆置
比如:“Hello world!”à”!dlrow olleH”
通过分析发现,要实现逆置功能,只需要将字符串的第0个字符和最后一个字符进行交换;第一个字符和倒数第二个字符交换。所以,假如字符串的长度为len,那么交换公式为:
0与len-1交换
1与len-1-1交换
2与len-1-2交换
i与len-1-i交换
交换从两边往中间移动,中间字符不用交换。因此,得到如下算法:
首先,写出用于计算字符串长度的函数:
size_t mystrlen(const char *str)
{
size_t len = 0;
while(*str!=’\
{
str++;
len++;
}
return len;
}
void reverse_str(char *str)
{
size_t
len =mystrlen(str);
for(int
i = 0; i < len/2; i++)
{
char tmp = str[i];
str[i] = str[len-i-1];
str[len-i-1] = tmp;
}
}
int main(void)
{
char str[]=”Hello world”;//注意,在测试的时候,此处不能定义为char *str=”Hello world”;
//想想为什么?
printf(“before:%s\n”, str);
reverse_str(str);
printf(“later:%s\n”, str);
return 0;
}