C语言教程:快速入门
以下是一个简要而全面的C语言教程,旨在帮助你快速复习或掌握C语言的核心概念。内容涵盖基本语法、数据类型、控制结构、函数、数组、指针、结构体、文件操作等关键知识点,结构清晰,适合快速浏览。
1. C语言简介
C语言是一种通用的、结构化的编程语言,由Dennis Ritchie在20世纪70年代开发,广泛用于系统编程、嵌入式开发和应用软件开发。C语言以高效、灵活和底层操作能力著称。
2. 基本程序结构
一个简单的C程序结构如下:
#include <stdio.h> // 包含标准输入输出库
int main() { // 主函数,程序入口
printf("Hello, World!\n"); // 打印输出
return 0; // 返回0表示程序正常结束
}
- #include:引入头文件,如
<stdio.h>
用于输入输出。 - main函数:程序的入口点,必须返回
int
类型。 - 注释:
- 单行:
// 注释内容
- 多行:
/* 注释内容 */
- 单行:
3. 数据类型
C语言支持以下基本数据类型:
- 基本类型:
int
:整数(如int x = 10;
)float
:单精度浮点数(如float y = 3.14;
)double
:双精度浮点数(如double z = 3.14159;
)char
:字符(如char c = 'A';
)
- 修饰符:
signed
/unsigned
:有符号/无符号(如unsigned int
)short
/long
:短整型/长整型(如long int
)
- 其他:
void
:表示无类型,常用于函数无返回值或指针。- 枚举:
enum color {RED, GREEN, BLUE};
- 派生类型:数组、指针、结构体(见后文)。
4. 变量与常量
- 变量声明:
type variable_name = value;
(如int x = 5;
) - 常量:
- 字面常量:如
42
、"hello"
。 - 使用
const
关键字:const float PI = 3.14159;
- 宏定义:
#define PI 3.14159
- 字面常量:如
- 作用域:
- 局部变量:函数内部定义,仅在函数内有效。
- 全局变量:定义在函数外部,整个程序有效。
5. 输入与输出
使用<stdio.h>
提供的函数:
- 输出:
printf("格式化字符串", 变量);
(如printf("x = %d", x);
)- 格式说明符:
%d
(整数)、%f
(浮点数)、%c
(字符)、%s
(字符串)。
- 输入:
scanf("%d", &x);
(读取整数,注意&
取地址)。- 示例:
int x; printf("Enter a number: "); scanf("%d", &x); printf("You entered: %d\n", x);
6. 运算符
- 算术:
+
,-
,*
,/
,%
(取模) - 关系:
==
,!=
,>
,<
,>=
,<=
- 逻辑:
&&
(与)、||
(或)、!
(非) - 位运算:
&
(按位与)、|
(按位或)、^
(异或)、~
(取反)、<<
(左移)、>>
(右移) - 赋值:
=
,+=
,-=
,*=
,/=
,%=
- 其他:
- 自增/自减:
++
,--
- 条件运算符:
条件 ? 表达式1 : 表达式2
- 自增/自减:
7. 控制结构
- 条件语句:
if (条件) { // 代码 } else if (条件) { // 代码 } else { // 代码 }
- 三元运算符:
x > y ? x : y
- 三元运算符:
- 开关语句:
switch (变量) { case 值1: // 代码 break; case 值2: // 代码 break; default: // 默认代码 }
- 循环:
for
:for (初始化; 条件; 更新) { 代码 }
while
:while (条件) { 代码 }
do-while
:do { 代码 } while (条件);
- 控制:
break
(跳出循环)、continue
(跳到下一次循环)。
8. 函数
函数用于模块化代码:
- 定义:
返回类型 函数名(参数类型 参数) { // 代码 return 值; // 如果返回类型不是void }
- 示例:
int add(int a, int b) { return a + b; }
- 示例:
- 调用:
int sum = add(3, 4);
- 函数声明:在调用前声明函数原型,如
int add(int, int);
- 递归:函数调用自身,如计算阶乘:
int factorial(int n) { if (n <= 1) return 1; return n * factorial(n - 1); }
9. 数组
数组存储相同类型的元素:
- 声明:
type array_name[大小];
(如int arr[5];
) - 初始化:
int arr[5] = {1, 2, 3, 4, 5};
- 访问:
arr[索引]
(索引从0开始) - 多维数组:如
int matrix[2][3] = {{1, 2, 3}, {4, 5, 6}};
- 遍历:
for (int i = 0; i < 5; i++) { printf("%d ", arr[i]); }
10. 指针
指针存储变量的内存地址:
- 声明:
type *pointer_name;
(如int *p;
) - 赋值:
p = &x;
(&
取地址) - 解引用:
*p
访问指针指向的值 - 指针与数组:
- 数组名是首元素地址:
int *p = arr;
- 指针运算:
p + 1
指向下一个元素。
- 数组名是首元素地址:
- 动态内存分配(需要
<stdlib.h>
):- 分配:
int *p = malloc(sizeof(int) * n);
- 释放:
free(p);
- 重新分配:
p = realloc(p, 新大小);
- 分配:
11. 字符串
C中字符串是字符数组,以空字符'\0'
结尾:
- 声明:
char str[10] = "hello";
- 操作(需要
<string.h>
):- 复制:
strcpy(dest, src);
- 连接:
strcat(dest, src);
- 比较:
strcmp(str1, str2);
- 长度:
strlen(str);
- 复制:
- 输入输出:
- 输出:
printf("%s", str);
- 输入:
scanf("%s", str);
(不读空格)或fgets(str, sizeof(str), stdin);
- 输出:
12. 结构体
结构体用于存储不同类型的数据:
- 定义:
struct Point { int x; int y; };
- 声明与访问:
struct Point p = {3, 4}; printf("x: %d, y: %d\n", p.x, p.y);
- 指针访问:
struct Point *ptr = &p; ptr->x;
- typedef:简化定义,如
typedef struct Point Point;
13. 文件操作
使用<stdio.h>
进行文件读写:
- 打开文件:
FILE *fp = fopen("file.txt", "r");
(模式:r
读、w
写、a
追加) - 读写:
- 读字符:
fgetc(fp);
- 写字符:
fputc('A', fp);
- 读字符串:
fgets(str, sizeof(str), fp);
- 写字符串:
fputs(str, fp);
- 格式化读写:
fscanf(fp, "%d", &x);
,fprintf(fp, "%d", x);
- 读字符:
- 关闭文件:
fclose(fp);
- 检查文件结束:
feof(fp)
14. 预处理器
- 宏定义:
#define NAME value
- 条件编译:
#ifdef DEBUG printf("Debug mode\n"); #endif
- 头文件包含:
#include <file.h>
或#include "file.h"
15. 常见库函数
<stdlib.h>
:malloc
,free
,rand
,atoi
<math.h>
:sqrt
,pow
,sin
,cos
<time.h>
:time
,clock
<ctype.h>
:isalpha
,isdigit
,toupper
16. 示例程序
计算数组平均值:
#include <stdio.h>
float average(int arr[], int size) {
float sum = 0;
for (int i = 0; i < size; i++) {
sum += arr[i];
}
return sum / size;
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
int size = sizeof(arr) / sizeof(arr[0]);
printf("Average: %.2f\n", average(arr, size));
return 0;
}
17. 调试与错误处理
- 常见错误:
- 空指针:访问未初始化的指针。
- 数组越界:访问非法索引。
- 内存泄漏:未释放动态分配的内存。
- 调试工具:使用
gdb
或IDE调试器。 - 错误检查:检查函数返回值(如
fopen
返回NULL
)。
18. 学习建议
- 实践:编写小项目,如计算器、学生管理系统。
- 调试:熟练使用
printf
调试或调试工具。 - 资源:参考《C Primer Plus》或在线教程(如Learn-C.org)。
- 练习:尝试解决LeetCode的C语言题目。
这个教程涵盖了C语言的核心内容,适合快速复习。如果需要深入某个部分或代码示例,请告诉我!
留下评论