案例一:基础数据类型操作
在C语言中,理解并正确使用基本数据类型是编程的基础。以下是一个简单的例子,演示了如何声明和操作整型、浮点型和字符型变量。
#include <stdio.h>
int main() {
int integer = 10;
float floatingPoint = 3.14f;
char character = 'A';
printf("Integer: %d\n", integer);
printf("Floating Point: %f\n", floatingPoint);
printf("Character: %c\n", character);
return 0;
}
案例二:控制流——if语句
使用if语句可以根据条件执行不同的代码块。以下是一个使用if语句的例子,根据用户输入的年龄判断是否成年。
#include <stdio.h>
int main() {
int age;
printf("Enter your age: ");
scanf("%d", &age);
if (age >= 18) {
printf("You are an adult.\n");
} else {
printf("You are not an adult.\n");
}
return 0;
}
案例三:循环结构——for循环
for循环是C语言中常用的循环结构,适用于已知循环次数的情况。以下是一个使用for循环打印1到10的例子。
#include <stdio.h>
int main() {
for (int i = 1; i <= 10; i++) {
printf("%d\n", i);
}
return 0;
}
案例四:函数定义与调用
函数是C语言的核心组成部分,它允许我们将代码分割成可重用的部分。以下是一个简单的函数定义和调用的例子。
#include <stdio.h>
void printMessage() {
printf("Hello, World!\n");
}
int main() {
printMessage();
return 0;
}
案例五:指针与数组
指针是C语言中一个强大的特性,它允许你直接访问和操作内存地址。以下是一个使用指针和数组的例子,演示了如何遍历数组并打印每个元素的值。
#include <stdio.h>
int main() {
int numbers[] = {1, 2, 3, 4, 5};
int *ptr = numbers;
for (int i = 0; i < 5; i++) {
printf("Value at index %d: %d\n", i, *(ptr + i));
}
return 0;
}
案例六:结构体与联合体
结构体和联合体是C语言中用于组织相关数据的复杂数据类型。以下是一个使用结构体的例子,它定义了一个包含姓名和年龄的Person结构体。
#include <stdio.h>
typedef struct {
char name[50];
int age;
} Person;
int main() {
Person person;
printf("Enter your name: ");
scanf("%49s", person.name);
printf("Enter your age: ");
scanf("%d", &person.age);
printf("Name: %s\n", person.name);
printf("Age: %d\n", person.age);
return 0;
}
案例七:文件操作
C语言提供了丰富的文件操作函数,允许你读取和写入文件。以下是一个简单的例子,演示了如何创建、写入和读取文件。
#include <stdio.h>
int main() {
FILE *file = fopen("example.txt", "w");
if (file == NULL) {
printf("Error opening file.\n");
return 1;
}
fprintf(file, "Hello, World!\n");
fclose(file);
file = fopen("example.txt", "r");
if (file == NULL) {
printf("Error opening file.\n");
return 1;
}
char buffer[100];
while (fgets(buffer, sizeof(buffer), file)) {
printf("%s", buffer);
}
fclose(file);
return 0;
}
案例八:动态内存分配
动态内存分配允许你在运行时分配和释放内存。以下是一个使用malloc和free函数的例子。
#include <stdio.h>
#include <stdlib.h>
int main() {
int *numbers = (int *)malloc(5 * sizeof(int));
if (numbers == NULL) {
printf("Memory allocation failed.\n");
return 1;
}
for (int i = 0; i < 5; i++) {
numbers[i] = i;
}
for (int i = 0; i < 5; i++) {
printf("%d\n", numbers[i]);
}
free(numbers);
return 0;
}
案例九:字符串操作
C语言提供了丰富的字符串操作函数,如strlen、strcpy和strcmp。以下是一个使用这些函数的例子。
#include <stdio.h>
#include <string.h>
int main() {
char str1[100] = "Hello";
char str2[100] = "World";
printf("Length of str1: %lu\n", strlen(str1));
printf("Length of str2: %lu\n", strlen(str2));
strcpy(str1, str2);
printf("str1 after strcpy: %s\n", str1);
if (strcmp(str1, str2) == 0) {
printf("str1 and str2 are equal.\n");
} else {
printf("str1 and str2 are not equal.\n");
}
return 0;
}
案例十:标准库函数
C语言的标准库提供了大量的函数,用于执行各种任务,如数学运算、输入输出和字符串处理。以下是一个使用标准库函数的例子。
#include <stdio.h>
#include <math.h>
int main() {
double result = sqrt(16);
printf("Square root of 16: %f\n", result);
result = pow(2, 3);
printf("2 to the power of 3: %f\n", result);
return 0;
}
案例十一:结构体指针与函数
结构体指针允许你通过指针访问和修改结构体成员。以下是一个使用结构体指针和函数的例子。
#include <stdio.h>
typedef struct {
int x;
int y;
} Point;
void printPoint(const Point *p) {
printf("Point coordinates: (%d, %d)\n", p->x, p->y);
}
int main() {
Point p = {3, 4};
printPoint(&p);
p.x = 5;
p.y = 6;
printPoint(&p);
return 0;
}
案例十二:位操作
位操作是C语言中的一个高级特性,它允许你直接操作整数中的位。以下是一个使用位操作的例子。
#include <stdio.h>
int main() {
int num = 5; // Binary: 101
printf("Binary representation of 5: %d\n", num);
num = num & 3; // Binary: 101 & 011 = 001
printf("Result of num & 3: %d\n", num);
num = num | 4; // Binary: 001 | 100 = 101
printf("Result of num | 4: %d\n", num);
return 0;
}
案例十三:宏定义
宏定义是C语言中的一个特性,它允许你创建可重用的代码片段。以下是一个使用宏定义的例子。
#include <stdio.h>
#define MAX(a, b) ((a) > (b) ? (a) : (b))
int main() {
int x = 10;
int y = 20;
printf("Max of %d and %d is %d\n", x, y, MAX(x, y));
return 0;
}
案例十四:预处理器指令
预处理器指令是C语言中的一个特性,它允许你在编译前执行一些操作。以下是一个使用预处理器指令的例子。
#include <stdio.h>
#if defined(__GNUC__)
#define Compiler "GCC"
#elif defined(__clang__)
#define Compiler "Clang"
#else
#define Compiler "Unknown"
#endif
int main() {
printf("Compiler: %s\n", Compiler);
return 0;
}
案例十五:错误处理
错误处理是C语言编程中的一个重要方面,它允许你处理程序运行时可能发生的错误。以下是一个使用错误处理的例子。
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE *file = fopen("example.txt", "r");
if (file == NULL) {
perror("Error opening file");
return 1;
}
fclose(file);
return 0;
}
案例十六:多线程编程
多线程编程是C语言中的一个高级特性,它允许你同时执行多个线程。以下是一个使用POSIX线程库(pthread)的例子。
#include <stdio.h>
#include <pthread.h>
void *threadFunction(void *arg) {
printf("Thread ID: %ld\n", pthread_self());
return NULL;
}
int main() {
pthread_t thread;
if (pthread_create(&thread, NULL, threadFunction, NULL) != 0) {
perror("Error creating thread");
return 1;
}
pthread_join(thread, NULL);
return 0;
}
案例十七:网络编程
网络编程是C语言中的一个重要应用领域,它允许你编写能够通过网络进行通信的程序。以下是一个使用套接字编程的例子。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
int main() {
int server_fd, new_socket;
struct sockaddr_in address;
int opt = 1;
int addrlen = sizeof(address);
if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
perror("Could not create socket");
return 1;
}
if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt, sizeof(opt))) {
perror("setsockopt");
return 1;
}
address.sin_family = AF_INET;
address.sin_addr.s_addr = INADDR_ANY;
address.sin_port = htons(8080);
if (bind(server_fd, (struct sockaddr *)&address, sizeof(address))<0) {
perror("bind failed");
return 1;
}
if (listen(server_fd, 3) < 0) {
perror("listen");
return 1;
}
if ((new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen))<0) {
perror("accept");
return 1;
}
char buffer[1024] = {0};
read(new_socket, buffer, 1024);
printf("Message: %s\n", buffer);
send(new_socket, "Hello from server", 18, 0);
close(new_socket);
return 0;
}
案例十八:图形用户界面编程
图形用户界面编程是C语言中的一个应用领域,它允许你创建具有图形界面的程序。以下是一个使用GTK+库的例子。
#include <gtk/gtk.h>
int main(int argc, char *argv[]) {
GtkWidget *window;
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window), "Hello, World!");
gtk_window_set_default_size(GTK_WINDOW(window), 200, 200);
gtk_container_set_border_width(GTK_CONTAINER(window), 10);
g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
gtk_widget_show(window);
gtk_main();
return 0;
}
案例十九:嵌入式系统编程
嵌入式系统编程是C语言的一个应用领域,它涉及编写用于嵌入式设备的程序。以下是一个使用裸机编程的例子。
#include <stdint.h>
void delay(uint32_t ms) {
volatile uint32_t count;
for (count = 0; count < ms * 1000; count++);
}
int main() {
while (1) {
// Toggle an LED
// delay(1000);
}
return 0;
}
案例二十:实时操作系统编程
实时操作系统编程是C语言的一个应用领域,它涉及编写对时间敏感的程序。以下是一个使用FreeRTOS的例子。
#include "FreeRTOS.h"
#include "task.h"
void task1(void *pvParameters) {
while (1) {
printf("Task 1 running\n");
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
}
void task2(void *pvParameters) {
while (1) {
printf("Task 2 running\n");
vTaskDelay(2000 / portTICK_PERIOD_MS);
}
}
int main() {
xTaskCreate(task1, "Task 1", configMINIMAL_STACK_SIZE, NULL, 1, NULL);
xTaskCreate(task2, "Task 2", configMINIMAL_STACK_SIZE, NULL, 1, NULL);
vTaskStartScheduler();
for (;;);
}
案例二十一:数据结构实现
数据结构是C语言编程中的一个重要方面,它涉及实现和使用各种数据结构,如链表、树和图。以下是一个使用链表实现的例子。
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node *next;
} Node;
Node *createNode(int data) {
Node *newNode = (Node *)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
return newNode;
}
void insertNode(Node **head, int data) {
Node *newNode = createNode(data);
newNode->next = *head;
*head = newNode;
}
void printList(Node *head) {
while (head != NULL) {
printf("%d ", head->data);
head = head->next;
}
printf("\n");
}
int main() {
Node *head = NULL;
insertNode(&head, 3);
insertNode(&head, 2);
insertNode(&head, 1);
printList(head);
return 0;
}
案例二十二:排序算法实现
排序算法是C语言编程中的一个重要方面,它涉及实现和使用各种排序算法,如冒泡排序、快速排序和归并排序。以下是一个使用冒泡排序的例子。
#include <stdio.h>
void bubbleSort(int arr[], int n) {
int i, j, temp;
for (i = 0; i < n-1; i++) {
for (j = 0; j < n-i-1; j++) {
if (arr[j] > arr[j+1]) {
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;
}
案例二十三:查找算法实现
查找算法是C语言编程中的一个重要方面,它涉及实现和使用各种查找算法,如线性查找、二分查找和哈希查找。以下是一个使用二分查找的例子。
#include <stdio.h>
int binarySearch(int arr[], int l, int r, int x) {
while (l <= r) {
int m = l + (r - l) / 2;
if (arr[m] == x) return m;
if (arr[m] < x) l = m + 1;
else r = m - 1;
}
return -1;
}
int main() {
int arr[] = {2, 3, 4, 10, 40};
int n = sizeof(arr) / sizeof(arr[0]);
int x = 10;
int result = binarySearch(arr, 0, n - 1, x);
if (result == -1) {
printf("Element is not present in array");
} else {
printf("Element is present at index %d", result);
}
return 0;
}
案例二十四:递归函数实现
递归函数是C语言编程中的一个重要特性,它允许函数调用自身以解决更小的问题。以下是一个使用递归计算阶乘的例子。
#include <stdio.h>
int factorial(int n) {
if (n <= 1) return 1;
return n * factorial(n - 1);
}
int main() {
int n = 5;
printf("Factorial of %d is %d\n", n, factorial(n));
return 0;
}
案例二十五:动态规划实现
动态规划是C语言编程中的一个重要技术,它涉及将复杂问题分解成更小的子问题并存储子问题的解。以下是一个使用动态规划计算斐波那契数的例子。
#include <stdio.h>
int fibonacci(int n) {
int fib[n+1];
fib[0] = 0;
fib[1] = 1;
for (int i = 2; i <= n; i++) {
fib[i] = fib[i-1] + fib[i-2];
}
return fib[n];
}
int main() {
int n = 10;
printf("Fibonacci of %d is %d\n", n, fibonacci(n));
return 0;
}
案例二十六:文件加密与解密
文件加密和解密是C语言编程中的一个应用领域,它涉及将文件内容转换为不可读的形式,并在需要时将其转换回原始形式。以下是一个使用XOR加密的例子。
”`c
#include
void encryptDecryptFile(const char *inputFilename, const char *outputFilename, const char *key) {
