C语言中关于函数调用的理解

 理论

关于函数调用的方式有两类:传值调用传址调用

传值调用:函数的形参和实参分别占有不同的内存块,对形参的修改不会影响实参。

传址调用:把函数外部创建变量的内存地址传递给函数参数的一种调用方式。可以让函数和函数外面的变量建立起真正的联系,也就是函数内部可以直接操作函数外部的变量。

我们可以用一串代码来解释这两者的区别

#include<stdio.h>
int fun1(int a,int b)
{
    int c;
    c=a;
    a=b;
    b=c;
}
int fun2(int *pa,int *pb)
{
    int d;
    d=*pa;
    *pa=*pb;
    *pb=d;
}
void main(){
	int a=10,b=20;
    fun1(a,b);
    printf("a=%d,b=a%d\n",a,b);
    fun2(&a,&b);
    printf("a=%d,b=%d",a,b);
}

8da63516ac6541f3bc13a5f43a955417.png

 在这串代码中,fun1是传值变量,fun2是传址变量,正如上面所说:

fun1内部的代码叫做形参,它里面的东西不会影响到主函数内实参的改变,所以在输出时,a,b没有改变

fun2内部的代码直接把a,b的内存地址拿过来了,相当于fun2中的变量与主函数里面的变量建立了联系,在fun2里面做修改就会影响到主函数里面相对变量的值,所以我们在fun2里面把a,b交换后,主函数中的a,b也受到了影响。


题目

打印100~300之间的素数

素数: 一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫素数

#include<stdio.h>
int fun(int i)
{
   


}
void main(){
	int i;
    for(i=100;i<=300;i++) {
        if (fun(i) == 1) {
            printf("%d ", i);
        }
    }
}

在写外部函数前,我们都应该先看一下主函数,然后根据主函数来理解外部函数中要让我们做什么

根据这个主函数我们可以知道,我们要在外部函数中判断100~300之间有哪些素数

首先,我们要用一个变量遍历一遍小于 i 的所有数,以此来看看有哪些数除了1和本身不能被其他自然数整除

遍历完之后,如果可以被其他自然数整除,那就return 0,否则,return 1。

具体代码如下:

int fun(int i)
{
    int a;
    for(a=2;a<i;a++) {

        if (i % a == 0)
            return 0;
    }
            return 1;
}

判断是否为闰年

基础规律:非整百年能被4整除而不能被100整除。 这是最基本的判断闰年的方法。

完备原则:整百年能被400整除而不能被3200整除。 

#include<stdio.h>
int fun(int i)
{
   


}
void main(){
	int i;
    for(i=1000;i<=2000;i++) {
        if (fun(i) == 1)
            printf("%d ", i);
    }
}

 通过主函数我们可以知道,外部函数是要判断是否为闰年

闰年的规则已经写在题目下方了,按照规则,我们可以得出这样一串代码

int fun(int i)
{
    if(i%4==0 && i%100!=0)
        return 1;
    else if(i%400==0)
        return 1;
    else
        return 0;
}

 这里整年和非整年要分别判断,所以我们要用到两个if

由于这里最高是2000,所以我在第二个if里面没有加上不等于3200这个条件 

 

如果觉得这篇文章对你有用的话,可以支持一下博主,b站搜索:夜临ね   即可搜索到我,本人现在制作火影视频,如果要打段位也可以私聊我

9ee94ecd78d14d1b948bcf3e396c80ff.jpg

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值