文章目录

  • 头文件
    • 引用头文件的语法
    • 引用头文件的操作
    • 只引用一次头文件
    • 有条件引用
  • 强制类型转换
    • 整数提升
    • 常用的算术转换
  • 递归
    • 数的阶乘
    • 斐波那契数列
  • 本周其他文章:

头文件

头文件包含了 C 函数声明和宏定义,被多个源文件中引用共享。有两种类型的头文件:程序员编写的头文件和编译器自带的头文件。

在程序中要使用头文件,需要使用 C 预处理指令 #include 来引用它。前面我们已经看过 stdio.h 头文件,它是编译器自带的头文件。

引用头文件相当于复制头文件的内容,但是我们不会直接在源文件中复制头文件的内容,因为这么做很容易出错,特别在程序是由多个源文件组成的时候。

引用头文件的语法

使用预处理指令 #include 可以引用用户和系统头文件。例如:

#include <stdio.h>
#include "header.h"

引用头文件的操作

#include 指令会指示 C 预处理器浏览指定的文件作为输入。预处理器的输出包含了已经生成的输出,被引用文件生成的输出以及 #include 指令之后的文本输出。例如,如果我们有一个头文件 header.h,如下:

char *test(void);

和一个使用了头文件的主程序 program.c,如下:

#include "header.h"
int main()
{puts(test());return 0;
}

编译器会看到如下的代码信息:

char *test(void);
int main()
{puts(test());return 0;
}

只引用一次头文件

如果一个头文件被引用两次,编译器会处理两次头文件的内容,这将产生错误。为了防止这种情况,标准的做法是把文件的整个内容放在条件编译语句中,如下:

#ifndef HEADER_FILE
#define HEADER_FILEthe entire header file file#endif

这种结构就是通常所说的包装器 #ifndef。当再次引用头文件时,条件为假,因为 HEADER_FILE 已定义。此时,预处理器会跳过文件的整个内容,编译器会忽略它。

有条件引用

有时需要从多个不同的头文件中选择一个引用到程序中。例如,需要指定在不同的操作系统上使用的配置参数。可以通过一系列条件来实现,如下:

#if SYSTEM_1# include "system_1.h"
#elif SYSTEM_2# include "system_2.h"
#elif SYSTEM_3...
#endif

但是如果头文件比较多的时候,这么做是很不妥当的,预处理器使用宏来定义头文件的名称。这就是所谓的有条件引用。它不是用头文件的名称作为 #include 的直接参数,我们只需要使用宏名称代替即可:

 #define SYSTEM_H "system_1.h"...#include SYSTEM_H

SYSTEM_H 会扩展,预处理器会查找 system_1.h,就像 #include 最初编写的那样。SYSTEM_H 可通过 -D 选项被 Makefile 定义。

强制类型转换

强制类型转换是把变量从一种类型转换为另一种数据类型。例如,如果我们想存储一个 long 类型的值到一个简单的整型中,就需要把 long 类型强制转换为 int 类型。可以使用强制类型转换运算符来把值显式地从一种类型转换为另一种类型。

#include <stdio.h>
int main()
{int sum = 17, count = 5;double mean;mean = (double) sum / count;printf("Value of mean : %f\n", mean);return 0;
}

代码执行结果:

Value of mean : 3.400000

这里要注意的是强制类型转换运算符的优先级大于除法,因此 sum 的值首先被转换为 double 型,然后除以 count,得到一个类型为 double 的值。

类型转换可以是隐式的,由编译器自动执行,也可以是显式的,通过使用强制类型转换运算符来指定。在编程时,有需要类型转换的时候都用上强制类型转换运算符,是一种良好的编程习惯。

整数提升

整数提升是指把小于 int 或 unsigned int 的整数类型转换为 int 或 unsigned int 的过程。

#include <stdio.h>
int main()
{int i = 17;char c = 'c'; //ascii 值是 99int sum;sum = i + c;printf("Value of sum : %d\n", sum );return 0;
}

代码执行结果:

Value of sum : 116

sum 的值为 116,因为编译器进行了整数提升,在执行实际加法运算时,把 ‘c’ 的值转换为对应的 ascii 值。

常用的算术转换

常用的算术转换是隐式地把值强制转换为相同的类型。编译器首先执行整数提升,如果操作数类型不同,则它们会被转换为下列层次中出现的最高层次的类型:

#mermaid-svg-0ttpyDRl86jBFRrI .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-0ttpyDRl86jBFRrI .label text{fill:#333}#mermaid-svg-0ttpyDRl86jBFRrI .node rect,#mermaid-svg-0ttpyDRl86jBFRrI .node circle,#mermaid-svg-0ttpyDRl86jBFRrI .node ellipse,#mermaid-svg-0ttpyDRl86jBFRrI .node polygon,#mermaid-svg-0ttpyDRl86jBFRrI .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-0ttpyDRl86jBFRrI .node .label{text-align:center;fill:#333}#mermaid-svg-0ttpyDRl86jBFRrI .node.clickable{cursor:pointer}#mermaid-svg-0ttpyDRl86jBFRrI .arrowheadPath{fill:#333}#mermaid-svg-0ttpyDRl86jBFRrI .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-0ttpyDRl86jBFRrI .flowchart-link{stroke:#333;fill:none}#mermaid-svg-0ttpyDRl86jBFRrI .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-0ttpyDRl86jBFRrI .edgeLabel rect{opacity:0.9}#mermaid-svg-0ttpyDRl86jBFRrI .edgeLabel span{color:#333}#mermaid-svg-0ttpyDRl86jBFRrI .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-0ttpyDRl86jBFRrI .cluster text{fill:#333}#mermaid-svg-0ttpyDRl86jBFRrI div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-0ttpyDRl86jBFRrI .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-0ttpyDRl86jBFRrI text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-0ttpyDRl86jBFRrI .actor-line{stroke:grey}#mermaid-svg-0ttpyDRl86jBFRrI .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-0ttpyDRl86jBFRrI .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-0ttpyDRl86jBFRrI #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-0ttpyDRl86jBFRrI .sequenceNumber{fill:#fff}#mermaid-svg-0ttpyDRl86jBFRrI #sequencenumber{fill:#333}#mermaid-svg-0ttpyDRl86jBFRrI #crosshead path{fill:#333;stroke:#333}#mermaid-svg-0ttpyDRl86jBFRrI .messageText{fill:#333;stroke:#333}#mermaid-svg-0ttpyDRl86jBFRrI .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-0ttpyDRl86jBFRrI .labelText,#mermaid-svg-0ttpyDRl86jBFRrI .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-0ttpyDRl86jBFRrI .loopText,#mermaid-svg-0ttpyDRl86jBFRrI .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-0ttpyDRl86jBFRrI .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-0ttpyDRl86jBFRrI .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-0ttpyDRl86jBFRrI .noteText,#mermaid-svg-0ttpyDRl86jBFRrI .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-0ttpyDRl86jBFRrI .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-0ttpyDRl86jBFRrI .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-0ttpyDRl86jBFRrI .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-0ttpyDRl86jBFRrI .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-0ttpyDRl86jBFRrI .section{stroke:none;opacity:0.2}#mermaid-svg-0ttpyDRl86jBFRrI .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-0ttpyDRl86jBFRrI .section2{fill:#fff400}#mermaid-svg-0ttpyDRl86jBFRrI .section1,#mermaid-svg-0ttpyDRl86jBFRrI .section3{fill:#fff;opacity:0.2}#mermaid-svg-0ttpyDRl86jBFRrI .sectionTitle0{fill:#333}#mermaid-svg-0ttpyDRl86jBFRrI .sectionTitle1{fill:#333}#mermaid-svg-0ttpyDRl86jBFRrI .sectionTitle2{fill:#333}#mermaid-svg-0ttpyDRl86jBFRrI .sectionTitle3{fill:#333}#mermaid-svg-0ttpyDRl86jBFRrI .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-0ttpyDRl86jBFRrI .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-0ttpyDRl86jBFRrI .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-0ttpyDRl86jBFRrI .grid path{stroke-width:0}#mermaid-svg-0ttpyDRl86jBFRrI .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-0ttpyDRl86jBFRrI .task{stroke-width:2}#mermaid-svg-0ttpyDRl86jBFRrI .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-0ttpyDRl86jBFRrI .taskText:not([font-size]){font-size:11px}#mermaid-svg-0ttpyDRl86jBFRrI .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-0ttpyDRl86jBFRrI .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-0ttpyDRl86jBFRrI .task.clickable{cursor:pointer}#mermaid-svg-0ttpyDRl86jBFRrI .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-0ttpyDRl86jBFRrI .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-0ttpyDRl86jBFRrI .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-0ttpyDRl86jBFRrI .taskText0,#mermaid-svg-0ttpyDRl86jBFRrI .taskText1,#mermaid-svg-0ttpyDRl86jBFRrI .taskText2,#mermaid-svg-0ttpyDRl86jBFRrI .taskText3{fill:#fff}#mermaid-svg-0ttpyDRl86jBFRrI .task0,#mermaid-svg-0ttpyDRl86jBFRrI .task1,#mermaid-svg-0ttpyDRl86jBFRrI .task2,#mermaid-svg-0ttpyDRl86jBFRrI .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-0ttpyDRl86jBFRrI .taskTextOutside0,#mermaid-svg-0ttpyDRl86jBFRrI .taskTextOutside2{fill:#000}#mermaid-svg-0ttpyDRl86jBFRrI .taskTextOutside1,#mermaid-svg-0ttpyDRl86jBFRrI .taskTextOutside3{fill:#000}#mermaid-svg-0ttpyDRl86jBFRrI .active0,#mermaid-svg-0ttpyDRl86jBFRrI .active1,#mermaid-svg-0ttpyDRl86jBFRrI .active2,#mermaid-svg-0ttpyDRl86jBFRrI .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-0ttpyDRl86jBFRrI .activeText0,#mermaid-svg-0ttpyDRl86jBFRrI .activeText1,#mermaid-svg-0ttpyDRl86jBFRrI .activeText2,#mermaid-svg-0ttpyDRl86jBFRrI .activeText3{fill:#000 !important}#mermaid-svg-0ttpyDRl86jBFRrI .done0,#mermaid-svg-0ttpyDRl86jBFRrI .done1,#mermaid-svg-0ttpyDRl86jBFRrI .done2,#mermaid-svg-0ttpyDRl86jBFRrI .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-0ttpyDRl86jBFRrI .doneText0,#mermaid-svg-0ttpyDRl86jBFRrI .doneText1,#mermaid-svg-0ttpyDRl86jBFRrI .doneText2,#mermaid-svg-0ttpyDRl86jBFRrI .doneText3{fill:#000 !important}#mermaid-svg-0ttpyDRl86jBFRrI .crit0,#mermaid-svg-0ttpyDRl86jBFRrI .crit1,#mermaid-svg-0ttpyDRl86jBFRrI .crit2,#mermaid-svg-0ttpyDRl86jBFRrI .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-0ttpyDRl86jBFRrI .activeCrit0,#mermaid-svg-0ttpyDRl86jBFRrI .activeCrit1,#mermaid-svg-0ttpyDRl86jBFRrI .activeCrit2,#mermaid-svg-0ttpyDRl86jBFRrI .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-0ttpyDRl86jBFRrI .doneCrit0,#mermaid-svg-0ttpyDRl86jBFRrI .doneCrit1,#mermaid-svg-0ttpyDRl86jBFRrI .doneCrit2,#mermaid-svg-0ttpyDRl86jBFRrI .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-0ttpyDRl86jBFRrI .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-0ttpyDRl86jBFRrI .milestoneText{font-style:italic}#mermaid-svg-0ttpyDRl86jBFRrI .doneCritText0,#mermaid-svg-0ttpyDRl86jBFRrI .doneCritText1,#mermaid-svg-0ttpyDRl86jBFRrI .doneCritText2,#mermaid-svg-0ttpyDRl86jBFRrI .doneCritText3{fill:#000 !important}#mermaid-svg-0ttpyDRl86jBFRrI .activeCritText0,#mermaid-svg-0ttpyDRl86jBFRrI .activeCritText1,#mermaid-svg-0ttpyDRl86jBFRrI .activeCritText2,#mermaid-svg-0ttpyDRl86jBFRrI .activeCritText3{fill:#000 !important}#mermaid-svg-0ttpyDRl86jBFRrI .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-0ttpyDRl86jBFRrI g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-0ttpyDRl86jBFRrI g.classGroup text .title{font-weight:bolder}#mermaid-svg-0ttpyDRl86jBFRrI g.clickable{cursor:pointer}#mermaid-svg-0ttpyDRl86jBFRrI g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-0ttpyDRl86jBFRrI g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-0ttpyDRl86jBFRrI .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-0ttpyDRl86jBFRrI .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-0ttpyDRl86jBFRrI .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-0ttpyDRl86jBFRrI .dashed-line{stroke-dasharray:3}#mermaid-svg-0ttpyDRl86jBFRrI #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-0ttpyDRl86jBFRrI #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-0ttpyDRl86jBFRrI #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-0ttpyDRl86jBFRrI #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-0ttpyDRl86jBFRrI #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-0ttpyDRl86jBFRrI #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-0ttpyDRl86jBFRrI #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-0ttpyDRl86jBFRrI #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-0ttpyDRl86jBFRrI .commit-id,#mermaid-svg-0ttpyDRl86jBFRrI .commit-msg,#mermaid-svg-0ttpyDRl86jBFRrI .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-0ttpyDRl86jBFRrI .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-0ttpyDRl86jBFRrI .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-0ttpyDRl86jBFRrI g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-0ttpyDRl86jBFRrI g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-0ttpyDRl86jBFRrI g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-0ttpyDRl86jBFRrI g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-0ttpyDRl86jBFRrI g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-0ttpyDRl86jBFRrI g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-0ttpyDRl86jBFRrI .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-0ttpyDRl86jBFRrI .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-0ttpyDRl86jBFRrI .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-0ttpyDRl86jBFRrI .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-0ttpyDRl86jBFRrI .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-0ttpyDRl86jBFRrI .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-0ttpyDRl86jBFRrI .edgeLabel text{fill:#333}#mermaid-svg-0ttpyDRl86jBFRrI .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-0ttpyDRl86jBFRrI .node circle.state-start{fill:black;stroke:black}#mermaid-svg-0ttpyDRl86jBFRrI .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-0ttpyDRl86jBFRrI #statediagram-barbEnd{fill:#9370db}#mermaid-svg-0ttpyDRl86jBFRrI .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-0ttpyDRl86jBFRrI .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-0ttpyDRl86jBFRrI .statediagram-state .divider{stroke:#9370db}#mermaid-svg-0ttpyDRl86jBFRrI .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-0ttpyDRl86jBFRrI .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-0ttpyDRl86jBFRrI .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-0ttpyDRl86jBFRrI .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-0ttpyDRl86jBFRrI .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-0ttpyDRl86jBFRrI .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-0ttpyDRl86jBFRrI .note-edge{stroke-dasharray:5}#mermaid-svg-0ttpyDRl86jBFRrI .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-0ttpyDRl86jBFRrI .error-icon{fill:#522}#mermaid-svg-0ttpyDRl86jBFRrI .error-text{fill:#522;stroke:#522}#mermaid-svg-0ttpyDRl86jBFRrI .edge-thickness-normal{stroke-width:2px}#mermaid-svg-0ttpyDRl86jBFRrI .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-0ttpyDRl86jBFRrI .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-0ttpyDRl86jBFRrI .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-0ttpyDRl86jBFRrI .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-0ttpyDRl86jBFRrI .marker{fill:#333}#mermaid-svg-0ttpyDRl86jBFRrI .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-0ttpyDRl86jBFRrI {color: rgba(0, 0, 0, 0.75);font: ;}

int
unsigned int
long
unsigned long
long long
float
double
long double

常用的算术转换不适用于赋值运算符、逻辑运算符 && 和 ||。

#include <stdio.h>
int main()
{int i = 17;char c = 'c'; //ascii 值是 99float sum;sum = i + c;printf("Value of sum : %f\n", sum);return 0;
}

代码执行结果:

Value of sum : 116.000000

在这里,c 首先被转换为整数,但是由于最后的值是 float 型的,所以会应用常用的算术转换,编译器会把 i 和 c 转换为浮点型,并把它们相加得到一个浮点数。

递归

递归就是自己调用自己。举个例子:

从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?“从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?‘从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?……’”

递归指的是在函数的定义中使用函数自身的方法。

C 语言支持递归,即一个函数可以调用其自身。但在使用递归时,需要注意定义一个从函数退出的条件,否则会进入死循环。递归函数在解决许多数学问题上起了至关重要的作用,比如计算一个数的阶乘、生成斐波那契数列,等等。

数的阶乘

使用递归函数计算一个给定的数的阶乘:

#include <stdio.h>
long long factorial(int i)
{if(i <= 1) return 1;return i * factorial(i - 1);
}
int main()
{int i = 8;printf("%d 的阶乘为 %lld\n", i, factorial(i));return 0;
}

运行结果:

8 的阶乘为 40320

斐波那契数列

使用递归函数生成一个给定的数的斐波那契数列:

#include <stdio.h>
long long fibonaci(int i)
{if(i == 0) return 0;if(i == 1) return 1;return fibonaci(i - 1) + fibonaci(i - 2);
}
int main()
{for(int i = 0; i < 10; i++)if(i == 9) printf("%lld", fibonaci(i));else printf("%lld,", fibonaci(i));return 0;
}

运行结果:

0,1,1,2,3,5,8,13,21,34

本周其他文章:

C语言程序设计专栏

C/C++编程学习 - 第1周 ① 第一个C语言程序

C/C++编程学习 - 第1周 ② 基本语法、数据类型和变量

C/C++编程学习 - 第1周 ③ 数组、输入输出

C/C++编程学习 - 第1周 ④ 常量、判断和循环

C/C++编程学习 - 第1周 ⑤ 函数、指针

C/C++编程学习 - 第1周 ⑥ 结构体、位域

C/C++编程学习 - 第1周 ⑦ 头文件、强制类型转换、递归

C/C++编程学习 - 第1周 ⑦ 头文件、强制类型转换、递归相关推荐

  1. c语言字符串强制类型转换,C语言学习九 —头文件强制类型转换错误处理

    预处理器 C 预处理器不是编译器的组成部分,但是它是编译过程中一个单独的步骤.简言之,C 预处理器只不过是一个文本替换工具而已,它们会指示编译器在实际编译之前完成所需的预处理.我们将把 C 预处理器( ...

  2. C/C++编程学习 - 第5周 ⑧ 判断直角三角形

    题目链接 题目描述 输入三个整数,判断用这三个整数做边长是否能构成一个直角三角形. 输入格式 输入三个整数. 输出格式 能否构成直角三角形,如能输出:"yes",若不能,输出:&q ...

  3. C/C++编程学习 - 第6周 ⑦ 分离整数的各个数位

    题目链接 题目描述 小蒜给了你一个整数,要求从个位开始分离出它的每一位数字. 输入格式 输入一个整数,整数在 1 到 108 之间. 输出格式 从个位开始按照从低位到高位的顺序依次输出每一位数字.数字 ...

  4. C/C++编程学习 - 第7周 ⑥ 合影效果

    题目链接 题目描述 蒜头君和朋友们去爬香山,为美丽的景色所陶醉,想合影留念.如果他们站成一排,男生全部在左(从拍照者的角度),并按照从矮到高的顺序从左到右排,女生全部在右,并按照从高到矮的顺序从左到右 ...

  5. C/C++编程学习 - 第4周 ⑦ 判断是否为两位数

    题目链接 题目描述 判断一个正整数是否是两位数(即大于等于 10 且小于等于 99). 蒜头君:很简单的,快来通过它吧! 输入格式 一个正整数,不超过 1000. 输出格式 一行.若该正整数是两位数, ...

  6. C/C++编程学习 - 第5周 ② 向左看齐

    题目链接 题目描述 上体育课时,某班 n 个小朋友排成一列.随着体育老师的一声"向左看齐",同学们都朝着左边看.现在每个同学想知道左边的同学中,有多少人的身高比自己矮. 输入格式 ...

  7. C/C++编程学习 - 第6周 ⑤ 球弹跳高度的计算

    题目链接 题目描述 蒜头君让一个球从某一高度落下(整数,单位米),每次落地后反跳回原来高度的一半,再落下.编程计算气球在第 10 次落地时,共经过多少米?第 10 次反弹多高? 输入格式 输入一个整数 ...

  8. C/C++编程学习 - 第7周 ④ 鸡尾酒疗法

    题目链接 题目描述 鸡尾酒疗法,原指 "高效抗逆转录病毒治疗"(HAART),由美籍华裔科学家何大一于 1996 年提出,是通过三种或三种以上的抗病毒药物联合使用来治疗艾滋病.该疗 ...

  9. C/C++编程学习 - 第4周 ④ 0与1

    题目链接 题目描述 小蒜上了他的第一堂计算机概论,老师说计算机内部是由很多的小开关来组成:1 代表开.0 代表关.于是聪明的小蒜便了解了,原来我们平常使用电灯开关就是把 1 变成 0.0 变成 1 嘛 ...

最新文章

  1. XDR3020 WiFi6 11ax使用体验 11ax性能数据
  2. 详细讲述STP过程【转自56cto.com】
  3. 4月11日 GCD 总结(二)
  4. 中国代工厂的困惑:把大牌t恤卖到99块3件,还会有人买吗?
  5. android 画布心形,Android CustomShapeImageView对图片进行各种样式裁剪:圆形、星形、心形、花瓣形等...
  6. 数字类型转换 --Python3
  7. Page 和Ability之间区别
  8. iOS14 UIDatePicker的变化
  9. c语言字符串注入命令,C语言基础之输入输出、常量定义、随机数、动态链接库的注入、数据类型介绍、goto语句的使用...
  10. [刷机教程] android系列 adb操作命令详解,常用adb操作命令详解
  11. 使用Ubuntu搭建Web服务器
  12. 黑森林理论,猜疑链思考
  13. 计算机网络学习——套接字实验(二)
  14. python turtle 海龟绘图,绘制小猪佩奇
  15. 录制课件时,小米笔记本电脑,外接耳麦, 麦克风没那有声音,怎么办?
  16. 台式计算机不显示,台式电脑开机显示器不显示怎么办
  17. 字符串sprintf一个bug
  18. ASP.NET学习之Repeater
  19. ## 标题 使用eclipse遇到的错误JavaWeb【404,The origin server did not find a current representation for the targ
  20. 什么是CS认证,其级别代表什么?

热门文章

  1. 哪些公司用c语言开发工具,哪些IDE和工具可用于C语言开发?
  2. python压缩视频文件_python+压缩视频教程
  3. 分享一个好用的桌面日程软件——desktopca
  4. 形势与政策实践-------实地调研大连港
  5. 【支付】击败【商业航天】?Stripe超越SpaceX成美国第一独角兽
  6. pandoc把word转为html,借助pandoc将Word文档成网页
  7. Python入门编程:用户问答互动程序
  8. 动态添加/删除HTML元素
  9. dnf正在连接服务器然后选择角色卡,dnf选择角色卡死(选择角色进入游戏后卡住的解决方法)...
  10. 金沙滩51单片机数码、LED、点阵