要求:

1、编写程序,实现如下功能。

(1)随机生成 1000000 个 0~1 之间的数;

(2)统计分析这些数据,计算均值、方差和分布情况,分布情况按

0.01 的步长进行统计;

(3)使用内存映射,将这些数及计算的均值、方差及分布情况写入

文件,同时将结果在终端显示;

随机数的存放要求使用动态内存分配的方式,注意内存的释放。

代码实现:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <unistd.h>#define NUM_SAMPLES 1000000
#define STEP_SIZE 0.01
#define NUM_BINS (int)(1.0 / STEP_SIZE)double calculate_mean(double *data, int size) {//计算数组的平均值double sum = 0.0;for (int i = 0; i < size; i++) {sum += data[i];}return sum / size;
}double calculate_variance(double *data, int size, double mean) {//计算数组的方差double sum = 0.0;for (int i = 0; i < size; i++) {sum += (data[i] - mean) * (data[i] - mean);}return sum / size;
}void calculate_distribution(double *data, int size, int *distribution) {//根据步长统计数组的分布情况for (int i = 0; i < size; i++) {int bin = (int)(data[i] / STEP_SIZE);if (bin < NUM_BINS) {distribution[bin]++;}}
}int main() {srand(time(NULL));double *data = (double *)malloc(NUM_SAMPLES * sizeof(double));if (data == NULL) {perror("Failed to allocate memory for data");exit(EXIT_FAILURE);}for (int i = 0; i < NUM_SAMPLES; i++) {data[i] = ((double)rand() / RAND_MAX);}double mean = calculate_mean(data, NUM_SAMPLES);double variance = calculate_variance(data, NUM_SAMPLES, mean);int *distribution = (int *)calloc(NUM_BINS, sizeof(int));if (distribution == NULL) {perror("Failed to allocate memory for distribution");free(data);exit(EXIT_FAILURE);}calculate_distribution(data, NUM_SAMPLES, distribution);printf("Mean: %lf\n", mean);printf("Variance: %lf\n", variance);printf("Distribution:\n");for (int i = 0; i < NUM_BINS; i++) {printf("[%lf, %lf): %d\n", i * STEP_SIZE, (i + 1) * STEP_SIZE, distribution[i]);}int fd = open("output.dat", O_RDWR | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR);if (fd == -1) {perror("Failed to open file for memory mapping");free(data);free(distribution);exit(EXIT_FAILURE);}off_t file_size = (NUM_SAMPLES * sizeof(double)) + (NUM_BINS * sizeof(int)) + (2 * sizeof(double)); // Data + Distribution + Mean + Varianceif (ftruncate(fd, file_size) == -1) {perror("Failed to resize file");close(fd);free(data);free(distribution);exit(EXIT_FAILURE);}void *map = mmap(NULL, file_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);if (map == MAP_FAILED) {perror("Failed to memory map file");close(fd);free(data);free(distribution);exit(EXIT_FAILURE);}double *mapped_data = (double *)map;int *mapped_distribution = (int *)((char *)map + (NUM_SAMPLES * sizeof(double)));double *mapped_mean = (double *)((char *)map + (NUM_SAMPLES * sizeof(double)) + (NUM_BINS * sizeof(int)));double *mapped_variance = mapped_mean + 1;memcpy(mapped_data, data, NUM_SAMPLES * sizeof(double));memcpy(mapped_distribution, distribution, NUM_BINS * sizeof(int));*mapped_mean = mean;*mapped_variance = variance;close(fd);munmap(map, file_size);free(data);free(distribution);return 0;
}

运行结果:

创建并保存程序文件

使用gcc编译程序生成可执行文件:在使用gcc编译的过程中我遇到了无法编译的情况,gcc 没有使用 C99 标准来编译代码,而是使用了更旧的 C 标准,在其中添加-std解决了问题。

运行该程序得出结果:多次运行后产生的随机数服从均匀分布。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/88335.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/88335.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/88335.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

苍穹外卖—day1

文章目录前言一、接口文档导入与生成二、前端环境搭建三、后端环境搭建1. 了解项目结构2. 环境搭建常见问题总结前言 &#xff08;简要说明笔记的目的&#xff1a;记录搭建过程、关键配置和结构理解&#xff09; 一、接口文档导入与生成 Apifox 导入 使用工具&#xff1a;https…

基于微信小程序的在线疫苗预约小程序源码+论文

基于微信小程序的在线疫苗预约系统源码论文代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339; 分享万套开题报告任务书答辩PPT模板 作者完整代码目录供你选择&#xff1a; 《SpringBoot网站项目》800套 《SSM网站项目》1200套 《小程序项目》600套…

Windows 11 安装过程中跳过微软账户创建本地账户

背景 在 Windows 11 的安装和设置过程中&#xff0c;Microsoft 账号登录是默认的认证方式。然而&#xff0c;在某些情况下&#xff0c;可能需要绕过此步骤以创建本地账户。 微软在 2025 年 3 月推送的 Windows 11 预览版&#xff08;Build 26120.3653 和 Build 26200.5516&am…

利用DBeaver实现异构数据库数据定时任务同步

1、背景 本需求需要实现抽取KingBaseEs数据库的某几张表数据&#xff0c;定时同步到MySQL中 2、工具准备 2.1 DBeaverEE25.1(必须要企业版&#xff0c;如果用社区版没有定时任务功能) https://dbeaver.io/download/ 2.2 KingBaseEs数据库及驱动 https://www.kingbase.com…

【TCP/IP】1. 概述

1. 概述1. 概述1.1 因特网及技术催生新时代1.1.1 信息化时代1.1.2 关键技术1.1.3 国家战略1.2 网络互联的动机和技术1.2.1 网络互联的动机1.2.2 网络互联技术1.3 因特网的形成和发展1.3.1 国际因特网发展轨迹1.3.2 中国互联网发展1.4 有关因特网的组织机构1.5 请求注解&#xf…

中老年人的陪伴,猫咪与机器人玩具有什么区别?

在人口结构深度老龄化的背景下&#xff0c;中老年群体的精神需求与情感陪伴已成为重要的社会议题。猫咪作为活生生的伴侣动物&#xff0c;与日新月异的智能陪伴机器人&#xff0c;代表了两种截然不同的情感慰藉路径——前者承载着生命互动的温度与责任&#xff0c;后者则彰显了…

day11-微服务面试篇

微服务在面试时被问到的内容相对较少&#xff0c;常见的面试题如下&#xff1a;SpringCloud有哪些常用组件&#xff1f;分别是什么作用&#xff1f;服务注册发现的基本流程是怎样的&#xff1f;Eureka和Nacos有哪些区别&#xff1f;Nacos的分级存储模型是什么意思&#xff1f;R…

昇腾 k8s vnpu配置

参考文档: https://www.hiascend.com/document/detail/zh/mindx-dl/500/AVI/cpaug/cpaug_018.html 此文档实现为NPU910B3卡 主机设置静态虚拟npu 设置虚拟化模式 &#xff01;本命令只支持再物理机执行&#xff0c;取值为0或1&#xff0c;&#xff08;如果是在虚拟机内划分vNPU…

Redis常用数据结构以及多并发场景下的使用分析:Set类型

文章目录前言redis中的set结构疑问1 &#xff1a;为什么使用数组后 整体时间复杂度还是O(1)疑问2&#xff1a; set特性是无序的那为什么当元素少的时候 用连续数组 去存储呢&#xff1f;疑问3&#xff1a;当元素少于512的时候即使用intset存储的时候 是如何维护唯一性的&#x…

Linux中rw-rw-r--相关的访问权限讲解

下面就是关于 rw-rw-r-- 的知识图谱式讲解。核心节点&#xff1a;rw-rw-r-- (文件权限表示法) 这是一个在 Linux/Unix 操作系统中&#xff0c;通过 ls -l 命令查看到的&#xff0c;用于描述文件或目录访问权限的10字符字符串。分支一&#xff1a;字符串的解剖 (Anatomy of the …

C#异常处理:更优雅的方式

C#异常处理&#xff1a;更优雅的方式 在 C# 编程的世界里&#xff0c;异常处理是绕不开的重要环节。程序运行时难免会出现各种意外&#xff0c;若处理不当&#xff0c;可能导致程序崩溃&#xff0c;给用户带来糟糕体验。所以&#xff0c;掌握更优雅的异常处理方式&#xff0c;对…

Qt6中模态与非模态对话框区别

一.阻塞 vs 非阻塞1.模态对话框阻塞父窗口&#xff1a;打开后&#xff0c;用户必须先处理该对话框&#xff08;关闭或完成操作&#xff09;&#xff0c;才能继续操作父窗口。应用场景&#xff1a;强制用户立即响应的场景&#xff0c;如确认对话框、登录窗口、文件选择器等。2.非…

处理Web请求路径参数

目录 1. 路径变量&#xff08;Path Variable&#xff09; 2. 查询参数&#xff08;Query Parameter&#xff09; 3. 表单参数&#xff08;Form Data&#xff09; 4. 请求体JSON参数&#xff08;Request Body JSON&#xff09; 5. 请求头参数&#xff08;Header Parameters&…

创客匠人:技术赋能下的创始人 IP 打造与内容创作新逻辑

在知识变现的浪潮中&#xff0c;创始人 IP 的核心竞争力始终围绕内容展开&#xff0c;但内容创作的效率与质量往往成为瓶颈。创客匠人基于对行业的深刻洞察&#xff0c;探索出技术与内容融合的路径&#xff0c;为创始人 IP 打造提供了新的思路 —— 不再将内容创作视为单纯的输…

Mysql分片:一致性哈希算法

一、一致性哈希的核心原理哈希取模最大的痛点是&#xff1a;当分片数量&#xff08;例如数据库节点数&#xff09;发生变化时&#xff0c;几乎所有数据的哈希结果都会改变&#xff0c;导致大规模的数据迁移。一致性哈希就是为了解决这个“伸缩性差”的问题而诞生的。核心思想&a…

前端学习 vben 之 axios interceptors

前端学习 vben 之 axios interceptors interceptor 拦截器&#xff0c;是一种软件设计模式&#xff0c;核心思想就是在程序执行的特定阶段&#xff08;如请求发送前&#xff0c;响应返回后&#xff0c;方法调用前后等&#xff09;自动插入自定义逻辑。实现对核心流程的“拦截”…

【java面试day4】redis缓存-数据持久化

文章目录问题&#x1f4ac; Question 1相关知识问题 &#x1f4ac; Question 1 Q&#xff1a;redis作为缓存&#xff0c;数据的持久化是怎么做的? A&#xff1a;有两种机制&#xff0c;一种是RDB&#xff0c;RDB会在指定的时间间隔内将内存中的数据生成快照&#xff0c;保存…

Vue3中element plus默认获取最近一周和上个月的时间区间并在后端分开传值

<el-form-item label"结算时间&#xff1a;" prop"datetimerangevalue"><el-date-pickerv-model"datetimerangevalue"value-format"YYYY-MM-DD HH:mm:ss"type"datetimerange"range-separator"至"start-p…

SQLAlchemy数据库连接密码特殊字符处理完全指南

引言 在使用SQLAlchemy连接数据库时&#xff0c;我们通常使用URL格式指定连接信息&#xff0c;如mysqlpymysql://user:passwordhost:port/database。然而&#xff0c;当密码中包含特殊字符&#xff08;如、#、$、!等&#xff09;时&#xff0c;会导致URL解析错误&#xff0c;进…

1.4 ARM安全参考架构(PSA Certified)

目录1.4.1 PSA Certified概述1.4.2 PSA认证级别详解1.4.3 PSA与TF-A的关系1.4.4 PSA安全模型实现信任根(RoT)架构关键安全服务&#xff1a;1.4.5 认证流程实践1.4.6 典型应用案例参考资料1.4.1 PSA Certified概述 ARM Platform Security Architecture (PSA) Certified 是一套完…