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

函数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);}
}

相关文章:

  • 【PostgreSQL安装】保姆级安装教程+特性详解
  • 深入理解Go并发模型:从CSP理论到生产实践的完整指南
  • encodeURIComponent和decodeURIComponent
  • OpenHarmony按键分发流程(60%)
  • 安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
  • 云安全与网络安全:核心区别与协同作用解析
  • Android Jetpack Compose开发纯自定义表盘【可用于体重,温度计等项目】
  • 设置Outlook关闭时最小化
  • TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?
  • Haption 力反馈遥操作机器人:6 自由度 + 低延迟响应,解锁精准远程操控体验
  • omi开源程序是AI 可穿戴设备的源码。戴上它,说话,转录,自动完成
  • USB Over IP专用硬件的5个特点
  • C/CPP 结构体、联合体、位段内存计算 指南
  • 从面试角度回答Android中ContentProvider启动原理
  • 网络六边形受到攻击
  • EEG-fNIRS联合成像在跨频率耦合研究中的创新应用
  • 货运从业资格考试主要考察哪些方面的知识和技能?
  • python基础day06
  • 云防火墙(安全组)配置指南:从入门到精通端口开放 (2025)
  • 基于 HTTP 的单向流式通信协议SSE详解
  • 企业网络营销活动成败的关键在于/漯河seo推广
  • wordpress 4 安装/seo点击软件手机
  • 公司是否可以做多个网站/搜索优化是什么意思
  • 建设银行网站修改手机号/网络营销有本科吗
  • 去年做那个网站致富/网络推广外包注意哪些
  • 建网站哪个好/怎样创建网站平台