19. 函数的调用

函数的调用分为两种:

传值调用和传址调用

传值调用:

将值调用过去

19. 函数的调用_第1张图片

传址调用:

将地址调用过去

19. 函数的调用_第2张图片

所以函数内部想改变函数的外部,则需要将地址传出去;若只是想将数值传过去,则用传值调用

写一个函数打印100到200之间的素数:

/*写一个函数打印100到200之间的素数:*/
#include
int f_judge(int n)
{
    //2——(n-1)之间的数
    int j = 0;
    for (j = 2; j < n; j++)
    {
        if (n % j == 0)
            return 0;
    }
    return 1;
}
int main()
{
    int i = 0;
    int count = 0;
    for (i = 100; i <= 200; i++)
    {
        //判断 i 是否为素数
        if (f_judge(i) == 1)
        {
            count++;
            printf("%d ", i);
       }
    }
    printf("\n有%d个素数\n", count);
    return 0;
}

19. 函数的调用_第3张图片

函数编写成功

写一个函数打印1000到2000年的闰年:

/*写一个函数打印1000到2000年的闰年:*/
int is_leap_year(int x)
{
    if ((x % 4 == 0 && x % 100 != 0) || (x % 400 == 0))
        return 1;
    else
        return 0;
}  //一个函数如果不返回类型,则默认返回int类型6
int main()
{
    int y = 0;
    for (y = 1000; y <= 2000; y++)
    {
        if (is_leap_year(y) == 1)
        {
            printf("%d ", y);
        }
    }
    return 0;
}

19. 函数的调用_第4张图片

函数编写成功

在这题的函数编写上,还可以简化为如下:

int is_leap_year(int x)
{
    return  (x % 4 == 0 && x % 100 != 0) || (x % 400 == 0);
}  

写一个函数,实现一个整型有序数组的二分查找:

/*写一个函数,实现一个整型有序数组的二分查找:*/
int binary_search(int arr1[], int k, int s)
{
    int left = 0;
    int right = s - 1;

    while (left <= right)
    {
        int mid = (left + right) / 2;
        if (arr1[mid] > k)
        {
            right = mid - 1;
        }
        else if (arr1[mid] < k)
        {
            left = mid + 1;
        }
        else
        {
            return mid;
        }
    }
    return -1;
}
int main()
{
    int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
    int sz = sizeof(arr) / sizeof(arr[0]);
    int key = 7;
    //找到了就返回找到的位置的下标
    //找不到返回 -1
    int ret = binary_search(arr,key,sz);
    if (ret == -1)
    {
        printf("没找到\n");
    }
    else
    {
        printf("找到了,下标为:%d\n", ret);
    }
    return 0;
}

19. 函数的调用_第5张图片

注意!数组arr传参时,实际传递的的不是数组本身,而是只传过去了数组首元素的地址!

所以在本题不能在创建的函数内进行数组元素个数的计算

你可能感兴趣的:(C语言学习,c语言,学习)