函数
😎
什么是函数
老样子先线上废话:
- 可以将重复的代码封装成可重用的代码块。
- 可以提高代码的可读性和可维护性,帮助我们组织代码,使其更易于管理。
- 可以接受参数,可以通过将不同的参数传递给函数来重用同一段代码以执行不同的任务。
- 可以编写高效、可重用和易于维护的代码
补充一哈
函数的三要素:
函数名 \\体现功能 参数列表 \\看代码啦 返回值 \\执行什么样的功能
函数封装和调用
上代码吧 大家看着舒服
无参函数调用
#include <stdio.h>
void snake()//函数原型
{
printf("small snake最帅\n");//函数体
}
int main() {//主函数
// 调用函数,输出字符串
snake();
return 0;//返回值
}
有参函数调用
#include <stdio.h>
// 定义一个带有两个参数的函数
void greet(char *name, int time)//函数原型 有参数(形参)
{
int i;
i = time + 10;
printf("你好,%s!现在是%d点钟。\n", name, i);
}
int main()
{
// 调用函数并传递参数small,10
greet("small-snake", 10);//传参(实参)
return 0;
}
带返回值的有参函数调用
#include <stdio.h>
// 定义一个带有两个参数的函数
int snake(int big, int small)//里面的是形参
{
int i;
i = big - small;
retuen i; //返回值,返回值和函数类型是有关系的
}
int main()
{
int i;
// 调用函数并传递参数
snake(90,10);//实参
printf("%d",i);
return 0;
}
需要注意
事到如今大家看懂了吗?
有个新手场犯错误:形参只是用来承接实参的,不要在里面赋值,传递实参的时候不要带类型。
要记得沃,我以前老翻车,初出茅庐
形参和实施惨的区别
把你的目光锁定到这里🤞我们废话走起
| 区别 | 形参 | 实参 |
|---|---|---|
| 定义位置 | 函数定义时声明的参数 | 函数调用时传递的参数 |
| 数据类型 | 可以是任意数据类型 | 必须与形参数据类型相同 |
| 变量名字 | 在函数定义中有 | 在函数调用时根据需要提供 |
| 存储位置 | 通常在函数栈帧中分配空间,存储于函数栈中,与其它变量隔离 | 通常在调用栈中分配空间,存储于调用栈中,与其它变量共享 |
| 初始值设定 | 由函数调用时提供 | 由程序员设定 |
| 使用方式 | 仅在函数内部有效,具有局部作用域 | 仅在函数调用时有效,具有全局作用域 |
举个例子方便大家理解
#include <stdio.h>
int max(int a, int b) {
return (a > b) ? a : b;
}
int main() {
int num1, num2, result;
printf("请输入两个数字:\n");
scanf("%d %d", &num1, &num2);
result = max(num1, num2);
printf("最大值是 %d\n", result);
return 0;
}
好啦 往下看
函数的嵌套
上代码
#include<stdio.h>
int max(int a, int b) {
return a > b ? a : b;
}
int find_max(int a, int b, int c, int d) {
int ab_max = max(a, b);
int cd_max = max(c, d);
return max(ab_max, cd_max);
}
int main() {
int a, b, c, d;
printf("请输入四个数:");
scanf("%d %d %d %d", &a, &b, &c, &d);
int max_num = find_max(a, b, c, d);
printf("最大值为:%d\n", max_num);
return 0;
}
看懂了吗?在这里给大家解释一下
考验一下大家的拼音学得怎么样,这个流程图相信会对大家理解这个代码有灰常大的帮助(函数的嵌套)
erDiagram
main ||--o{ find_max : fanhui-4
find_max ||--}| max : fanhui-3
max ||--o{ find_max : diaoyong-2
find_max ||--}| main : diaoyong-1
递归函数
话不多说上代码
#include<stdio.h>
int age(int student)
{
int i;
if(student == 1){
return 10;
}else{
i = age(student-1) + 2;
}
return i;
}
int main()
{
int student;
int i;
int j;
puts("你想知道第几个学生的年龄:\n");
scanf("%d",&j);
i = age(j);
printf("%d",i);
}
求阶乘案例
就在刚刚我在这里又踩坑啦,大家一定要注意啊
#include<stdio.h>
int jiecheng(int j)
{
int i;
if(j == 1){
return 1;
}else{
i = jiecheng(j-1)*j;//就是这里 啊 兄弟们 我就是忘记家*j了 导致结果一直是1
}
return i;
}
int main()
{
int student;
int i;
int num;
puts("你想求几的阶乘:\n");
scanf("%d",&num);
i = jiecheng(num);
printf("%d",i);
}
函数和数组的恩爱情仇
一维数组
#include<stdio.h>
void printArray(int arr[], int size)//这边要给大家解释一下 形参中不存在数组的概念,后面学到指针会有详细的解释
{ //传递过来的十一个地址
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
int main()
{
int arr[6] = {1, 2, 3, 4, 5, 6};
int size;
size = sizeof(arr)/sizeof(a[0]);//这里我将数组的长度算了出来 这样方便修改数组的大小 =而不用动函数
printArray(arr, size);
return 0;
}
二维数组
#include<stdio.h>
int main() {
int arr[3][4];
int max;
inputArray(arr);//传参
max = findMax(arr);//传参得到返回值赋值给max
printArray(arr);//传参
printf("最大值为:%d\n", max);//打印
return 0;
}
void inputArray(int arr[][4])//初始化函数 记得呦 行号可以不写 但是列必须写 二维数组的小啾啾
{
int i, j;
printf("请输入数组内容:\n");
for (i = 0; i < 3; i++) {
for (j = 0; j < 4; j++) {
scanf("%d", &arr[i][j]);
}
}
}
int findMax(int arr[][4]) //找出最大值
{
int i, j, max;
max = arr[0][0];
for (i = 0; i < 3; i++) {
for (j = 0; j < 4; j++) {
if (arr[i][j] > max) {
max = arr[i][j];
}
}
}
return max;
}
void printArray(int arr[][4]) //打印数组
{
int i, j;
printf("数组内容为:\n");
for (i = 0; i < 3; i++) {
for (j = 0; j < 4; j++) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
}
这边就讲这么多 有不会的可以在评论区留言,和一维数组都是通的,也没有太多知识点
全局变量和外部变量
懂得都懂 先上废话
| 变量类型 | 定义 | 特点 |
|---|---|---|
| 全局变量 | 在程序中定义的可以被整个程序访问的变量 | 可以在程序的任何地方访问,生命周期和程序的运行时间相同。 |
| 局部变量 | 在程序中定义的只能被定义该变量的函数访问的变量 | 只能在定义该变量的函数或代码块中访问,生命周期较短。 |
上代码 #include <stdio.h>
// 全局变量
int global = 10;
// 局部变量在函数内定义
void func1()
{
int local = 20;
printf("Local variable: %d\n", local);
}
// 全局变量在函数内使用
void func2()
{
printf("Global variable: %d\n", global);
}
int main()
{
func1(); // 输出 "20"
func2(); // 输出 "10"
return 0;
}
今天的不开心就到此为止吧,准备开始C语言下篇
今晚加个班 昨天太忙没更新 今儿补上