找最值

1.(20分) 找最值
从键盘任意输入10个整数,用指针变量作函数参数编程计算最大值和最小值,并返回它们所在数组中的位置。函数原型如下所示:
int FindMax(int num[], int n, int *pMaxPos);//函数返回最大值,pMaxPos返回最大值所在的下标
int FindMin(int num[], int n, int *pMinPos);//函数返回最小值,pMaxPos返回最小值所在的下标
程序运行结果示例:
Input 10 numbers:
-1 2 3 45 92 8 9 12 7 8↙
Max=92,Position=4,Min=-1,Position=0

输入格式: “%d”
输出格式:
提示信息:“Input 10 numbers:\n”
输出结果:“Max=%d,Position=%d,Min=%d,Position=%d\n”

#include<stdio.h>
int FindMax(int num[], int n, int *pMaxPos);
int FindMin(int num[], int n, int *pMinPos);
int main()
{
	int num[10];
	int max_pos;
	int min_pos;
	int max;
	int min;
	int i;
	printf("Input 10 numbers:\n");
	for(i=0;i<10;i++)
	scanf("%d",&num[i]);
	max=FindMax(num,10,&max_pos);
	min=FindMin(num,10,&min_pos);
	printf("Max=%d,Position=%d,Min=%d,Position=%d\n",max,max_pos,min,min_pos);
}
int FindMax(int num[], int n, int *pMaxPos)
{
	int i,max=num[0];
	*pMaxPos=0;
	for(i=0;i<n;i++)
	{
		if(num[i]>max)
		{
			max=num[i];
			*pMaxPos=i; 
		}
	}
	return max;
}
int FindMin(int num[], int n, int *pMinPos)
{
	int i,min=num[0];
	*pMinPos=0;
	for(i=0;i<n;i++)
	{
		if(num[i]<min)
		{
			min=num[i];
			*pMinPos=i; 
		}
	}
	return min;
}
### 实现最大值最小值算法 在FPGA上实现寻最大值最小值的算法可以利用其计算能力灵活的设计特性[^1]。对于这类操,通常采用流水线结构或者行比较器阵列来加速处理过程。 #### 流水线设计方法 通过构建多级流水线架构,在每一级中完成部分数据对比工。假设输入一组N个数,则可以在log₂(N)阶段内得到终的大/最小值结果。每经过一轮比较后,保留较大的一半继续参与下一轮竞争直到只剩下一个数为止。 ```verilog module max_finder_pipeline #(parameter WIDTH=8, DEPTH=$clog2(WIDTH))( input wire clk, input wire rst_n, input wire [WIDTH-1:0] data_in, output reg [WIDTH-1:0] result ); // ...省略具体逻辑... endmodule ``` #### 行比较器网络 另一种常见的方式是建立完全互联型的行比较器树形结构。该方案能够在单一时钟周期内得出全局极,不过会消耗较多资源用于搭建复杂的互连线路与多个实例化的比较单元。 ```verilog module parallel_comparator_tree #( parameter DATA_WIDTH = 8, parameter NUM_INPUTS = 4 )( input wire [(NUM_INPUTS*DATA_WIDTH)-1:0] inputs, output reg [DATA_WIDTH-1:0] max_value ); // ...省略具体逻辑... endmodule ``` 为了提高效率减少占用空间,还可以考虑结合两者优点——先用少量几轮快速筛选出候选集再进入后续更精细的选择流程;或是针对特定应用场景定制优化后的混合策略[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值