网站导航:首页 -> 软件水平考试 -> 程序员考试认证 -> 2005年下半年程序员下午试题

2005年下半年程序员下午试题

试题一(15分,每空3分)
  阅读下列说明和流程图,将应填入___(n)___处的字句写在答题纸的对应栏内。
[流程图说明] 
  流程图1-1描述了一个算法,该算法将给定的原字符串中的所有前导空白和尾部空白都删除,但保留非空字符的空白。例如,原字符串' file name ',处理变成'file name' 。流程图1-2、流程图1-3 、流程图1-4分别详细描述了流程图1-1中的框a、b、c。
  假设原字符串中的各个字符依次存放在字符数组ch 的各元素ch(1) 、ch(2) 、?、ch(n) 中,字符常量kb表示空白字符。
  流程图1-1的处理过程是:先从头开始找出该字符串中的第一个非空白字符ch(i),再从串尾开始向前找出位于最末位的非空白字符ch(j) ,然后将ch(i) 、?、ch(j) 依次送入ch(1) 、ch(2)、?中。如果字符串中没有字符或全是空白字符,则输出相应的说明。在流程图中,strlen 是取字符串长度函数。
[流程图1-1]

[流程图1-2]

[流程图1-3] 

[流程图1-4] 

[问题]
  在流程图1-1中,判断框p中的条件可表示为:i > ___(5)___ 

试题二(15,每空3分)
  阅读以下函数说明和c语言函数,将应填入___(n)___处的字句写在答题纸的对应栏内。
[说明]
  函数int find_max_min(int a[ ],int n) 的功能是:找出n个元素的数组a中的最大元素和最小元素并输出,返回查找过程中元素的比较次数。查找方法如下:比较a[0] 和a[n-1], 若a[0] 大,则交换a[0] 和a[n-1] 的值;再比较a[1] 和a[n-2] ,若a[1] 大,则交换a[1] 和a[n-2] 的值;依此类推,直到所有的元素都比较完。然后在数组的前半区从前往后找出小元素,在后半区从后往前找出大元素。
[函数]
  int find_max_min(int a[ ],int n) {
   /* 找出n个元素的数组a中的最大元素、最小元素并输出,返回查找过程中元素的比较次数*/ 
   int i,count = 0;
   int temp,maxnum,minnum;
   for(i = 0; i < n/2; i++){ 
    count = count + 1;      /*元素比较次数计数*/
    if(a[i]>a[_____(1)_____ ]
    { /* 数组元素交换代码略*/ }
   }
   maxnum=a[n-1];
   minnum=a[0];
   for(i = 1; i < n/2+ n%2; i++){ 
    count = _____(2)_____ ;             /* 元素比较次数计数*/
    minnum = _____(3)_____ ? a[i]:minnum;      /*找出最小元素*/
    maxnum = _____(4)_____ ? _______(5)_____:maxnum; /* 找出最大元素*/ 
   } printf('max=%d\n,maxnum'); printf('min=%d\n',minnum); return count; 
  }

试题三(15分,每空3分)
  阅读以下说明和c语言函数,将应填入___(n)___处的字句写在答题纸的对应栏内。
[说明]
  某种传感器的输出值ratio 依赖于环境温度temp(-40℃≦temp≦50℃)。对一组环境温度值(items 个),人们已经测量得到了相应的ratio 值(见表1)。该表粗略地描述了曲线ration(temp) 。

表1曲线ration(temp) 的列表值
环境温度temp 传感器的输出值ratio
-40℃ 0.20
-20℃ 0.60
-10℃ 0.80
0℃ 1.00
10℃ 1.17
30℃ 1.50
50℃ 1.80
表2曲线k(temp)的列表值
环境温度temp 校正系数k
-40℃ 5.00
-39℃ 4.55
-38℃ 4.17
-37℃ 3.85 
-20℃ 1.67
-19℃ 1.61 
-10℃ 1.25
-9℃ 1.22 
50℃ 0.56 

  校正系数k是ratio 的倒数,因此也依赖于环境温度temp 。在数据处理中,人们需要用更多的列表值细致地描述曲线k(temp ),如表2所示。在表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℃或低于-40℃时,设定k=0。
[程序]
   #include <stdio.h> typedef struct{ 
    int temp;   /*环境温度*/
    double ratio; /*传感器的输出值*/