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;
}
相关推荐
꧁细听勿语情꧂11 分钟前
向下调整算法,top - k 问题,链式结构二叉树,前中后序遍历
c语言·开发语言·数据结构·算法
SHARK_pssm1 小时前
【数据结构——顺序表】
c语言·数据结构·经验分享·笔记
橘颂TA1 小时前
【Linux】自旋锁
linux·开发语言·数据库·c++
一诺加油鸭1 小时前
若依后端系统集成 Swagger 接口文档功能
java·开发语言
ECT-OS-JiuHuaShan1 小时前
功夫不负匠心人,渡劫代谢舞沧桑
android·开发语言·人工智能·算法·机器学习·kotlin·拓扑学
knight_9___1 小时前
LLM工具调用面试篇1
开发语言·人工智能·python·面试·agent
一脸dio样7541 小时前
第5章 保护模式进阶,向内核迈进
linux·开发语言
小叮当⇔1 小时前
M4A 转 MP3 桌面转换器(PyQt5 + FFmpeg)
开发语言·qt·ffmpeg
aq55356002 小时前
Laravel9.x新特性全解析
java·开发语言·数据库
珹洺2 小时前
C++AI多模型聊天系统(三)AI多模型(豆包/Kimi/千问)接入与实现
开发语言·c++·人工智能