itgle.com

请编写一个函数int fun (int *s,int t,int *k),用来求出数组的最小元素在数组中的下标并存放在k所指的存储单元中。例如,输入如下整数:234 345 753 134 436 458 100 321 135 760则输出结果为6,100。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:include<conio.h>include<stdio.h>int fun(int *s,int t,int *k){

题目

请编写一个函数int fun (int *s,int t,int *k),用来求出数组的最小元素在数组中的下标并存放在k所指的存储单元中。

例如,输入如下整数:

234 345 753 134 436 458 100 321 135 760

则输出结果为6,100。

注意:部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

include<conio.h>

include<stdio.h>

int fun(int *s,int t,int *k)

{

}

main()

{

int a[10]={234,345,753,134,436,458,

100,321,

135,760),k;

clrscr();

fun(a,10,&k);

printf("%dr %d\n", k, a[k]);

}


相似考题
更多“请编写一个函数int fun (int *s,int t,int *k),用来求出数组的最小元素在数组中的下标并存放在k所指的存储单元中。例如,输入如下整数:234 345 753 134 436 458 100 321 135 760则输出结果为6,100。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:include<conio.h>include<stdio.h>int fun(int *s,int t,int *k){”相关问题
  • 第1题:

    国家二级(C语言)机试模拟试卷104

    下列给定的程序中,函数fun()的功能是:求输入的两个数中较小的数。

     例如:输入5 10,结果为rain is 5。

     [注意] 部分源程序给出如下。

     请勿改动主函数main和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。

     [试题源程序]

     #include  <stdio.h>

     #include  <conio.h>

     int fun(int x, (1) )

     {

     int z;

     z=x<y (2) x:y;

     return(z);

     }

     main()

     {

     int a, b, c;

     scanf("%d, %d\n", (3) );

     c=fun(a, b);

     printf("min is %d", c);

     }


    答案:(1)y,z;(2)?(3)&a, &b

  • 第2题:

    编写函数fun(),它的功能是:求出1~1000之内能被7或11整除,但不能同时被7和11整除的所有整数,并将它们放在a所指的数组中,通过n返回这些数的个数。

    [注意] 部分源程序给出如下。

    请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

    [试题源程序]

    include <conio.h>

    include <stdio.h>

    void fun(int *a, int *n)

    {

    }

    main()

    {

    int aa[1000], n, k;

    clrscr();

    fun(aa,&n);

    for(k=0; k<n; k++)

    if(k+1)%10==0)

    {

    printf("%5d", aa[k]);

    printf("\n");

    }

    else

    printf("%5d", aa[i]);

    }


    正确答案:void fun(int *a int *n) { int i j=0; for(i=1; i=1000; i++) if((i%7=0 ||i%11==0)&&i%77!=0) a[j++]=i; *n=j; }
    void fun(int *a, int *n) { int i, j=0; for(i=1; i=1000; i++) if((i%7=0 ||i%11==0)&&i%77!=0) a[j++]=i; *n=j; } 解析:本题的关键是if条件语句及参数传递。本题的设计思路是:(1)利用循环遍历1到1000之内的整数;(2)利用if语句判断,把查找到的整数保存到形参数组a中;(3)把数组a中数组元素的个数赋值到形参指针n所指的内存。注意程序中if语句的判断条件,本题是找出能被7或11整除但不能同时被7和11整除的所有整数。能同时被7和11整除的数一定能被77整除,且不能被7整除的数不一定就是能被7或11整除的数。所以,可得出程序中的if语句。

  • 第3题:

    请编写函数fun(),它的功能是:求出1到1000之内能被5或13整除、但不能同时被5和13整除的所有整数并将它们放在 9所指的数组中,通过n返回这些数的个数。

    注意:部分源程序给出如下。

    请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

    试题程序:

    include <conio.h>

    include <stdio.h>

    void fun(int *a,int *n)

    {

    }

    main( )

    {

    int aa[1000],n,k;

    clrscr();

    fun(aa,an);

    for(k=0;k<n;k++)

    if((k+1)%10==0)

    {

    printf("%5d",aa[k]);

    printf("\n"); /*—行写10个数*/

    }

    else

    printf("%5d",aa[k]);

    }


    正确答案:void fun(int*aint *n) { int i.j=0; for(i=1;i=1000;i++) /*求1到1000之内能被5或13整除、但不能同时被5和13整除的所有整数并放入数组a中*/ if((i%5==0||i%13==0)&&i%65!=0) a[j++]=i; *n=j; /*传回满足条件的数的个数*/ }
    void fun(int*a,int *n) { int i.j=0; for(i=1;i=1000;i++) /*求1到1000之内能被5或13整除、但不能同时被5和13整除的所有整数,并放入数组a中*/ if((i%5==0||i%13==0)&&i%65!=0) a[j++]=i; *n=j; /*传回满足条件的数的个数*/ } 解析:注意本题题目是找出能被5或13整除但不能同时被5和13整除的所有整数。能同时被5和13整除的整数一定能被65整除,且不能被65整除的数不一定就是能被5或13整除的数。所以可得出程序中的if()。按运算优先级可知 (i%5==0||i%13==0),注意,两边必须要有小括号。

  • 第4题:

    请补充函数fun(),函数fun()的功能是求7的阶乘。

    注意:部分源程序给出如下。

    请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。

    试题程序:

    include<stdio.h>

    long fun(int n)

    {

    if(【 】)

    return(n*fun(【 】);

    else if(【 】)

    return 1;

    }

    main()

    {

    int k=7;

    printf("%d!=%ld\n", k, fun(k));

    }


    正确答案:n>1 n-1 n==1
    n>1 n-1 n==1 解析:第一空:求阶乘时采用递归的算法,n>1和n==1这两种情况的处理方法不同,需要分开考虑。第二空:阶乘的算法是,当n>1时,n!=n*(n-1)!,即fun(n)=n*fun(n-1)。第三空:n==1是递归的终止条件,因为1!=1,所以当n=1时,返回1。

  • 第5题:

    请编写函数void fun(int x, int pp[], int *n),它的功能是:求出能整除x且不是偶数的各整数,并按从小到大的顺序放在即所指的数组中,这些除数的个数通过形参n返回。

    例如,若x中的值为30,则有4个数符合要求,它们是1, 3,5,15。

    注意:部分源程序给出如下。

    请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

    试题程序:

    include <conio.h>

    include <stdio.h>

    void fun (int x, int pp[], int *n)

    {

    }

    main()

    {

    int x,aa[1000], n, i ;

    clrscr();

    printf("\nPlease enter an integer

    number : \n ") ;

    scanf ("%d", &x) ;

    fun (x, aa, &n) ;

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

    printf ("%d ", aa [i]);

    printf ("\n ") ;

    }


    正确答案:void fun (int x int pp[] int *n) { int ij=0; for(i=1;ix;i=i+2) /*i的初始值为1步长为2确保i为奇数*/ if(x%i==0) /*将能整除x的数存入数组pp中*/ pp[j++]=i; *n=j; /*传回满足条件的数的个数*/ }
    void fun (int x, int pp[], int *n) { int i,j=0; for(i=1;ix;i=i+2) /*i的初始值为1,步长为2,确保i为奇数*/ if(x%i==0) /*将能整除x的数存入数组pp中*/ pp[j++]=i; *n=j; /*传回满足条件的数的个数*/ } 解析:本题题干信息是:能整除x且不是偶数的所有整数。循环语句中i从1开始且每次增2,所以i始终是奇数。

  • 第6题:

    请编写函数fun(),它的功能是:求出1到1000之内能被7或11整除、但不能同时被7和11整除的所有整数并将它们放在 a所指的数组中,通过n返回这些数的个数。

    注意:部分源程序给出如下。

    请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

    试题程序:

    include <conio.h>

    include <stdio.h>

    void fun (int *a,int *n)

    {

    }

    main()

    {

    int aa[1000], n, k;

    clrscr();

    fun(aa,&n);

    for(k=0;k if((k+1)%10==0)

    {printf("%5d",aa[k]);

    printf("\n");} /*一行写9个数*/

    else

    printf("%5d ",aa[k]);

    }


    正确答案:void fun(int *a int *n) { int ij=0; for(i=1;i=1000;i++) /*求1到1000之内能被7或11整除、但不能同时被7和11整除的所有整数并放入数组a中*/ if((i%7==0||i%11==0)&&i%77!=0) a[j++]=i; *n=j; /*传回满足条件的数的个数*/ }
    void fun(int *a, int *n) { int i,j=0; for(i=1;i=1000;i++) /*求1到1000之内能被7或11整除、但不能同时被7和11整除的所有整数,并放入数组a中*/ if((i%7==0||i%11==0)&&i%77!=0) a[j++]=i; *n=j; /*传回满足条件的数的个数*/ } 解析:注意本题题目应是找出能被7或11整除但不能同时被7和11整除的所有整数。能同时被7和11整除的整数一定能被77整除,且不能被77整除的数不一定就是能被7或11整除的数。所以可得出程序中的if()。按运算优先级可知 (i%7==0||i%11==0),注意,两边必须要有小括号。

  • 第7题:

    请编写一个函数void fun(int m, int k, int xx[]),该函数的功能是将大于整数m且紧靠m的k个非素数存入所指的数组中。

    例如,若输入15,5,则应输出16,18,20,21,22。

    注意:部分源程序给出如下。

    请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

    试题程序:

    include<conio.h>

    include<stdio.h>

    void fun(int m,int k,int xx[])

    {

    }

    main()

    {

    int m,n,zz[1000];

    clrscr();

    printf("\nPlease enter two integers:");

    scanf("%d%d",&m,&n);

    fun(m,n,zz);

    for(m=0;m<n;m++)

    printf("%d",zz[m]);

    printf("\n");

    }


    正确答案:void fun(int m int k int xx[]) { int ijn; for(i=m+1n=0;nk;i++) /*找大于m的非素数循环k次即找出紧靠m的k个非素数*/ for(j=2;ji;j++) /*判断一个数是否为素数*/ if(i%j==0) { xx[n++]=i; /*如果不是素数放入数组xx中*/ break; /*并跳出本层循环判断下一个数*/ } }
    void fun(int m, int k, int xx[]) { int i,j,n; for(i=m+1,n=0;nk;i++) /*找大于m的非素数,循环k次,即找出紧靠m的k个非素数*/ for(j=2;ji;j++) /*判断一个数是否为素数*/ if(i%j==0) { xx[n++]=i; /*如果不是素数,放入数组xx中*/ break; /*并跳出本层循环,判断下一个数*/ } } 解析:本题只要掌握了判断非素数和素数的算法即不难完成了,其实程序缺少部分也正是这部分。

  • 第8题:

    请编写一个函数fun(),它的功能是:求出一个2×M整型二维数组中最大元素的值,并将此值返回调用函数。

    注意:部分源程序给出如下。

    请勿改动主函数main和其他函数中的任何内容,仅在函数fan的花括号中填入所编写的若干语句。

    试题程序:

    define M 4

    include <stdio.h>

    fun(int a[] [M])

    {

    }

    main()

    {

    int arr[2][M]={5, 8, 3, 45, 76, -4, 12, 82};

    printf("max=%d\n",fun(arr));

    }


    正确答案:fun (int a[] [M]) { int ijmax=a[0][0]; for(i=0;i2;i++) for(j=0;jM;j++) if(maxa[i][j]) max=a[i][j]; /*求出二维数组的最大值*/ return max; }
    fun (int a[] [M]) { int i,j,max=a[0][0]; for(i=0;i2;i++) for(j=0;jM;j++) if(maxa[i][j]) max=a[i][j]; /*求出二维数组的最大值*/ return max; } 解析:此类求最大值或最小值的C语言问题,我们可以采用逐个比较的方式。要求数组中的所有元素走动一遍,并从中找出最大、最小值,要注意一开始应使max存放数组中的第一个元素的值。可按逐行查找也可按逐列查找的方式,本题采用的是逐行查找的方式。即行下标在外层循环列下标在内层循环,因为在循环的嵌套中越在内层循环,循环变化就越快。

  • 第9题:

    请编写一个函数fun(),它的功能是:求出1到m(含m)之内能被7或11整除的所有整数放在数组a中,通过n返回这些数的个数。

    例如,若传给m的值为50,则程序输出:

    7 11 14 21 X 28 33 35 42 44 49

    注意:部分源程序给出如下。

    请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

    试题程序:

    include<conio.h>

    include<stdio.h>

    define M 100

    void fun(int m, int *a, int *n)

    {

    }

    main()

    {

    int aa[M],n,k;

    clrscr();

    fun(50,aa,&n);

    for(k=0;k<n; k++)

    if((k+1)%20==0) /*每行输出20个数*/

    {printf("%4d",aa[k]);

    printf("\n");

    }

    else

    printf("%4d",aa[k]);

    printf("\n");

    }


    正确答案:void fun(int mint *aint *n) { int ij=0; for(i=1;i=m;i++) if(i%7==0||i%11==0) /*求出1到m(含m)之内能被7或11整除的所有整数放在数组a中*/ a[j++]=i; *n=j; /*返回这些数的个数*/ }
    void fun(int m,int *a,int *n) { int i,j=0; for(i=1;i=m;i++) if(i%7==0||i%11==0) /*求出1到m(含m)之内能被7或11整除的所有整数放在数组a中*/ a[j++]=i; *n=j; /*返回这些数的个数*/ } 解析:本题要找出能被7或11整除的所有整数,注意数学中的“或”和C语言中的“或”的区别,但在此处,if条件语句中用了“||”运算符,若要找能同时被7和11整除的所有整数则在if()中应用“&&”运算符。

  • 第10题:

    请编写函数fun( ),其功能是:将所有大于1小于整数m的素数存入xx所指数组中,素数的个数通过k传回。

    例如,输入25,则应输出2 3 5 7 11 13 17 19 23。

    注意:部分源程序给出如下。

    请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

    试题程序:

    include<conio.h>

    include<stdio.h>

    void fun(int m,int *k,int xx[ ])

    {

    }

    main( )

    {

    int m,n,zz[100];

    clrscr( );

    printf("/nPlease enter an integer number between 10 and 100:");

    scanf("%d",&n);

    fun(n,&m,zz);

    printf("\n\nThere are%d prime numbers

    less than %d:",m,n);

    for(n=0;n<m;n++)

    printf("\n %4d",zz[n]);

    }


    正确答案:void fun(int mint *kint XX[]) { int ijtn=0; for(i=2;im;i++) /*找出大于1小于整数m的素数*/ { t=l; for(j=2;ji;j++) if(i%j==0) { t=0; break; } if(t==1) xx[n++]=i; } *k=n; /*返回素数的个数*/ }
    void fun(int m,int *k,int XX[]) { int i,j,t,n=0; for(i=2;im;i++) /*找出大于1小于整数m的素数*/ { t=l; for(j=2;ji;j++) if(i%j==0) { t=0; break; } if(t==1) xx[n++]=i; } *k=n; /*返回素数的个数*/ } 解析:这道题是考查一个数是不是素数,只要掌握了判断素数的方法,问题便能顺利解决,请以此题为例,掌握判断素数的方法。

  • 第11题:

    请补充函数fun(),该函数的功能是计算下面公式SN的值:

    例如:当N=50时,SN=71.433699。

    注意:部分源程序给出如下。

    请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。

    试题程序:

    include<conio.h>

    include<stdio.h>

    double fun(int n)

    {

    double s=1.0,S1=0.0;

    int k;

    for(【l】;k<=n;k++)

    {

    s1=s;

    【 】;

    }

    return【 】;

    }

    main()

    {

    int k=0;

    double S;

    clrscr();

    printf("\nPlease input N=");

    scanf("%d",&k);

    s=fun(k);

    printf("\ns=%lf",s);

    }


    正确答案:k=2 s+=(2*k-1)/s1 s
    k=2 s+=(2*k-1)/s1 s 解析:第一空:因为变量s初始化为1.0,也就是公式中的第—项,所以,for循环中,变量k从2开始,直到n。
    第二空:求出的s1就是公式中的SN-1,(2*K-1)/S1就是公式中的。第三空:变量s存放最后的结果,所以函数的返回值是s的值。

  • 第12题:

    问答题
    请编写函数fun(),该函数的功能是:计算并输出给定整数n的所有因子(不包括1和自身)之和。规定n的值不大于1000。例如,在主函数中从键盘给n输入的值为856,则输出为:sum=763。  注意:部分源程序给出如下。  请勿改动主函数main()和其他函数中的任何内容,仅在fun()函数的花括号中填入所编写的若干语句。  试题程序如下:/**********code.c**********/#include int fun(int n){}void main(){ int n,sum; printf(Input n: ); scanf(%d,&n); sum=fun(n); printf(sum=%d,sum);}

    正确答案:

    int fun(int n)
    {
    int s=0,i;
    for(i=2;i<=n-1;i++)
    if(n%i==0)
    s+=i;
    return s;
    }
    解析:

      本题的设计思路是:①遍历从2到n-1的所有整数;②用条件语句找出能被n整除的整数i,并累加求和;③用return语句返回因子的和。

  • 第13题:

    请编写一个函数fun(),它的功能是:求出一个4×M整型二维数组中最小元素的值,并将此值返回调用函数。

    注意:部分源程序给出如下。

    请勿改动主函数main和其他函数中的任何内容,仪在函数fun的花括号中填入所编写的若干语句。

    试题程序:

    define M 4

    include<stdio.h>

    fun (int a[])[M])

    {

    }

    main()

    {

    int arr[4][M]={11,3,9,35,42,-4,24,32,6,48,-32,7,23,34,12,-7);

    printf(“min=%d\n”,fun(arr));

    }


    正确答案:fun(int a[][M]) {   int ijmin=a[0][0];  for(i=0;i4;i++) for(j=0;jM;j++) if(min>a[i][j]) min=a[i][j]; /*求出二维数组的最小值*/ return min; }
    fun(int a[][M]) {   int i,j,min=a[0][0];  for(i=0;i4;i++) for(j=0;jM;j++) if(min>a[i][j]) min=a[i][j]; /*求出二维数组的最小值*/ return min; } 解析:此类求最大值或最小值的C语言问题,我们可以采用逐个比较的方式。要求数组中的所有元素走动一遍,并从中找出最大、最小值,要注意一开始应使min存放数组中的第—个元素的值。可按逐行查找也可按逐列查找的方式,本题采用的是逐行找的方式。即行下标在外层循环,列下标在内层循环,因为在循环的嵌套中越在内层循环,循环变化就越快。

  • 第14题:

    下列给定的程序中,函数fun()的功能是:求出以下分数序列的前n项和。

    2/1,3/2,5/3,8/5,13/8,21/13,…

    其值通过函数值返回main()函数。例如,若输入n=5,则应输出8.391667。

    [注意] 部分源程序给出如下。

    请勿改动主函数main和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。

    [试题源程序]

    include<stdio.h>

    include<conio.h>

    double fun(int n)

    {

    int a=2, b=1, c, k;

    double (1) ;

    for(k=1; k<=n; k++)

    {

    s=s+1.0 *a/b;

    c=a; a+= (2) ; b=c;

    }

    return(d);

    }

    main()

    {

    int n=5;

    printf("\nThe value of function is: %1f\n", (3) );

    }


    正确答案:[1] s=0.0 [2] b [3] fun(n)
    [1] s=0.0 [2] b [3] fun(n) 解析:填空1:根据题目的意思,这里应该是对变量s的声明,注意到后面有对s的累加操作,所以声明之后一定要进行初始化,把s赋值为0。
    填空2:根据题目的意思,此处是循环求和,由数列很容易看出后一项的分子是前一项分母与分子之和,即a=a+b或者a+=b。
    填空3:由算法可以看出,此处是进行子函数调用。

  • 第15题:

    请补充函数fun(),该函数的功能求能整除x且是偶数的数,把这些数保存在数组bb中,并按从大到小的顺序输出。

    例如当x=20时,依次输出:20 10 4 2。

    注意:部分源程序给出如下。

    请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。

    试题程序:

    include<conio.h>

    include<stdio.h>

    void fun(int k,int bb[ ])

    {

    int i;

    int j=0;

    for(【l】;i<=k;i++)

    {

    if(【 】)

    bb[i++]=i;

    }

    printf("\n\n");

    for(i=【 】;i>=0;i--)

    printf(“%d”,bb[i]);

    }

    main( )

    {

    int k=1;

    int bb[100];

    clrscr( );

    printf(“\nPlease input X=”);

    scanf(“%d”,&k);

    fun(k,bb);

    }


    正确答案:i=l k%i==0&&i%2==0 -j
    i=l k%i==0&&i%2==0 -j 解析:第一空:为了求出能整除k,且是偶数的数,寻找范围是从1到k。第二空:如果i能整除k,则k对i求余为0,如果i为偶数,则i对2求余为0,由于这两个条件要同时满足,所以要使用“与”运算符“&&”。第三空:由于数组bb[]中的数是按从小到大的顺序排列的,而题目要求按从大到小输出,所以从数组的最后一个元素开始,依次输出。因为在for循环中,变量j多加了一次,所以这里要将j减1,得到数组最后一个元素的下标。

  • 第16题:

    请编一个函数void fun( int tt[M][N], int pp[N], tt指向一个M行N列的二维数组,求出二维数组每列中最大元素,并依次放入pp所指的一维数组中。二维数组中的数已在主函数中给出。

    注意:部分源程序给出如下。

    请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

    试题程序:

    include <conio.h>

    include <stdio.h>

    define M 3

    define N 4

    void fun(int tt[M][N],int pp[N])

    {

    }

    main()

    {

    int t[M] [N]={{68,32,54,12},{14,24,88,

    58},{42, 22, 44, 56}};

    int p[N],i,j,k;

    clrscr();

    printf("The riginal data is:\n");

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

    {

    for(j=0;j<N;j++)

    printf("%6d",t[i][j]);

    printf("\n");

    }

    fun(t,p);

    printf("\nThe result is:\n");

    for(k=0;k<N;k++)

    printf("%4d",p[k]);

    printf("\n");

    }


    正确答案:void fun(int tt[M][N]int pp[N]) { int iimax; for(j=0;jN;j++) { max=tt[0][j]; /*假设各列中的第一个元素最大*/ for(i=0;iM;i++) if(tt[i][j]>max) /*如果各列中的其他元素比最大值大则将这个更大的元素看作当前该列中最大元素*/ max=tt[i][j]; pp[j]=max; /*将各列的最大值依次放入pp数组中*/ } }
    void fun(int tt[M][N],int pp[N]) { int i,i,max; for(j=0;jN;j++) { max=tt[0][j]; /*假设各列中的第一个元素最大*/ for(i=0;iM;i++) if(tt[i][j]>max) /*如果各列中的其他元素比最大值大,则将这个更大的元素看作当前该列中最大元素*/ max=tt[i][j]; pp[j]=max; /*将各列的最大值依次放入pp数组中*/ } } 解析:本题中函数的功能是求出二维数组中每列的最大元素。首先,假设各列中的第一个元素最大,然后利用行标值的移动来依次取得各列中其他元素的值,并与假设的最大值进行比较,如果遇到更大的,则把这个更大的元素看做当前该列中最大的元素,继续与该列中其他元素比较。

  • 第17题:

    请编写函数void fun (int x,int pp[],int *n),它的功能是求出能整除x且不是奇数的各整数,并按从小到大的顺序放在pp所指的数组中,这些除数的个数通过形参n返回。

    例如,若x中的值为24,则有6个数符合要求,它们是2, 4, 6, 8, 12, 24。

    注意:部分源程序给出如下。

    请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

    试题程序:

    include<conio.h>

    include<stdio.h>

    void fun(int x,int PP[],int *n)

    {

    }

    main ()

    {

    int x,aa[1000],n,i;

    clrscr() ;

    printf("\nPlease enter an integer number:

    \n ") ;

    scanf("%d",&X);

    fun(x,aa,&n);

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

    printf("%d",aa[i]);

    printf("\n");

    }


    正确答案:void fun (int x int pp[] int *n) { int i j=0 for(i=2;i=x;i=i+2) /*i的初始值为2步长为2确保i为偶数*/ if(x%i==0) /*将能整除x的数存入数细pp中*/ pp[j++]=i *n=j /*传回满足条件的数的个数*/ }
    void fun (int x, int pp[], int *n) { int i, j=0 for(i=2;i=x;i=i+2) /*i的初始值为2,步长为2,确保i为偶数*/ if(x%i==0) /*将能整除x的数存入数细pp中*/ pp[j++]=i *n=j /*传回满足条件的数的个数*/ } 解析:本题题干信息是;能整除x且不是奇数的所有整数。循环语句中i从2开始且每次增2,所以i始终是偶数。

  • 第18题:

    编写函数fun(),它的功能是求n以内(不包括n)同时能被3与7整除的所有自然数之和的平方根s,并做为函数值返回。例如:n为1000时,函数值应为s=153.909064。

    注意:部分源程序给出如下。

    请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

    试题程序:

    include <conio.h>

    include <math.h>

    include <stdio.h>

    double fun(int n)

    {

    }

    main()

    {

    clrscr();

    printf("s=%f\n", fun(1000));

    }


    正确答案:double fun(int n) {double s=0.0; int i; for(i=0; in;i++) /*从0~n中找到既能被3整除同时又能被7整除的数并将这些数求和*/ if (i%3==0&&i%7==0) s=s+i; s=sqrt (s); /*对s求平方根*/ return s; }
    double fun(int n) {double s=0.0; int i; for(i=0; in;i++) /*从0~n中找到既能被3整除同时又能被7整除的数,并将这些数求和*/ if (i%3==0&&i%7==0) s=s+i; s=sqrt (s); /*对s求平方根*/ return s; } 解析:本题的解题思路是逐个取得从0~n之间的所有数,对每次取得的数进行条件判断,条件是既能被3整除同时又能被7整除,注意:这两个条件要求同时成立,因此用到了“&及,’运算符。满足条什,该数就被累加到s中去,所有符合条件的数找完后,用sqd()函数(包含于头文件math.h>中)对s求平方根。

  • 第19题:

    请编写函数fun(),它的功能是求Fibonacci数列中小于t的最大的一个数,结果由函数返回。其中Fibonacci数列F(n)的定义为

    F(0)=0,F(1)=1

    F(n)=F(n-1)+F(n-2)

    例如:t=1000时,函数值为987。

    注意:部分源程序给出如下。

    请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

    试题程序:

    include <conio.h>

    include <math.h>

    include <stdio.h>

    int fun(int t)

    {

    }

    main()

    {

    int n;

    clrscr();

    n=1000;

    printf("n=%d, f=%d\n",n, fun(n));

    }


    正确答案:int fun(int t) { int a=1b=1c=0i; /*a代表第n-2项b代表第n-1项c代表第n项*/ /*如果求得的数。比指定比较的数小则计算下一个Fibonacci数对ab得新置数*/ do { c=a+b; a=b; b=c; } while(ct); /*如果求得的数c比指定比较的数大时退出循环*/ c=a; /*此时数c的前一个Fibonacci数为小于指定比较的数的最大的数*/ return c; }
    int fun(int t) { int a=1,b=1,c=0,i; /*a代表第n-2项,b代表第n-1项,c代表第n项*/ /*如果求得的数。比指定比较的数小,则计算下一个Fibonacci数,对a,b得新置数*/ do { c=a+b; a=b; b=c; } while(ct); /*如果求得的数c比指定比较的数大时,退出循环*/ c=a; /*此时数c的前一个Fibonacci数为小于指定比较的数的最大的数*/ return c; } 解析:根据所给数列定义不难发现,该数列最终的结果是由两个数列之和组成,所以可以在循环内部始终把c看成是前两项之和(即第n项),而a始终代表第n-2项,b始终代表第n-1项(通过不断地重新赋值来实现)。应注意,退出循环时得到的数c是大于指定比较的数的最小的数,而它的前一个数就是小于指定比较的数的最大的数。

  • 第20题:

    编写函数int fun(int lim, int aa[MAX]),该函数的功能是求出小于或等于lim的所有素数并放在aa数组中,该函数返回所求出的素数的个数。

    注意:部分源程序给出如下。

    请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

    试题程序:

    include<conio.h>

    include<stdio.h>

    define MAX 100

    int fun(int lim, int se[MAX])

    {

    }

    main()

    {

    int limit,i,sum;

    int aa[MAX];

    clrscr();

    printf("输入一个整数");

    scanf("%d",&limit);

    sum=fun(limit,aa);

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

    {

    if(i%10==0&&i!=0) /*每行输出10个数*/

    printf("\n");

    printf("%5d ",aa[i]);

    }

    }


    正确答案:int fun(int lim int aa[MAX]) { int ijk=0; for(i=2;i=lim;i++) /*求出小于或等于lim的全部素数*/ { for(j=2;ji;j++) if(i%j==0) break; if(j>=i) aa[k++]=i;; /*将求出的素数放入数组aa中*/ } return k; /*返回所求出的素数的个数*/ }
    int fun(int lim, int aa[MAX]) { int i,j,k=0; for(i=2;i=lim;i++) /*求出小于或等于lim的全部素数*/ { for(j=2;ji;j++) if(i%j==0) break; if(j>=i) aa[k++]=i;; /*将求出的素数放入数组aa中*/ } return k; /*返回所求出的素数的个数*/ } 解析:在做这道题时,我们只需掌握素数的基本算法就可以了,一般表示素数的方法如下:
    for (j=2;ji;j++)
    if(i%j==0) break;
    if(j>=i)

  • 第21题:

    请编写一个函数int fun(int *s,int t,int *k),用来求出数组的最大元素在数组中的下标并存放在k所指的存储单元中。

    例如,输入如下整数:

    876 675 896 101 301 401 980 431 451 777

    则输出结果为6,980。

    注意:部分源程序给出如下。

    请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

    试题程序:

    include <conio.h>

    include <stdio.h>

    int fun(int *s,int t,int *k)

    {

    }

    main()

    {

    int a[10]={ 876,675,896,101,301,401,

    980,431,451,777},k;

    clrscr();

    fun(a, 10, &k);

    printf("%d, %d\n ", k, a[k]);

    }


    正确答案:int fun(int *sint tint *k) { int i; *k=0; /*k所指的数是数组的下标值*/ for(i=0;it;i++) if(s[*k]s[i]) *k=i; /*找到数组的最大元素把该元素的下标赋给k所指的数*/ return s[*k]; /*返回数组的最大元素*/ }
    int fun(int *s,int t,int *k) { int i; *k=0; /*k所指的数是数组的下标值*/ for(i=0;it;i++) if(s[*k]s[i]) *k=i; /*找到数组的最大元素,把该元素的下标赋给k所指的数*/ return s[*k]; /*返回数组的最大元素*/ } 解析:本题中直接使用指针变量k,但在使用时要注意对k的指针运算,此外,一开始应让*k的值为数组中的某一下标值,即*k=0。

  • 第22题:

    m个人的成绩存放在score数组中,请编写函数fun(),它的功能是将高于平均分的人数作为函数值返回,将高于平均分的分数放在叩所指的数组中。

    例如,当score数组中的数据为24,35,88,76,90,54, 59,66,96时,函数返回的人数应该是5,up中的数据应为88, 76, 90, 66, 96。

    注意:部分源程序给出如下。

    请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

    试题程序:

    include <conio.h>

    include <stdio.h>

    include <string.h>

    int fun(int score[],int m,int up[])

    {

    }

    main()

    {

    int i,n,up[9];

    int score[9]={24,35,88,76,90,54,

    59,66,96};

    clrscr();

    n=fun(score,9,up);

    printf("\nup to the average score are:");

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

    printf("%d",up[i]);

    }


    正确答案:int fun(int score[]int m int up[]) { int ij=0; float av=0.0 for(i=0;im;i++) av=av+score[i]/m; /*求平均值*/ for(i=0;im;i++) if(score[i]>av) /*如果分数高于平均分则将此分数放入up数组中*/ up[j++]=score[i]; return j; /*返回高于平均分的人数*/ }
    int fun(int score[],int m, int up[]) { int i,j=0; float av=0.0 for(i=0;im;i++) av=av+score[i]/m; /*求平均值*/ for(i=0;im;i++) if(score[i]>av) /*如果分数高于平均分,则将此分数放入up数组中*/ up[j++]=score[i]; return j; /*返回高于平均分的人数*/ } 解析:该题第1个循环的作用是求出平均分av,第2个循环的作用是找出高于平均分的成绩并存入up数组中。

  • 第23题:

    请编写一个函数intproc(int*s,intt,int*k),用来求出数组的最大元素在数组中的下标并存放在k所指的存储单元中。 例如,输入如下整数: 876675896101999401980431451777 则输出结果为4,999。 注意:部分源程序给出如下。 请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括号中填入所编写的若干语句。 试题程序:


    正确答案:

    【解析】要得到数组中的最大元素的下标,需要比较数组中的每一个元素。将最大的元素返回给主函数,最大元素的下标通过形参返回给主函数。