当前位置: 首页 > news >正文

c语言练习题【数据类型、递归、双向链表快速排序】

练习1:数据类型

请写出以下几个数据的数据类型

整数 a
a 的地址
存放a的数组 b
存放a的地址的数组
b的地址
c的地址
指向 printf 函数的指针 d
存放 d的数组

  1. 整数 a 的类型
    数据类型是 int

  2. a 的地址
    数据类型是 int*(指向 int 类型的指针)

  3. 存放 a 的数组 b
    数据类型是 int[](整型数组)

  4. 存放 a 的地址的数组 c
    数据类型是 int*[](指针数组,每个元素是指向 int 的指针)
    c的数据类型是指针数组类型,可以表示为:int * c[ ] = {&a};

  5. b 的地址
    指向整型数组的指针
    b的数据类型是 int(*)[](数组指针),b 的地址可以表示为: b, &b, &b[0]

  6. c 的地址
    数据类型是 int*(*)[](指向指针数组的指针)

  7. 指向 printf 函数的指针 d
    printf 函数的类型是 int(*)(const char*, ...)d 的数据类型是 int(*)(const char*, ...)

  8. 存放 d 的数组
    数据类型是 int(*[])(const char*, ...)(函数指针数组,每个元素是指向 printf 函数的指针)。

    #include <stdio.h>int main() {// 打印 "Hello, World!" 到控制台printf("Hello, World!\n");// 定义一个整型变量 a,并初始化为 10int a = 10;// 打印变量 a 的地址printf("a的地址是:%p\n", &a);// 定义一个整型数组 b,并将 a 的值存入数组中int b[] = {a};// 定义一个整型指针 c,并将 a 的地址赋值给它int * c[] = {&a};// 下面的注释是对 b 和 c 的说明// b, &b, &b[0]; // b 是数组名,&b 是数组的地址,&b[0] 是数组第一个元素的地址// c, &c, &c[0]; // c 是指针,&c 是指针的地址,&c[0] 是指针指向的第一个元素的地址// 定义一个指向 printf 函数的指针 funcs_dint (*funcs_d)(const char*, ...) = printf; // 指向printf函数的指针// 定义一个数组 d,存放指向 printf 函数的指针int (*d[])(const char*, ...) = {printf}; // 存放指向printf函数的指针的数组return 0; // 返回 0,表示程序正常结束
    }

 练习2:递归

请用递归实现计算:1+1/3-1/5+1/7-1/9+…. 1/n 的值,n通过键盘输入

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <pthread.h>
#include <semaphore.h>
#include <wait.h>
#include <signal.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <semaphore.h>
#include <sys/msg.h>
#include <sys/shm.h>
#include <sys/un.h>typedef struct sockaddr_in addr_in_t;
typedef struct sockaddr addr_t;
typedef struct sockaddr_un addr_un_t;double  rec_add(int n)
{double sum=0;if (n==1){return 1;}else{double sum=1.0/n;if ((n/2)%2==0){return sum+rec_add(n-2);}else{return -sum+rec_add(n-2);	}}return sum;
}int main(int argc, const char *argv[])
{int n=0;printf("输入n(奇数):");scanf("%d",&n);if (n<=0 ||n%2==0){printf("重新输入一个正奇数\n");return 1;}double  result=rec_add(n);printf("result=%f\n",result);return 0;
}

练习3:写一个双向链表的快速排序函数

#include <stdio.h>
#include <stdlib.h>// 双向链表节点结构体
typedef struct Node {int data;struct Node *prev;struct Node *next;
} Node;// 创建新的节点
Node* create_node(int data) {Node *new_node = (Node*)malloc(sizeof(Node));new_node->data = data;new_node->prev = new_node->next = NULL;return new_node;
}// 在链表尾部插入节点
void append(Node **head, int data) {Node *new_node = create_node(data);if (*head == NULL) {*head = new_node;} else {Node *temp = *head;while (temp->next != NULL) {temp = temp->next;}temp->next = new_node;new_node->prev = temp;}
}// 打印链表
void print_list(Node *head) {Node *temp = head;while (temp != NULL) {printf("%d ", temp->data);temp = temp->next;}printf("\n");
}// 切分链表并返回基准节点
Node* partition(Node *low, Node *high) {int pivot = high->data;Node *i = low->prev;Node *j = low;while (j != high) {if (j->data <= pivot) {i = (i == NULL) ? low : i->next;int temp = i->data;i->data = j->data;j->data = temp;}j = j->next;}i = (i == NULL) ? low : i->next;int temp = i->data;i->data = high->data;high->data = temp;return i;
}// 快速排序递归函数
void quick_sort(Node *low, Node *high) {if (low != NULL && high != NULL && low != high && low != high->next) {Node *p = partition(low, high);quick_sort(low, p->prev);quick_sort(p->next, high);}
}// 获取链表的最后一个节点
Node* get_tail(Node *head) {while (head != NULL && head->next != NULL) {head = head->next;}return head;
}int main() {Node *head = NULL;// 插入一些数据到链表append(&head, 5);append(&head, 3);append(&head, 8);append(&head, 4);append(&head, 1);append(&head, 7);printf("Original list: ");print_list(head);Node *tail = get_tail(head);// 执行快速排序quick_sort(head, tail);printf("Sorted list: ");print_list(head);return 0;
}

http://www.lryc.cn/news/531024.html

相关文章:

  • SliverAppBar的功能和用法
  • 五、定时器实现呼吸灯
  • Elasticsearch的索引生命周期管理
  • 【大模型理论篇】最近大火的DeepSeek-R1初探系列1
  • 【数据结构】(4) 线性表 List
  • 【C++ STL】vector容器详解:从入门到精通
  • OpenAI推出Deep Research带给我们怎样的启示
  • 洛谷[USACO08DEC] Patting Heads S
  • CSS 溢出内容处理:从基础到实战
  • Spring Boot项目如何使用MyBatis实现分页查询
  • 飞行汽车中的无刷外转子电机、人形机器人中的无框力矩电机技术解析与应用
  • FreeRTOS学习 --- 队列集
  • 【R语言】R语言安装包的相关操作
  • 15.[前端开发]Day15-HTML+CSS阶段练习(网易云音乐四)
  • 【基于SprintBoot+Mybatis+Mysql】电脑商城项目之用户登录
  • 测试方案和测试计划相同点和不同点
  • c++提取矩形区域图像的梯度并拟合直线
  • Unity Shader Graph 2D - 角色身体电流覆盖效果
  • 【LLM-agent】(task4)搜索引擎Agent
  • 携程Java开发面试题及参考答案 (200道-下)
  • GWO优化SVM回归预测matlab
  • QMK启用摇杆和鼠标按键功能
  • Unity实现按键设置功能代码
  • 基于物联网技术的实时数据流可视化研究(论文+源码)
  • list容器(详解)
  • Elasticsearch基本使用详解
  • 17.3.4 颜色矩阵
  • FPGA 时钟多路复用
  • 机器学习10
  • 【Block总结】CoT,上下文Transformer注意力|即插即用