初学玩转C语言,这17个小项目收下不谢("C语言入门必练:17个精选小项目助你轻松上手")
原创
一、引言
作为一门经典的编程语言,C语言因其简洁、高效、可移植性强等特点,一直是计算机编程学习的首选。本文将为你带来17个精选的C语言小项目,帮助你轻松上手C语言编程。
二、第一个项目:Hello World
最经典的入门项目,输出"Hello, World!"到控制台。
#include
int main() {
printf("Hello, World! ");
return 0;
}
三、第二个项目:数据类型和变量
学习基本数据类型(整型、浮点型、字符型)和变量的声明、赋值。
#include
int main() {
int a = 10;
float b = 3.14;
char c = 'A';
printf("整型:%d ", a);
printf("浮点型:%f ", b);
printf("字符型:%c ", c);
return 0;
}
四、第三个项目:运算符
学习算术运算符、关系运算符、逻辑运算符等。
#include
int main() {
int a = 10;
int b = 5;
printf("加法:%d ", a + b);
printf("减法:%d ", a - b);
printf("乘法:%d ", a * b);
printf("除法:%d ", a / b);
printf("取模:%d ", a % b);
return 0;
}
五、第四个项目:控制结构
学习if语句、for循环、while循环等。
#include
int main() {
int a = 10;
if (a > 0) {
printf("a 是正数 ");
} else if (a == 0) {
printf("a 是零 ");
} else {
printf("a 是负数 ");
}
for (int i = 0; i < 10; i++) {
printf("%d ", i);
}
printf(" ");
int j = 0;
while (j < 10) {
printf("%d ", j);
j++;
}
return 0;
}
六、第五个项目:数组
学习一维数组和二维数组的声明、初始化和遍历。
#include
int main() {
int arr[5] = {1, 2, 3, 4, 5};
int i, j;
// 遍历一维数组
for (i = 0; i < 5; i++) {
printf("%d ", arr[i]);
}
printf(" ");
// 声明并初始化二维数组
int arr2[3][3] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
// 遍历二维数组
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
printf("%d ", arr2[i][j]);
}
printf(" ");
}
return 0;
}
七、第六个项目:函数
学习函数的定义、声明和调用。
#include
// 函数声明
int add(int a, int b);
int main() {
int result = add(10, 5);
printf("导致是:%d ", result);
return 0;
}
// 函数定义
int add(int a, int b) {
return a + b;
}
八、第七个项目:指针
学习指针的基本概念、指针的声明和初始化。
#include
int main() {
int a = 10;
int *p = &a;
printf("变量a的值:%d ", a);
printf("变量a的地址:%p ", (void *)&a);
printf("指针p的值:%p ", (void *)p);
printf("指针p指向的值:%d ", *p);
return 0;
}
九、第八个项目:结构体
学习结构体的定义、声明和初始化。
#include
// 定义结构体
struct Person {
char name[50];
int age;
};
int main() {
struct Person person = {"张三", 20};
printf("姓名:%s ", person.name);
printf("年龄:%d ", person.age);
return 0;
}
十、第九个项目:文件操作
学习文件的打开、读写、关闭等操作。
#include
int main() {
FILE *file = fopen("example.txt", "w");
if (file == NULL) {
printf("文件打开挫败 ");
return 1;
}
fprintf(file, "Hello, World! ");
fclose(file);
file = fopen("example.txt", "r");
if (file == NULL) {
printf("文件打开挫败 ");
return 1;
}
char buffer[100];
while (fgets(buffer, 100, file) != NULL) {
printf("%s", buffer);
}
fclose(file);
return 0;
}
十一、第十个项目:排序算法
学习冒泡排序、选择排序等基本排序算法。
#include
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("排序后的数组:");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf(" ");
return 0;
}
十二、第十一个项目:字符串操作
学习字符串的创建、复制、连接等操作。
#include
#include
int main() {
char str1[100] = "Hello, ";
char str2[] = "World!";
// 字符串连接
strcat(str1, str2);
printf("连接后的字符串:%s ", str1);
// 字符串复制
char str3[100];
strcpy(str3, str1);
printf("复制后的字符串:%s ", str3);
// 字符串长度
int length = strlen(str1);
printf("字符串长度:%d ", length);
return 0;
}
十三、第十二个项目:递归函数
学习递归函数的定义和调用。
#include
int factorial(int n) {
if (n == 0) {
return 1;
} else {
return n * factorial(n - 1);
}
}
int main() {
int n = 5;
int result = factorial(n);
printf("阶乘:%d ", result);
return 0;
}
十四、第十三个项目:链表
学习链表的创建、插入、删除等操作。
#include
#include
// 定义链表节点
struct Node {
int data;
struct Node* next;
};
// 创建新节点
struct Node* createNode(int data) {
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->data = data;
newNode->next = NULL;
return newNode;
}
// 插入节点
void insertNode(struct Node** head, int data) {
struct Node* newNode = createNode(data);
newNode->next = *head;
*head = newNode;
}
// 删除节点
void deleteNode(struct Node** head, int data) {
struct Node* temp = *head;
struct Node* prev = NULL;
if (temp != NULL && temp->data == data) {
*head = temp->next;
free(temp);
return;
}
while (temp != NULL && temp->data != data) {
prev = temp;
temp = temp->next;
}
if (temp == NULL) {
return;
}
prev->next = temp->next;
free(temp);
}
int main() {
struct Node* head = NULL;
insertNode(&head, 10);
insertNode(&head, 20);
insertNode(&head, 30);
printf("链表:");
struct Node* temp = head;
while (temp != NULL) {
printf("%d ", temp->data);
temp = temp->next;
}
printf(" ");
deleteNode(&head, 20);
printf("删除后的链表:");
temp = head;
while (temp != NULL) {
printf("%d ", temp->data);
temp = temp->next;
}
printf(" ");
return 0;
}
十五、第十四个项目:动态内存分配
学习malloc、calloc、realloc和free等函数的使用。
#include
#include
int main() {
int *arr = (int*)malloc(5 * sizeof(int));
if (arr == NULL) {
printf("内存分配挫败 ");
return 1;
}
for (int i = 0; i < 5; i++) {
arr[i] = i;
}
printf("原始数组:");
for (int i = 0; i < 5; i++) {
printf("%d ", arr[i]);
}
printf(" ");
int *arr2 = (int*)realloc(arr, 10 * sizeof(int));
if (arr2 == NULL) {
printf("内存重新分配挫败 ");
free(arr);
return 1;
}
for (int i = 5; i < 10; i++) {
arr2[i] = i;
}
printf("扩展后的数组:");
for (int i = 0; i < 10; i++) {
printf("%d ", arr2[i]);
}
printf(" ");
free(arr2);
return 0;
}
十六、第十五个项目:进程和线程
学习创建进程和线程,了解进程和线程的区别。
#include
#include
#include
#include
void* threadFunction(void* arg) {
printf("线程运行中... ");
return NULL;
}
int main() {
// 创建进程
pid_t pid = fork();
if (pid == 0) {
// 子进程
printf("子进程运行中... ");
exit(0);
} else if (pid > 0) {
// 父进程
printf("父进程运行中... ");
// 创建线程
pthread_t thread;
if (pthread_create(&thread, NULL, threadFunction, NULL) != 0) {
printf("线程创建挫败 ");
return 1;
}
// 等待线程完成
pthread_join(thread, NULL);
printf("主线程完成 ");
} else {
printf("进程创建挫败 ");
return 1;
}
return 0;
}
十七、第十六个项目:网络编程
学习使用socket编程实现明了的客户端和服务端通信。
#include
#include
#include
#include
#include
#include
// 服务端
void server() {
int server_fd, new_socket;
struct sockaddr_in address;
int opt = 1;
int addrlen = sizeof(address);
char buffer[1024] = {0};
const char* hello = "Hello from server";
// 创建socket
if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
perror("socket failed");
exit(EXIT_FAILURE);
}
// 绑定socket
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");
exit(EXIT_FAILURE);
}
// 监听socket
if (listen(server_fd, 3) < 0) {
perror("listen");
exit(EXIT_FAILURE);
}
// 接受连接
if ((new_socket = accept(server_fd, (struct sockaddr*)&address, (socklen_t*)&addrlen))< 0) {
perror("accept");
exit(EXIT_FAILURE);
}
// 读取数据
read(new_socket, buffer, 1024);
printf("从客户端读取的数据:%s ", buffer);
// 发送数据
send(new_socket, hello, strlen(hello), 0);
printf("数据发送圆满 ");
// 关闭socket
close(server_fd);
close(new_socket);
}
// 客户端
void client() {
struct sockaddr_in address;
int sock = 0;
char buffer[1024] = {0};
const char* hello = "Hello from client";
// 创建socket
if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
printf(" Socket creation error ");
return;
}
// 绑定socket
address.sin_family = AF_INET;
address.sin_port = htons(8080);
if (inet_pton(AF_INET, "127.0.0.1", &address.sin_addr) <= 0) {
printf(" Invalid address/ Address not supported ");
return;
}
// 连接socket
if (connect(sock, (struct sockaddr*)&address, sizeof(address)) < 0) {
printf(" Connection Failed ");
return;
}
// 发送数据
send(sock, hello, strlen(hello), 0);
printf("数据发送圆满 ");
// 读取数据
read(sock, buffer, 1024);
printf("从服务端读取的数据:%s ", buffer);
// 关闭socket
close(sock);
}
int main() {
// 分别运行服务端和客户端
server();
client();
return 0;
}
十八、总结
通过以上17个精选小项目,相信你对C语言编程有了更深入的了解。逐步练习,逐渐节约自己的编程能力,C语言将成为你手中的利器。