1. 案例一:C语言基础语法入门
1.1 数据类型
在C语言中,数据类型包括整型、浮点型、字符型等。以下是一个整型变量的定义和赋值示例:
#include <stdio.h>
int main() {
int age = 25;
printf("年龄:%d\n", age);
return 0;
}
1.2 变量声明和初始化
变量的声明和初始化是C语言编程的基础。以下是一个变量的声明和初始化示例:
int num; // 声明一个整型变量
num = 10; // 初始化变量
2. 案例二:C语言运算符
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);
return 0;
}
3. 案例三:C语言控制语句
控制语句包括条件语句(if、switch)、循环语句(for、while、do-while)等。以下是一个条件语句的示例:
#include <stdio.h>
int main() {
int num = 10;
if (num > 5) {
printf("num 大于 5\n");
} else {
printf("num 小于等于 5\n");
}
return 0;
}
4. 案例四:C语言数组操作
数组是C语言中常用的数据结构之一。以下是一个数组的定义、初始化和遍历示例:
#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. 案例五:C语言指针
指针是C语言中的核心概念之一。以下是一个指针的定义、赋值和访问示例:
#include <stdio.h>
int main() {
int a = 10;
int *ptr = &a; // 指针ptr指向变量a的地址
printf("a 的值:%d\n", a);
printf("*ptr 的值:%d\n", *ptr);
return 0;
}
6. 案例六:C语言函数
函数是C语言程序模块化的基础。以下是一个函数的定义、声明和调用示例:
#include <stdio.h>
// 函数声明
void printHello();
int main() {
// 调用函数
printHello();
return 0;
}
// 函数定义
void printHello() {
printf("Hello, World!\n");
}
7. 案例七:C语言结构体
结构体是C语言中用于创建自定义数据类型的复杂数据结构。以下是一个结构体的定义、声明和初始化示例:
#include <stdio.h>
// 结构体定义
struct Student {
char name[50];
int age;
};
int main() {
// 结构体声明
struct Student stu;
// 结构体初始化
strcpy(stu.name, "张三");
stu.age = 20;
printf("学生姓名:%s,年龄:%d\n", stu.name, stu.age);
return 0;
}
8. 案例八:C语言文件操作
文件操作是C语言中常见的功能之一。以下是一个文件打开、读取、关闭的示例:
#include <stdio.h>
int main() {
FILE *fp;
char buffer[100];
// 打开文件
fp = fopen("example.txt", "r");
if (fp == NULL) {
printf("文件打开失败\n");
return -1;
}
// 读取文件内容
while (fgets(buffer, sizeof(buffer), fp)) {
printf("%s", buffer);
}
// 关闭文件
fclose(fp);
return 0;
}
9. 案例九:C语言动态内存分配
动态内存分配是C语言中管理内存的重要手段。以下是一个动态内存分配的示例:
#include <stdio.h>
#include <stdlib.h>
int main() {
int *ptr = (int *)malloc(sizeof(int) * 5);
if (ptr == NULL) {
printf("内存分配失败\n");
return -1;
}
// 使用动态分配的内存
for (int i = 0; i < 5; i++) {
ptr[i] = i + 1;
}
// 释放动态分配的内存
free(ptr);
return 0;
}
10. 案例十:C语言网络编程
网络编程是C语言中较为高级的应用。以下是一个简单的TCP客户端示例:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
int main() {
int sock;
struct sockaddr_in server_addr;
char buffer[100];
// 创建套接字
sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock < 0) {
printf("创建套接字失败\n");
return -1;
}
// 设置服务器地址
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(8080);
server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
// 连接服务器
if (connect(sock, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
printf("连接服务器失败\n");
return -1;
}
// 发送数据
strcpy(buffer, "Hello, server!");
send(sock, buffer, strlen(buffer), 0);
// 接收数据
recv(sock, buffer, sizeof(buffer), 0);
printf("从服务器接收到的数据:%s\n", buffer);
// 关闭套接字
close(sock);
return 0;
}
11. 案例十一:C语言字符串处理
字符串处理是C语言中常见的功能之一。以下是一个字符串连接的示例:
#include <stdio.h>
#include <string.h>
int main() {
char str1[100] = "Hello, ";
char str2[] = "World!";
char str3[200];
// 字符串连接
strcpy(str3, str1);
strcat(str3, str2);
printf("连接后的字符串:%s\n", str3);
return 0;
}
12. 案例十二:C语言时间处理
时间处理是C语言中常用的功能之一。以下是一个获取当前时间的示例:
#include <stdio.h>
#include <time.h>
int main() {
time_t now;
struct tm *tm_info;
// 获取当前时间
time(&now);
tm_info = localtime(&now);
// 打印时间
printf("当前时间:%d-%d-%d %d:%d:%d\n", tm_info->tm_year + 1900, tm_info->tm_mon + 1, tm_info->tm_mday, tm_info->tm_hour, tm_info->tm_min, tm_info->tm_sec);
return 0;
}
13. 案例十三:C语言图形编程
图形编程是C语言中较为高级的应用。以下是一个使用OpenGL绘制矩形的示例:
#include <GL/glut.h>
void display() {
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_POLYGON);
glVertex2f(-0.5f, -0.5f);
glVertex2f(0.5f, -0.5f);
glVertex2f(0.5f, 0.5f);
glVertex2f(-0.5f, 0.5f);
glEnd();
glFlush();
}
int main(int argc, char **argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(400, 400);
glutInitWindowPosition(100, 100);
glutCreateWindow("OpenGL Example");
glClearColor(1.0, 1.0, 1.0, 1.0);
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
14. 案例十四:C语言加密算法
加密算法是C语言中常用的安全手段之一。以下是一个简单的凯撒密码加密算法的示例:
#include <stdio.h>
#include <string.h>
void caesarCipher(char *input, char *output, int shift) {
int i;
for (i = 0; input[i] != '\0'; i++) {
if ((input[i] >= 'a' && input[i] <= 'z') || (input[i] >= 'A' && input[i] <= 'Z')) {
output[i] = input[i] + shift;
if ((input[i] >= 'a' && input[i] <= 'z' && output[i] > 'z') || (input[i] >= 'A' && input[i] <= 'Z' && output[i] > 'Z')) {
output[i] -= 26;
}
} else {
output[i] = input[i];
}
}
output[i] = '\0';
}
int main() {
char input[] = "Hello, World!";
char output[100];
caesarCipher(input, output, 3);
printf("加密后的字符串:%s\n", output);
return 0;
}
15. 案例十五:C语言排序算法
排序算法是C语言中常见的算法之一。以下是一个冒泡排序算法的示例:
#include <stdio.h>
void bubbleSort(int *arr, int len) {
int i, j, temp;
for (i = 0; i < len - 1; i++) {
for (j = 0; j < len - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
int main() {
int arr[] = {5, 3, 8, 6, 2};
int len = sizeof(arr) / sizeof(arr[0]);
bubbleSort(arr, len);
printf("排序后的数组:");
for (int i = 0; i < len; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
16. 案例十六:C语言查找算法
查找算法是C语言中常见的算法之一。以下是一个线性查找算法的示例:
#include <stdio.h>
int linearSearch(int *arr, int len, int target) {
for (int i = 0; i < len; i++) {
if (arr[i] == target) {
return i;
}
}
return -1;
}
int main() {
int arr[] = {5, 3, 8, 6, 2};
int len = sizeof(arr) / sizeof(arr[0]);
int target = 6;
int index = linearSearch(arr, len, target);
if (index != -1) {
printf("找到目标:%d\n", target);
} else {
printf("未找到目标:%d\n", target);
}
return 0;
}
17. 案例十七:C语言递归算法
递归算法是C语言中常见的算法之一。以下是一个计算阶乘的递归算法示例:
#include <stdio.h>
long long factorial(int n) {
if (n == 0) {
return 1;
} else {
return n * factorial(n - 1);
}
}
int main() {
int n = 5;
printf("%d 的阶乘:%lld\n", n, factorial(n));
return 0;
}
18. 案例十八:C语言链表操作
链表是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);
if (*head == NULL) {
*head = newNode;
} else {
Node *temp = *head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = newNode;
}
}
// 删除链表节点
void deleteNode(Node **head, int data) {
Node *temp = *head, *prev = NULL;
while (temp != NULL && temp->data != data) {
prev = temp;
temp = temp->next;
}
if (temp == NULL) {
printf("未找到要删除的节点\n");
return;
}
if (prev == NULL) {
*head = temp->next;
} else {
prev->next = temp->next;
}
free(temp);
}
// 遍历链表
void traverseList(Node *head) {
Node *temp = head;
while (temp != NULL) {
printf("%d ", temp->data);
temp = temp->next;
}
printf("\n");
}
int main() {
Node *head = NULL;
insertNode(&head, 10);
insertNode(&head, 20);
insertNode(&head, 30);
insertNode(&head, 40);
printf("链表元素:");
traverseList(head);
deleteNode(&head, 20);
printf("删除后的链表元素:");
traverseList(head);
return 0;
}
19. 案例十九:C语言栈操作
栈是一种后进先出(LIFO)的数据结构。以下是一个栈的创建、入栈、出栈和判空示例:
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
// 定义栈结构
typedef struct Stack {
int data[MAX_SIZE];
int top;
} Stack;
// 创建栈
void createStack(Stack *s) {
s->top = -1;
}
// 入栈
void push(Stack *s, int data) {
if (s->top == MAX_SIZE - 1) {
printf("栈已满\n");
return;
}
s->data[++s->top] = data;
}
// 出栈
int pop(Stack *s) {
if (s->top == -1) {
printf("栈为空\n");
return -1;
}
return s->data[s->top--];
}
// 判空
int isEmpty(Stack *s) {
return s->top == -1;
}
int main() {
Stack s;
createStack(&s);
push(&s, 10);
push(&s, 20);
push(&s, 30);
printf("栈元素:");
while (!isEmpty(&s)) {
printf("%d ", pop(&s));
}
printf("\n");
return 0;
}
20. 案例二十:C语言队列操作
队列是一种先进先出(FIFO)的数据结构。以下是一个队列的创建、入队、出队和判空示例:
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
// 定义队列结构
typedef struct Queue {
int data[MAX_SIZE];
int front;
int rear;
} Queue;
// 创建队列
void createQueue(Queue *q) {
q->front = q->rear = -1;
}
// 入队
void enqueue(Queue *q, int data) {
if ((q->rear + 1) % MAX_SIZE == q->front) {
printf("队列已满\n");
return;
}
if (q->rear == -1) {
q->front = q->rear = 0;
} else {
q->rear = (q->rear + 1) % MAX_SIZE;
}
q->data[q->rear] = data;
}
// 出队
int dequeue(Queue *q) {
if (q->rear == -1) {
printf("队列已空\n");
return -1;
}
if (q->rear == q->front) {
q->front = q->rear = -1;
} else {
q->front = (q->front + 1) % MAX_SIZE;
}
return q->data[q->front];
}
// 判空
int isEmpty(Queue *q) {
return q->rear == -1;
}
int main() {
Queue q;
createQueue(&q);
enqueue(&q, 10);
enqueue(&q, 20);
enqueue(&q, 30);
printf("队列元素:");
while (!isEmpty(&q)) {
printf("%d ", dequeue(&q));
}
printf("\n");
return 0;
}
21. 案例二十一:C语言散列表
散列表(哈希表)是一种高效的查找和存储数据的数据结构。以下是一个简单的散列表的创建、插入、删除和查找示例:
“`c
#include
#define TABLE
