当前位置: 首页 > backend >正文

函数01 day10

十:函数

一:语法

	类型标识符(看return返回是什么类型的)	函数名(形式参数)//函数头{		​	函数体​	//声明部分​	//语句部分}

函数模型:函数–

​ 本质上是一个功能模块:完成特定功能,实现数据处理

​ 输入—>函数(处理)—>输出

实现函数:

函数头 (1).类型说明符 //函数处理完数据后,结果的类型-----返回值类型

​ (2).函数名 //主要体现函数的功能

​ (3).形式参数(形参) //用来接收要处理的数据

函数体

​ (4).具体实现函数功能的代码

int add(int a,int b)
{int sum;sum = a + b;return sum;
}int main(int argc, const char *argv[])
{int ret;ret = add(1,2);printf("sum = %d\n",ret);return 0;
}

二:返回值

1.函数返回值,如果不需要,设计为空void,此时函数代码不需要return

2.默认为int

3.返回值类型和设计的类型应保持一致

4.函数实现的位置,可以放在main之前/之后,

​ 之前:相当于定义的同时也声明了

​ 之后:使用之前一定要做声明 函数声明:把函数头复制,最后加上分号;

​ 如果把定义函数放在main函数里面 //可以,不标准

5.可以返回逻辑结果

int main(int argc, const char *argv[])
{int ret;int a,b;scanf("%d %d",&a,&b);int max(int a,int b);//4.函数声明实例ret = max(a,b);printf("max = %d\n",ret);return 0;
}int max(int a,int b)
{int z;if(a>b){z = a;}else{z = b;}return (z);
}
int jud_Ryear(int year)
{return (year%100 != 0 && year%4 == 0)||year % 400 == 0 ;//5.带出逻辑结果
}
int main(int argc, const char *argv[])
{int year;scanf("%d",&year);if(jud_Ryear(year) == 1){printf("yes\n");}else{printf("no\n");}return 0;
}
#include <stdio.h>int isLeapYear(int year)
{return year % 100 != 0 && year % 4 == 0 || (year % 400 == 0);
}int getMonthDays(int y, int m)//数组形式
{int days = 0;int months[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};return m==2 ? months[m-1] + isLeapYear(y) : months[m-1];
}int main(void)
{int year = 0;int month = 0;printf("Input a year and month: ");scanf("%d%d", &year, &month);printf("%d\n", getMonthDays(year, month));return 0;
}

三:函数综合练习(函数嵌套)

#include<stdio.h>//判断素数int isPrimeNum(int n)
{int i = 0;int ret = 1;for(i=2;i<n;i++){if(n%i == 0){ret = 0;break;}}return ret;
}void PrintNUm()
{for(int j=2;j<=100;j++){if(isPrimeNum(j) == 1){printf("%d ",j);}}
}int main(int argc, const char *argv[])//主调函数
{PrintNUm();//被调函数putchar('\n');//同上 return 0;
}
#include<stdio.h>//判断回文数int judNum(int n)
{int k = 0;int t = 0;int m = n;while(n){k = n%10;t = t*10 + k;n = n/10;}return t == m;}void printNum()
{for(int i=1;i<=1000;i++){if(judNum(i) == 1){printf("%d ",i);}}
}int main(int argc, const char *argv[])
{printNum();putchar('\n');return 0;
}

四:函数实现的本质

1.是借助于栈的结构,实现了函数的层层的嵌套调用

2.函数的调用关系:可以实现层层嵌套调用

3.栈 (内存) //栈本身是一种数据结构特点:先进后出FILO(First In Last Out)

​ //栈实际对应的是一块内存空间

4.a.out----运行之后–>加载到内容 //典型的c程序在内存上被划分了5个区域

5.五个部分:

​ 栈–特点:先进先出 //局部变量—空间会开在栈上—变量特点:自动申请,自动释放

​ //栈的大小–默认8M

​ 堆–特点:空间很大用于存放大的数据 堆区空间–手动申请,手动释放

​ 全局区(静态区):存放全局变量和静态变量

​ 字符串常量区:"hello"//字符串常量

​ 代码区:就是程序的负责执行的代码指令

	unsigned char ch [1024 * 1024 * 7];// 8MBunsigned char ch[1024 * 1024 * 8];//正好是8MB,但加上函数调用开销、返回地址等信息,就会超限

五:嵌套调用(递归)

1.直接递归

void func1
{printf("func1-----\n");func1();
}

2.间接递归

void func1()
{printf("func1-----\n");void func2();func2();
}
void func2()
{printf("func2-----\n");
}

3.递归是一种特殊的循环 //递归因为栈空间有限,即使没有结束条件,也不会死循环

int sum(int n)
{if(n == 1){return 1;}else{return sum(n-1) + n;//递归思路:从后往前看,看向上一次操作,累次}
}int main(int argc, const char *argv[])
{int n = 0;scanf("%d",&n);int ret = sum(n);printf("%d\n",ret);
int fb(int n)//斐波那契数列
{if(n == 1||n == 2){return 1;}else{return fb(n-2) + fb(n-1);}
}
http://www.xdnf.cn/news/13105.html

相关文章:

  • 数字孪生+AR/VR的融合创新
  • yolo模型精度提升策略
  • Vue数据响应式原理解析
  • 华为云Flexus+DeepSeek征文|体验华为云ModelArts快速搭建Dify-LLM应用开发平台并创建自己的AI-Agent
  • 安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
  • docker容器互联
  • Python----大模型(大模型基础)
  • Linux学习
  • 如何为服务器生成TLS证书
  • 【C++进阶篇】智能指针
  • DIC 应变测量系统助力混凝土 / 岩石断裂力学性能深度研究
  • 第2篇:BLE 广播与扫描机制详解
  • 【iSAQB软件架构】复杂系统架构描述的推荐实践
  • 在 Windows 11 上恢复旧版 Windows 10 右键菜单的命令
  • OPENCV形态学基础之二腐蚀
  • 使用python进行图像处理—图像滤波(5)
  • 常见的Linux命令
  • vue3 定时器-定义全局方法 vue+ts
  • 人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent
  • pm2部署Nuxt项目!
  • 开放词汇检测分割YOLOE从pytorch到caffe
  • Clean Code 学习总结01 - 物理设计与命名艺术
  • [Java 基础]String 类
  • MCP和Function Calling
  • OpenCV CUDA模块光流计算-----实现Farneback光流算法的类cv::cuda::FarnebackOpticalFlow
  • Spring Boot 与 Kafka 的深度集成实践(二)
  • Flink 系列之二十二 - 高级概念 - 保存点
  • Linux命令cat /proc/net/snmp查看网络协议层面统计信息
  • 项目管理进阶:解析112页IPD集成产品开发高层培训【附全文阅读】
  • 秋叶包ComfyUI 新手入门攻略及实战指南