C语言-函数练习2

1,打印1000-2000年之间的闰年

复制代码
#include<stdio.h>

//打印1000-2000年之间的闰年
//闰年判断的规则:
//1. 能被4整除,并且不能被100整除是闰年
//2, 
//int main() {
//	int year = 0; 
//	for ( year = 1000; year <=2000; year++)
//	{
//		//判断year是不是闰年
//		if (year % 4 == 0) {//2000判断时把else去掉
//			if (year % 100 != 0) {
//				printf("%d ", year);
//			}
//		}
//		  /*else if (year % 400 == 0)*/
//		 if (year % 400 == 0)
//		{
//			printf("%d ", year);
//		}
//	}
//	return 0;
//}

//另一种方法
int main() {
	int year = 0;
	for (year = 1000; year <= 2000; year++)
	{
		//判断year是不是闰年
		if (((year % 4 == 0)&&(year%100!=0))||(year%400==0))
				printf("%d ", year);
	}
	return 0;
}

2,写一个函数判断一年是不是闰年

复制代码
//写一个函数判断一年是不是闰年
//是闰年返回1
//不是闰年返回0
//判断是否是闰年的函数
int is_leap_year(int y) {
	//判断year是不是闰年
	if (((y % 4 == 0) && (y % 100 != 0)) || (y % 400 == 0))
		return 1;
	else
		return 0;
}
int main() {
	int year = 0;
	for (year = 1000; year <= 2000; year++)
	{
		if (is_leap_year(year))
		{
			printf("%d ", year);

		}
	}
	return 0;
}

3,写一个函数,实现一个整型有序数组的二分查找

复制代码
//写一个函数,实现一个整型有序数组的二分查找
//数组传参实际上传的是数组首元素地址
//而不是整个数组
int binary_search(int arr[], int k, int sz) {//这里 arr[]是一个指针变量(存的是数组的首元素地址)
	int left = 0;
	int right = sz - 1;

	while (left <= right) {
		int mid = left + (right - left) / 2;
		if (arr[mid] < k)
		{
			left = mid + 1;
		}
		else if (arr[mid] > k) {
			right = mid - 1;
		}
		else
		{
			return mid;//找到了返回下标
		}
	}

	return -1;

}
int main() {
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	int k=7;
	int sz = sizeof(arr) / sizeof(arr[0]);//这句话只有放在这里,不可放在其他函数内部
	//找到了,返回下标
	//找不到,返回-1
	int ret = binary_search(arr, k, sz);
	if (ret == -1) {
		printf("找不到\n");
	}
	else
	{
		printf("找到了,下标是:%d\n",ret);
	}
	return 0;
}

4,写一个函数,每调用一次这个函数,就会将num的值增加一

复制代码
//写一个函数,每调用一次这个函数,就会将num的值增加一
//写法1
//void Add(int* p) {
//	(*p)++;
//}
//int main() {
//	int num = 0;
//	Add(&num);
//	printf("%d\n", num);//1
//	Add(&num);
//	printf("%d\n", num);//2
//	Add(&num);
//	printf("%d\n", num);//3
//	Add(&num);
//	printf("%d\n", num);//4
//	return 0;
//}
////写法2:
int Add(int n) {
	//return n + 1;
	return ++n;
}
int main() {
	int num = 0;
	num = Add(num);
	printf("%d\n", num);//1
	num = Add(num);
	printf("%d\n", num);//2
	num = Add(num);
	printf("%d\n", num);//3
	num = Add(num);
	printf("%d\n", num);//4
	return 0;
}

5,函数的链式访问

复制代码
//函数可以嵌套调用,但不可以嵌套定义
//函数的链式访问
#include<string.h>
int main() {
	//int len = strlen("abcdef");
	//printf("%d\n", len);
	////链式访问(strlen函数的返回值作为其他函数的参数)
	//printf("%d\n", strlen("abcdef"));
	//return 0;
	
	printf("%d", printf("%d", printf("%d", 43)));//printf函数返回的是打印的字符的字数
}

6,函数的声明与定义

创建头文件add.h

复制代码
#pragma once
//函数的声明
//int Add(int , int );//或者
int Add(int x, int y);

创建源文件add.c

复制代码
//函数的定义
int Add(int x, int y) {
	return x + y;
}

创建源文件main.c

复制代码
//函数的声明与定义
//函数的声明(放在add.h中)
//int Add(int , int );//或者
//int Add(int x, int y);
#include "add.h"   //头文件包含就是函数声明的效果
int main() {
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	//加法
	int sum = Add(a, b);
	printf("%d\n", sum);

	return 0;
}
相关推荐
万山寒8 分钟前
python依赖包导出离线安装到没有外网的服务器
服务器·开发语言·python
特立独行的猫a31 分钟前
我用 Rust + Tauri 2 复刻了 N_m3u8DL-CLI:一个 m3u8 多线程下载器
开发语言·后端·rust·m3u8·视频下载器·m3u8dl-cli
程序员雷欧34 分钟前
LongAdder
开发语言·python
鱼子星_1 小时前
【C++】反向迭代器:反向迭代器的底层认识与模拟实现
开发语言·c++·笔记·stl
名字还没想好☜1 小时前
Java 用 MethodHandle 替代反射:调用性能实测、invokeExact 的坑与缓存
java·开发语言·缓存·反射·methodhandle
SMF19191 小时前
【Linux】完美解决缩略图工具gm调用java.io.FileNotFoundException: gm问题
java·开发语言·python
念何架构之路1 小时前
路由注册:RouterGroup(routergroup.go)
开发语言·后端·golang
Darkwanderor1 小时前
C++的流简介和简单使用
开发语言·c++
北冥you鱼1 小时前
深入解析 Go 中 sync.YAML.Unmarshal:如何将 YAML 数据填充到 Config 结构体
开发语言·算法·golang
程序员良辰1 小时前
【Mac快速切换JDK】Mac 使用 Homebrew + jenv 快速切换 JDK 版本
java·开发语言·macos