案例一:打印“Hello, World!”
在C语言编程中,第一个学写的程序通常是打印“Hello, World!”。这个案例让你了解C语言的基本语法和程序结构。
#include <stdio.h>
int main() {
printf("Hello, World!\n");
return 0;
}
案例二:变量和赋值
学习如何声明和使用变量是C语言的基础。这个案例将教你如何声明整型、浮点型和字符型变量,并对其进行赋值。
#include <stdio.h>
int main() {
int a = 10;
float b = 3.14;
char c = 'A';
printf("整型变量a的值是:%d\n", a);
printf("浮点型变量b的值是:%f\n", b);
printf("字符型变量c的值是:%c\n", c);
return 0;
}
案例三:运算符
C语言提供了丰富的运算符,包括算术运算符、关系运算符和逻辑运算符。这个案例将帮助你熟悉这些运算符的使用。
#include <stdio.h>
int main() {
int a = 5, b = 3;
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);
printf("(a > b) && (a < b) = %d\n", (a > b) && (a < b));
return 0;
}
案例四:控制语句
C语言使用控制语句来控制程序的执行流程。这个案例将介绍if语句、switch语句和循环语句。
#include <stdio.h>
int main() {
int age = 18;
if (age >= 18) {
printf("你已经成年了。\n");
} else {
printf("你还未成年。\n");
}
int day = 2;
switch (day) {
case 1:
printf("今天是星期一。\n");
break;
case 2:
printf("今天是星期二。\n");
break;
default:
printf("未知星期。\n");
}
int i;
for (i = 1; i <= 5; i++) {
printf("循环变量i的值是:%d\n", i);
}
return 0;
}
案例五:数组
数组是C语言中的一种数据结构,用于存储相同类型的数据。这个案例将教你如何声明、初始化和使用数组。
#include <stdio.h>
int main() {
int numbers[5] = {1, 2, 3, 4, 5};
printf("数组元素0的值是:%d\n", numbers[0]);
printf("数组元素1的值是:%d\n", numbers[1]);
printf("数组元素2的值是:%d\n", numbers[2]);
printf("数组元素3的值是:%d\n", numbers[3]);
printf("数组元素4的值是:%d\n", numbers[4]);
return 0;
}
案例六:函数
函数是C语言中的核心概念,它允许你将代码封装成可重用的模块。这个案例将教你如何定义、声明和调用函数。
#include <stdio.h>
void printMessage() {
printf("这是一个函数。\n");
}
int main() {
printMessage();
return 0;
}
案例七:指针
指针是C语言中的另一个重要概念,它允许你直接访问内存地址。这个案例将教你如何声明、初始化和使用指针。
#include <stdio.h>
int main() {
int a = 10;
int *ptr = &a;
printf("变量a的值是:%d\n", a);
printf("指针ptr指向的值是:%d\n", *ptr);
return 0;
}
案例八:结构体
结构体是C语言中的一种复合数据类型,它允许你将多个不同类型的数据组合成一个单一的实体。这个案例将教你如何定义、声明和初始化结构体。
#include <stdio.h>
struct Person {
char name[50];
int age;
float height;
};
int main() {
struct Person person;
strcpy(person.name, "张三");
person.age = 18;
person.height = 1.75;
printf("姓名:%s\n", person.name);
printf("年龄:%d\n", person.age);
printf("身高:%f\n", person.height);
return 0;
}
案例九:文件操作
文件操作是C语言中的一项重要功能,它允许你读写文件。这个案例将教你如何使用标准库函数进行文件操作。
#include <stdio.h>
int main() {
FILE *fp;
char filename[] = "example.txt";
char buffer[100];
fp = fopen(filename, "w");
if (fp == NULL) {
printf("打开文件失败。\n");
return 1;
}
fprintf(fp, "这是一个示例文件。\n");
fclose(fp);
fp = fopen(filename, "r");
if (fp == NULL) {
printf("打开文件失败。\n");
return 1;
}
while (fgets(buffer, sizeof(buffer), fp)) {
printf("%s", buffer);
}
fclose(fp);
return 0;
}
案例十:动态内存分配
动态内存分配是C语言中的一项高级功能,它允许你在程序运行时动态地分配和释放内存。这个案例将教你如何使用malloc、calloc和free函数。
#include <stdio.h>
#include <stdlib.h>
int main() {
int *numbers;
int size = 5;
numbers = (int *)malloc(size * sizeof(int));
if (numbers == NULL) {
printf("内存分配失败。\n");
return 1;
}
for (int i = 0; i < size; i++) {
numbers[i] = i + 1;
}
for (int i = 0; i < size; i++) {
printf("numbers[%d] = %d\n", i, numbers[i]);
}
free(numbers);
return 0;
}
案例十一:字符串处理
字符串处理是C语言中的一项重要功能,它允许你对字符串进行各种操作。这个案例将教你如何使用标准库函数进行字符串处理。
#include <stdio.h>
#include <string.h>
int main() {
char str1[] = "Hello";
char str2[] = "World";
char result[100];
strcpy(result, str1);
strcat(result, str2);
printf("result = %s\n", result);
int length = strlen(result);
printf("result的长度 = %d\n", length);
return 0;
}
案例十二:标准输入输出
标准输入输出是C语言中最常用的功能之一,它允许你从键盘读取输入并输出到屏幕。这个案例将教你如何使用printf和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\n", a);
printf("你输入的浮点数是:%f\n", b);
printf("你输入的字符是:%c\n", c);
return 0;
}
案例十三:时间处理
时间处理是C语言中的一项实用功能,它允许你获取和操作时间。这个案例将教你如何使用time.h头文件中的函数。
#include <stdio.h>
#include <time.h>
int main() {
time_t t = time(NULL);
struct tm tm = *localtime(&t);
printf("当前时间:%d年%d月%d日 %d时%d分%d秒\n", tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec);
return 0;
}
案例十四:网络编程
网络编程是C语言中的一项高级功能,它允许你编写网络应用程序。这个案例将教你如何使用socket编程。
#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(80);
servaddr.sin_addr.s_addr = inet_addr("www.example.com");
connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));
char buffer[1024];
int n = read(sockfd, buffer, sizeof(buffer));
printf("接收到的数据:%s\n", buffer);
close(sockfd);
return 0;
}
案例十五:图形界面编程
图形界面编程是C语言中的一项高级功能,它允许你创建图形界面应用程序。这个案例将教你如何使用GTK库进行图形界面编程。
#include <gtk/gtk.h>
int main() {
GtkWidget *window;
GtkWidget *label;
gtk_init(NULL, NULL);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window), "图形界面示例");
gtk_window_set_default_size(GTK_WINDOW(window), 200, 100);
g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
label = gtk_label_new("Hello, World!");
gtk_container_add(GTK_CONTAINER(window), label);
gtk_widget_show_all(window);
gtk_main();
return 0;
}
案例十六:多线程编程
多线程编程是C语言中的一项高级功能,它允许你同时执行多个线程。这个案例将教你如何使用pthread库进行多线程编程。
#include <stdio.h>
#include <pthread.h>
void *threadFunction(void *arg) {
printf("线程ID:%ld\n", pthread_self());
return NULL;
}
int main() {
pthread_t thread1, thread2;
pthread_create(&thread1, NULL, threadFunction, NULL);
pthread_create(&thread2, NULL, threadFunction, NULL);
pthread_join(thread1, NULL);
pthread_join(thread2, NULL);
return 0;
}
案例十七:网络编程(HTTP客户端)
网络编程是C语言中的一项重要功能,它允许你编写网络应用程序。这个案例将教你如何使用libcurl库进行HTTP客户端编程。
#include <stdio.h>
#include <curl/curl.h>
int main() {
CURL *curl;
CURLcode res;
curl_global_init(CURL_GLOBAL_ALL);
curl = curl_easy_init();
if (curl) {
curl_easy_setopt(curl, CURLOPT_URL, "http://www.example.com");
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, NULL);
curl_easy_perform(curl);
curl_easy_cleanup(curl);
}
curl_global_cleanup();
return 0;
}
案例十八:网络编程(HTTP服务器)
网络编程是C语言中的一项重要功能,它允许你编写网络应用程序。这个案例将教你如何使用libevent库进行HTTP服务器编程。
#include <stdio.h>
#include <event.h>
#include <evhttp.h>
void request_handler(struct evhttp_request *req, void *arg) {
struct evbuffer *buf = evbuffer_new();
evbuffer_add_printf(buf, "HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\n\r\nHello, World!");
evhttp_send_reply(req, HTTP_OK, "OK", buf);
evbuffer_free(buf);
}
int main() {
struct event_base *base;
struct evhttp *http;
struct evhttp_bound_socket *handle;
base = event_base_new();
http = evhttp_new(base);
if (!http) {
fprintf(stderr, "Failed to create evhttp\n");
return 1;
}
handle = evhttp_bind_socket(http, "0.0.0.0", 8080);
if (!handle) {
fprintf(stderr, "Failed to bind to 8080\n");
return 1;
}
evhttp_set_gencb(http, request_handler, NULL);
event_base_dispatch(base);
evhttp_free(http);
event_base_free(base);
return 0;
}
案例十九:文件系统操作
文件系统操作是C语言中的一项重要功能,它允许你管理文件和目录。这个案例将教你如何使用标准库函数进行文件系统操作。
#include <stdio.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
int main() {
int ret;
struct stat st;
// 创建目录
ret = mkdir("test_dir", 0777);
if (ret == -1) {
perror("mkdir");
return 1;
}
// 删除目录
ret = rmdir("test_dir");
if (ret == -1) {
perror("rmdir");
return 1;
}
// 创建文件
FILE *fp = fopen("test_file.txt", "w");
if (fp == NULL) {
perror("fopen");
return 1;
}
fprintf(fp, "Hello, World!");
fclose(fp);
// 删除文件
ret = unlink("test_file.txt");
if (ret == -1) {
perror("unlink");
return 1;
}
// 获取文件信息
ret = stat("test_dir", &st);
if (ret == 0) {
printf("test_dir的大小:%ld\n", st.st_size);
} else {
perror("stat");
return 1;
}
return 0;
}
案例二十:数据库编程
数据库编程是C语言中的一项重要功能,它允许你访问和管理数据库。这个案例将教你如何使用SQLite进行数据库编程。
#include <stdio.h>
#include <sqlite3.h>
int main() {
sqlite3 *db;
char *err_msg = 0;
int rc;
rc = sqlite3_open("test.db", &db);
if (rc != SQLITE_OK) {
fprintf(stderr, "无法打开数据库:%s\n", sqlite3_errmsg(db));
sqlite3_close(db);
return 1;
}
char *sql = "CREATE TABLE IF NOT EXISTS test_table (id INTEGER PRIMARY KEY, name TEXT);";
rc = sqlite3_exec(db, sql, 0, 0, &err_msg);
if (rc != SQLITE_OK) {
fprintf(stderr, "无法执行SQL语句:%s\n", err_msg);
sqlite3_free(err_msg);
sqlite3_close(db);
return 1;
}
sqlite3_close(db);
return 0;
}
案例二十一:加密和解密
加密和解密是C语言中的一项重要功能,它允许你保护敏感数据。这个案例将教你如何使用OpenSSL库进行加密和解密。
#include <stdio.h>
#include <openssl/evp.h>
#include <openssl/rand.h>
int main() {
unsigned char key[16];
unsigned char iv[16];
unsigned char input[] = "Hello, World!";
unsigned char output[1024];
EVP_CIPHER_CTX ctx;
int len, output_len;
RAND_bytes(key, sizeof(key));
RAND_bytes(iv, sizeof(iv));
EVP_CIPHER_CTX_init(&ctx);
EVP_EncryptInit_ex(&ctx, EVP_aes_256_cbc(), NULL, key, iv);
EVP_EncryptUpdate(&ctx, output, &len, input, sizeof(input));
output_len = len;
EVP_EncryptFinal_ex(&ctx, output + len, &len);
output_len += len;
EVP_CIPHER_CTX_cleanup(&ctx);
printf("加密后的数据:%s\n", output);
EVP_CIPHER_CTX_init(&ctx);
EVP_DecryptInit_ex(&ctx, EVP_aes_256_cbc(), NULL, key, iv);
EVP_DecryptUpdate(&ctx, output, &len, output, output_len);
EVP_DecryptFinal_ex(&ctx, output + len, &len);
output_len += len;
EVP_CIPHER_CTX_cleanup(&ctx);
printf("解密后的数据:%s\n", output);
return 0;
}
案例二十二:网络编程(TCP客户端)
网络编程是C语言中的一项重要功能,它允许你编写网络应用程序。这个案例将教你如何使用socket编程实现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");
connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));
char buffer[1024];
printf("请输入要发送的消息:");
fgets(buffer, sizeof(buffer), stdin);
send(sockfd, buffer, strlen(buffer), 0);
close(sockfd);
return 0;
}
案例二十三:网络编程(TCP服务器)
网络编程是C语言中的一项重要功能,它允许你编写网络应用程序。这个案例将教你如何使用socket编程实现TCP服务器。
”`c
#include
int main() {
int sockfd, newsockfd;
socklen_t clilen;
struct sockaddr_in servaddr, cliaddr;
char buffer[1024];
sockfd = socket(AF_INET,
