前言
本文旨在辅助快速了解/复习C语言基础知识,构建总体知识框架,所涉及的知识较浅,更加具体详细的知识需要查阅具体章节的文章。
一、基础框架
C程序由预处理指令、函数和语句构成。基本结构如下:
#include <stdio.h> // 头文件引入(如标准输入输出库)
int main(void) { // 主函数入口
printf("Hello World!\n"); // 语句以分号结尾
return 0; // 返回值
}
- 编译过程:预处理→编译→汇编→链接 。
- 固定代码:main()函数是程序执行的起点,return 0表示正常退出 。
二、数据类型与变量
1.基本数据类型
类型 | 关键字 | 示例 |
---|---|---|
整型 | int | int a = 10; |
浮点型 | float | float b = 3.14; |
字符型 | char | char c = 'A'; |
双精度浮点型 | double | double d = 5.0; |
2. 变量与常量
- 变量声明:int width, height;
- 常量:用const修饰或宏定义(#define PI 3.14)。
- 作用域:局部变量(函数内)与全局变量(文件内)。
三、控制语句
1. 分支结构
- if-else:支持嵌套和多条件判断。
if (num % 2 == 0) {
puts("偶数");
} else if (num > 0) {
puts("正奇数");
} else {
puts("负数");
}
- switch:处理多分支场景(需配合break)。
switch (num % 3) {
case 0: printf("余0"); break;
case 1: printf("余1"); break;
default: printf("余2");
}
2. 循环结构
- for:适合已知循环次数。
#include <stdio.h>
int main() {
// 示例1:打印0-9的整数
for (int i = 0; i < 10; i++) {
printf("%d ", i); // 输出:0 1 2 3 4 5 6 7 8 9
}
// 示例2:计算1-100的和
int sum = 0;
for (int j = 1; j <= 100; j++) {
sum += j;
}
printf("\n1-100的和:%d\n", sum); // 输出:5050
return 0;
}
- while/do-while:适合不确定次数(如输入验证)。
#include <stdio.h>
int main() {
// 示例:输入正整数,倒数至0
int num;
printf("输入一个正整数:");
scanf("%d", &num);
while (num >= 0) {
printf("%d ", num);
num--; // 递减操作
}
printf("\n"); // 输入5时输出:5 4 3 2 1 0
return 0;
}
#include <stdio.h>
int main() {
// 示例:强制用户输入正数
int input;
do {
printf("请输入一个正数:");
scanf("%d", &input);
if (input <= 0) {
printf("输入错误!\n");
}
} while (input <= 0); // 输入负数时重复提示
printf("输入成功:%d\n", input);
return 0;
}
四、数组
1. 一维数组
int arr[5] = {1,2,3}; // 未初始化的元素默认为0
printf("%d", arr[0]); // 输出1
2. 多维数组
int matrix[2][3] = {{1,2}, {3,4}}; // 二维数组
五、函数
1. 定义与调用
int add(int a, int b) { // 函数定义
return a + b;
}
int result = add(3,5); // 调用函数
2. 参数传递
- 值传递:形参是实参的副本。
- 指针传递:通过地址修改实参(见指针章节)。
六、指针
1. 基本概念
int num = 10;
int *p = &num // p指向num的地址
printf("%d", *p); // 输出10
2. 指针与数组
int arr[3] = {1,2,3};
int *p = arr; // p指向数组首地址
printf("%d", *(p+1)); // 输出2
七、结构体
1. 定义与使用
struct Student { // 定义结构体
char name[20];
int age;
};
struct Student s1 = {"Alice", 20}; // 初始化
printf("%s", s1.name); // 访问成员
2. 结构体指针
struct Student *ps = &s1;
printf("%d", ps->age); // 使用->访问成员
八、库函数
1. 标准I/O函数
- printf/scanf:格式化输入输出 。
int num;
scanf("%d", &num); // 读取整数
printf("值:%d", num);
- puts/gets:字符串输出(自动换行)。
2. 字符串处理
#include <string.h>
char str1[10] = "Hello";
char str2[10];
strcpy(str2, str1); // 复制字符串
代码实例整合
示例1:计算矩形面积
#include <stdio.h>
int main() {
int width, height;
puts("输入长和宽:");
scanf("%d%d", &width, &height);
printf("面积:%d\n", width * height);
return 0;
}
示例2:结构体与函数
#include <stdio.h>
typedef struct { // 使用typedef简化类型名
int x, y;
} Point;
void printPoint(Point p) {
printf("坐标:(%d,%d)", p.x, p.y);
}
int main() {
Point p1 = {3,4};
printPoint(p1);
return 0;
}
示例3:一套完整的C语言语法复习代码
#include <stdio.h>
//函数声明(函数原型)
int calculate_sum(int a, int b);
void print_array(int* arr, int size);
//结构体定义(复合数据类型)
struct Student {
char name[20];
int age;
float score;
};
int main() {
/*基础数据类型与输入输出*/
int num = 10;
float pi = 3.14159f;
char ch = 'A';
printf("基本数据类型示例:\n");
printf("整数:%d 浮点数:%.2f 字符:%c\n\n", num, pi, ch);
/*条件语句*/
int a = 15, b = 20;
if (a > b) {
printf("%d 大于 %d\n", a, b);
}
else {
printf("%d 小于等于 %d\n\n", a, b);
}
/*循环结构*/
printf("for循环示例(1-5):\n");
for (int i = 1; i <= 5; i++) {
printf("%d ", i);
}
printf("\n\nwhile循环示例(5-1):\n");
int j = 5;
while (j > 0) {
printf("%d ", j--);
}
printf("\n\n");
/*数组与指针*/
int arr[] = { 10,20,30,40,50 };
int* ptr = arr;
printf("数组元素通过指针访问:\n");
for (int k = 0; k < 5; k++) {
printf("arr[%d]=%d ", k, *(ptr + k));
}
printf("\n\n");
/*函数调用*/
int sum = calculate_sum(a, b);
printf("函数计算%d+%d=%d\n\n", a, b, sum);
/*结构体使用*/
struct Student stu = { "Alice", 18, 89.5 };
printf("学生信息:\n姓名:%s\n年龄:%d\n成绩:%.1f\n", stu.name, stu.age, stu.score);
return 0;
}
//函数定义:计算两数之和
int calculate_sum(int x, int y) {
return x + y;
}
//函数定义:打印数组
void print_array(int* arr, int size) {
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
输出结果:
基本数据类型示例:
整数:10 浮点数:3.14 字符:A
15 小于等于 20
for循环示例(1-5):
1 2 3 4 5
while循环示例(5-1):
5 4 3 2 1
数组元素通过指针访问:
arr[0]=10 arr[1]=20 arr[2]=30 arr[3]=40 arr[4]=50
函数计算15+20=35
学生信息:
姓名:Alice
年龄:18
成绩:89.5