C 语言函数详解——从无返回值无参数到有返回值多参数
C 语言函数详解——从无返回值无参数到有返回值多参数基于谭浩强《C 程序设计》第 7 章📚 适合 C 语言初学者系统学习函数核心概念💡 包含完整代码示例 + 图文解析 + 实战练习📋 目录函数的基本概念[2. 类型 1:无参数 无返回值](#2-类型 1 无参数 - 无返回值)[3. 类型 2:有参数 无返回值](#3-类型 2 有参数 - 无返回值)[4. 类型 3:无参数 有返回值](#4-类型 3 无参数 - 有返回值)[5. 类型 4:有参数 有返回值](#5-类型 4 有参数 - 有返回值)四种函数类型对比总结实战练习常见问题与解答函数的基本概念1.1 什么是函数?函数是 C 程序的基本模块,用于完成特定的任务。就像一台机器,接收输入(参数),经过处理,产生输出(返回值)。谭浩强《C 程序设计》第 7 章强调:函数是 C 程序的基本单位,一个 C 程序由一个或多个函数组成,必须有且仅有一个 main 函数。1.2 函数的四个分类函数类型 参数 返回值 典型应用场景类型 1 无参数 无返回值 打印问候语、清屏、初始化类型 2 有参数 无返回值 打印 n 次星号、设置参数类型 3 无参数 有返回值 获取用户输入、生成随机数类型 4 有参数 有返回值 数学计算、数据转换1.3 函数的一般形式返回值类型 函数名(参数列表){// 函数体(声明 + 语句)return表达式;// 如果返回值类型不是 void}函数结构说明:intadd(inta,intb)// ← 函数头部{// ← 函数体开始intresult;// 声明部分result=a+b;// 执行语句returnresult;// 返回语句}// ← 函数体结束类型 1:无参数 - 无返回值2.1 函数定义格式voidprintHello(void){printf("Hello, World!\n");}关键词解析:void(返回值):表示函数不返回任何值void(参数):表示函数不接受任何参数函数体:执行固定的操作2.2 调用方式intmain(){printHello();// 直接调用,不需要接收返回值return0;}2.3 执行流程详解┌─────────────────────────────────────┐ │ 1. main 函数执行到 printHello() │ │ 调用语句 │ └──────────────┬──────────────────────┘ │ ▼ ┌─────────────────────────────────────┐ │ 2. 程序跳转到 printHello 函数 │ │ 定义处 │ └──────────────┬──────────────────────┘ │ ▼ ┌─────────────────────────────────────┐ │ 3. 执行函数体内的 printf 语句 │ │ 输出:Hello, World! │ └──────────────┬──────────────────────┘ │ ▼ ┌─────────────────────────────────────┐ │ 4. 函数执行完毕,返回到 main 函数 │ │ 继续执行后续语句 │ └─────────────────────────────────────┘2.4 完整示例代码/* 无参数无返回值函数示例 */#includestdio.h/** * 函数名:printMenu * 功能:打印系统菜单 * 参数:无 * 返回值:无 */voidprintMenu(void){printf("======== 菜单 ========\n");printf("1. 开始游戏\n");printf("2. 加载存档\n");printf("3. 退出\n");printf("======================\n");}/** * 函数名:clearScreen * 功能:清屏(简化版) */voidclearScreen(void){printf("\n\n\n");// 简单清屏效果}intmain(){clearScreen();// 先清屏printMenu();// 打印菜单return0;}运行结果:======== 菜单 ======== 1. 开始游戏 2. 加载存档 3. 退出 ======================2.5 核心要点总结💡 关键点:这种函数不接收外部数据,也不返回结果,通常用于执行固定的操作,如打印菜单、清屏、初始化等。适用场景:✅ 打印固定格式的菜单✅ 清屏操作✅ 系统初始化✅ 显示欢迎界面✅ 打印分隔线类型 2:有参数 - 无返回值3.1 函数定义格式voidprintStars(intn){for(inti=0;in;i++){printf("★");}printf("\n");}参数说明:int n:形式参数(形参),接收调用时传入的值函数根据 n 的值,打印对应数量的星号3.2 调用方式printStars(5);// 输出:★★★★★printStars(10);// 输出:★★★★★★★★★★printStars(3);// 输出:★★★3.3 参数传递过程——值传递┌──────────────────────────────────────┐ │ main 函数 │ │ │ │ int num = 5; │ │ │ │ │ │ 传递值(复制) │ │ ▼ │ └──────────────────────────────────────┘ │ │ 副本 ▼ ┌──────────────────────────────────────┐ │ printStars 函数 │ │ │ │ int n = 5; ← 接收副本 │ │ 函数内修改 n 不影响原变量 num │ └──────────────────────────────────────┘重要概念:值传递C 语言的函数参数采用值传递方式:实参的值被复制给形参函数内部对形参的修改不会影响原来的实参变量形参是实参的一个副本3.4 完整示例代码/* 有参数无返回值函数示例 */#includestdio.h/** * 函数名:printStars * 功能:打印 n 个星号 * 参数:n - 星号数量 */voidprintStars(intn){for(inti=0;in;i++){printf("★");}printf("\n");}/** * 函数名:printSum * 功能:打印两个数的和 * 参数:a, b - 两个加数 */voidprintSum(inta,intb){intsum=a+b;printf("%d + %d = %d\n",a,b,sum);}/** * 函数名:printRectangle * 功能:打印 n 行 m 列的矩形 * 参数:n - 行数,m - 列数 */voidprintRectangle(intn,intm){for(inti=0;in;i++){for(intj=0;jm;j++){printf("■ ");}printf("\n");}}/** * 函数名:setFontSize * 功能:设置字体大小(模拟) * 参数:size - 字体大小 */voidsetFontSize(intsize){printf("字体大小已设置为:%d\n",size);}intmain(){printf("1. 打印星号:");printStars(5);printf("2. 打印加法结果:");printSum(10,20);printf("3. 打印矩形:\n");printRectangle