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;
}
相关推荐
LDR00611 天前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
雪碧聊技术11 天前
Tree.js是什么?一文讲透
开发语言·javascript·ecmascript
码云数智-园园11 天前
C++20 Modules 模块详解
java·开发语言·spring
swordbob11 天前
NIO的channel中什么是 fd(File Descriptor,文件描述符)
java·开发语言·nio
源分享11 天前
Java线程同步的多种实现方法(非常详细)
java·开发语言·jvm
Luminous.11 天前
C语言--day30
c语言·开发语言
玖玥拾11 天前
C/C++ 数据结构(七)栈、容器适配器
c语言·数据结构·c++··容器适配器
何以解忧,唯有..11 天前
Go语言循环语句详解:for、range与循环控制
开发语言·算法·golang
謓泽11 天前
C语言不是语法,是通往机器的地图。
c语言·开发语言
云水一下11 天前
从零开始学 PHP 系列(一):PHP 的前世今生与开发环境搭建
开发语言·php