阅读以下说明和C代码,填补代码中的空缺,将解答填入答题纸的对应栏内。 【说明】 下面的代码运行时,从键盘输入一个四位数(各位数字互不相同,可以有0),取出组成该四位数的每一位数,重组成由这四个数字构成的最大四位数max4和最小四位数min4(有0时为三位数

admin2016-11-11  40

问题 阅读以下说明和C代码,填补代码中的空缺,将解答填入答题纸的对应栏内。
【说明】
下面的代码运行时,从键盘输入一个四位数(各位数字互不相同,可以有0),取出组成该四位数的每一位数,重组成由这四个数字构成的最大四位数max4和最小四位数min4(有0时为三位数),计算max4与min4的差值,得到一个新的四位数。若该数不等于6174,则重复以上过程,直到得到6174为止。
例如,输入1234,则首先由4321-1234,得到3087;然后由8730-378,得到8352;最后由8532-2358,得到6174。
【C代码】
    #include
    int difference(int a[])
    {  int t,i,j,max4,min4;
       for(i=0;i<3;i++){/*用简单选择排序法将a[0]~a[3]按照从大到小的顺序排列*/
       t=i;
       for(j=i+1;___________(1);j++)
           if(a[j]>a[t])__________(2);
       if(t!=i) {
          int temp=a[t];  a[t]=a;  a=temp;
        }
    }
        max4=___________(3);   
        min4=___________(4);
        return max4-min4;
    }
    int main()
    {    int n,a[4];
    printf("input a positive four-digit number:");
    Scanf("%d",&n);
    while(n!=6174){
      a[0]=__________(5);    /*取n的千位数字*/
      a[1]=n/100%10;       /*取n的百位数字*/
      a[2]=n/10%10;        /*取n的十位数字*/
      a[3]=__________(6);    /*取n的个位数字*/
      n=difference(a);
     }
     return 0;
   }   

选项

答案(1)j<4或等价形式 (2)t=j (3)a[0]*1000+a[1]*100+a[2]*10+a[3]或等价形式 (4)a[3]*1000+a[2]*100+a[1]*10+a[0]或等价形式 (5)n/1000 或等价形式 (6)n%10

解析 本题考查C程序设计基本技能及应用。
题目要求在阅读理解代码说明的前提下完善代码。
由于C程序的执行是从main函数开始的,因此首先理解main函数的代码结构。显然,调用函数difference时实参为数组a,并且从注释中可以确定空(5)的内容为“n/1000”或其等价形式,空(6)处填写“n%10”或其等价形式。这样,数组元素a[0]~a[3]就依次保存了n值从左至右的各位数字。
接下来分析函数difference的代码结构。双重for循环是对数组a进行简单选择排序,目的是将数组中最大数字放入a[0],最小的数字放入a[3]。处理思路是通过比较找出最大数字并用t记下最大数字所在数组元素的下标,第一趟需在a[0]~a[3]中进行选择,通过比较记下最大数字的下标,最后将最大数字交换至a[0],第二趟需在a[1]~a[3]中进行选择,通过比较记下这三个数中最大者的下标,并最大者交换至a[1],依次类推。因此,空(1)处应填入“j<4”或其等价形式,以限定选择范围,空(2)处应填入“t=j”,以记下选择范围内最大者的下标。
根据题目的说明部分,显然空(3)处应填入“a[0]*1000+a[1]*100+a[2]*10+a[3]”、
空(4)处应填入“a[3]*1000+a[2]*100+a[1]*10+a[0]”,或其等价形式。
转载请注明原文地址:https://kaotiyun.com/show/M9jZ777K
0

最新回复(0)