问答题

试题三
阅读以下说明和C程序,将应填入(n)处的字句写在答题纸的对应栏内。
【说明】
某种传感器的输出值Ratio依赖于环境温度temp(-40oCtemp50oC)。对一组环境温度值(ITEMS个),人们已经测量得到了相应的Ratio值(见表1)。该表粗略地描述了曲线Ratio(temp)。
表1曲线Ratio(temp)的列表值表2曲线K(temp)的列表值

表2中,各温度值所对应的K值是对表1进行线性插值再求倒数得到的,具体的计算方法如下:
1.根据temp值,在表1中用二分法查找;
2.若找到相应的温度值,则按相应的Ratio值求倒数得到K值;
3.若没找到相应的温度值,则可确定temp所在的温度区间[Tp1,Tp2],同时获得了相应的Ratio1和Ratio2,再按如下公式计算K值:
Step = (Ratio1 - Ratio2) / (Tp1-Tp2)
K = 1.0 / (Ratio1 + Step*(temp - Tp1))
在程序中,当temp高于50°C或低于-40°C时,设定K=0。
【C程序】
#include
typedef struct {
int Temp; /*环境温度*/
double Ratio; /*传感器的输出值*/
}CURVE;
#define ITEMS 7
double GetK(int, CURVE *, int);
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);
}
}
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) ));
}

【参考答案】

(1)(low+high)/2
(2)1.0/(p+m)->Ratio
(3)m+1
(4......

(↓↓↓ 点击下方‘点击查看答案’看完整答案 ↓↓↓)
热门 试题

问答题
试题四 阅读以下应用说明以及用Visual Basic开发过程中进行的属性设置和所编写的程序代码,将应填入 (n) 处。 [应用说明] 启动某应用程序运行的登录窗口如下: 其中的标签(Label1)“用户名(U)”对应文本框Username,标签(Label2)“密 码(P)”对应文本框Password。当用户在Username文本框中输入用户名“ali88”,在Password文本框中输入“zmkm”(显示的字符均为“*”),并单击“确定”按钮时,就会弹出应用程序的主窗口frmAPP,而该登录窗口就会卸载。 如果用户名或密码输入错误,则会弹出报警信息框。当用户单击其中的“确定”按钮后,登录窗口中Password文本框的内容就会消失,光标停留在该框内,以便用户重新输入密码,必要时用户还可以再修改用户名,再次做登录尝试。本应用程序允许发生3次输入错误。在第3次输入错误后,就会立即退出该应用程序。 在弹出登录窗口后,当按组合键“Alt+U”时光标就会停留在Username文本框中:当按组合键“Alt+P”时光标就会停留在Password文本框中。当用户按Enter键时,就相当于单击“确定”按钮:当用户按Esc键时,就相当于单击“取消”按钮,立即退出该应用程序。 [属性设置] 在开发过程中,部分控件及属性设置如下: 对 象 对 象 名 属 性 属 性 值 标签 Label2 Caption (1) 文本框 Username Text (空白) 文本框 Password Text (空白) Password * 命令按钮 CmdOK Caption 确定 Default (2) 命令按钮 CmdCancel Caption 取消 Cancel True [程序代码] Private Sub cmdOK_Click() (3) As Integer ’ 静态变量times的说明 If (4) Then Unload Me ’ 卸载本登录窗口 (5) ’ 弹出应用程序主窗口frmAPP Else MsgBox ( 用户名或密码错! ) times=times+1 Password.Text= ’ 清除密码框中的内容 Password.SetFocus ’ 将光标定位于密码框 If times=3 Then End End If End Sub Private Sub cmdCanee1_Click() End End Sub