静态环形队列(C语言)

说明:

1.静态环形队列就是长度已提前确定,可以按顺序循环写入数据(0、1、2...9、0、1、2...);可以按顺序循环读取数据(0、1、2...9、0、1、2...);通过write记录写入个数,写一次加1;通过Read记录读取的个数,读一次加1;

2.队列满:计数其实隐性代表了数据的位置,如果下一个要写入的计数等于读取计数“Read == ((Write + 1”)说明写入已满,(比如:一个圆形跑道上有均匀10个固定的位置可以放东西或者取东西,两个人在圆形跑道上同向追赶,一个前面放东西一个后边取东西,放东西的那个人将要放下一个东西的位置恰好是取东西的那个人正准备取下一个东西的位置,也就是放东西的人已放满一圈了)

3.队列空:计数Read == Write,说明队列空

typedef struct                                     //数据内容根据实际可以随意变更
{
	int a;
	int b;
	int c;
	char str[100];
}DataDef



#define BUFFER_LEN 10                                //环形队列长度
static int Read  = 0;                                //读计数
static int Write = 0;                                //写计数
static DataDef DataBuff[BUFFER_LEN];                 //环形队列


static int BufferFull(void)                          //环形队列满
{
	return (Read == ((Write + 1) % BUFFER_LEN));
}

static int BufferEmpty(void)                         //环形队列空
{
	return (Read == Write);
}

static void PutDataToBuffer(DataDef *data)           //一组数据写入队列
{
	if (!BufferFull())
	{
		DataBuff[Write] = *data;
		Write = (Write + 1) % BUFFER_LEN;
	}
}


static int GetDataFromBuffer(DataDef *data)         //从队列读出一组数据
{
	if (!BufferEmpty())
	{
		*data= DataBuff[Read];
		Read = (Read + 1) % BUFFER_LEN;
		return 1;
	}
	else
	{
		return 0;
	}
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的C语言程序,用于模拟静态法密立根油滴实验的数据并计算电子电荷量: ``` #include <stdio.h> #include <stdlib.h> #include <time.h> #include <math.h> // 定义常数 #define Q (1.6022e-19) // 电子电荷量 #define g (9.81) // 重力加速度 #define eta (1.8325e-5) // 空气粘度系数 #define rho_oil (886) // 油滴密度 #define rho_air (1.2) // 空气密度 // 生成随机数 double rand_num(double min, double max) { return min + (max - min) * rand() / RAND_MAX; } int main() { // 设置随机数种子 srand(time(NULL)); // 输入数据 double V; printf("请输入油滴电压(伏特):"); scanf("%lf", &V); // 模拟测量数据 int n; printf("请输入测量次数:"); scanf("%d", &n); // 计算电荷量 double sum_q = 0.0; for (int i = 0; i < n; i++) { // 生成随机数 double d = rand_num(1, 10); // 微米 double t = rand_num(0.1, 1); // 秒 // 计算电荷量 double q = 3 * M_PI * eta * d * d * t / (2 * rho_air * sqrt((V * Q) / (g * (4 * rho_oil - rho_air)))); // 累加电荷量 sum_q += q; } // 计算平均电荷量 double avg_q = sum_q / n; // 输出结果 printf("测量次数:%d\n", n); printf("电压(伏特):%g\n", V); printf("平均电荷量(库仑):%e\n", avg_q); printf("平均电荷量的相对误差:%g%%\n", fabs(avg_q - Q) / Q * 100); return 0; } ``` 以上程序生成了一些随机数作为输入数据,模拟了多次测量,计算出每次测量的电荷量并求平均,最后输出平均电荷量及其相对误差。请注意,实际测量中可能需要考虑更多因素,如系统误差等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值