实例1:打印Hello World
C语言编程的第一步就是学会打印“Hello World”。这是一个简单的基础,代码如下:
#include <stdio.h>
int main() {
printf("Hello World!\n");
return 0;
}
实例2:变量声明与赋值
在C语言中,声明变量是编程的基础。以下是一个声明和赋值整型变量的例子:
#include <stdio.h>
int main() {
int age = 25;
printf("I am %d years old.\n", age);
return 0;
}
实例3:数据类型转换
在C语言中,数据类型转换是常见的操作。以下是将浮点数转换为整数的例子:
#include <stdio.h>
int main() {
float f = 3.14;
int i = (int)f;
printf("Converted integer: %d\n", i);
return 0;
}
实例4:条件语句
条件语句用于根据条件执行不同的代码块。以下是一个简单的if语句示例:
#include <stdio.h>
int main() {
int number = 10;
if (number > 0) {
printf("The number is positive.\n");
} else {
printf("The number is not positive.\n");
}
return 0;
}
实例5:循环语句
循环语句用于重复执行代码块。以下是一个简单的for循环示例:
#include <stdio.h>
int main() {
for (int i = 0; i < 5; i++) {
printf("Iteration %d\n", i);
}
return 0;
}
实例6:函数定义与调用
函数是C语言的核心组成部分。以下是一个简单函数的例子,用于计算两个数的和:
#include <stdio.h>
int add(int a, int b) {
return a + b;
}
int main() {
int result = add(5, 10);
printf("The sum is %d\n", result);
return 0;
}
实例7:数组操作
数组是C语言中存储多个相同类型数据的一种方式。以下是一个声明和操作数组的例子:
#include <stdio.h>
int main() {
int numbers[5] = {1, 2, 3, 4, 5};
for (int i = 0; i < 5; i++) {
printf("numbers[%d] = %d\n", i, numbers[i]);
}
return 0;
}
实例8:指针操作
指针是C语言中一个强大的特性,它允许你直接访问内存地址。以下是一个使用指针的例子:
#include <stdio.h>
int main() {
int a = 10;
int *ptr = &a;
printf("Value of a: %d\n", a);
printf("Address of a: %p\n", (void *)&a);
printf("Value of ptr: %p\n", (void *)ptr);
printf("Value pointed by ptr: %d\n", *ptr);
return 0;
}
实例9:结构体定义与使用
结构体允许你将不同类型的数据组合在一起。以下是一个结构体的例子:
#include <stdio.h>
typedef struct {
char name[50];
int age;
float salary;
} Employee;
int main() {
Employee emp = {"John Doe", 30, 50000.0};
printf("Employee Name: %s\n", emp.name);
printf("Employee Age: %d\n", emp.age);
printf("Employee Salary: %.2f\n", emp.salary);
return 0;
}
实例10:函数指针
函数指针允许你将函数作为参数传递。以下是一个使用函数指针的例子:
#include <stdio.h>
void printMessage() {
printf("Hello, World!\n");
}
int main() {
void (*funcPtr)() = printMessage;
funcPtr();
return 0;
}
实例11:文件操作
文件操作是C语言中处理文件的一种方式。以下是一个读取和写入文件的例子:
#include <stdio.h>
int main() {
FILE *file = fopen("example.txt", "w");
if (file == NULL) {
printf("Error opening file.\n");
return 1;
}
fprintf(file, "This is a test.\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;
}
实例12:动态内存分配
动态内存分配允许你在运行时分配内存。以下是一个使用malloc和free的例子:
#include <stdio.h>
#include <stdlib.h>
int main() {
int *ptr = (int *)malloc(5 * sizeof(int));
if (ptr == NULL) {
printf("Memory allocation failed.\n");
return 1;
}
for (int i = 0; i < 5; i++) {
ptr[i] = i;
}
for (int i = 0; i < 5; i++) {
printf("Value at index %d: %d\n", i, ptr[i]);
}
free(ptr);
return 0;
}
实例13:字符串操作
C语言中处理字符串需要一些特殊的函数。以下是一个字符串连接的例子:
#include <stdio.h>
#include <string.h>
int main() {
char str1[100] = "Hello, ";
char str2[] = "World!";
strcat(str1, str2);
printf("Concatenated string: %s\n", str1);
return 0;
}
实例14:结构体数组
结构体数组允许你存储多个结构体实例。以下是一个使用结构体数组的例子:
#include <stdio.h>
typedef struct {
char name[50];
int age;
} Person;
int main() {
Person people[2] = {
{"Alice", 25},
{"Bob", 30}
};
for (int i = 0; i < 2; i++) {
printf("Name: %s, Age: %d\n", people[i].name, people[i].age);
}
return 0;
}
实例15:指针数组
指针数组允许你存储多个指针。以下是一个使用指针数组的例子:
#include <stdio.h>
int main() {
int numbers[3] = {1, 2, 3};
int *ptrArray[3];
for (int i = 0; i < 3; i++) {
ptrArray[i] = &numbers[i];
}
for (int i = 0; i < 3; i++) {
printf("Value at index %d: %d\n", i, *ptrArray[i]);
}
return 0;
}
实例16:函数递归
递归是一种编程技巧,允许函数调用自身。以下是一个使用递归计算阶乘的例子:
#include <stdio.h>
int factorial(int n) {
if (n == 0) {
return 1;
} else {
return n * factorial(n - 1);
}
}
int main() {
int number = 5;
printf("Factorial of %d is %d\n", number, factorial(number));
return 0;
}
实例17:结构体指针
结构体指针允许你通过指针访问结构体成员。以下是一个使用结构体指针的例子:
#include <stdio.h>
typedef struct {
char name[50];
int age;
} Person;
int main() {
Person person = {"John Doe", 30};
Person *ptr = &person;
printf("Name: %s, Age: %d\n", ptr->name, ptr->age);
return 0;
}
实例18:位操作
位操作是C语言中的一个强大特性,它允许你直接操作位。以下是一个使用位操作的例子:
#include <stdio.h>
int main() {
int a = 5; // 101 in binary
int b = 3; // 011 in binary
printf("a & b: %d\n", a & b); // 001 in binary, which is 1
printf("a | b: %d\n", a | b); // 111 in binary, which is 7
printf("a ^ b: %d\n", a ^ b); // 110 in binary, which is 6
printf("a << 1: %d\n", a << 1); // 1010 in binary, which is 10
printf("a >> 1: %d\n", a >> 1); // 10 in binary, which is 2
return 0;
}
实例19:宏定义
宏定义是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;
}
实例20:预处理器指令
预处理器指令是C语言中的一个特性,它允许你在编译前执行一些操作。以下是一个使用预处理器指令的例子:
#include <stdio.h>
#if defined(__linux__)
#define OS "Linux"
#elif defined(__windows__)
#define OS "Windows"
#else
#define OS "Unknown"
#endif
int main() {
printf("Operating System: %s\n", OS);
return 0;
}
实例21:错误处理
错误处理是编程中的一个重要方面。以下是一个使用错误处理的例子:
#include <stdio.h>
#include <stdlib.h>
int divide(int a, int b) {
if (b == 0) {
fprintf(stderr, "Error: Division by zero.\n");
return -1;
}
return a / b;
}
int main() {
int result = divide(10, 0);
if (result == -1) {
return 1;
}
printf("Result: %d\n", result);
return 0;
}
实例22:动态链接库
动态链接库(DLL)是C语言中的一个特性,它允许你使用其他程序中的代码。以下是一个使用动态链接库的例子:
#include <stdio.h>
#include <dlfcn.h>
typedef int (*AddFunction)(int, int);
int main() {
void *handle = dlopen("libexample.so", RTLD_LAZY);
if (!handle) {
fprintf(stderr, "Error opening library.\n");
return 1;
}
AddFunction addFunc = (AddFunction)dlsym(handle, "add");
if (!addFunc) {
fprintf(stderr, "Error loading symbol.\n");
dlclose(handle);
return 1;
}
int result = addFunc(5, 10);
printf("Result: %d\n", result);
dlclose(handle);
return 0;
}
实例23:线程
线程是C语言中的一个特性,它允许你同时执行多个任务。以下是一个使用线程的例子:
#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) {
fprintf(stderr, "Error creating thread.\n");
return 1;
}
pthread_join(thread, NULL);
return 0;
}
实例24:信号处理
信号处理是C语言中的一个特性,它允许你处理异步事件。以下是一个使用信号处理的例子:
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
void signalHandler(int signum) {
printf("Received signal %d\n", signum);
}
int main() {
signal(SIGINT, signalHandler);
while (1) {
printf("Waiting for signal...\n");
sleep(1);
}
return 0;
}
实例25:网络编程
网络编程是C语言中的一个重要应用领域。以下是一个简单的TCP客户端的例子:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
int main() {
int sockfd;
struct sockaddr_in servaddr;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(8080);
servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");
if (connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0) {
perror("connect");
exit(EXIT_FAILURE);
}
char buffer[1024] = "GET / HTTP/1.1\r\nHost: 127.0.0.1\r\n\r\n";
send(sockfd, buffer, strlen(buffer), 0);
char response[1024];
int n = read(sockfd, response, sizeof(response));
if (n > 0) {
printf("Response: %s\n", response);
}
close(sockfd);
return 0;
}
实例26:多进程
多进程是C语言中的一个特性,它允许你同时执行多个独立的进程。以下是一个使用多进程的例子:
#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
void childProcess() {
printf("Child process: PID = %d\n", getpid());
}
void parentProcess() {
printf("Parent process: PID = %d\n", getpid());
pid_t pid = fork();
if (pid == 0) {
childProcess();
} else {
wait(NULL);
}
}
int main() {
parentProcess();
return 0;
}
实例27:文件加密
文件加密是C语言中的一个应用,它允许你保护敏感数据。以下是一个使用XOR加密的例子:
#include <stdio.h>
void encryptFile(const char *inputFilename, const char *outputFilename, const char *key) {
FILE *inputFile = fopen(inputFilename, "rb");
FILE *outputFile = fopen(outputFilename, "wb");
char ch;
while ((ch = fgetc(inputFile)) != EOF) {
fputc(ch ^ key[0], outputFile);
}
fclose(inputFile);
fclose(outputFile);
}
int main() {
encryptFile("input.txt", "encrypted.txt", "key");
return 0;
}
实例28:文件压缩
文件压缩是C语言中的一个应用,它允许你减小文件大小。以下是一个使用LZ77算法的例子:
#include <stdio.h>
void compressFile(const char *inputFilename, const char *outputFilename) {
FILE *inputFile = fopen(inputFilename, "rb");
FILE *outputFile = fopen(outputFilename, "wb");
char ch;
int count = 1;
while ((ch = fgetc(inputFile)) != EOF) {
if (ch == fgetc(inputFile)) {
count++;
} else {
if (count > 1) {
fprintf(outputFile, "%d ", count);
}
fputc(ch, outputFile);
count = 1;
}
}
fclose(inputFile);
fclose(outputFile);
}
int main() {
compressFile("input.txt", "compressed.txt");
return 0;
}
实例29:文件解压缩
文件解压缩是C语言中的一个应用,它允许你恢复压缩文件。以下是一个使用LZ77算法的例子:
#include <stdio.h>
void decompressFile(const char *inputFilename, const char *outputFilename) {
FILE *inputFile = fopen(inputFilename, "rb");
FILE *outputFile = fopen(outputFilename, "wb");
int count;
char ch;
while (fscanf(inputFile, "%d ", &count) == 1) {
for (int i = 0; i < count; i++) {
fputc(ch, outputFile);
}
ch = fgetc(inputFile);
}
fclose(inputFile);
fclose(outputFile);
}
int main() {
decompressFile("compressed.txt", "decompressed.txt");
return 0;
}
实例30:字符串搜索
字符串搜索是C语言中的一个应用,它允许你查找字符串中的特定子串。以下是一个使用KMP算法的例子:
”`c
#include
void KMPSearch(const char *txt, const char *pat) {
int M = strlen(pat);
int N = strlen(txt);
int lps[M];
int j = 0;
// Preprocess the pattern (calculate lps[] array)
computeLPSArray(pat, M, lps);
int i = 0; // index for txt[]
while (i < N) {
if (pat[j] == txt[i]) {
j++;
i++;
}
if (j == M) {
printf("Found pattern at index %d\n", i - j);
j = lps[j - 1];
}
// Mismatch after j matches
else if (i < N && pat[j] != txt[i]) {
// Do not match lps[0..lps[j-1]] characters,
// they will match anyway
if (j != 0)
j = lps[j - 1];
else
i = i + 1;
}
}
}
void computeLPSArray(const char *pat, int M, int lps[]) {
int len =
