C语言 - 第二章第一节 - C程序设计的初步知识

C语言 - 第二章第一节 - C程序设计的初步知识

亓翎_Re-TikaRa Lv4

一、第一个程序 Hello, World!

  “Hello, World!”不仅是编程教学的起点,更是连接技术、文化与历史的纽带。它见证了编程语言的演变、开发工具的进步,以及程序员社区的集体智慧。正如前人所述:“所有编程者学习编程的第一步就在于此”,它的地位无可替代,是每位开发者共同的“编程成人礼”。既如此,让我们来看看 C 语言中的第一步要如何编写。

1
2
3
4
5
6
7
#include<stdio.h>

int main()
{
printf("Hello,World!");
/*This is your first C Program*/
}

   此时控制台中会输出如下内容
image.png

二、参数解释

   我们来逐行解释一下这个基本的程序:

1. #include<stdio.h>

  • 作用:像“借工具”一样,引入一个叫 stdio.h 的工具包。其中 #include< > 这种系列叫做预处理命令
  • 比喻
    假设你要做一道菜,但厨房里没有锅,这时候你必须先去工具间拿锅。#include<stdio.h> 就像“去工具间拿锅”,其中 #include< > 表示你需要去拿一个锅,stdio.h 是用来干什么的锅,它告诉你程序需要一些基本的工具(比如输出文字到屏幕的功能)。
  • 为什么需要它?
    因为 printf(后面会讲)是这个工具包里的一个工具,没有它,计算机就不知道 printf 是什么。

2. int main()

  • 作用:告诉计算机“我的程序从这里开始执行”。
  • 比喻
    这是你写的故事的第一章,也是唯一一章。计算机总是从这里开始读你的程序。
  • 分解解释
    • int:表示这个“章节”最终会告诉计算机一个整数(比如 0 表示成功,1 表示失败)。
    • main:这是章节的名字,所有 C 程序都必须有一个叫 main 的章节,否则计算机不知道从哪里开始。
    • ():暂时不用管,可以理解为“章节的开关”。

3. {}

  • 作用:包裹代码块,告诉计算机“这部分代码属于 main 章节”。
  • 比喻
    { 是“打开章节的开关”,} 是“关上开关”。所有写在中间的代码都会在程序运行时执行。
  • 例子
    1
    2
    3
    int main() { // 开关打开
    // 这里的代码会被执行
    } // 开关关闭

4. printf("Hello,World!");

  • 作用:让计算机在屏幕上显示文字。
  • 比喻
    这是你在屏幕上“写一句话”的命令。printf 是一个预定义的“写字工具”,就像打印机一样。
  • 分解解释
    • printf:工具的名字,来自刚才的 stdio.h 工具包。
    • ("Hello,World!"):告诉 printf 要写的内容是什么,用双引号括起来。
    • ;:表示这条命令结束,就像句号一样。没有它,计算机就会迷糊!

5. /*This is your first C Program*/

  • 作用:写注释(不会影响程序运行)。
  • 比喻
    这是给程序员自己或别人看的“便签纸”,计算机完全忽略它。
  • 为什么需要注释?
    比如你写了一段复杂的代码,过几天忘了自己写的是什么,注释就是提醒自己或别人:“这里我做了什么”。

6. return 0;

  • 作用:告诉计算机“程序执行完毕,结果是成功”。
  • 比喻
    这是你在故事的最后一页写“故事结束”,并告诉读者“结局是好的”。
  • 为什么是 0
    • 在 C 语言中,return 0; 表示程序成功结束。
    • 如果程序出错了,可以返回其他数字(比如 return 1; 表示出错)。

整个程序的执行流程

  1. 计算机打开你的程序,先读 #include<stdio.h>,准备好工具包里的工具。
  2. 进入 main() 章节,开始执行里面的代码。
  3. 执行 printf("Hello,World!");,在屏幕上显示 Hello,World!
  4. 执行 return 0;,告诉计算机“任务完成,结果是成功”。
  5. 程序结束。

常见问题解答

  1. 为什么要有 #include<stdio.h>
    因为 printf 不是 C 语言的“内置功能”,必须通过 #include 借用工具包里的工具才能使用。

  2. 为什么 main 必须写成 int main()

    • int 表示这个函数最终会返回一个整数(比如 0)。
    • main 是程序的入口点,必须这样写,否则计算机不知道从哪里开始。
  3. 注释可以写在哪里?
    可以写在代码的任何地方,但必须用 /**/ 包裹,或者用 // 写单行注释(比如 // 这是我的注释)。

  4. 为什么要有分号 ;
    分号是 C 语言的“句号”,告诉计算机“这条命令结束了”。没有它,计算机就会迷糊,报错。


三、格式特点

1. 习惯上用小写字母,对大小写敏感

  即在 C 语言程序中,大写的 ADD 和小写的 add 和混合写的 Add是不同的东西


2. 不使用行号,无程序行概念

在 VSC 中,我们可以看到,在我们编辑的代码的左侧,有这样一些数字
image.png
  这些数字表示 行号,行号主要用于定位代码位置(比如调试时报错会提示错误行号),但它本身不影响程序的执行逻辑。比如,我们可以把程序全部写在一行里面,如下:

1
#include<stdio.h>int main(){printf("test");return 0;}

  写出超级长的一行,C 语言也可以执行。因为,C语言的执行顺序完全由代码的语法结构(如函数、语句、控制结构)决定,而不是行号。但是对于人类程序员来说,这要是看功能的话只能去找{}和;了,非常头大,所以我们才要去分行写,即使他没有程序行的概念。
  没有程序行这一点与行号相对应,比如经典的 BASIC 编程,作为一种直译式的编程语言,在完成编写后不须经由编译及连结等手续即可执行。他就必须严格按照一行只有一条语句,或者每行代码必须严格对应一个“程序行”,否则会报错。例如

1
2
10 PRINT "HELLO" ' 第10行 
20 GOTO 10 ' 第20行

  这里的行号是语言本身的语法组成部分,程序会严格按照行号顺序执行。
  而我们的C语言的语句可以跨多行书写,也可以在一行中写多条语句(用分号分隔)。例如:

1
2
3
4
5
6
int a = 10 + 
//这条语句跨两行
20;
// 也是可以执行的
printf("Hi"); printf("World");
// 一行写两条语句(用分号分隔)

  C语言以语句为单位,而不是“程序行”。只要语句的语法正确(如以分号结尾),代码如何换行无关紧要。所以你甚至可以整一堆花活


3. 可使用空行和空格

   先看如下实例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
int main() {

// 定义变量
int a = 10;
int b = 20;
int sum;

// 计算和
sum = a + b;

// 输出结果
printf("The sum of %d and %d is %d\n", a, b, sum);
return 0;
}

  我们把它放在 VSC 里面看看行号
image.png
  我们可以清晰地看到第 2、8、11、14 行都是没有东西的,而我们的 a=10 或者 Printf 里面每个词之间加了一个空格。我们运行之后得到如下输出:

1
The sum of 10 and 20 is 30

  可以看到依旧可以正常运行。所以可以得出如下结论:

  1. 空行的使用

    • 在变量定义、计算逻辑和输出结果之间插入空行,将代码划分为清晰的逻辑块。
    • 作用:通过视觉分隔增强代码结构,便于快速理解功能模块。
  2. 空格的使用

    • 赋值语句int a = 10; 中在 = 两侧添加空格,使语法更易读。
    • 函数调用printf("...") 的参数间(如 , a, b, sum)通过空格分隔,减少视觉混乱。
    • 作用:通过合理间距提升代码的可读性,减少语法理解成本。

4. 常用锯齿形书写格式

  锯齿形示例如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <stdio.h>



int main() {

    for (int i = 1; i <= 3; i++) {

        printf("Outer loop iteration: %d\n", i);



        for (int j = 1; j <= 2; j++) {

            printf("  Inner loop iteration: %d\n", j);

        }

    }



    return 0;

}

  “锯齿形书写格式”通常指通过代码缩进形成的层次化结构,每一层代码向右缩进,形成类似“锯齿”的视觉效果。这种格式能清晰展示代码的嵌套关系,提升可读性。我们通常第一层级顶格,第二层级用一个 TAB 或者 4 个空格,第三层级两个 TAB 或者 8 个空格,以此类推的形成一层一层的结构。不过我更习惯 TAB,谁会去没事按空格呢。


四、结构特点

1. 函数与主函数

  • 程序组成
    C 语言程序由一个或多个函数组成,每个函数负责特定任务。
    示例

    1
    void printHello() { printf("Hello, World!\n"); }  // 辅助函数
  • 主函数唯一性
    程序必须且只能有一个主函数 main(),它是程序的入口点。
    示例

    1
    int main() { ... }  // 必须存在且唯一
  • 执行流程
    程序从 main() 开始执行,其他函数通过嵌套调用执行。
    完整示例

    1
    2
    3
    4
    5
    6
    7
    8
    #include <stdio.h>

    void printHello() { printf("Hello, World!\n"); }

    int main() {
    printHello(); // 调用辅助函数
    return 0;
    }

2. 程序语句

  • 语句定义
    C 程序由语句构成,每条语句执行一个操作。
  • 分号终止符
    每条语句必须以分号 ; 结尾。
    示例
    1
    2
    3
    int a = 5;         // 变量声明与初始化
    a = a + 1; // 表达式语句
    printf("%d\n", a); // 函数调用语句

3. 注释

  • 注释语法
    使用 /* ... */ 表示多行注释,不能嵌套
  • 编译忽略
    注释内容在编译时会被忽略,不生成代码。
    示例
    1
    2
    3
    4
    5
    6
    7
    8
    #include <stdio.h>

    int main() {
    /* 这是多行注释,不会被编译 */
    int x = 10; // 单行注释(// 语法也可用)
    printf("x = %d\n", x);
    return 0;
    }

4. 预编译命令

预编译命令以 # 开头,用于在编译前对代码进行处理(如包含头文件、定义宏等)。以下是常见预编译命令及示例:


1. #include

作用:包含头文件,引入外部函数、宏定义或类型声明。
示例

1
2
#include <stdio.h>      // 包含标准输入输出库(系统头文件)
#include "myheader.h" // 包含用户自定义的头文件(需提供路径)

2. #define

作用:定义宏(常量或代码片段)。
示例

1
2
3
4
#define PI 3.14159      // 定义常量宏
#define SQUARE(x) (x * x) // 定义函数式宏

int area = PI * SQUARE(radius); // 使用宏计算面积

3. 条件编译命令

用于根据条件编译不同代码块,常见命令包括:

  • **#ifdef / #ifndef**:检查宏是否定义。
  • **#if / #elif / #else**:根据条件判断。
  • **#endif**:结束条件编译。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
#ifdef DEBUG  // 如果定义了DEBUG宏
printf("Debug mode: value = %d\n", value);
#else
// 无DEBUG宏时的代码
#endif

#if VERSION == 2 // 根据版本号选择代码
printf("Version 2\n");
#elif VERSION == 3
printf("Version 3\n");
#else
printf("Unknown version\n");
#endif
  • 标题: C语言 - 第二章第一节 - C程序设计的初步知识
  • 作者: 亓翎_Re-TikaRa
  • 创建于 : 2025-04-16 12:04:35
  • 更新于 : 2025-04-16 12:06:41
  • 链接: https://re-tikara.fun/posts/630d8f1f/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。