本文目标:用最通俗的方式讲清楚 C 程序的骨架、如何输出信息、如何创建和使用变量。学完你可以:独立写出一个能输出内容、能做简单计算的 C 程序。
适合人群:完全零基础,或者学得迷迷糊糊的同学。
一、程序的基本结构 —— 就像人的身体骨架
一个 C 程序,无论多么复杂,都有固定的“骨架”:
#include // 包含一个工具箱(标准输入输出库)
int main() { // 主函数 —— 程序的起点,只有一个!
// 你的代码写在这里
return 0; // 告诉电脑:“我正常运行完了”
}
1.1 #include 是什么?
- stdio.h 是一个“工具箱”,里面放着 printf(输出)、scanf(输入)等工具。
- 你想用输出功能,就必须先把这个工具箱搬进来。
1.2 main 函数 —— 程序的“唯一入口”
- 为什么是唯一的? 就像你进一栋大楼只能有一个正门,程序开始执行也只能从 main 进去。你可以在楼里修很多房间(其他函数),但进楼只能走正门。
- 名字不能改:你非要把正门改成“大门”,别人就找不到入口了。所以 main 必须一字不差地写。
- int 和 return 0;:int 表示这个门最后会向外喊一个整数(运行结果)。return 0; 就是喊“0”,代表一切正常;如果喊 1 或 -1,代表出错了。
❌ 不要写 void main() —— 那是非标准写法,有些编译器能过,但到了考试或工作中可能报错。养成好习惯:int main(void) 或 int main()。
二、输出函数 printf —— 让程序说话
printf 的作用就是把括号里的内容显示在屏幕上。
2.1 直接输出一段文字
printf("你好,世界!");
- 双引号 " " 里面的内容会原样输出。
- 如果啥也不写:printf(""); 就输出空。
2.2 输出变量里的数据 —— 需要“占位符”
你想输出一个整数 100,可以:
int age = 18;
printf("我今年%d岁", age); // 输出:我今年18岁
这里的 %d 就是占位符,它说:“嘿,这里等一下要填一个整数”。后面的 age 就是真正要填进去的值。
常用占位符一览表
| 你要输出的数据 | 占位符 | 例子 |
|---|
| 整数(int) | %d | printf("分数:%d", 95); |
| 小数(float/double) | %f | printf("π≈%f", 3.14159); |
| 小数(保留2位) | %.2f | printf("价格:%.2f元", 9.9); |
| 单个字符 | %c | printf("等级:%c", 'A'); |
| 字符串 | %s | printf("名字:%s", "小明"); |
⚠️ 占位符必须和后面变量的类型完全一致。你用 %d 去输出一个浮点数,电脑会“翻译错”,输出一堆乱码。
2.3 转义字符 —— 调整输出格式
- \n:换行。没有它,所有输出会挤在一行。
- \t:一个Tab键的空格,用来上下对齐。
- \\:输出一个反斜杠 \(因为反斜杠本身有特殊意义)。为什么反斜杠
\ 有特殊意义?在 C 语言中,反斜杠 \ 是一个 “转义字符”,它的作用是:告诉编译器,后面那个字符不要按普通意思理解,要改成另一个意思。 - \":在字符串中输出双引号。
printf("第1行\n第2行"); // 会分成两行显示
printf("姓名\t年龄\n"); // 姓名和年龄之间空几格
printf("他说:\"你好\""); // 输出:他说:"你好"
2.4 完整示例(规范写法)
printf("我的高考总分为:%.1f\n", 668.0); // 输出:668.0
printf("小数:%.2f\n", 1.93); // 输出:1.93
printf("字符:%c\n", 'A'); // 输出:A
printf("字符串:%s\n", "hello word");
printf("我学校的名字:%s\n", "山卡拉大学");
// 多个占位符 —— 顺序必须一一对应
printf("姓名:%s,性别:%s,年龄:%d岁,身高:%.2f米,体重:%d斤\n",
"小怡怡", "女", 18, 1.83, 100);
最佳实践:每个 printf 末尾习惯加上 \n,除非你故意不要换行。
三、变量 —— 存放数据的“小盒子”
3.1 什么是变量?
你可以把一个变量想象成一个有名字的小盒子,盒子里面可以放一个数据(数字、字符等),而且这个数据可以改变(所以才叫“变”量)。
3.2 定义变量的两种写法 —— 关键区分!
写法一:定义的同时就放好数据(初始化)
int age = 18;
- 使用场景:你已经知道这个变量要存什么值,比如固定的年龄、初始分数等。
- 优点:一步到位,不会忘记赋值,不会出现“垃圾值”。
写法二:先定义盒子,以后再放数据
int age; // 先造一个盒子,里面还没放东西(实际上有随机垃圾值)
age = 18; // 再往里面放 18
- 使用场景:你暂时还不知道这个变量是多少,比如等一下要从键盘输入一个数、或者经过复杂的计算才得到。
- 为什么不能只用第一种? 想象一下,你要写一个程序,让用户输入他的年龄,然后存到变量里。你在写代码的时候,根本不知道用户会输多少,所以只能先定义 int age;,然后等用户输入时再 age = 用户输入的值。
对比示例
✅ 知道值的时候:
int price = 10; // 苹果单价已知
int count = 5; // 买了5个苹果
✅ 还不知道值的时候(后面会学 scanf):
int score;
printf("请输入你的成绩:");
scanf("%d", &score); // 用户输入后,score 就有了值
❌ 错误示范:定义变量后,一次都没有赋值就直接使用。
int a;
printf("%d", a); // 输出垃圾值(可能是 0,也可能是乱七八糟的数)
3.3 变量命名规则(简单记)
- 只能包含 字母、数字、下划线,且不能以数字开头。
- 不能用C语言的关键字(如 int, return, if 等)。
- 区分大小写:Score 和 score 不一样。
- 强烈建议:用有意义的英文,单词间用下划线分隔,如 student_age、total_money。
3.4 变量定义的代码风格 —— 特别强调!
❌ 不推荐的写法:
int a=10, b=20, c; // 一行写多个变量,可读性差
✅ 推荐的写法(初学者必须养成习惯):
int a = 10; // 每行一个变量,等号两边加空格
int b = 20;
int c; // 暂时不知道值,先定义
c = 30; // 后面再赋值
为什么? 因为一行一个,清晰明了,不会漏掉初始值,也方便加注释。以后我们写项目、团队合作,都是这个风格。
3.5 基本运算示例
int a = 10;
int b = 20;
int sum = a + b; // 加法
printf("和:%d\n", sum); // 输出 30
int money = 100;
money = money + 2; // 自己加2 → 102
printf("余额:%d\n", money);
int blood = 100; //当前英雄血量
int hurt = 30; //扣除血量
int blood_left = blood - hurt; // 减法
printf("剩余血量:%d\n", blood_left); // 输出 70
3.6 变量的修改
变量可以多次赋值,新值会覆盖旧值。
int x = 5;
x = 10; // 现在 x 是 10
x = x + 1; // 现在 x 是 11
四、常见错误与纠正 —— 排雷
| 错误现象 | 错误原因 | 正确写法 |
|---|
编译报错 expected ‘;’ before ... | 每条语句后忘记分号 | printf("hi"); |
输出 0.000000 或乱码 | int a=5; printf("%f", a); 类型不匹配 | printf("%d", a); |
字符串输出 (null) 或乱码 | 用了单引号 'hello' | "hello" 双引号 |
| 字符输出奇怪符号 | 用了双引号 "A" | 'A' 单引号 |
| 变量输出的值不对 | 变量定义后没有初始化就直接使用 | int a = 0; 或先赋值 |
| 一行定义多个变量导致混淆 | int a=10, b=20; | 分成两行写 |
| 程序找不到入口 | 把 main 写成了 mian 或 Main | int main() |
五、代码风格建议 —— 从一开始就优雅
- 每行只写一条语句,不要炫技。
- 变量定义时能初始化就初始化,避免垃圾值。
- 每行只定义一个变量(除非是极简的循环计数器 int i, j;,但新手不建议)。
- 等号两边加空格:int age = 18; 而不是 int age=18;。
- 大括号风格统一:推荐 int main() { ... } 或者:cint main() { // ... }选一种,全文保持一致。
六、总结 & 下一步
一句话记忆:C程序唯一的门是 main,输出用 printf 且类型匹配,变量每行定义并初始化,知道值就一次搞定,不知道就先留空再赋值。
已经学过的知识链条
//程序骨架(#include + main) → 输出(printf + 占位符 + 转义符) → 变量(定义、初始化、赋值、命名) → 基本运算 → 常见错误 → 代码风格
接下来你会学到
- 输入函数 scanf:让程序和用户互动。
- 条件判断(if、switch):让程序根据不同情况执行不同代码。
- 循环(for、while):让重复的事情自动完成。
- 数组:存放一组相同类型的数据。
- 函数:把代码打包成可复用的模块。
寄语:C语言是很多高级语言的基础,刚开始可能会觉得琐碎,但只要你按照笔记里的风格练习,每个知识点都亲手敲一遍代码,很快就能上手。遇到问题先对照“常见错误”表,自己排雷能力会越来越强。加油!