1. 基本语法与结构
1.1 变量和数据类型
在C语言中,变量是存储数据的地方。理解不同的数据类型对于编写高效的代码至关重要。
int age = 25; // 整数
float salary = 5000.75; // 浮点数
char grade = 'A'; // 字符
1.2 控制语句
控制语句用于控制程序的流程。
if (age > 18) {
printf("You are an adult.\n");
} else {
printf("You are not an adult.\n");
}
1.3 循环结构
循环结构允许重复执行代码块。
for (int i = 0; i < 5; i++) {
printf("Loop iteration: %d\n", i);
}
2. 函数与程序结构
2.1 函数定义与调用
函数是C语言中的基本构建块。
void greet() {
printf("Hello, World!\n");
}
int main() {
greet();
return 0;
}
2.2 递归函数
递归函数是一种在函数内部调用自身的函数。
int factorial(int n) {
if (n == 0)
return 1;
else
return n * factorial(n - 1);
}
3. 内存管理
3.1 动态内存分配
动态内存分配允许程序在运行时分配内存。
int* ptr = (int*)malloc(sizeof(int));
*ptr = 5;
printf("Value: %d\n", *ptr);
free(ptr);
3.2 指针与数组
指针是存储变量地址的变量。
int array[5] = {1, 2, 3, 4, 5};
int* ptr = array;
for (int i = 0; i < 5; i++) {
printf("Value: %d\n", *(ptr + i));
}
4. 文件操作
4.1 文件读取
文件读取允许程序从文件中获取数据。
FILE* file = fopen("example.txt", "r");
if (file == NULL) {
perror("Error opening file");
return 1;
}
char ch;
while ((ch = fgetc(file)) != EOF) {
putchar(ch);
}
fclose(file);
4.2 文件写入
文件写入允许程序向文件写入数据。
FILE* file = fopen("example.txt", "w");
if (file == NULL) {
perror("Error opening file");
return 1;
}
fprintf(file, "Hello, World!\n");
fclose(file);
5. 高级主题
5.1 结构体与联合体
结构体和联合体用于将不同类型的数据组合在一起。
struct Person {
char name[50];
int age;
};
struct Person p = {"John Doe", 30};
printf("Name: %s, Age: %d\n", p.name, p.age);
5.2 位操作
位操作允许直接操作二进制位。
int num = 5; // 二进制: 101
int mask = 4; // 二进制: 100
printf("Bitwise AND: %d\n", (num & mask)); // 输出: 4
printf("Bitwise OR: %d\n", (num | mask)); // 输出: 5
printf("Bitwise XOR: %d\n", (num ^ mask)); // 输出: 1
6. 50个经典实例深度剖析
以下是对50个经典C语言编程难题的深度剖析,每个实例都提供了详细的代码示例和解释。
6.1 实例1:字符串处理
#include <stdio.h>
#include <string.h>
int main() {
char str1[100] = "Hello";
char str2[100] = "World";
char result[200];
strcpy(result, str1);
strcat(result, str2);
printf("Concatenated String: %s\n", result);
return 0;
}
6.2 实例2:排序算法
#include <stdio.h>
void bubbleSort(int arr[], int n) {
for (int i = 0; i < n-1; i++) {
for (int j = 0; j < n-i-1; j++) {
if (arr[j] > arr[j+1]) {
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
int main() {
int arr[] = {64, 34, 25, 12, 22, 11, 90};
int n = sizeof(arr)/sizeof(arr[0]);
bubbleSort(arr, n);
printf("Sorted array: \n");
for (int i=0; i < n; i++)
printf("%d ", arr[i]);
printf("\n");
return 0;
}
6.3 实例3:指针与函数
#include <stdio.h>
void swap(int* a, int* b) {
int t = *a;
*a = *b;
*b = t;
}
int main() {
int x = 10;
int y = 20;
printf("Before swap: x = %d, y = %d\n", x, y);
swap(&x, &y);
printf("After swap: x = %d, y = %d\n", x, y);
return 0;
}
(注:由于篇幅限制,此处仅展示了三个实例的代码和解释。完整的50个实例将包括更多复杂的问题和解决方案。)
