C语言学习(六)函数
admin
2024-04-03 20:47:27
0

文章目录

  • 一、函数基础
    • 1.1 什么是函数
    • 1.2 为什么使用函数
    • 1.3 定义函数
      • 1.3.1 函数定义格式
        • 1.3.1.1 函数定义示例
          • 1.3.1.1.1 int返回类型的函数定义
          • 1.3.1.1.2 无返回类型的函数定义
          • 1.3.1.1.3 double返回类型的函数定义
      • 1.3.2 return表达式含义
        • 1.3.2.1 return表达式示例
  • 二、函数的分类
    • 2.1 有参函数和无参函数
      • 2.1.1 有参数函数示例
      • 2.1.2 函数调用和函数定义的顺序
      • 2.1.3 形参和实参
  • 三、变量作用域
    • 3.1 变量作用域
      • 3.1.1 全局变量
      • 3.1.2 局部变量
      • 3.1.3 注意

一、函数基础

1.1 什么是函数

逻辑上:

1、能够完成特定功能的独立的代码单元。

物理上:

1、能够接受数据。
2、能够对接收的数据进行处理。
3、能够将数据处理的结果返回(也可以不返回任何值)。

总结:函数是一个工具,它是为了解决大量类似问题而设计的。函数可以当作一个黑匣子。

1.2 为什么使用函数

1、避免了重复性编写代码的操作。
2、有利于程序的模块化。

1.3 定义函数

1.3.1 函数定义格式

函数定义的本质是详细描述函数之所以能够实现某个特定功能的具体方法。

函数返回值类型 函数名字(函数的形参列表)
{函数的执行体;return 待返回的值;
}

注意:

  1. 函数定义时必须指定函数的类型,带返回值的函数类型应该与其返回值类型相同。函数返回值的类型也称为函数的类型,因为如果函数名前面的返回值类型和函数执行体中的表达式的类型不同的话,最终函数返回值的类型以函数名前的返回值类型为准。而没有返回值的函数类型应该定义为void类型。
  2. 函数名的命名方法与命名变量的方法一样,不能以数字开头,只能以字母和下划线开头,且遵循驼峰原则。
  3. 函数名的命名不能使用C语言的关键字进行命名。
  4. 函数名的命名应尽量简单易懂。

1.3.1.1 函数定义示例

1.3.1.1.1 int返回类型的函数定义
#include // 主函数就是一个int返回类型的函数。int表示该函数的返回值为int类型
// main为函数名
// 圆括号中的void表示该函数无参数
int main(void){return 0; // 0表示主函数返回值为0
}
# include // 定义f()函数
int f()
{return 10.8;	//因为函数的返回值类型为int,所以最终f的返回值是10而不是10.8
}// 定义主函数
int main(void)
{int x = 0;x = f(); printf("%d\n", x); // x的值为10return 0;
}
1.3.1.1.2 无返回类型的函数定义
// void表示该函数无返回数据类型。
// Info表示函数名。
// 圆括号中的void表示该函数无参数。
void Info(void){printf("This is info");return; // 表示终止函数,而不是返回类型值。return也可不写。
}
1.3.1.1.3 double返回类型的函数定义
// double表示该函数的返回类型为double类型
// Div表示函数名
// void表示该函数无参数
double Div(void){double num = 10.0;
double div = 5.0;
double ret = 0;ret = num / div;return ret;
}

1.3.2 return表达式含义

1、终止被调函数,向主调函数返回表达式的值。
2、如果return后的表达式为空,则只终止函数,不向被调用函数返回任何值。
3、break是用来终止循环和switch,return是用来终止函数的。

1.3.2.1 return表达式示例

# include void f(void)
{int i;for (i = 0; i < 5; ++i){printf("同志们辛苦了\n");break;		//终止循环return;		//终止函数}printf("同志们好\n");
}
int main(void)
{f();return 0;
}

二、函数的分类

1、有参函数和无参函数
2、有返回值和无返回值
3、库函数和用户自定义函数
4、值传递函数和地址传递函数
5、普通函数和主函数(main函数)

一个程序必须有且只能有一个主函数。主函数可以调用普通函数,普通函数不能调用主函数。普通函数可以相互调用。主函数是程序的入口,也是程序的出口。

2.1 有参函数和无参函数

有参函数就是在函数名后的括号中有参数的定义。在函数名后面括号中的参数称为形参。在函数调用时传递的具体值是实参。无参函数就是在函数名后的括号中为void或为空的函数。

2.1.1 有参数函数示例

示例1:比较两个数的最大值

# include // i,j为函数的形参
int max(int i, int j)
{if (i > j)return i;elsereturn j;}int main(void)
{int a, k, m;while (1){printf("请输入数值:\n");scanf("%d %d", &k, &m);// k,m为函数调用时传入的实参a = max(k, m);printf("%d\n", a);}return 0;
}

示例2:判断是否为素数

# include 
# include // bool表示返回值为布尔类型
// val为函数的形参,int为形参的数据类型
bool Isprime(int val)
{int i;for (i = 2; i < val; ++i){if (val % i == 0)break;}if (i == val)return true;elsereturn false;
}int main(void)
{int val = 0;scanf("%d", &val);// val为函数的实参if (Isprime(val))printf("Yes");elseprintf("No");return 0;
}

2.1.2 函数调用和函数定义的顺序

如果函数调用写在了函数定义的前面,则必须加函数前置声明
函数前置声明:

1、告诉编译器即将可能出现的若干字母代表的是一个函数。
2、告诉编译器即将可能出现的若干字母所代表的函数的形参和返回值的具体情况。
3、函数声明是一个语句,末尾必须加分号。
4、对库函数的声明是通过# include <库函数所在的文件的名字.h>来实现。

2.1.3 形参和实参

1、个数相同
2、位置一一对应
3、数据类型必须相互对应

三、变量作用域

3.1 变量作用域

3.1.1 全局变量

在所有函数外部定义的变量。
全局变量使用范围:从定义位置到整个程序结束。

示例:

# include int AllArea = 100; // 全局变量,定义在所有函数的外面// int i,int j为函数的形参
int max(int i, int j)
{if (i > j)return i;elsereturn j;}int main(void)
{int a, k, m;while (1){printf("请输入数值:\n");scanf("%d %d", &k, &m);// k,m为函数调用时传入的实参a = max(k, m);printf("%d\n", a);}return 0;
}

3.1.2 局部变量

在一个函数内部定义的变量或者函数的形参。
局部变量的使用范围:只能在本函数的内部使用

局部变量在函数调用时创建,在函数结束后销毁。

示例:

# include int AllArea = 100; // 全局变量,定义在所有函数的外面// int i,int j为函数的形参,也是该函数的局部变量
int max(int i, int j)
{if (i > j)return i;elsereturn j;}int main(void)
{int a, k, m;	// 局部变量,声明在主函数的内部,不能在函数的外面使用while (1){printf("请输入数值:\n");scanf("%d %d", &k, &m);// k,m为函数调用时传入的实参a = max(k, m);printf("%d\n", a);}return 0;
}

3.1.3 注意

在一个函数内部如果定义的局部变量的名字和全局变量的名字一样时,局部变量会屏蔽全局变量。

相关内容

热门资讯

安卓系统的如何测试软件,从入门... 你有没有想过,你的安卓手机里那些神奇的软件是怎么诞生的呢?它们可不是凭空出现的,而是经过一系列严格的...
小米8安卓系统版本,安卓系统版... 你有没有发现,手机更新换代的速度简直就像坐上了火箭呢?这不,小米8这款手机自从上市以来,就凭借着出色...
华为手机安卓系统7以上,创新体... 你有没有发现,最近华为手机越来越受欢迎了呢?尤其是那些搭载了安卓系统7.0及以上版本的机型,简直让人...
儿童英语免费安卓系统,儿童英语... 哇,亲爱的家长朋友们,你是否在为孩子的英语学习发愁呢?别担心,今天我要给你带来一个超级好消息——儿童...
ios系统切换安卓系统还原,还... 你有没有想过,有一天你的手机从iOS系统切换到了安卓系统,然后再从安卓系统回到iOS系统呢?这听起来...
灵焕3装安卓系统,引领智能新体... 你知道吗?最近手机圈里可是掀起了一股热潮,那就是灵焕3这款神器的安卓系统升级。没错,就是那个曾经以独...
安卓系统指南针软件,探索未知世... 手机里的指南针功能是不是让你在户外探险时倍感神奇?但你知道吗,安卓系统中的指南针软件可是大有学问呢!...
华为是不用安卓系统了吗,迈向自... 最近有个大新闻在科技圈里炸开了锅,那就是华为是不是不再使用安卓系统了?这可不是一个简单的问题,它涉及...
安卓系统热点开启失败,排查与解... 最近是不是你也遇到了安卓系统热点开启失败的小麻烦?别急,让我来给你详细说说这个让人头疼的问题,说不定...
小米max2系统安卓,安卓系统... 你有没有听说过小米Max2这款手机?它那超大的屏幕,简直就像是个移动的电脑屏幕,看视频、玩游戏,那叫...
电池健康怎么保持安卓系统,优化... 手机可是我们生活中不可或缺的好伙伴,而电池健康度就是它的生命力。你有没有发现,随着使用时间的增长,你...
安卓手机怎么调系统颜色,安卓手... 你有没有发现,你的安卓手机屏幕颜色突然变得不那么顺眼了?是不是也想给它换换“脸色”,让它看起来更有个...
安卓系统清粉哪个好,哪款清粉工... 手机用久了,是不是觉得卡得要命?别急,今天就来聊聊安卓系统清理垃圾哪个软件好。市面上清理工具那么多,...
华为被限制用安卓系统,挑战安卓... 你知道吗?最近科技圈可是炸开了锅!华为,这个我们耳熟能详的名字,竟然因为一些“小插曲”被限制了使用安...
安卓系统是不是外国,源自外国的... 你有没有想过,我们每天离不开的安卓系统,它是不是外国货呢?这个问题听起来可能有点奇怪,但确实很多人都...
安卓系统缺少文件下载,全面解析... 你有没有发现,用安卓手机的时候,有时候下载个文件真是让人头疼呢?别急,今天就来聊聊这个让人烦恼的小问...
kktv系统刷安卓系统怎么样,... 你有没有听说最近KKTV系统刷安卓系统的事情?这可是个热门话题呢!咱们一起来聊聊,看看这个新玩意儿到...
安卓系统连接电脑蓝牙,操作指南... 你有没有遇到过这种情况:手机里堆满了各种好用的应用,可就是想找个方便快捷的方式,把手机里的音乐、照片...
安卓车机11.0系统包,智能驾... 你有没有发现,最近你的安卓车机系统好像悄悄升级了呢?没错,就是那个安卓车机11.0系统包!这可不是一...
安卓系统最高到多少,从初代到最... 你有没有想过,你的安卓手机系统升级到哪一步了呢?是不是好奇安卓系统最高能到多少呢?别急,今天就来带你...