C 语言基础代码教程
第一个程序:Hello, World!
这是学习任何一门编程语言的经典入门程序,它让我们了解一个 C 程序的基本结构。

(图片来源网络,侵删)
代码:
#include <stdio.h> // 包含标准输入输出库,提供 printf 函数
int main() {
// printf 函数用于在屏幕上打印文本
// \n 是一个转义字符,表示换行
printf("Hello, World!\n");
// main 函数的返回值,0 表示程序正常结束
return 0;
}
代码解析:
#include <stdio.h>:这是一个预处理指令,告诉编译器在编译前将stdio.h文件(标准输入输出头文件)的内容包含进来,这个文件中定义了printf函数。int main():这是程序的主函数,C 程序的执行从main函数开始。int表示这个函数会返回一个整数值。- 花括号用于定义一个代码块,这里是
main函数的主体。 printf(...):这是一个库函数,用于格式化并输出文本到标准输出(通常是你的终端屏幕)。return 0;:表示程序成功执行并退出,如果程序执行过程中出现错误,可以返回非零值。
变量与数据类型
变量是存储数据的容器,C 语言是强类型语言,使用变量前必须先声明其数据类型。
代码:

(图片来源网络,侵删)
#include <stdio.h>
int main() {
// 1. 声明变量
int age; // 声明一个整型变量
float price; // 声明一个单精度浮点型变量(用于小数)
double salary; // 声明一个双精度浮点型变量(精度更高)
char grade; // 声明一个字符型变量
// 2. 赋值
age = 25;
price = 19.99;
salary = 75000.50;
grade = 'A'; // 字符必须用单引号括起来
// 3. 声明并初始化(同时进行)
int studentCount = 30;
// 4. 打印变量值
printf("年龄: %d\n", age); // %d 是整数的占位符
printf("价格: %.2f\n", price); // %f 是浮点数的占位符, .2 表示保留两位小数
printf("薪水: %.2lf\n", salary); // %lf 用于 double 类型
printf("成绩: %c\n", grade); // %c 是字符的占位符
printf("学生人数: %d\n", studentCount);
return 0;
}
常见数据类型:
int: 整数 (e.g., 10, -5, 0)float: 单精度浮点数 (e.g., 3.14, -0.5)double: 双精度浮点数 (e.g., 3.14159265359)char: 单个字符 (e.g., 'a', 'Z', '7')void: 表示“无类型”,通常用于函数返回值或参数。
运算符
运算符用于执行变量和值之间的运算。
代码:
#include <stdio.h>
int main() {
int a = 10, b = 3;
// 算术运算符
printf("算术运算符:\n");
printf("a + b = %d\n", a + b); // 加法
printf("a - b = %d\n", a - b); // 减法
printf("a * b = %d\n", a * b); // 乘法
printf("a / b = %d\n", a / b); // 除法 (注意:整数除法会截断小数部分)
printf("a %% b = %d\n", a % b); // 取模 (求余数)
printf("a++ = %d\n", a++); // 后自增 (先使用a,再a+1)
printf("a 的值是: %d\n", a); // a 现在是 11
printf("--b = %d\n", --b); // 前自减 (先b-1,再使用b)
printf("b 的值是: %d\n", b); // b 现在是 2
// 关系运算符 (返回 0 或 1,0 为假,1 为真)
printf("\n关系运算符:\n");
printf("a > b ? %d\n", a > b); // 1
printf("a < b ? %d\n", a < b); // 0
printf("a == b ? %d\n", a == b); // 0 (注意:判断相等用 ==)
printf("a != b ? %d\n", a != b); // 1
// 逻辑运算符
printf("\n逻辑运算符:\n");
int x = 1, y = 0;
printf("x && y (与): %d\n", x && y); // 0 (1 && 0 = 0)
printf("x || y (或): %d\n", x || y); // 1 (1 || 0 = 1)
printf("!x (非): %d\n", !x); // 0 (!1 = 0)
// 赋值运算符
printf("\n赋值运算符:\n");
a += 5; // 等价于 a = a + 5
printf("a += 5 后, a = %d\n", a);
b *= 2; // 等价于 b = b * 2
printf("b *= 2 后, b = %d\n", b);
return 0;
}
流程控制
A. 条件语句 (if-else)

(图片来源网络,侵删)
根据条件执行不同的代码块。
代码:
#include <stdio.h>
int main() {
int score = 85;
if (score >= 90) {
printf("成绩优秀!\n");
} else if (score >= 60) {
printf("成绩及格,\n");
} else {
printf("成绩不及格,\n");
}
// 三目运算符 (?:) 的简写形式
int max;
int num1 = 10, num2 = 20;
max = (num1 > num2) ? num1 : num2;
printf("较大的数是: %d\n", max);
return 0;
}
B. 循环语句 (for, while, do-while)
重复执行一段代码。
代码:
#include <stdio.h>
int main() {
// for 循环
printf("使用 for 循环打印 1 到 5:\n");
for (int i = 1; i <= 5; i++) {
printf("%d ", i);
}
printf("\n\n");
// while 循环
printf("使用 while 循环打印 5 到 1:\n");
int j = 5;
while (j >= 1) {
printf("%d ", j);
j--;
}
printf("\n\n");
// do-while 循环 (至少执行一次)
printf("使用 do-while 循环打印 1 到 3:\n");
int k = 1;
do {
printf("%d ", k);
k++;
} while (k <= 3);
printf("\n");
return 0;
}
C. switch 语句
多分支选择结构,常用于基于一个整型或字符型变量的不同值执行不同操作。
代码:
#include <stdio.h>
int main() {
char operation;
double num1, num2;
printf("请输入一个运算符 (+, -, *, /): ");
scanf("%c", &operation);
printf("请输入两个数字: ");
scanf("%lf %lf", &num1, &num2);
switch (operation) {
case '+':
printf("%.2lf + %.2lf = %.2lf\n", num1, num2, num1 + num2);
break; // break 语句用于跳出 switch
case '-':
printf("%.2lf - %.2lf = %.2lf\n", num1, num2, num1 - num2);
break;
case '*':
printf("%.2lf * %.2lf = %.2lf\n", num1, num2, num1 * num2);
break;
case '/':
if (num2 != 0) {
printf("%.2lf / %.2lf = %.2lf\n", num1, num2, num1 / num2);
} else {
printf("错误:除数不能为零!\n");
}
break;
default:
printf("无效的运算符!\n");
break;
}
return 0;
}
函数
函数是一段可以重复使用的代码块,用于实现特定功能。
代码:
#include <stdio.h>
// 函数声明 (告诉编译器这个函数存在)
int add(int a, int b);
void printMessage(char message[]);
int main() {
int sum = add(5, 3); // 调用 add 函数
printf("5 + 3 = %d\n", sum);
printMessage("你好,C语言!"); // 调用 printMessage 函数
return 0;
}
// 函数定义
int add(int a, int b) {
int result = a + b;
return result; // 返回计算结果
}
// void 类型函数,不返回值
void printMessage(char message[]) {
printf("函数打印的信息: %s\n", message);
}
数组
数组是存储相同类型的多个元素的集合。
代码:
#include <stdio.h>
int main() {
// 1. 声明并初始化一个整型数组
int numbers[5] = {10, 20, 30, 40, 50};
// 如果不初始化,数组元素会是未知的垃圾值
// 2. 访问数组元素 (索引从 0 开始)
printf("第一个元素: %d\n", numbers[0]);
printf("第三个元素: %d\n", numbers[2]);
// 3. 修改数组元素
numbers[0] = 100;
printf("修改后的第一个元素: %d\n", numbers[0]);
// 4. 使用循环遍历数组
printf("\n遍历数组:\n");
for (int i = 0; i < 5; i++) {
printf("numbers[%d] = %d\n", i, numbers[i]);
}
// 5. 二维数组
int matrix[2][3] = {
{1, 2, 3},
{4, 5, 6}
};
printf("\n二维数组元素:\n");
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
printf("%d ", matrix[i][j]);
}
printf("\n");
}
return 0;
}
指针 (核心概念)
指针是 C 语言的精髓,它是一个变量,其值为另一个变量的地址。
代码:
#include <stdio.h>
int main() {
int var = 100;
int *ptr; // 声明一个整型指针变量
// 将 var 的地址赋给 ptr
ptr = &var; // & 是取地址运算符
printf("var 的值: %d\n", var);
printf("var 的地址: %p\n", &var);
printf("ptr 存储的地址: %p\n", ptr);
printf ptr 指向的值: %d\n", *ptr); // * 是解引用运算符
// 通过指针修改变量的值
*ptr = 200;
printf("\n通过指针修改后,var 的值变为: %d\n", var);
return 0;
}
指针与数组的关系:
数组名 arr 在表达式中会“退化”为其首元素的地址,指针可以很方便地遍历数组。
代码示例:
#include <stdio.h>
int main() {
int arr[] = {10, 20, 30, 40, 50};
int *ptr = arr; // ptr 指向 arr 的第一个元素
printf("使用指针遍历数组:\n");
for (int i = 0; i < 5; i++) {
printf("*(arr + %d) = %d\n", i, *(arr + i)); // arr + i 等价于 &arr[i]
// 或者使用 ptr
// printf("*ptr = %d\n", *ptr);
// ptr++; // ptr 指向下一个元素
}
return 0;
}
如何编译和运行
- 保存代码:将上面的代码保存为
.c文件,hello.c。 - 打开终端/命令行:
- Linux/macOS: 打开 Terminal 或 Terminal.app。
- Windows: 打开 Command Prompt (cmd) 或 PowerShell。
- 编译代码:使用 GCC (GNU Compiler Collection) 编译器,如果你没有安装,需要先安装它。
gcc hello.c -o hello
gcc: 调用编译器。hello.c: 你的源文件。-o hello: 指定输出的可执行文件名为hello,如果不写-o,默认会生成一个a.out(Linux/macOS) 或a.exe(Windows) 文件。
- 运行程序:
- Linux/macOS:
./hello
- Windows:
hello.exe
或者直接
hello(.exe后缀在系统环境变量中)。
- Linux/macOS:
运行后,你将在终端看到程序的输出结果。
这份指南涵盖了 C 语言最基础、最重要的部分,掌握这些内容后,你就可以开始编写更复杂的 C 程序了,祝你学习愉快!
