今天我们要学习c语言中的函数(3)
目录:
一.练习
1.写一个函数,判断一年是不是闰年
2. 写一个函数,实现一个整形有序数组的二分法查找
3.写一个函数,每调用一次这个函数,num的值就会+1
二.布尔类型
三.重点
下面我们正是学习c语言中的函数(3)
一.练习
1.写一个函数判断一年是不是闰年
闰年是指:1.能被4整除但不能被100整除;2.能被400整除。
#include <stdio.h>
int is_leap_year(int a)
{
if((a%4==0)&&(a%100!=0)||(a%400==0))
return 1;
else
return 0;
}
int main()
{
int year;
scanf("%d",&year);
if(is_leap_year(year))
printf("是闰年");
else
printf("不是闰年");
}
代码解析:
1.is_leap_year是一个能够判断一年是否为闰年的函数
2.代码中&&的意思是和,||的意思是或
3.因为闰年的判断条件是:1.能被4整除但不能被100整除;2.能被400整除。一年只要满足这两个条件中的其中一个就说明这个数是闰年,这样的表述在代码中如下:(a%4==0)&&(a%100!=0)||(a%400==0)
2.写一个函数,实现一个整形有序数组的二分法查找
二分法在我们之前的学习中已经学过,主要看left,right,mid即可
#include <stdio.h>
int search(int num[],int a1,int b1)
{
int left=0;
int right=a1-1;
int mid=(left+right)/2;
while(left<=right)
{
if(b1<num[mid])
{
right=mid-1;
mid=(right+left)/2;
}
else if(b1>num[mid])
{
left=mid+1;
mid=(right+left)/2;
}
else if(b1==num[mid])
return mid;
}
if(left>=right)
return -1;
}
int main()
{
int arr[]={1,2,3,4,5,6,7,8,9,10};
int a=sizeof(arr)/sizeof(arr[0]);
int miss;
scanf("%d",&miss);
if(search(arr,a,miss)>=0)
printf("%d",search(arr,a,miss));
else
printf("找不到");
}
代码解析:
1.right,left,mid分别表示每次分割后的数组的最右位,最左位,中间位
2.sizeof(arr)/sizeof(arr[0])表示数组arr中的元素的个数
3.mid=(left+right)/2其实最好建议写成mid=left+(right+left)/2,写成这样的话可以防止两个整形相加导致的溢出
注:形参和实参的名字其实可以相同
其中代码中不能函数内用sizeof(arr)/sizeof(arr[0],因为在函数内接收到函数外的数组实际上只是接收到了数组的首元素的地址,在使用sizeof(arr)/sizeof(arr[0]的时候结果会发上错误(准确来说int arr[]==int *arr,虽然退化为了指针,但是c语言中的指针算数允许访问函数后面的值)
3.写一个函数,每调用一次这个函数,num的值就会+1
#include <stdio.h>
void ADD(int *p)
{
(*p)++;
}
int main()
{
int num=0;
ADD(&num);
printf("%d",num);
}
代码解析:
1.指针要记得加括号,否则会算错
2.改变实参的值需要我们进行传传址调用
二.布尔类型
布尔类型是一个用来判断真假的类型(flase和ture)
例如:
int is_leap_year(int a)
{
if((a%4==0)&&(a%100!=0)||(a%400==0))
return 1;
else
return 0;
}
可以转换为布尔类型:
bool is_leap_year(int a)
{
if((a%4==0)&&(a%100!=0)||(a%400==0))
return ture;
else
return flase;
}
使用布尔类型的时候切记要引入它的头文件<stdbool.h>
三.重点
1.布尔类型的使用方法
2.二分法查找是mid的建议运算
3.闰年的计算方法
4.实参改变的时候要用传址调用
明天我们要学习c语言中的函数(4)