【C语言从入门到入土】第五章函数

第五章 函数

首先恭喜你已经学到了函数这一部分,,革命尚未成功,同志仍需努力。我真心的希望你能戒骄戒躁,稳扎稳打,去突破如今的桎梏,找到自己一生所热爱的事物,加油加油橘猫

1.为什么要用函数

  • 避免代码冗长
  • 模块化的设计思路
  • 按功能划分,每个函数代表一个功能,而函数的名字要体现函数的功能含义,类似变量标识符
    y=f(x)
    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2.函数要先定义再使用,和变量一个道理

在这里插入图片描述

定义:抓住三要素!牢牢记住!!!!!!!!!
  • 函数名————-体现功能
  • 参数列表——-比如y=f(x),,,x就是参数 比如z=f(x,y),,x,y就是参数(参数的个数根据需求自行定义)
  • 返回值——还比如y=f(x),,,y是函数根据x的值和f的功能执行后的结果

函数体————执行什么样的功能,涉及的处理代码叫做函数体

3.函数的定义与调用

1.定义无参数的函数

在这里插入图片描述

#include <stdio.h>
void printfwelcome(){
   
    printf("====================\n");
    printf("欢迎来到我的程序\n");
    printf("====================\n");
}

//1.函数调用时,要注意是怎么调用的,,函数名要一致,数据类型不要写(定义的时候才用)
int main(){
   
    printfwelcome();//在运行到这个函数的时候会跳回上面定义的函数
    
    return 0;
}
2.定义有参数有返回值的函数
  • 如y=f(x),,一个返回值,一个参数

    #include <stdio.h>
    /******一个参数,带着一个返回值,这个返回值是个整型,所以用int*************/
    int getDataFormX(int x)	//形式参数,需要包含变量名(),变量类型
    {
         						//x变量名是可以随意随意起的
        int data;
        data = x-1;
        return data;
        /*还有一种写法,直接就是一个返回值*/
     //   return x-1;
    }
    
    /*********在这整个过程中我们关心的只有值和数据的传递*********/
    int main(){
         
        int x;
        int y;
        puts("请输入一个数:");
        scanf("%d",&x);		//首先你输入的x的值
        y = getDataFormX(x);//然后这个里面的x的值,会传给上面定义的函数里面的变量,,他们是值的传递,地址空间不一样
        //在定义的函数里面一顿操作之后,会返回一个数,这个数在传回来给到现在的 y; 
        printf("x =%d,y =%d",x,y);
        
        return 0;
    }
    
  • 一个返回值,两个参数

#include <stdio.h>
/*****自己定义的函数*****/
int add(int a,int b)//两个数据,,2参数,
{
   
    int c;
    c = a+b;
    return c;
}

/*******主函数********/
int main(){
   
    int x,y,z;
    puts("请输入一个数:");
    scanf("%d",&x);
    puts("请再输入一个数:");
    scanf("%d",&y);
   //x,y两个数据值传给上面定义的函数,,在定义函数里面定义两个数据类型来承接过来的数据,,返回一个值回来,给到z
    z =add(x,y);//--------要注意x,y是用来传递数值的变量,,上面已经定义过,所以不要加数据类型,易错点	
    printf("%d+%d=%d",x,y,z);
    return 0;
}
  • 一个返回值,三个参数,多个参数可以以此类推
#include <stdio.h>
/*****自己定义的函数*****/
 //三要素:返回值,参数列表,功能
int add(int a,int b,int z)	//函数原型
{
   
    int c;
    c = a+b+z;
    return c;
}

/*******主函数********/
int main(){
   
    int x,y,z,ret;
    puts("请输入一个数:");
    scanf("%d",x);
    puts("请再输入一个数:");
    scanf("%d",y);
    puts("请再输入一个数:");
    scanf("%d",z);
	ret =add(x,y,z);
    printf("%d+%d+%d=%d",x,y,z,ret);
    return 0;
}
3.定义空函数

程序设计,模块设计的时候,占坑

在这里插入图片描述

就是先捋清思路流程,,然后再开始向里面写代码,,不至于直接报错

4.函数调用

新手经常犯的错误

  • int add(2,3) 带了返回值类型
  • add(int a, int b) 形参带类型了

一些见怪不怪的操作

函数可以当做表达式

在这里插入图片描述

函数调用当做其他函数调用的参数

在这里插入图片描述

4.形式参数和实际参数

在这里插入图片描述

传递参数,传递的是值,,形参和实参值相同,但是地址空间不同

#include <stdio.h>
//数据和值
int test(int x)	//形式参数,需要包含变量类型,变量名(),,,,
    		   /*生命周期:栈空间
    		    *被调用的时候才为形式参数申请内存,调用结束,内存有被系统释放
    		    *局部变量的有效作用空间(作用域)要记得*/
{
   	
    int y=5;
    printf("test的x内存地址是%p,数值是%d\n",&x,x);
    return (x-y);
}
//变量的四个要素:名  类型  值  地址
int main()
{
   
    int x,y;
    puts("请输入一个数:");
    scanf("%d",&x);
    printf("main的内存地址是%p,数值是%d\n",&x,x);
    y = test(x);//实际参数,,会把这个函数的返回值给到y
    printf("x=%d,y=%d",x,y);
    return 0;
}

/****我在单片机看见有一种操作
 void delay(unsigned int j) 
 {
 	while(j--);
 }
 void main()
 {
 	delay(1000);  他们用的是此方法来进行延迟,延迟函数的数值可改,所以延迟时间也可以改,是不是很具有参考意义??
 }
 */

在这里插入图片描述

1.全局变量与局部变量

如果放到这些函数的外面,,就是全局变量,对所有函数都生效,。
在这里插入图片描述
在这里插入图片描述

编程案例
1.输入两个整数,要求输出最大值,用函数实现
#include <stdio.h>
int get_bigger_fordata(int x,int y)
{
   
  /*方法1  
   *    int z;
   * 	if(x>y){
   *     z = x;
   * }else{
   *     z = y;
   * }
   * return z;*/
  /*方法2  
   *   int z;
   *   z =x>y?x:y
   *   return z;*/ 
  /*方法3  
      return x>y?x:y;*/
}
int main(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橘猫.exe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值