C语言学习笔记[31]:函数的调用

传值调用:在这种方式下,函数内部对参数进行的任何修改都不会影响到函数外的实参。实质上,是将实参的值复制了一份传递给函数。

void swap(int x, int y) {
    int temp;
    temp = x;
    x = y;
    y = temp;
    printf("In swap: %d %d\n", x, y);
}
 
int main() {
    int a = 10;
    int b = 20;
    swap(a, b);
    printf("After swap: %d %d\n", a, b);
    return 0;
}

传址调用:传址调用是指函数参数传递的是参数的内存地址,若函数内部对参数进行修改,将影响到函数外的实参。

void swap(int *x, int *y) {
    int temp;
    temp = *x;
    *x = *y;
    *y = temp;
    printf("In swap: %d %d\n", *x, *y);
}
 
int main() {
    int a = 10;
    int b = 20;
    swap(&a, &b);
    printf("After swap: %d %d\n", a, b);
    return 0;
}

举例

函数判断是不是素数

#include <math.h>
 
int is_prime(int num) {
    if (num <= 1) {
        return 0; // 小于等于1的数不是素数
    }
    for (int i = 2; i <= sqrt(num); i++) {
        if (num % i == 0) {
            return 0; // 能被整除则不是素数
        }
    }
    return 1; // 否则是素数
}
 
int main() {
    int num = 29;
    if (is_prime(num)) {
        printf("%d 是素数\n", num);
    } else {
        printf("%d 不是素数\n", num);
    }
    return 0;
}

函数判断是否为闰年

#include <stdio.h>
 
int is_leap_year(int year) {
    if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
        return 1; // 是闰年
    } else {
        return 0; // 不是闰年
    }
}
 
int main() {
    int year;
    printf("Enter a year: ");
    scanf("%d", &year);
 
    if (is_leap_year(year)) {
        printf("%d is a leap year.\n", year);
    } else {
        printf("%d is not a leap year.\n", year);
    }
 
    return 0;
}

函数实现整型有序数组的二分查找

#include <stdio.h>
 
int binary_search(int arr[], int k, int sz)//形参
{
	int left = 0; //左下标
	int right = sz - 1; //右下标
 
	//使用while循环
	while (left <= right)
	{
		//生成中间值下标 mid :
		int mid = left + (right - left) / 2;
 
		//二分查找:
		if (arr[mid] < k)//中间值 小于 要找的值
		{
			left = mid + 1;
			//舍弃中间值和中间值左边的所有数,
			//调整 左下标left :left = mid + 1。
		}
		else if (arr[mid] > k)//中间值 大于 要找的值
		{
			right = mid - 1;
			//舍弃中间值和中间值右边的所有数,
			//调整 右下标right :right = mid - 1。
		}
		else if (arr[mid] == k)//中间值 等于 要找的值
		{
			return mid;
			//返回中间值下标mid。
		}
	} 
	if (left > right)
	{
		return -1; //找不到则返回-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]); //求出数组元素个数
	// 整个数组大小 / 单个数组元素大小 = 数组元素个数
 
	//调用自定义函数:
	int ret = binary_search(arr, k, sz); //ret接收返回的下标
 
	//判断自定义函数的返回值,打印相应的情况:
	if (ret == -1) //未找到,返回-1
	{
		printf("找不到\n");
	}
	else
	{
		printf("找到了,下标是:%d\n", ret);
	}
 
	return 0;
}

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值