新手c语言讲解及题目分享(十四)--函数专项练习(一)

目录

前言

一.函数的定义

1.函数定义包括的内容:

Ⅰ.指定函数类别

Ⅱ.指定函数类型

Ⅲ.指定函数名

Ⅳ.指定函数的参数名称和类型

Ⅴ.指定函数的函数体

2.函数定义的一般形式:

Ⅰ.有参函数的定义形式:

Ⅱ.无参函数的定义形式:

二.函数的调用形式

1.有参函数的调用形式:

2.无参函数的调用形式:

3.调用函数的三种形式:

Ⅰ.调用函数作为c语言单独的c程序语句:

Ⅱ.调用函数作为表达式的运算对象:

Ⅲ.带返回值的函数调用作为其他函数的实参

三.函数的调用过程

四.函数的声明

五.函数的返回值

六.经验总结和题目分享

1.经验总结:

2.题目分享:


前言

一个较大的程序一般分为若干个小的程序模块,每个模块实现一个特定的功能。所有的 高级语言中都有子程序的概念,用子程序来实现模块的功能。 在 C 语言中,子程序的功能是由函数来完成的。函数是 C 语言源程序的基本组成单位, 用来实现特定的功能。一个 C 程序可以由一个主函数和若干个子函数构成。由主函数调用其 他函数,其他函数之间也可以互相调用。可以说,C 程序的全部工作是由函数完成的,所以 也把 C 语言称为函数式语言。 由于采用了函数模块式的结构,使 C 语言易于实现结构化程序设计,模块化的程序层次 结构清晰,便于程序的编写、阅读和调试。 在程序设计中,常将一些常用的功能模块编写成函数,放在函数库中供公共选用。程序 设计时要善于利用函数,以减少重复编写程序段的工作量。

(1)一个源程序文件由一个或多个函数组成。一个源程序文件是一个编译单位,即以源 文件为单位进行编译,而不是以函数为单位进行编译。

(2)一个 C 程序由一个或多个源程序文件组成。对较大的程序,一般不希望全放在一个 文件中,而将函数及其他有关内容(如指令、数据声明与定义等)分别放到若干个源文件 中,再由源文件组成一个 C 程序,分别编写和编译,从而提高工作效率。一个源文件可以为多 个 C 程序公用。 (3)C 程序的执行从 main 函数开始,调用其他函数后流程回到 main 函数,在 main 函数 中结束整个程序的运行。main 函数是由系统定义的函数。

(4)所有函数都是平行的,即在定义函数时是互相独立的,一个函数并不从属于另一个 函数,即函数不能嵌套定义。函数可以互相调用,但不能调用 main 函数。

(5)从函数定义的角度看,函数分为标准函数和用户自定义函数。 ①标准函数即库函数,如由 C 编译系统提供,用户无须定义,也不必在程序中作类型说 明,只需在程序前包含该函数原型的头文件,即可在程序中直接调用,printf 函数和 scanf 函 数。不同的编译系统提供的库函数的数量和功能不同,但有一些基本的函数是共同的。 ②用户自定义函数是由用户按需要编写的函数,对于用户自定义函数,不仅要在程序中 定义函数,而且要在主调函数模块中对该被调函数进行类型声明后才能使用。

(6)从函数的形式看,函数分无参函数和有参函数。

①无参函数。在调用无参函数时,主调函数并不将数据传送给被调函数,而用来执行指 定的一组操作。无参函数可以返回或不返回函数值,一般不返回函数值。 ②有参函数。在调用函数时,在主调函数和被调用函数之间有参数传递,即主调函数将 数据传给被调用函数使用,被调用函数中的返回数据供主调函数使用。

本人每天不定时分享一些自己以往总结的笔记

一.函数的定义

c语言要求,在程序中遇到的所有函数,都必须“先定义,后使用”的原则。

1.函数定义包括的内容:

Ⅰ.指定函数类别

表明该函数是内部函数(static)还是外部函数(extern)。若为内部 函数,则该函数只能在定义它的文件中被使用,而不能被引用到其他文件中;若为外部函 数,则该函数可以被引用到整个程序的其他文件中。若省略函数的类别,系统则默认为外部 函数。

Ⅱ.指定函数类型

即函数返回值的类型。表明该函数是否有返回值,若没有返回 值,则该部分应为 void;若有返回值,则该部分要标明返回值的具体类型,并与 return 语句 中的表达式类型相一致。若省略函数的返回值类型,则系统默认为 int。

Ⅲ.指定函数名

指定函数名,以便以后按名调用。函数名是一个标识符,应符合标识符的起名规 则。函数名是函数的入口地址。

Ⅳ.指定函数的参数名称和类型

指定函数的参数名称和类型,以便在调用函数时传递数据。对无参函数该项为 Void 或为空。

Ⅴ.指定函数的函数体

指定函数的函数体,即函数的执行部分。函数体是函数的主体,只有按功能编写相 应的语句行,才能实现程序的功能。

2.函数定义的一般形式:

Ⅰ.有参函数的定义形式:

类型标识符 函数名(形式参数表列)    /*函数的首部,形式参数简称为形参*/

{

声明部分

执行部分

}

Ⅱ.无参函数的定义形式:

类型标识符 函数名()

{

声明部分

执行部分

}

注:若函数无返回值,可用类型标识符void表示。

二.函数的调用形式

1.有参函数的调用形式:

函数名(实际参数表列)

2.无参函数的调用形式:

函数名()

注:无参函数调用时,函数名后面的“ ()”不能省略。

3.调用函数的三种形式:

<think>好的,我现在要帮用户整理份学习C++的博客清单,并制定个规划表,帮助他们从入门到达到NOIP水平。首先,我需要确定用户的需求。用户是刚开始学习C++,目标是通过NOIP竞赛,所以需要覆盖从基础语法到高级算法的内容。 首先,我得分解学习路径。通常NOIP考察的内容包括基本语法、数据结构、算法、以及题目实战。所以博客清单应该分阶段,逐步深入。 第阶段肯定是基础语法。用户需要了解变量、循环、条件语句、函数、数组这些。然后是STL的使用,比如vector、string、queue、stack等,这些在竞赛中非常常用,能节省很多时间。 接下来是基础算法,比如排序、查找、递归、分治、贪心、简单动态规划。这些是解决NOIP题目的基础,必须扎实。 第三阶段是数据结构进阶,比如链表、树、图、并查集、堆、哈希表。特别是树和图的相关算法,比如遍历、最短路径、最小生成树,这些在竞赛中经常出现。 第四阶段是高级算法,包括动态规划、搜索算法(DFS、BFS、剪枝)、数论、字符串处理(KMP、字典树)、高级图论算法。动态规划在NOIP中占比较大,需要重点讲解。 最后是综合实战,通过模拟题和历年真题来巩固所学知识,熟悉比赛题型和时间管理。 接下来,我需要为每个阶段推荐具体的博客资源。要确保这些资源是中文的、免费且质量较高的。比如C语言中文网、OI Wiki、阮行止的博客、Pecco的算法课等,这些资源比较权威,适合不同阶段的学习。 然后是规划表。用户可能需要个为期4-5个月的计划,每周安排不同的主题。例如,前两周学习基础语法,接下来两周学习STL,然后逐步深入算法和数据结构。每个月复习和实战测试也很重要,帮助巩固知识。 需要注意用户可能有不同的学习速度,所以规划表要有定的弹性,建议每天2-3小时的学习时间,保持持续学习。同时,提醒用户多做练习题,参加在线评测平台,如洛谷、Codeforces,这些对提升实战能力很有帮助。 最后,检查是否有遗漏的部分,比如调试技巧、代码优化,或者竞赛中的常见陷阱。确保推荐的博客内容覆盖这些方面,帮助用户全面准备NOIP。</think>我将为您整理份C++学习路径及配套博客资源清单,并附上详细规划表。以下内容根据NOIP考纲要求设计,分阶段渐进式学习: --- ### 、分阶段学习博客清单 #### 📚 阶段1:C++语法基础 1. **《C++快速入门指南》**(C语言中文网) - 环境搭建、变量类型、运算符、流程控制、函数 2. **《从零理解面向过程编程》**(菜鸟教程) - 数组、字符串、结构体、指针基础 3. **《C++标准输入输出全解析》**(洛谷日报) - 输入输出优化、流控制、格式处理技巧 #### 🔧 阶段2:STL与基础算法 1. **《STL容器完全指南》**(OI Wiki) - `vector`/`string`/`queue`/`stack`/`map`详解 2. **《十大排序算法动画解析》**(Hello算法) - 冒泡/选择/插入/归并/快排/堆排序对比 3. **《递归与分治实战20例》**(Codeforces教程) - 汉诺塔、斐波那契、快速幂实现 #### 🧠 阶段3:数据结构进阶 1. **《树形结构完全手册》**(AcWing博客) - 二叉树/二叉搜索树/堆/并查集实现 2. **《图论算法三部曲》**(Pecco的算法课) - DFS/BFS/最短路径/最小生成树 3. **《动态规划入门到精通》**(阮行止的博客) - 背包问题、线性DP、状态转移方程设计 #### ⚡ 阶段4:NOIP专项突破 1. **《竞赛数学技巧大全》**(洛谷日报) - 质数筛法、快速幂、模运算、组合数学 2. **《剪枝与优化实战指南》**(OI Wiki) - 记忆化搜索、双向BFS、启发式搜索 3. **《历年NOIP真题精讲》**(信息学奥赛本通) - 2015-2022年真题解析 --- ### 二、学习规划表(总时长4-5个月) #### 📅 第1-2周:语法筑基 - 每天2小时学习基础语法 - 配套练习:洛谷「新手村」题目 - 重点掌握:循环结构、数组操作、函数编写 #### 📅 第3-4周:STL实战 - 重点练习:`vector`和`sort`的配合使用 - 典型题目:P1177(排序)、P1553(字符串处理) #### 📅 第5-6周:算法入门 - 每日刷3道递归/分治类题目 - 理解时间复杂度的计算方法 #### 📅 第7-8周:数据结构攻坚 - 专项训练:并查集(P1551)、堆(P1090) - 掌握树的前中后序遍历实现 #### 📅 第9-12周:动态规划与图论 - 重点突破:背包九讲、Floyd/Dijkstra算法 - 完成10道经典DP题目(如P1216数字三角形) #### 📅 第13-16周:综合实战 - 每周完成2套NOIP模拟赛 - 分析错题并撰写解题报告 - 学习对拍调试技巧 --- ### 三、关键学习建议 1. **代码实践**:每个知识点必须配合3-5道练习题 2. **调试能力**:学会使用`gdb`或IDE调试工具 3. **复杂度控制**:保证算法能通过$10^5$量级数据 4. **模考策略**:训练每题最多25分钟的解题速度 ### 四、推荐练习平台 - **洛谷**(www.luogu.com.cn) - **AcWing**(www.acwing.com) - **Codeforces**(codeforces.com) 附学习路线图: ```mermaid graph TD A[语法基础] --> B[STL容器] B --> C[排序/查找] C --> D[递归/分治] D --> E[线性数据结构] E --> F[树形结构] F --> G[图论算法] G --> H[动态规划] H --> I[数学基础] I --> J[综合实战] ``` 建议每天保持2-3小时有效学习时间,每周安排半天进行错题复习。遇到难点时,可参考《算法竞赛进阶指南》纸质书辅助学习。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

樱娆^_^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值