从0到1的C语言传奇之路

目录

前言

一.入门基础

1.什么是C语言

2.如何选择编译器?

[3.hello world](#3.hello world)

4.程序的基本结构

二.核心基础语法

1.数据类型与变量

2.变量的定义,初始化,命名规则

[3.变量初始化:定义时赋值 vs 先定义后赋值](#3.变量初始化:定义时赋值 vs 先定义后赋值)

[4.作用域:局部变量 vs 全局变量](#4.作用域:局部变量 vs 全局变量)

5.常量,宏常量

三.输入输出

1.基本语法

2.常用占位符

3.格式控制

4.常见避坑指南

5.字符专用输入输出

四.顺序结构程序设计

五.总结


前言

C语言是编程世界的基石,诞生半世纪仍长盛不衰,是理解计算机底层逻辑的核心钥匙。
本文从0起步,带你拆解C语言核心知识,开启你的编程入门与进阶之路。

一.入门基础

1.什么是C语言

C语言是一种结构化、高效、可移植的编程语言,诞生于1972年。它既具备高级语言的抽象能力,又能进行底层内存操作,因此被称为"中级语言"。它深刻影响了C++、Java、Python等众多语言,常用于操作系统、嵌入式系统、编译器、数据库等高性能或底层开发。

编写C程序通常需要编辑器和编译器,基本流程是:编写源码 → 编译为可执行文件 → 运行。

2.如何选择编译器?

  • 初学者最简方案:Dev-C++:Windows平台,安装即用,无需配置。但软件较老,界面陈旧,代码提示较弱。
  • 专业/跨平台方案:VS Code + GCC:通过安装插件可打造现代化IDE。需自行安装编译器(Windows可用MinGW-w64,Linux/macOS自带或安装),并配置tasks.json等文件,稍复杂。
  • 工业级IDE:CLion (JetBrains):智能提示和调试体验极佳。但需付费或申请学生免费,对电脑配置要求较高。
  • Windows专业方案:Visual Studio:功能强大的巨无霸,安装时选择"使用C++的桌面开发"即可,编译Windows程序首选。
  • macOS原生方案:Xcode:苹果官方工具,完整安装包较大。

3.hello world

1.使用Dev-C++打出我们第一个代码吧!

复制代码
#include <stdio.h>
int main()
{
	printf("hello world");
	return 0;
}

以下就是我们的运行结果啦,现在你已经踏出了第一步,好好加油吧!!!

4.程序的基本结构

|-----|----------------------|
| 头文件 | #include <stdio.h> |
| 主函数 | main |
| 注释 | // /* */ |

需要注意代码的执行顺序是从上到下,从左到右。

二.核心基础语法

1.数据类型与变量

整数的类型以及演示

复制代码
#include <stdio.h>
int main() 
{
    // 1. int 整数类型
    int age = 20;          // 定义并初始化int变量
    int score = 95;
    printf("=== int 整数类型 ===\n");
    printf("年龄:%d,分数:%d\n", age, score);
    return 0;
}
//结果
//=== int 整数类型 ===
//年龄:20 分数:95

浮点型演示并输出结果

复制代码
#include <stdio.h>
#include <string.h>

    // 1. 全局变量:作用域是整个程序,生命周期贯穿程序运行
    int global_num = 100;
    // 2. #define 宏常量:预处理阶段直接替换,本质不是变量
    #define PI 3.1415926
    #define MAX_AGE 120

int main()
{

    // 2. float / double 浮点类型(小数)
    float height = 1.80f;  // float 后缀加f,单精度,占4字节
    double weight = 75.5;  // double 双精度,占8字节,精度更高
    printf("\n=== float/double 浮点类型 ===\n");
    printf("身高:%.2f米,体重:%.1f公斤\n", height, weight);
    printf("PI(宏常量):%.7f\n", PI); // 宏常量直接使用

}

    //结果
    //=== float/double 浮点类型 ===
    //身高:1.80米,体重:75.5公斤
    //PI(宏常量):3.1415926

char 字符类型演示

复制代码
#include <stdio.h>
int main()
{
    char ch = 'A';         // 字符用单引号包裹,只能存1个字符
    char str[] = "Hello";  // 字符串本质是char数组,用双引号
    printf("\n=== char 字符类型 ===\n");
    printf("单个字符:%c,ASCII码值:%d\n", ch, ch);
    printf("字符串:%s\n", str);
}

//=== char 字符类型 ===
//单个字符:A,ASCII码值:65
//字符串:Hello

2.变量的定义,初始化,命名规则

复制代码
 // 正确的命名规则:字母/下划线/数字开头,不能是关键字,区分大小写
    int _num = 10;
    int user_age = 25;
    int UserAge = 30;  // 和user_age是两个不同变量
    // 错误示范(编译器会报错,仅作说明):
    // int 123num = 5;  // 不能以数字开头
    // int int = 10;    // 不能用关键字命名
    printf("_num:%d,user_age:%d,UserAge:%d\n", _num, user_age, UserAge);

3.变量初始化:定义时赋值 vs 先定义后赋值

复制代码
    int a;          // 只定义,不初始化(局部变量值是随机垃圾值)
    int b = 0;      // 定义时初始化,推荐写法
    a = 10;         // 后赋值
    printf("a:%d,b:%d\n", a, b);

结果为:a=10 b=0

4.作用域:局部变量 vs 全局变量

复制代码
#include <stdio.h>
#include <string.h>

// 1. 全局变量:作用域是整个程序,生命周期贯穿程序运行
int global_num = 100;
// 2. #define 宏常量:预处理阶段直接替换,本质不是变量
#define PI 3.1415926
#define MAX_AGE 120
int main() 
{
    // ====================== 三、作用域:局部变量 vs 全局变量 ======================
    printf("\n=== 作用域演示 ===\n");
    // 局部变量:定义在main函数内,作用域仅在main中,生命周期随函数结束销毁
    int local_num = 200;
    printf("main函数内:全局变量global_num = %d,局部变量local_num = %d\n", global_num, local_num);

    {
        // 代码块内的局部变量,作用域仅在这个大括号内
        int block_num = 300;
        printf("代码块内:block_num = %d\n", block_num);
    }
    // printf("block_num = %d\n", block_num); // 报错:block_num超出作用域,无法访问
    return 0;
}

5.常量,宏常量

复制代码
#include <stdio.h>
#include <string.h>

//#define 宏常量:预处理阶段直接替换,本质不是变量
#define MAX_AGE 120
#define PI 3.1415926
int main() 
{
    // ====================== 四、常量演示 ======================
    printf("\n=== 常量类型演示 ===\n");
    // 1. 字面常量:直接写在代码里的固定值
    100;    // 整型字面常量
    3.14;   // 浮点字面常量
    'a';    // 字符字面常量
    "abc";  // 字符串字面常量

    // 2. #define 宏常量:上面已经定义了PI和MAX_AGE,这里直接使用
    printf("宏常量PI = %.7f,MAX_AGE = %d\n", PI, MAX_AGE);
    // PI = 3.14; // 报错:宏常量不可修改

    // 3. const 修饰的常变量:本质是变量,只是被const限制不可修改
    const int const_num = 10;
    printf("const常变量const_num = %d\n", const_num);
    // const_num = 20; // 报错:const修饰的变量不可修改 

    return 0;
}

三.输入输出

C语言的输入输出核心是 stdio.h 头文件 里的两个函数: printf() (输出)和 scanf() (输入),是所有程序的基础交互工具。

1.基本语法

复制代码
printf("格式控制字符串", 变量1, 变量2, ...);

2.常用占位符

|-----|--------------|------------|
| 占位符 | 对应数据类型 | 说明 |
| %d | int | 十进制整数 |
| %f | float/double | 浮点数(双、单精度) |
| %c | char | 单个字符 |
| %s | 字符串char[] | 字符串 |
| %if | double | 双精度浮点数 |
| %p | 指针 | 输出内存地址 |

3.格式控制

|-------|--------------------------------------|
| 保留小数 | %.2f 保留2位小数 |
| 左/右对齐 | %10d 占10位宽度,右对齐; %-10d 左对齐 |
| 转义字符 | \n 换行、 \t 制表符、 \\ 输出 \ 、 \" 输出 |

4.常见避坑指南

  1. & 漏写: scanf("%d", age); 直接报错,必须写 &age
  2. 格式串不匹配: scanf("%d,%f", &a, &b); 输入时必须用逗号分隔( 10,3.14 ),否则读取失败
  3. 缓冲区残留: scanf 会留下换行符 \n ,导致后续 getchar() 读取到空值,可用 getchar() 手动清空
  4. 字符串输入: %s 遇到空格/回车就停止,要读带空格的字符串用 gets() (不推荐,不安全)或 fgets()

5.字符专用输入输出

  1. putchar() :输出单个字符

    char ch = 'A';
    putchar(ch); // 等价于 printf("%c", ch);

  2. getchar() :读取单个字符

    char ch = getchar(); // 从键盘读一个字符,回车也算

四.顺序结构程序设计

  1. 顺序结构的本质:按代码顺序依次执行
  2. 简单顺序程序实战:计算、数据转换、输入输出综合练习
  3. 代码调试基础(排查顺序执行的错误。

五.总结

从0到选择结构,核心就是:会写基础程序 → 懂变量和数据 → 会用运算符做判断 → 能输入输出 → 理解顺序执行,这些全部掌握后,再学 if / switch 就完全顺理成章了。

相关推荐
李昊哲小课2 小时前
Python办公自动化教程 - 第7章 综合实战案例 - 企业销售管理系统
开发语言·python·数据分析·excel·数据可视化·openpyxl
不知名的老吴3 小时前
返回None还是空集合?防御式编程的关键细节
开发语言·python
迈巴赫车主3 小时前
蓝桥杯3500阶乘求和java
java·开发语言·数据结构·职场和发展·蓝桥杯
小菜鸡桃蛋狗3 小时前
C++——string(上)
开发语言·c++
wljy13 小时前
第十三届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组(个人见解,已完结)
c语言·c++·算法·蓝桥杯·stl
chushiyunen3 小时前
python pygame实现贪食蛇
开发语言·python·pygame
身如柳絮随风扬3 小时前
Lambda、方法引用与Stream流完全指南
java·开发语言
jinanwuhuaguo4 小时前
人工智能的进化阶梯:AI、ANI、AGI与ASI的核心区别与深度剖析
开发语言·人工智能·agi·openclaw
清空mega4 小时前
C++中关于数学的一些语法回忆(2)
开发语言·c++·算法