初学玩转C语言,这17个小项目收下不谢("C语言入门必练:17个精选小项目助你轻松上手")

原创
ithorizon 7个月前 (10-20) 阅读数 10 #后端开发

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语言将成为你手中的利器。


本文由IT视界版权所有,禁止未经同意的情况下转发

文章标签: 后端开发


热门