本文档目的:了解C语言基本语法,能基本看懂代码和常见简单错误修改
C 语言是一门经典的结构化编程语言,应用广泛(如操作系统、嵌入式、底层开发等)。
1.C 语言程序基本结构
(1)一个完整的 C 程序包含:头文件、主函数、变量/语句、输出/输入等核心部分。
头文件不准确的理解:类似python库使用目的,无需自己手写基础功能;复用官方 / 第三方提供的成熟代码;简化开发,减少重复造轮子。
// 头文件:引入标准输入输出库(printf/scanf需要)
#include <stdio.h>
// 主函数:程序入口(必须有且仅有一个main函数)
int main() {
// 变量定义:数据类型 变量名 = 初始值;
int age = 20;
char name[] = "C语言"; // 字符数组(字符串)
// 输出:printf("格式控制符", 变量/常量);
printf("Hello %s!\n", name); // \n是换行符
printf("年龄:%d\n", age); // %d对应整数,%s对应字符串
// 输入:scanf("格式控制符", &变量地址);
printf("请输入新年龄:");
scanf("%d", &age); // &是取地址符,必须加(除字符数组)
printf("更新后的年龄:%d\n", age);
// 返回值:main函数返回0表示程序正常结束
return 0;
}
(2)编译运行步骤:
保存为 test.c(C 语言源文件后缀);
用编译器(如 GCC)编译:gcc test.c -o test;
运行程序:Windows 输入test.exe,Linux/Mac 输入./test。
2.核心语法
(1)条件判断(if-else/switch)
#include <stdio.h>
int main() {
int score = 85;
// if-else判断
if (score >= 90) {
printf("优秀\n");
} else if (score >= 80) {
printf("良好\n");
} else if (score >= 60) {
printf("及格\n");
} else {
printf("不及格\n");
}
// switch多分支(适合固定值判断)
int num = 2;
switch (num) {
case 1: printf("周一\n"); break; // break防止穿透
case 2: printf("周二\n"); break;
default: printf("其他\n");
}
return 0;
}
(2)循环(for/while/do-while)
#include <stdio.h>
int main() {
// for循环(适合已知循环次数)
printf("1-5的整数:");
for (int i = 1; i <= 5; i++) { // 初始化;条件;自增
printf("%d ", i);
}
printf("\n");
// while循环(适合未知循环次数)
int sum = 0, n = 1;
while (n <= 100) { // 先判断条件,再执行
sum += n;
n++;
}
printf("1-100求和:%d\n", sum);
// do-while循环(至少执行一次)
int x = 0;
do {
printf("执行一次\n");
} while (x > 0); // 条件不成立,但仍执行一次
return 0;
}
(3)数组(批量存储同类型数据)
#include <stdio.h>
int main() {
// 一维数组
int arr[5] = {10, 20, 30, 40, 50}; // 长度5,索引0-4
printf("数组第3个元素:%d\n", arr[2]); // 索引从0开始
// 遍历数组
printf("数组所有元素:");
for (int i = 0; i < 5; i++) {
printf("%d ", arr[i]);
}
printf("\n");
// 二维数组(行×列)
int matrix[2][3] = {{1,2,3}, {4,5,6}};
printf("二维数组[1][2]:%d\n", matrix[1][2]); // 输出6
return 0;
}
(4)函数(代码复用)
#include <stdio.h>
// 自定义函数:求两数之和
int add(int a, int b) { // 返回值类型 函数名(参数列表)
return a + b; // 返回结果
}
// 无返回值函数(void)
void printHello() {
printf("Hello 函数!\n");
}
int main() {
printHello();
int res = add(10, 20);
printf("10+20=%d\n", res); // 输出30
return 0;
}
3.常见实战场景
(1)计算阶乘(递归 + 循环)
#include <stdio.h>
// 递归求阶乘
int factorial(int n) {
if (n == 0 || n == 1) return 1; // 递归终止条件
return n * factorial(n-1); // 递归调用
}
int main() {
int n = 5;
// 循环方式
int res = 1;
for (int i = 1; i <= n; i++) {
res *= i;
}
printf("循环:%d! = %d\n", n, res); // 输出120
printf("递归:%d! = %d\n", n, factorial(n)); // 输出120
return 0;
}
(2)冒泡排序(数组排序)
#include <stdio.h>
void bubbleSort(int arr[], int len) {
for (int i = 0; i < len-1; i++) { // 外层循环:控制轮数
for (int j = 0; j < len-1-i; j++) { // 内层循环:比较交换
if (arr[j] > arr[j+1]) {
// 交换两数
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
int main() {
int arr[] = {5, 2, 9, 1, 5, 6};
int len = sizeof(arr)/sizeof(arr[0]); // 计算数组长度
bubbleSort(arr, len);
printf("排序后:");
for (int i = 0; i < len; i++) {
printf("%d ", arr[i]); // 输出1 2 5 5 6 9
}
return 0;
}
4.C 语言核心注意事项
(1)数据类型:int(整数)、float/double(浮点)、char(字符)、void(空类型)等;
(2)指针:C 语言的核心(int *p = # 表示指针 p 指向 num 的地址),后续可深入学习;
(3)内存管理:手动分配 / 释放内存(malloc/free),避免内存泄漏;
(4)语法规范:语句以;结尾,花括号{}包裹代码块,变量必须先定义后使用;
(5)常见错误:
忘记加&(scanf 输入变量时)
数组越界(访问超出索引范围)
递归无终止条件(导致栈溢出)
浙公网安备 33010602011771号