引言
C语言作为一种历史悠久且功能强大的编程语言,因其高效的执行速度和强大的功能,被广泛应用于操作系统、嵌入式系统、游戏开发等领域。对于初学者来说,C语言的学习可能会显得有些挑战性。本文将通过50个实用实例,深入解析C语言编程技巧,帮助读者轻松入门并逐步精通。
实例1:C语言基础语法
1.1 数据类型
#include <stdio.h>
int main() {
int a = 10;
float b = 3.14;
char c = 'A';
printf("整型:%d, 浮点型:%f, 字符型:%c\n", a, b, c);
return 0;
}
1.2 变量声明与初始化
int main() {
int x = 5, y;
y = 10;
printf("x:%d, y:%d\n", x, y);
return 0;
}
实例2:运算符与表达式
2.1 算术运算符
#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;
}
2.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) && (b > a):%d\n", (a > b) && (b > a)); // 逻辑与
printf("(a > b) || (b > a):%d\n", (a > b) || (b > a)); // 逻辑或
return 0;
}
实例3:控制结构
3.1 if语句
#include <stdio.h>
int main() {
int age = 18;
if (age >= 18) {
printf("已成年\n");
} else {
printf("未成年\n");
}
return 0;
}
3.2 switch语句
#include <stdio.h>
int main() {
int month = 12;
switch (month) {
case 1:
printf("一月\n");
break;
case 2:
printf("二月\n");
break;
default:
printf("其他月份\n");
}
return 0;
}
实例4:循环结构
4.1 for循环
#include <stdio.h>
int main() {
for (int i = 1; i <= 5; i++) {
printf("i:%d\n", i);
}
return 0;
}
4.2 while循环
#include <stdio.h>
int main() {
int i = 1;
while (i <= 5) {
printf("i:%d\n", i);
i++;
}
return 0;
}
实例5:数组操作
5.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;
}
5.2 数组遍历与排序
#include <stdio.h>
int main() {
int arr[5] = {5, 2, 9, 1, 5};
for (int i = 0; i < 5; i++) {
for (int j = i + 1; j < 5; j++) {
if (arr[i] > arr[j]) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
for (int i = 0; i < 5; i++) {
printf("arr[%d]:%d\n", i, arr[i]);
}
return 0;
}
实例6:函数定义与调用
6.1 函数定义
#include <stdio.h>
void printMessage() {
printf("Hello, World!\n");
}
int main() {
printMessage();
return 0;
}
6.2 函数调用
#include <stdio.h>
int add(int a, int b) {
return a + b;
}
int main() {
int result = add(3, 4);
printf("结果:%d\n", result);
return 0;
}
实例7:指针操作
7.1 指针定义与赋值
#include <stdio.h>
int main() {
int a = 10;
int *ptr = &a;
printf("a:%d, &a:%p, ptr:%p, *ptr:%d\n", a, &a, ptr, *ptr);
return 0;
}
7.2 指针数组
#include <stdio.h>
int main() {
int arr[3] = {1, 2, 3};
int *ptrArr[3];
for (int i = 0; i < 3; i++) {
ptrArr[i] = &arr[i];
}
for (int i = 0; i < 3; i++) {
printf("arr[%d]:%d, ptrArr[%d]:%p, *ptrArr[%d]:%d\n", i, arr[i], i, ptrArr[i], i, *ptrArr[i]);
}
return 0;
}
实例8:结构体与联合体
8.1 结构体定义与使用
#include <stdio.h>
typedef struct {
int id;
char name[50];
} Student;
int main() {
Student stu1;
stu1.id = 1;
strcpy(stu1.name, "张三");
printf("学生ID:%d, 学生姓名:%s\n", stu1.id, stu1.name);
return 0;
}
8.2 联合体定义与使用
#include <stdio.h>
typedef union {
int id;
float score;
} Data;
int main() {
Data data;
data.id = 1;
printf("ID:%d\n", data.id);
data.score = 90.5;
printf("分数:%f\n", data.score);
return 0;
}
实例9:文件操作
9.1 文件打开与关闭
#include <stdio.h>
int main() {
FILE *fp = fopen("example.txt", "w");
if (fp == NULL) {
printf("文件打开失败\n");
return 1;
}
fprintf(fp, "Hello, World!\n");
fclose(fp);
return 0;
}
9.2 文件读取与写入
#include <stdio.h>
int main() {
FILE *fp = fopen("example.txt", "r");
if (fp == NULL) {
printf("文件打开失败\n");
return 1;
}
char buffer[100];
while (fgets(buffer, sizeof(buffer), fp)) {
printf("%s", buffer);
}
fclose(fp);
return 0;
}
实例10:动态内存分配
10.1 动态分配内存
#include <stdio.h>
#include <stdlib.h>
int main() {
int *arr = (int *)malloc(5 * sizeof(int));
if (arr == NULL) {
printf("内存分配失败\n");
return 1;
}
for (int i = 0; i < 5; i++) {
arr[i] = i;
}
for (int i = 0; i < 5; i++) {
printf("arr[%d]:%d\n", i, arr[i]);
}
free(arr);
return 0;
}
10.2 动态内存释放
#include <stdio.h>
#include <stdlib.h>
int main() {
int *arr = (int *)malloc(5 * sizeof(int));
if (arr == NULL) {
printf("内存分配失败\n");
return 1;
}
for (int i = 0; i < 5; i++) {
arr[i] = i;
}
free(arr);
return 0;
}
实例11:字符串操作
11.1 字符串定义与初始化
#include <stdio.h>
#include <string.h>
int main() {
char str1[50] = "Hello";
char str2[50] = "World";
printf("str1:%s, str2:%s\n", str1, str2);
return 0;
}
11.2 字符串连接
#include <stdio.h>
#include <string.h>
int main() {
char str1[100] = "Hello";
char str2[50] = "World";
strcat(str1, str2);
printf("str1:%s\n", str1);
return 0;
}
实例12:标准库函数
12.1 printf函数
#include <stdio.h>
int main() {
int a = 10;
float b = 3.14;
char c = 'A';
printf("整型:%d, 浮点型:%f, 字符型:%c\n", a, b, c);
return 0;
}
12.2 scanf函数
#include <stdio.h>
int main() {
int a;
float b;
char c;
printf("请输入一个整数:");
scanf("%d", &a);
printf("请输入一个浮点数:");
scanf("%f", &b);
printf("请输入一个字符:");
scanf("%c", &c);
printf("输入的整数:%d, 浮点数:%f, 字符:%c\n", a, b, c);
return 0;
}
实例13:错误处理
13.1 检查文件打开是否成功
#include <stdio.h>
int main() {
FILE *fp = fopen("example.txt", "r");
if (fp == NULL) {
printf("文件打开失败\n");
return 1;
}
fclose(fp);
return 0;
}
13.2 检查内存分配是否成功
#include <stdio.h>
#include <stdlib.h>
int main() {
int *arr = (int *)malloc(5 * sizeof(int));
if (arr == NULL) {
printf("内存分配失败\n");
return 1;
}
free(arr);
return 0;
}
实例14:递归函数
14.1 计算阶乘
#include <stdio.h>
int factorial(int n) {
if (n == 0) {
return 1;
}
return n * factorial(n - 1);
}
int main() {
int n = 5;
printf("%d的阶乘:%d\n", n, factorial(n));
return 0;
}
14.2 求斐波那契数列
#include <stdio.h>
int fibonacci(int n) {
if (n <= 1) {
return n;
}
return fibonacci(n - 1) + fibonacci(n - 2);
}
int main() {
int n = 10;
printf("斐波那契数列:%d\n", fibonacci(n));
return 0;
}
实例15:指针与数组
15.1 通过指针访问数组元素
#include <stdio.h>
int main() {
int arr[5] = {1, 2, 3, 4, 5};
int *ptr = arr;
for (int i = 0; i < 5; i++) {
printf("arr[%d]:%d, *(arr + %d):%d, *(ptr + %d):%d\n", i, arr[i], i, *(arr + i), i, *(ptr + i));
}
return 0;
}
15.2 通过指针修改数组元素
#include <stdio.h>
int main() {
int arr[5] = {1, 2, 3, 4, 5};
int *ptr = arr;
for (int i = 0; i < 5; i++) {
*(ptr + i) = i;
}
for (int i = 0; i < 5; i++) {
printf("arr[%d]:%d\n", i, arr[i]);
}
return 0;
}
实例16:结构体指针
16.1 通过结构体指针访问成员
#include <stdio.h>
typedef struct {
int id;
char name[50];
} Student;
int main() {
Student stu1 = {1, "张三"};
Student *ptr = &stu1;
printf("学生ID:%d, 学生姓名:%s\n", ptr->id, ptr->name);
return 0;
}
16.2 通过结构体指针修改成员
#include <stdio.h>
typedef struct {
int id;
char name[50];
} Student;
int main() {
Student stu1 = {1, "张三"};
Student *ptr = &stu1;
ptr->id = 2;
strcpy(ptr->name, "李四");
printf("学生ID:%d, 学生姓名:%s\n", ptr->id, ptr->name);
return 0;
}
实例17:函数指针
17.1 定义函数指针
#include <stdio.h>
int add(int a, int b) {
return a + b;
}
int main() {
int (*funcPtr)(int, int) = add;
printf("函数指针调用:%d\n", funcPtr(3, 4));
return 0;
}
17.2 函数指针作为参数
#include <stdio.h>
int add(int a, int b) {
return a + b;
}
int subtract(int a, int b) {
return a - b;
}
void operate(int a, int b, int (*funcPtr)(int, int)) {
printf("结果:%d\n", funcPtr(a, b));
}
int main() {
operate(10, 5, add);
operate(10, 5, subtract);
return 0;
}
实例18:指针数组
18.1 指针数组定义与使用
#include <stdio.h>
int main() {
int arr[3] = {1, 2, 3};
int *ptrArr[3];
for (int i = 0; i < 3; i++) {
ptrArr[i] = &arr[i];
}
for (int i = 0; i < 3; i++) {
printf("arr[%d]:%d, ptrArr[%d]:%p, *ptrArr[%d]:%d\n", i, arr[i], i, ptrArr[i], i, *ptrArr[i]);
}
return 0;
}
18.2 指针数组遍历
#include <stdio.h>
int main() {
int arr[3] = {1, 2, 3};
int *ptrArr[3];
for (int i = 0; i < 3; i++) {
ptrArr[i] = &arr[i];
}
for (int i = 0; i < 3; i++) {
printf("arr[%d]:%d, *ptrArr[%d]:%d\n", i, arr[i], i, *ptrArr[i]);
}
return 0;
}
实例19:结构体数组
19.1 结构体数组定义与使用
#include <stdio.h>
typedef struct {
int id;
char name[50];
} Student;
int main() {
Student stuArr[3] = {{1, "张三"}, {2, "李四"}, {3, "王五"}};
for (int i = 0; i < 3; i++) {
printf("学生ID:%d, 学生姓名:%s\n", stuArr[i].id, stuArr[i].name);
}
return 0;
}
19.2 结构体数组遍历
#include <stdio.h>
typedef struct {
int id;
char name[50];
} Student;
int main() {
Student stuArr[3] = {{1, "张三"}, {2, "李四"}, {3, "王五"}};
for (int i = 0; i < 3; i++) {
printf("学生ID:%d, 学生姓名:%s\n", stuArr[i].id, stuArr[i].name);
}
return 0;
}
实例20:链表操作
20.1 链表节点定义
”`c
#include
typedef struct Node {
int data;
struct Node *next;
} Node;
int main() {
Node *head = (Node *)malloc
