1. 基础语法和变量
1.1 变量和数据类型
变量定义
#include <stdio.h>
int main() {
int a = 10; // 整数变量
float b = 3.14; // 浮点变量
char c = 'A'; // 字符变量
return 0;
}
数据类型转换
#include <stdio.h>
int main() {
int num = 10;
float floatNum = num; // 自动类型提升
printf("num = %d, floatNum = %.2f\n", num, floatNum);
return 0;
}
1.2 运算符
算术运算符
#include <stdio.h>
int main() {
int a = 10, b = 5;
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); // 求余
return 0;
}
赋值运算符
#include <stdio.h>
int main() {
int a = 10;
a += 5; // a = a + 5
printf("a = %d\n", a);
return 0;
}
2. 控制流
2.1 条件语句
if语句
#include <stdio.h>
int main() {
int age = 18;
if (age >= 18) {
printf("你已经成年了!\n");
}
return 0;
}
if-else语句
#include <stdio.h>
int main() {
int age = 17;
if (age >= 18) {
printf("你已经成年了!\n");
} else {
printf("你还未成年。\n");
}
return 0;
}
switch语句
#include <stdio.h>
int main() {
int num = 2;
switch (num) {
case 1:
printf("数字是1\n");
break;
case 2:
printf("数字是2\n");
break;
default:
printf("数字是其他值\n");
}
return 0;
}
2.2 循环语句
for循环
#include <stdio.h>
int main() {
for (int i = 0; i < 5; i++) {
printf("i = %d\n", i);
}
return 0;
}
while循环
#include <stdio.h>
int main() {
int i = 0;
while (i < 5) {
printf("i = %d\n", i);
i++;
}
return 0;
}
do-while循环
#include <stdio.h>
int main() {
int i = 0;
do {
printf("i = %d\n", i);
i++;
} while (i < 5);
return 0;
}
3. 函数
3.1 函数定义和调用
函数定义
#include <stdio.h>
void printHello() {
printf("Hello, World!\n");
}
int main() {
printHello(); // 函数调用
return 0;
}
返回值
#include <stdio.h>
int sum(int a, int b) {
return a + b;
}
int main() {
int result = sum(3, 4);
printf("sum = %d\n", result);
return 0;
}
3.2 递归函数
递归计算阶乘
#include <stdio.h>
int factorial(int n) {
if (n == 0) {
return 1;
}
return n * factorial(n - 1);
}
int main() {
int num = 5;
printf("Factorial of %d = %d\n", num, factorial(num));
return 0;
}
4. 数组
4.1 一维数组
声明和初始化
#include <stdio.h>
int main() {
int arr[5] = {1, 2, 3, 4, 5};
for (int i = 0; i < 5; i++) {
printf("arr[%d] = %d\n", i, arr[i]);
}
return 0;
}
二维数组
#include <stdio.h>
int main() {
int arr[2][3] = {{1, 2, 3}, {4, 5, 6}};
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
printf("arr[%d][%d] = %d\n", i, j, arr[i][j]);
}
}
return 0;
}
5. 指针
5.1 指针基础
指针定义
#include <stdio.h>
int main() {
int a = 10;
int *ptr = &a; // ptr指向a的地址
printf("a = %d, *ptr = %d\n", a, *ptr);
return 0;
}
指针运算
#include <stdio.h>
int main() {
int arr[5] = {1, 2, 3, 4, 5};
int *ptr = arr; // ptr指向数组首地址
printf("arr[2] = %d, *(ptr + 2) = %d\n", arr[2], *(ptr + 2));
return 0;
}
5.2 指针函数
指针函数定义
#include <stdio.h>
void printArray(int *arr, int size) {
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
int main() {
int arr[5] = {1, 2, 3, 4, 5};
printArray(arr, 5);
return 0;
}
6. 结构体
6.1 结构体定义
结构体定义和初始化
#include <stdio.h>
struct Person {
char name[50];
int age;
};
int main() {
struct Person p;
strcpy(p.name, "张三");
p.age = 20;
printf("姓名:%s,年龄:%d\n", p.name, p.age);
return 0;
}
6.2 结构体数组
结构体数组声明和初始化
#include <stdio.h>
struct Person {
char name[50];
int age;
};
int main() {
struct Person persons[2] = {
{"张三", 20},
{"李四", 25}
};
for (int i = 0; i < 2; i++) {
printf("姓名:%s,年龄:%d\n", persons[i].name, persons[i].age);
}
return 0;
}
7. 文件操作
7.1 文件读写
文件写入
#include <stdio.h>
int main() {
FILE *fp = fopen("output.txt", "w");
if (fp == NULL) {
printf("打开文件失败!\n");
return -1;
}
fprintf(fp, "Hello, World!\n");
fclose(fp);
return 0;
}
文件读取
#include <stdio.h>
int main() {
FILE *fp = fopen("output.txt", "r");
if (fp == NULL) {
printf("打开文件失败!\n");
return -1;
}
char ch;
while ((ch = fgetc(fp)) != EOF) {
printf("%c", ch);
}
fclose(fp);
return 0;
}
8. 动态内存分配
8.1 内存分配
动态分配内存
#include <stdio.h>
#include <stdlib.h>
int main() {
int *ptr = (int *)malloc(5 * sizeof(int));
if (ptr == NULL) {
printf("内存分配失败!\n");
return -1;
}
for (int i = 0; i < 5; i++) {
ptr[i] = i + 1;
}
for (int i = 0; i < 5; i++) {
printf("%d ", ptr[i]);
}
free(ptr);
return 0;
}
8.2 内存释放
释放内存
#include <stdio.h>
#include <stdlib.h>
int main() {
int *ptr = (int *)malloc(5 * sizeof(int));
if (ptr == NULL) {
printf("内存分配失败!\n");
return -1;
}
for (int i = 0; i < 5; i++) {
ptr[i] = i + 1;
}
free(ptr);
return 0;
}