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;
}
相关推荐
老友@1 天前
云计算的统一心智模型
开发语言·ci/cd·docker·云计算·k8s·perl
Elnaij1 天前
从C++开始的编程生活(19)——set和map
开发语言·c++
bkspiderx1 天前
MQTT C/C++开源库全解析:从嵌入式到高并发场景的选型指南
c语言·c++·mqtt·开源·开源库
qq_172805591 天前
基于Go的动态定时器管理功能架构方案设计与实现
开发语言·架构·golang
小乔的编程内容分享站1 天前
C语言笔记之结构体第二篇
c语言·开发语言·笔记
codeJinger1 天前
【Python】集合
开发语言·python
俩娃妈教编程1 天前
C++基础知识点:位运算
java·开发语言·jvm·c++·位运算
zhoupenghui1681 天前
golang 锁实现原理与解析&锁机制(sync)种类与举例说明以及其使用场景
开发语言·后端·golang·mutex·wait·lock·sync
路弥行至1 天前
linux运行脚本出现错误信息 /bin/bash^M: bad interpreter解决方法
linux·运维·开发语言·经验分享·笔记·其他·bash
一直不明飞行1 天前
C++ pari使用的两个注意事项
开发语言·c++