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;
}