新闻详情

新闻详情

首页 / 资讯中心 / 详情

10.函数设计

发布时间:2026/9/28 3:31:18来源:尧图网络
10.函数设计
一、前置知识回顾什么是库函数printf/scanf我们最早写代码用到的printf()打印、scanf()输入都不是凭空出现的它们是系统提前封装好的函数存放在#include stdio.h这个头文件工具箱里。函数本质一段封装好、有固定功能的代码起一个专属名字 调用规则直接写函数名 括号参数主函数会自动执行函数内部所有代码 优势重复功能不用反复抄写代码一次封装、到处调用。1.1 输入输出库函数详解printf /scanf1.1.1 printf 输出函数功能把数字、文字打印到黑框控制台 格式printf(格式字符串, 数据1, 数据2...);无格式符直接输出文字printf(请输入一个整数\n);带格式符占位匹配变量%d匹配整数int a 10; printf(数字a的值是%d, a);1.1.2 scanf 输入函数功能读取键盘手动输入的数据存入变量 格式scanf(格式控制符, 变量名);取地址符号必不可少作用是找到变量存放位置把输入数据放进去int n; scanf(%d, n);1.1.3 printf、scanf 本质都是带参数的库函数printf(数字%d, n)括号内数字%d、n都是传给 printf 的实参 库函数内部提前写好了处理输入输出的代码我们只需要传参就能直接使用。二、C 语言自定义函数完整结构2.1 函数五大核心组成必背返回值类型 函数名(函数参数列表) { // 函数体实现功能的全部代码 // 返回值void无返回值函数不用写return return 数据; }返回值类型int /void/double /char决定函数最后交出什么数据函数名英文、下划线开头见名知意如 Prime 判断素数函数参数外部传给函数的 “原材料”充当数据中间人函数体功能实现逻辑return 返回值函数执行完交回给调用处的结果2.2 两种函数分类int 有返回值函数执行完会返回一个整数必须写 returnreturn 0程序 / 功能正常执行完毕return 1代表条件成立C 语言中非 0 都为真习惯用 1 表示成立0 表示假return 变量返回计算结果阶乘、和、数组最值等void 无返回值函数仅内部完成打印、输出不需要向外交数据。补充main 也是函数int main() { return 0; }main 返回值类型 intreturn 0交给操作系统表示程序正常结束 返回非 0 数字代表程序异常、出错。三、完整示例定义并调用素数判断函数3.1 有返回值版本int Prime(int n) { if(n 1) return 0; //小于等于1一定不是素数 for(int i2;i*i n;i) { if(n%i 0) return 0; //找到因数直接判定不是素数提前结束 } return 1; }运行后我们能看到Prime(括号里写数据)这些传递进去的数据就是函数参数下面专门讲解传参规则。四、函数参数传参规则参数是主函数和自定义函数的数据中间人连接调用方和自定义函数形参函数定义时括号里声明的变量。示例int Prime(int n)括号内的 n 就是形参作用接收外部传进来的数据作用域仅当前函数内部可以使用main 中不能直接访问实参调用函数时括号里真实传入的数值 / 变量。示例Prime(n)、Prime(7)括号内 n、7 都是实参强制规则实参、形参数据类型必须完全一致。形参写 int实参只能传整数形参写 double实参只能传小数 初始化规则形参不需要在函数内部重新赋值初始化数值由调用时的实参直接传递过来补充重点函数参数不是必须写按需设计 不管是 int 类型还是 void 类型函数括号内的形参可写可不写根据功能需求决定 需要外部给函数提供数据就写形参调用时必须传对应实参 函数内部自己完成输入、固定数值运算不需要外部传数据标准写法int test(void)空括号int test()是旧 C 写法考试优先写void。值传递C 语言默认是值传递实参传给形参只是拷贝一份副本。函数内部修改形参的值不会影响 main 里面原来的实参变量。4.2 结合输入输出函数理解传参// scanf的传参%d、n 两个实参传给库函数scanf scanf(%d, n); // printf的传参是素数 传给printf的实参 printf(是素数); // 自定义函数传参n作为实参传递给Prime的形参n Prime(n);五、void 素数函数#includestdio.h void Prime(int n) { int sum0; for(int i1;in;i) { if(n%i0)sum; } if(sum2) printf(是素数); else printf(不是素数); } int main() { int n; scanf(%d,n); Prime(n); //外部输入数据通过实参传给形参n return 0; }解读这个 void 函数需要 main 提供数字所以设计时添加形参调用必须传参 如果功能不需要外部数据就写void test(void)参数按需添加不是强制要求。六、自定义函数书写三大注意事项函数定义位置自定义函数可以写在#include下方、main 上方调用顺序如果 A 函数调用 B 函数方案① B 写在 A 前面方案② B 写在后面增加函数原型声明⚠️重点函数原型声明末尾必须加分号函数定义头部不带分号。int Prime(int n); //函数原型声明告诉编译器这个函数存在 int main(){ //调用Prime } int Prime(int n){ //函数体 }头文件匹配函数内用到 printf/scanf 必须保留#includestdio.h补充考点return 关键字return 一旦执行立刻结束当前函数后面代码不再运行。局部变量只在自己大括号{}内部有效。七、函数嵌套调用拓展【注此版本为入门统计因数写法考试推荐使用前面优化版 Prime 函数效率更高】#includestdio.h int Prime(int n) { int sum0; for(int i1;in;i) { if(n%i0)sum; } if(sum2)return 1; else return 0; } int ADD_Prime(void) { int sum0;//求和变量初始化0 for(int i1;i100;i) { if(Prime(i))sumi; } return sum; } int main() { printf(1-100素数和%d,ADD_Prime()); return 0; }八、函数核心总结背诵版函数 封装复用代码分 int 有返回值、void 无返回值两类标准五要素返回类型 函数名 参数列表 函数体 return输入输出 printf、scanf 都是系统自带带参库函数括号内均为实参先看懂函数定义与调用再区分形参定义处、实参调用处return 作用结束函数向外传递数据void 函数可不写 return传参规则实参传给形参类型必须一致形参仅函数内部可用函数参数不是强制书写按需设计需要外部传数据就加形参不需要则写 (void)C 语言默认值传递形参是副本修改形参不会影响外部实参函数可嵌套调用实现代码分层逻辑清晰、方便修改两种写法函数写在 main 上方或者写在 main 下方开头加函数原型声明。拓展函数1. 自定义输入输出函数1.1 输入整数函数有返回值无参数内部自行输入int InputNum(void) { int temp; printf(请输入整数); scanf(%d,temp); return temp; }1.2 输出数字函数void 带参接收外部数字打印void OutputNum(int num) { printf(输出数字%d\n,num); }1.3 数组打印输出函数双形参数组、长度void PrintArr(int arr[],int len) { for(int i0;ilen;i) { printf(%d ,arr[i]); } printf(\n); }2. 判断水仙花数int IsDaffodil(int n) { int origin n; int sum 0; while(n ! 0) { int num n % 10; sum num * num * num; //直接整数相乘消除浮点精度问题 n n / 10; } if(sum origin) return 1; else return 0; }3. 判断回文数int 带参返回 1/0int IsPal(int n) { int origin n; int reverse 0; while(n ! 0) { int num n % 10; reverse reverse * 10 num; n n / 10; } if(reverse origin) return 1; else return 0; }4. 阶乘函数 阶乘求和函数4.1 求单个数字阶乘带参int Factorial(int n) { int res 1; for(int i1;in;i) { res * i; } return res; }4.2 1~n 阶乘总和带参int AddFactorial(int n) { int sum 0; for(int i1;in;i) { sum Factorial(i); } return sum; }5. 冒泡排序函数数组双形参void BubbleSort(int arr[],int len) { for(int j0;jlen-1;j) { for(int i0;ilen-1-j;i) { if(arr[i] arr[i1]) { int temp arr[i]; arr[i] arr[i1]; arr[i1] temp; } } } }6. 完整测试整合 main 示例int main() { //测试输入输出 int x InputNum(); OutputNum(x); //测试水仙花 if(IsDaffodil(x)) printf(是水仙花数\n); else printf(不是水仙花数\n); //测试回文数 if(IsPal(x)) printf(是回文数\n); else printf(不是回文数\n); //测试阶乘求和 printf(1~%d阶乘总和%d\n,x,AddFactorial(x)); //测试冒泡排序 int arr[7] {9,2,5,1,7,3,6}; int len sizeof(arr)/sizeof(arr[0]); BubbleSort(arr,len); printf(冒泡排序后数组); PrintArr(arr,len); return 0; }完整可直接复制运行总代码#includestdio.h int InputNum(void) { int temp; printf(请输入整数); scanf(%d,temp); return temp; } void OutputNum(int num) { printf(输出数字%d\n,num); } void PrintArr(int arr[],int len) { for(int i0;ilen;i) { printf(%d ,arr[i]); } printf(\n); } int IsDaffodil(int n) { int origin n; int sum 0; while(n ! 0) { int num n % 10; sum num * num * num; n n / 10; } if(sum origin) return 1; else return 0; } int IsPal(int n) { int origin n; int reverse 0; while(n ! 0) { int num n % 10; reverse reverse * 10 num; n n / 10; } if(reverse origin) return 1; else return 0; } int Factorial(int n) { int res 1; for(int i1;in;i) { res * i; } return res; } int AddFactorial(int n) { int sum 0; for(int i1;in;i) { sum Factorial(i); } return sum; } void BubbleSort(int arr[],int len) { for(int j0;jlen-1;j) { for(int i0;ilen-1-j;i) { if(arr[i] arr[i1]) { int temp arr[i]; arr[i] arr[i1]; arr[i1] temp; } } } } int Prime(int n) { if(n 1) return 0; for(int i2;i*i n;i) { if(n%i 0) return 0; } return 1; } int ADD_Prime(void) { int sum0; for(int i1;i100;i) { if(Prime(i))sumi; } return sum; } int main() { //测试输入输出 int x InputNum(); OutputNum(x); //测试水仙花 if(IsDaffodil(x)) printf(是水仙花数\n); else printf(不是水仙花数\n); //测试回文数 if(IsPal(x)) printf(是回文数\n); else printf(不是回文数\n); //测试阶乘求和 printf(1~%d阶乘总和%d\n,x,AddFactorial(x)); //测试冒泡排序 int arr[7] {9,2,5,1,7,3,6}; int len sizeof(arr)/sizeof(arr[0]); BubbleSort(arr,len); printf(冒泡排序后数组); PrintArr(arr,len); //测试1~100素数和 printf(1~100素数总和%d\n,ADD_Prime()); return 0; }
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Windows 下 opencode Desktop App 配置 Azure GPT5.2 与 oh-my-opencode、Superpowers 插件安装指南 2026/9/28 4:32:29

Windows 下 opencode Desktop App 配置 Azure GPT5.2 与 oh-my-opencode、Superpowers 插件安装指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
AI Agent Harness Engineering 记忆检索增强:用 RAG 给智能体装上可验证的长期记忆 2026/9/28 4:32:29

AI Agent Harness Engineering 记忆检索增强:用 RAG 给智能体装上可验证的长期记忆

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
从提示词堆叠到上下文操作系统:Claude 5时代智能体上下文工程方法论与TaoToken配置骨架 2026/9/28 4:32:29

从提示词堆叠到上下文操作系统:Claude 5时代智能体上下文工程方法论与TaoToken配置骨架

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Coding / Token Plan 统一管理实战:用 TaoToken 一份 settings.json 收口多工具 API Key 2026/9/28 4:32:29

Coding / Token Plan 统一管理实战:用 TaoToken 一份 settings.json 收口多工具 API Key

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
3个实战案例教你搞定WordPress地图创建拒绝模板丑感 2026/9/28 4:32:29

3个实战案例教你搞定WordPress地图创建拒绝模板丑感

3个实战案例教你搞定WordPress地图创建拒绝模板丑感 模板网站太丑不够用,这是90%建站项目经理的痛点。别被那些花里胡哨的拖拽插件忽悠了,真正能落地的wordpress地图创建方案,往往藏在细节里。…

阅读更多 →
集成脚本设计:从零散命令到可复现的自动化部署链路 2026/9/28 4:32:23

集成脚本设计:从零散命令到可复现的自动化部署链路

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉