阅读以下说明和C代码,填写程序中的空,将解答写入答题纸的对应栏内。 【说明】 函数insertElem的功能是在元素升序排列的数组中加入一个新元素并保持数组元素升序排列的特点。在main函数中输入若干表示价格的实数,输入为0或负数或实数个数超出限定

admin2020-05-13  29

问题 阅读以下说明和C代码,填写程序中的空,将解答写入答题纸的对应栏内。
【说明】
    函数insertElem的功能是在元素升序排列的数组中加入一个新元素并保持数组元素升序排列的特点。在main函数中输入若干表示价格的实数,输入为0或负数或实数个数超出限定数量时终止,调用insertElem将价格按升序保存在数组pdata中,最后输出所输入的实数。
【C代码】
#define ARR$Z 10001
void insertElem(double art[],  int n,double elem)
/*arr空间足够大且其元素按照升序排列,将elem插入arr中并保持其升序特点*/
{    int i;
    double tmp;
    if(n==0 || elem>=arr[n-1]){________________=elem;return;}

    for(i=n-1;i>=0  &&elem<arr; i--){  //查找插入位置并将元素后移
    ________________;
    }
    ________________=elem;    //将元素放入最终位置
}
int main()
{    int idx,n=0;
    double price,pdata[ARRSZ];

    do{
    scanf(“%1f”,&price);
    if(price<=0)________________;
    insertElem(________________);//调用insertElem将price的值加入pdata数组
    n++;
    }while(n<ARRSZ);
    for(idx=0;________________;idx++)//按升序输出所输入的实数
    printf(“%.21f\t”,pdata[idx]);
    return 0;
}

选项

答案arr[n]或*(arr+n)或其等效形式 arr[i+1]=arr[i]或其等效形式 arr[i+1]或*(arr+i+1)或其等效形式 break pdata,n,price 注:pdata可替换为&pdata或&pdata[0] idx<n或其等效形式

解析 本题考查C程序运算和控制逻辑及函数参数传递机制。
设初始时数组中的有序序列如下:

假设要在该数组中分别插入元素55和35,过程如下:
(1)插入55时,由于55大于有序序列的最后一个元素(即elem>arr[n-1],此时n=5),因此将55直接存入art[n]即可,结果如下,因此空(1)出应填入“arr[n]”或其等效形式。

(2)插入35时,通过比较elem<arr[4]成立、elem<arr[3]成立、elem<arr[2]不成立,找到插入位置为arr[3],在此过程中可以将arr[14]的50、arr[13]的40依次向其后继位置移动,如下表所示。

    运算开始时,i等于n-1(即arr[4]的下标),之后i递减,直到elem<arr不成立,需要将满足elem<arr的数组元素的值移入i+1下标对应的位置,因此空(2)处应填入“arr[i+1]=arr”或其等效形式。最后再将elem的值插入空出来的位置,由于查找位置的循环结束时,elem<arr不成立,也就是说elem的值应插入arrli]之后的位置,因此空(3)处应填入“arr[i+1]”或其等效形式,完成插入运算。
    根据题目描述,输入负数或0时结束,因此空(4)出应填入跳出循环的语句break。
    空(5)是调用函数insertElem时的实参,按照函数调用时对实参和形参类型、数量方面的约定,该空应填写数组空间首地址、数组元素个数和待插入的元素,即“pdata,n,price”或其等效形式。
    根据空(6)所在语句的作用,循环条件为“idx<n”。
转载请注明原文地址:https://jikaoti.com/ti/B8W7FFFM
0

最新回复(0)