9.2号函数类型和调用

发布于:2022-12-30 ⋅ 阅读:(384) ⋅ 点赞:(0)

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


网站公告

今日签到

点亮在社区的每一天
去签到