#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
函数:库函数、自定义函数
返回类型+函数名+(参数)
函数调用:传值调用、传址调用
#include<string.h>//memset使用前预处理
int main() {
char arr[] = "hello BUCT";
memset(arr, 'b', 5);//memset库函数,内存设置
printf("%s\n", arr);
return 0;
自定义函数练习:取大值、交换swap
int get_max(int x, int y) {
int z = 0;
if (x > y)
z = x;
else
z = y;
return z;
}
int main() {
int a = 10;
int b = 100;
int max = get_max(a, b);
printf("max=%d\n", max);
return 0;
void Swap(int x, int y) {//不需要返回值的函数,void
int z = x;//错误定义方法,xy地址与ab不对应
x = y;
y = z;
}
int main() {
int a = 10;
int b = 100;
printf("before_swap:\na=%d\tb=%d\n", a, b);
Swap(a, b);//实际参数,传值调用
printf("after_swap:\na=%d\tb=%d\n", a, b);
return 0;
}
void Swap(int *pa, int *pb) {//形式参数
int z = *pa;
*pa = *pb;
*pb= z;
}
int main() {
int a = 10;
int b = 100;
printf("before_swap:\na=%d\tb=%d\n", a, b);
Swap(&a, &b);//实际参数,传址调用
printf("after_swap:\na=%d\tb=%d\n", a, b);
return 0;
}
int is_prime(int x) {//自定义一个判断是否为素数的函数
int i = 2;
for (i = 2; i <x; i++) {//数学知识:把i<x换为i<=sqrt(x)更有效率,#include<math.h>
if (x% i == 0)
return 0;
}
return 1;
}
int main() {
int n = 0;
printf("请输入一个数:");
scanf("%d", &n);
if (is_prime(n) == 1)
printf("是素数\n");
else
printf("不是素数\n");
return 0;
}
int is_leap_year(int x) {//自定义一个判断是否为闰年的函数
if (x % 4 == 0 && x % 100 != 0 || x % 400 == 0)//数学知识
return 1;
else
return 0;
}
int main() {
int n = 0;
printf("请输入:");
scanf_s("%d", &n);
if (is_leap_year(n) == 1)
printf("是闰年\n");
else
printf("不是闰年\n");
return 0;
}
自定义一个函数:实现对整形“有序”数组的二分查找,找到返回下标,找不到返回-1
int binary_search(int a[], int k, int s) {//思路清楚,明白所需传递的参数有哪些
int left = 0;//左下标
int right = s - 1;//右下标
while (left <= right) {
int mid = (left + right) / 2;
if (a[mid] > k) {
right = mid - 1;
}
else if (a[mid] < k) {
left = mid + 1;
}
else {
return mid;
}
}
return -1;//都不符合,找不到了
}
int main() {
int arr[] = { 2,3,4,5,6,7,8,9,10 };
int key = 7;//查找7这个数字
int sz = sizeof(arr) / sizeof(arr[0]);//计算数组元素个数
int n = binary_search(arr, key, sz);//数组arr传参,实际上传递的不是数组本身
if (-1 == n) {//而仅仅是数组首元素的地址,故不能在函数内部计算sizeof(arr)
printf("cannot find\n");
}
else {
printf("find it下标是:%d\n", n);
}
return 0;
}