C语言学习-day20-函数的调用

文章详细介绍了如何用C语言编写函数来判断素数、闰年,以及实现整型数组的二分查找,并通过指针演示了如何在函数内部修改外部变量。通过实例展示了传值调用与传址调用的区别。
摘要由CSDN通过智能技术生成

调用分为:

传值调用-形参和实参占用不同存块,对形参修改不影响实参

传址调用-调用的地址,函数内部可以直接操作函数外部变量

练习:

  1. 写一个函数判断一个数是不是素数。
  2. 写一个函数判断一年是不是闰年。
  3. 写一个函数,实现一个整型有序数组的二分查找。
  4. 写一个函数,每调用一次这个函数,就会将num的值增加1。

第一题

首先我们构建一个想法如何使用我的函数。

int main()

{

    //打印100-200之间所有素数

    int i = 0;

    for (i = 100; i <= 200; i++)

    {

         //判断i是否为素数的函数

         if (is_prime(i) == 1)

         {

             printf("%d\n", i);

         }

    }

}

然后根据上述,is_Prime应该是一个可以判断数是否是素数的函数,是就return 1.

函数如下:

int is_prime(int n)

{

    //判断n是否是素数,用2到n-1的所有数试出他

    int j = 0;

    for (j = 2; j < n; j++)

    {

         if (n % j == 0)

             return 0;

    }

    return 1;

}

解释:也就是我在函数中再设立一个循环,用变量j去遍历我的n,j循环从2到n-1一直除n如果有一个结果n%j==0,则返回0,n不为素数,如果没有,循环执行结束继续往下执行return 1,n为素数。

第二题:判断是否为闰年的函数

int is_leapyear(int n)

{

    //判断是闰年返回1,不是闰年返回0

    if (n % 4 == 0)

    {

         if (n % 100 != 0)

             return 1;

         else

             return 0;

    }

    else

         return 0;

}

int main()

{

    //打印1000-2000年所有闰年

    int y = 0;

    for (y=1000;y<=2000;y++)

    {

         //判断i是否为素数

         if (is_leapyear(y) == 1)

         {

             printf("%d\n", y);

         }

    }

    return 0;

}

代码运行:

这里我看别人写的更简单一点而且可以被400整除的也是闰年,我的条件不够正确,修改一下!

int is_leapyear(int n)

{

    //判断是闰年返回1,不是闰年返回0

    if ((n % 4 == 0 && n % 100 != 0) || n % 400 == 0)

         return 1;

    else

         return 0;

}

即使是100的倍数,但是只要是400的倍数,也是闰年,所以函数应该这么修改!

第三题:

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()

{

    //在这个数组里找7

    int arr[] = { 1,2,3,4,5,6,7,8,9,10 };

    int key = 7;

    int sz = sizeof(arr) / sizeof(arr[0]);

    //找到则返回位置的下标,找不到则返回-1.

    int ret=binary_search(arr,key,sz);//在sz长度的arr数组里找到key这个值!所以函数需要设立3个参数

    if (ret == -1)

    {

         printf("找不到\n");

    }

    else

    {

         printf("找到了,下标是:%d\n", ret);

    }

    return 0;

}

代码运行:

第四题:

void add(int* p)

{

    (*p)++;

}

int main()

{

    int num = 0;

    add(&num);

    printf("%d\n", num);

   

    add(&num);

    printf("%d\n", num);

   

    add(&num);

    printf("%d\n", num);

    return 0;

}

想要通过函数改变外部变量,那么需要指针,在函数里指向外部变量的地址才可以改变外部变量。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值