itgle.com

阅读以下函数说明和C语言函数,将应填入(n)处的字句写在对应栏内。【说明】函数fun1 (int bb[])的功能是:在3位整数(100~999)中寻找符合条件的整数并依次从小到大存入数组中;它既是完全平方数,两位数字又相同,例如144、676等。【函数2.11】fun1 (int bb[]){int i, j, k=0, g, s, b;for (i=100; i<=999; i++){g=i%10;(1)b=i/100;if ((i== (int) sqrt (i) * (int) sqrt (i))

题目

阅读以下函数说明和C语言函数,将应填入(n)处的字句写在对应栏内。

【说明】

函数fun1 (int bb[])的功能是:在3位整数(100~999)中寻找符合条件的整数并依次从小到大存入数组中;它既是完全平方数,两位数字又相同,例如144、676等。

【函数2.11】

fun1 (int bb[])

{

int i, j, k=0, g, s, b;

for (i=100; i<=999; i++)

{

g=i%10;

(1)

b=i/100;

if ((i== (int) sqrt (i) * (int) sqrt (i)) && (g==s‖s==b‖b==g))

(2)

}

return k;

}

【函数2.2说明】

函数void fun2()的功能是:数组a中有300个四位数,求出数组a千位数上的数减百位数上的数减十位数上的数减个位数上的数大于零的个数CNT,再把所有满足此条件的四位数依次存入数组bb中,然后对数组bb的四位数按小到大的顺序进行排序。例如:9123,9-1-2-3>0,则该数满足条件存入数组bb中,且个数CNT=CNT+1,9812,9-8-1-2<0,则该数不满足条件,忽略。

【函数2.2】

void fun2 ( )

{

int q,b,s,g,i,j;

for (i=0;i<300;i++)

{q=a[i]/1000;

b=a[i]/100%10;

s=a[i]/10%10;

g=a[i]%10;

if (q-b-s-g>0)

(3)

}

for ( i=0;i<cnt-1;i++ )

for ( j=i+1;j<cnt;j++ )

if ( bb[i]>bb[j] )

{ (4)

bb[i]=bb[j];

(5)

}

}


相似考题
更多“阅读以下函数说明和C语言函数,将应填入(n)处的字句写在对应栏内。【说明】 函数fun1 (int bb[])的功 ”相关问题
  • 第1题:

    阅读以下函数说明和C语言函数,将应填入(n)处的字句写在答题纸的对应栏内。

    【函数2.1说明】

    递归函数sum(int a[], int n)的返回值是数组a[]的前n个元素之和。

    【函数2.1】

    int sum (int a[],int n)

    {

    if(n>0) return (1);

    else (2);

    }

    【函数2.2说明】

    有3个整数,设计函数compare(int a,int b,int c)求其中最大的数。

    【函数2.2】

    int compare (int a, int b, int c )

    { int temp, max;

    (3) a:b;

    (4) temp:c;

    }

    【函数2.3说明】

    递归函数dec(int a[],int n)判断数组a[]的前n个元素是否是不递增的。不递增返回 1,否则返回0。

    【函数2.3】

    int dec( int a[], int n )

    {

    if(n<=1) return 1;

    if(a[0]<a[1]) return 0;

    return (5);

    }


    正确答案:(1)a[n-1]+sum(an-1)或者a[0]+sum(a+1n-1); (2)return 0; (3)temp=(a>b)? (4)max=(temp>c)? (5)dec(a+1n-1);
    (1)a[n-1]+sum(a,n-1)或者a[0]+sum(a+1,n-1); (2)return 0; (3)temp=(a>b)? (4)max=(temp>c)? (5)dec(a+1,n-1); 解析:本题考查C语言函数和一些基本运算。
    下面我们分别来分析这几个函数。在函数2.1中,题目要求用此递归函数求数组前 n个元素之和。递归函数的特点是在函数体中不停地调用函数本身,只是将其函数的参数范围改变。题目中要求我们求数组前n个元素之和,我们可以这样理解,即前n个元素之和等于第n个元素加上前n-1个元素之和,现在的问题转化成如何求前n-1个元素之和。同样的道理,可以将求前n-1个元素之和转化成求前n-2个元素之和,直到这个数小于0。从函数2.1的代码中可以知道,在计算以前,首先判断n与0的关系,如果n小于0,说明数组中无元素,因此,返回0值;如果n大于等于0,说明数组中有元素,应该返回的结果是第n个元素加上前n-1个元素之和,而前n-1个元素之和是调用函数本身来计算的。因此,第(1)空和第(2)空的答案分别是a[n-1)+sum(a,n-1),return()。
    在函数2.2中,题目要求我们在三个数中取最大数,在数学中,我们从三个数中取最大数时,一般是首先拿其中两个数比较,取较大的数再与第三个数比较,再取其较大的数,这个数就是三个数中的最大数。从函数2.2的代码中知道,三个数a、b、c,两个整型变量temp与max。根据求三个数中最大数的数学过程和函数中已给出的代码可知,第(3)空处语句应该为temp=(a>b)?a:b,求得a、b中较大数并存放在变量temp中。第(4)空处语句为max=(temp>c)?temp:c。
    在函数2.3中,题目要求判断数组a[]的前n个元素是否是不递增的。不递增返回1,否则返回0。要判断前n个元素是否是不递增的,需要判断前n-1个元素是否是不递增的,以及第n个元素与第n-1个元素的关系。此处与函数2.1一样,用的都是递归函数,只是出口不同,在函数2.1中,只要数组中没有元素了,递归结束,这里只要第n个元素大于第n-1个元素,则返回0,递归结束。又由if(a[0]a[1])语句可知,在每次调用函数时,都将其数组中的第一个元素与第二个元素比较来作为递归的出口,如果结果为假,就说明数组的前面两项的关系是不递增的,在下次调用中不用再考虑第一项。因此第(5)空应该是dec(a+1,n-1)。

  • 第2题:

    阅读以下函数说明和C语言函数,将应填入(n)处的字句写在对应栏内。

    [说明1]

    函数void fun(char*w,char x,int*n)用来在w数组中插入x,w数组中的数已按由小到大顺序存放,n指存储单元中存放数组中数据的个数,插入后数组中的数仍有序。

    [C函数1]

    void fun(char*W,char x,int*n)

    { int i,P;

    p=0;

    w[*n]=x;

    while(x>w[p]) (1) ;

    for(i=*n,i>p;i--)w[i]=(2);

    w[p]=x;

    ++*n;

    }

    [说明2]

    函数void revstr(char*s)将字符串s逆置。例如:字符串“abcde”,经过逆置后变为“edcba”。

    [C函数2]

    void revstr(char*s)

    { char*p,c;

    if(s==NULL)return;

    p=(3); /*p指向字符串s的最后一个有效字符*/

    while(s<p){ /*交换并移动指针*/

    C=*s;

    (4)=*p;

    (5)=c;

    }

    }


    正确答案:(1) p++ (2) w[i-1] (3) s+strlen(s)-1 (4) *s++或*(s++) (5) *p-或*(p--)
    (1) p++ (2) w[i-1] (3) s+strlen(s)-1 (4) *s++或*(s++) (5) *p-或*(p--) 解析:函数1的fun()中的while循环是为了找到x的插入位置,因此(1)填“p++”,for循环是移动数组中的元素,因此(2)填“w[i-1]”。
    对于函数2,设字符串的长度为n,则该函数的思想为将*(s+j)与*(s+n-1+i)对换,i=0....n/2。采用指针来实现,s为起始地址,p定位为最后一个字符的位置,所以空(3)应填“s+strlen(s)-1”;采用*s与*p交换后为s++与P--。即空(4)填“*s++”或“*(s++)”,空(5)填“*p-”或“*(p--)”。

  • 第3题:

    试题三(共 15 分)

    阅读以下说明和 C 程序,将应填入 (n) 处的字句写在答题纸的对应栏内。


    正确答案:

  • 第4题:

    阅读以下函数说明和C语言函数,将应填入(n)处的字句填写在对应栏内。

    [函数2.1说明]

    函数fun1 (int m, int k, int xx [])的功能是:将大于整数m且紧靠m的k个素数存入数组xx中传回。例如:若输入17,5,则应输出:19,23,29,31,37。

    [函数2.1]

    fun1 (int m, int k, int xx [] )

    {

    inti, j, s=0;

    for ( i=m+1; k>0; i++ )

    {for (j=2; j<i; j++ )

    if ( i %j=0 )

    (1)

    if( i==j )

    {

    (2)

    k--; }

    }

    }

    [函数2.2说明]

    函数void fun 2 ()的功能是:打印出杨辉三角形(要求打印出10行)。

    [函数2.2]

    void fun2 ( )

    {

    int i, j;

    int a[10][10];

    printf ("\n" );

    for (i=0; i<10; i++

    {a [i] [0]=1;

    (3))

    for (i=2; i<l0; i++ )

    for (j=1; j<i; j++)

    (4)

    for (i=0; i<10; i++ )

    {for (j=0; j<=i; j++ )

    (5)

    printf ( "\n" );

    }

    }


    正确答案:(1)break; (2) xx [s++]=i; (3)a[i][i] =1; (4) a[i][j]=a[i-1] [j-1)+a[i-1][j]; (5) printf ("%5d"a[i] [j]);
    (1)break; (2) xx [s++]=i; (3)a[i][i] =1; (4) a[i][j]=a[i-1] [j-1)+a[i-1][j]; (5) printf ("%5d",a[i] [j]);

  • 第5题:

    阅读以下函数说明和C语言函数,将应填入(n)处的字句写在对应栏内。

    [说明]

    已知r[1...n]是n个记录的递增有序表,用折半查找法查找关键字为k的记录。若查找失败,则输出“failure",函数返回值为0;否则输出“success”,函数返回值为该记录的序号值。

    [C函数]

    int binary search(struct recordtype r[],int n,keytype k)

    { intmid,low=1,hig=n;

    while(low<=hig){

    mid=(1);

    if(k<r[mid].key) (2);

    else if(k==r[mid].key){

    printf("succesS\n");

    (3);

    }

    else (4);

    }

    printf("failure\n");

    (5);

    }


    正确答案:(1) (low+hig)/2 (2) hig=mid-1 (3) returnmid (4) low=mid+1 (5) return 0
    (1) (low+hig)/2 (2) hig=mid-1 (3) returnmid (4) low=mid+1 (5) return 0 解析:折半查找法也就是二分法:初始查找区间的下界为1,上界为len,查找区间的中界为k=(下界+上界)/2。所以(1)应填“(low+hig)/2”。中界对应的元素与要查找的关键字比较。当kr[mid].key时,(2)填“hig=mid-1”;当k==r[mid].key时,(3)填“return mid”;当k>r[mid].key时,(4)填“low=mid+1”。如果low>hig时循环终止时,仍未找到需查找的关键字,那么根据题意返回0,即空(5)填“return 0”。

  • 第6题:

    阅读以下函数说明和C语言函数,将应填入(n)处的字句写在对应栏内。

    [说明1]

    函数int function(int a)的功能是判断指定的正整数是否为素数,若是,返回1,否则返回0。

    [C函数1]

    int function(int a)

    { int yes,i;

    i=2;yes=1;

    while(i<=a/2 && (1) ){

    if( (2) ) yes=0;

    i++;

    }

    return yes;

    }

    [说明2]

    函数int deleteARR(int*arr,intn)的功能是指定的有序数组压缩成各元素互不相同的有序数组,即相同数只保留一个,多余的被删除。函数返回值是互不相同的元素个数。

    [C函数2]

    int deleteARR(int*arr,int n)

    { int k,j;

    k=0;j=1;

    while(j<n){

    if( (3) )

    (4)=arr[j];

    j++;

    }

    return (5);

    }


    正确答案:(1) yes或yes==1或yes !=0 (2) a/i[*]i==a或a%i==0或!(a%i) (3) arr[k]!=arr[j] (4) arr[++k] (5) k+1或++k
    (1) yes或yes==1或yes !=0 (2) a/i[*]i==a或a%i==0或!(a%i) (3) arr[k]!=arr[j] (4) arr[++k] (5) k+1或++k 解析:对于函数1,增加了一个判断的标志yes,开始进入素数判别循环时置yes=1,则(1)应填“yes”或“yes==1”或“yes !=0”;一旦数n能被某个不等于零的真因子整除,退出循环,则(2)应填“a/i[*]i==a”或“a%i==0”或“!(a%i)”。
    对于函数2,用k记录数组arr[]中不同元素的个数,同时设置工作指针j,将arr[j]与已得到的互不相同元素的最后一个元素进行比较,若不相等,则将其作为已比较的互不相同元素的最后一个元素,所以(3)填“arr[k]!=art[j]”,(4)填“arr[++k]”。最后返回互不相同的元素个数k+1,即(5)填“k+1”或“++k”。