万能百科  > 所属分类  > 

阅读以下技术说明和C代码,将C程序中(1)~(5)空缺处的内容填写完整。[说明] 某种传感器的输出值Rati

阅读以下技术说明和C代码,将C程序中(1)~(5)空缺处的内容填写完整。

[说明]

某种传感器的输出值Ratio依赖于环境温度temp(-40℃≤temp≤50℃)。对一组环境温度值(ITEMS个),已经测量得到了相应的Ratio值(如表4-10表格所示)。表4-10粗略地描述了曲线Ratio(temp)。

校正系数K是Ratio的倒数,因此也依赖于环境温度temp。在数据处理中,需要用更多的列表值细致地描述曲线K(temp),如表4-11所示。

在表4-11中,各温度值所对应的K值是对表4-10进行线性插值再求倒数得到的,具体的计算方法如下。

1) 根据temp值,在表4-10中用二分法查找;

2) 若找到相应的温度值,则按相应的Ratio值求倒数得到K值;

3) 若没找到相应的温度值,则可确定temp所在的温度区间[Tp1,Tp2],同时获得了相应的Ratio1和 Ratio2,再按如下公式计算K值:

在程序中,当temp高于50℃或低于-40℃C时,设定K=0。

[C程序]

include

typedef struct {

int Temp; /* 环境温度 */

double Ratio; /* 传感器的输出值 */

}CURVE;

define ITEMS 7

double GetK(int Temp,CURVE *p,int n)

{ /* 用二分法在n个元素的有序表p中查找与Temp对应的传感器输出值 */

int low, high, m;

double Step;

low = 0;

high = n-1;

if ((Temp<p->Temp) || (Temp>(p+high)->Temp))

return 0.0; /* 超出温度范围时返回 0.0 */

while (low<=high)

{ m=(1);

if (Temp==(p+m)->Temp)

return (2);

if (Temp<(p+m) >Temp)

high=m-1;

else

low=(3);

}

p+=high;

Step=( (4) )/((p+1)->Temp-p->Temp);

return 1.0/ (p->Ratio + Step*( (5) ) ;

}

void main()

{ int Degree;

double k;

CURVE Curve [ITEMS]={{-40,0.2},{-20,0.60.},{-10,0.8},{0,1.0},{10,1.17},{30,1.50},{50,1.8}};

printf ("环境温度 校正系数\n");

for (Degree=-40;Degree<=50;Degree++)

{ k=GetK ( Degree, Curve, ITEMS);

printf("%3d %4.2f\n",Degree,k);

}

}

正确答案:

这是一道要求读者掌握线性插值计算及二分查找算法的C语言程序设计题。本题的解答思路如下。 1) 试题中已给出函数GetK(intTempCURVE *pint n)用二分法在n个元素的有序表p中查找与Temp对应的传感器输出值表中的元素已经按照温度有序排列。 2) 结合本题的应用背景二分查找算法是指先计算表的中间位置即[(low+high)/2]若待查元素等于中间位置上的元素则查找成功并结束查找过程;若待查元素大则在后半区间([m+1high])继续进行二分查找:否则在前半区间(lowm-1])进行

词条内容仅供参考,如果您需要解决具体问题
(尤其在法律、医学等领域),建议您咨询相关领域专业人士。

标签