问答题请根据以下各小题的要求设计C应用程序(包括界面和代码)。请编写函数fun(),它的功能是:将3行4列矩阵x乘以4行3列矩阵y,结果放在3行3列矩阵xy中。矩阵相乘的基本方法是:矩阵xy中行列下标分别为i,j的元素的值,是矩阵x中第i行上4个元素与矩阵y第j列上4个元素对应相乘的和。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序如下: #include #include void fun(int a[3][4],int

题目
问答题
请根据以下各小题的要求设计C应用程序(包括界面和代码)。   请编写函数fun(),它的功能是:将3行4列矩阵x乘以4行3列矩阵y,结果放在3行3列矩阵xy中。矩阵相乘的基本方法是:矩阵xy中行列下标分别为i,j的元素的值,是矩阵x中第i行上4个元素与矩阵y第j列上4个元素对应相乘的和。   注意:部分源程序给出如下。   请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。   试题程序如下: #include  #include  void fun(int a[3][4],int b[4][3],int ab[3][3]) { } main() {  int x[3][4] = {{1,0,1,1}, {2,1,0,1}, {1,2,0,3}};  int y[4][3] = {{1,1,1}, {0,0,0}, {2,1,1}, {1,1,3}};  int xy[3][3] = {0},i,j;  fun(x,y,xy);  printf(a × b = ab:(3,3):);  for(i=0;i<3;i++)  {   for(j=0;j<3;j++)    printf(%d,xy[i][j]);   printf();  } }

相似考题
更多“问答题请根据以下各小题的要求设计C应用程序(包括界面和代码)。   请编写函数fun(),它的功能是:将3行4列矩阵x乘以4行3列矩阵y,结果放在3行3列矩阵xy中。矩阵相乘的基本方法是:矩阵xy中行列下标分别为i,j的元素的值,是矩阵x中第i行上4个元素与矩阵y第j列上4个元素对应相乘的和。   注意:部分源程序给出如下。   请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。   试题程序如下: #include #include voidfun(inta[3”相关问题
  • 第1题:

    请编写一个函数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存放数组中的第—个元素的值。可按逐行查找也可按逐列查找的方式,本题采用的是逐行找的方式。即行下标在外层循环,列下标在内层循环,因为在循环的嵌套中越在内层循环,循环变化就越快。

  • 第2题:

    请补充main函数,该函数的功能是:输出一个3×3的矩阵,要求必须使用行指针表示输出变量。

    注意;部分源程序给出如下.

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

    试题程序:

    include<s tdio. h>

    main()

    {

    static int array[3] [3]={{9,8,7}, {6,5,

    4}, (3,2,1}};

    iht (*p) [3],j,i;

    p=【 】

    clrscr ();

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

    {

    printf (" \n\n" );

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

    printf("%4d",【 】);

    }

    }


    正确答案:array *(*(p+i)+j)
    array *(*(p+i)+j) 解析:第一空:p是一个指针,指向大小为3的一维数组。首先要使指针p指向数组array的首地址,而数组名array即表示数组slray的首地址,所以将array赋给p。第二空:*(*(p+i+j)表示数组的第i行第j列元素,即array[i][j]。

  • 第3题:

    请补充函数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。

  • 第4题:

    请编写函数fun(),它的功能是计算下列级数和,和值由函数值返回。

    S=1+x+x2/2!3/3!+…/xn/n!

    例如,当n=10,x=0.3时,函数值为1349859。

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

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

    试题程序:

    include<conio.h>

    include<stdio.h>

    include<math.h>

    double fun(double x, int n)

    {

    }

    main ()

    {

    clrscr ();

    printf ("%f ",fun(0,3,10));

    }


    正确答案:double fun(double xint n) { int i; double s=1.0.s1=1.0; for(i=1;i=n;i++) {s1=s1*i; /*各项中的阶乘*/ s=s+ pow(xi)/s1; /*按公式求出*/ } return s; }
    double fun(double x,int n) { int i; double s=1.0.s1=1.0; for(i=1;i=n;i++) {s1=s1*i; /*各项中的阶乘*/ s=s+ pow(x,i)/s1; /*按公式求出*/ } return s; } 解析:本程序中用s1来表示每项的分母(即各项中的阶乘),要注意本程序中s和s1的初值都为1。

  • 第5题:

    下列程序定义了N×N的二维数组,并在主函数中自动赋值;请编写函数fun(int a[][N]),该函数的功能是:使数组左下半三角元素中的值全部置成0。例如a数组中的值为

    a=1 9 7

    2 3 8

    4 5 6

    则返回主程序后a数组中的值应为

    0 9 7

    0 0 8

    0 0 0

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

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

    试题程序:

    include <conio.h>

    include <stdio.h>

    include <stdlib.h>

    define N 5

    int fun (int a[] [N])

    {

    }

    main()

    {

    int a[N] [N],i,j;

    clrscr();

    printf("*****The array*****\n");

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

    /*产生—个随机的5*5矩阵*/

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

    {a[i][j]=rand()%10;

    printf("%4d", a[i][j]);

    }

    printf("\n");

    }

    fun (a);

    printf("THE RESULT\n");

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

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

    printf("%4d",a[i][j));

    printf("\n");

    }

    }


    正确答案:int fun (int a[][N]) { int ij; for(i=0;iN;i++) for(j=0;j=i;j++) a[i][j]=0; /*将数组左下半三角元素中的值全部置成0*/ }
    int fun (int a[][N]) { int i,j; for(i=0;iN;i++) for(j=0;j=i;j++) a[i][j]=0; /*将数组左下半三角元素中的值全部置成0*/ } 解析:本题旨在考查控制数组中左下半三角元素的算法,也就是两个千篇一律的循环语句,希望学习者能够掌握消化。

  • 第6题:

    编写程序,实现矩阵(3行3列)的转置(即行列互换)。

    例如,若输入下面的矩阵:

    100 200 300

    400 500 600

    700 800 900

    则程序输出:

    100 400 700

    200 500 800

    300 600 900

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

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

    试题程序:

    include <stdio.h>

    include <conio.h>

    int fun (int array[3][3])

    {

    }

    main()

    {

    int i,j;

    int array [3][3]={{100,200,300},{400,

    500,600},{700,800,900}};

    clrscr();

    for (i-0;i<3;i++)

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

    printf("%7d ",array[i] [j]);

    printf("\n ");

    }

    fun(array);

    printf("Converted array:\n ");

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

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

    printf("%7d ",array[i][j]);

    printf("\n ");

    }

    }


    正确答案:int fun (int array[3][3]) { int ijt; for(i=0;i3;i++) /*将右上三角和左下三角对换实现行列互换*/ for(j=i+1;j3;j++) {t=array[i][j]; array[i][j]=array[j][i]; array[j][i]=t; } }
    int fun (int array[3][3]) { int i,j,t; for(i=0;i3;i++) /*将右上三角和左下三角对换,实现行列互换*/ for(j=i+1;j3;j++) {t=array[i][j]; array[i][j]=array[j][i]; array[j][i]=t; } } 解析:注意对矩阵转置后仍然存回其本身时,只能循环矩阵中的一个角(本程序是右上半三角)。控制右上半三角的方法是在第2个循环中j从i+1或i开始,左下半三角的方法是在第2个循环中写成for(j=0;ji;j++),若要控制所有元素在第2个循环要写成for(j=0;j3;j++)。

  • 第7题:

    请编写一个函数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存放数组中的第一个元素的值。可按逐行查找也可按逐列查找的方式,本题采用的是逐行查找的方式。即行下标在外层循环列下标在内层循环,因为在循环的嵌套中越在内层循环,循环变化就越快。

  • 第8题:

    请编写一个函数fun(),它的功能是:找出一维数组元素中最大的值和它所在的下标,最大值和它所在的下标通过形参传回。数组元素中的值已在主函数中赋予。

    主函数中x是数组名,n是x中的数据个数,max存放最大值,index存放最大值所在元素的下标。

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

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

    试题程序:

    include<stdlib.h>

    include<stdio.h>

    void fun(int a[],int n, int *max,int *d)

    {

    }

    main()

    {

    int i, x[20], max, index, n=10;

    randomize();

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

    {

    x[i]=rand()%50;

    printf("%4d",x[i]);

    /*输出一个随机数组*/

    }

    printf("\n");

    fun(x,n,&max,&index);

    printf("Max=%5d,Index=%4d\n",max,index);

    }


    正确答案:void fun(int a[]int nint *maxint *d) { int i; *max=a[0]; *d=0; for(i=0;in;i++) /*将最大的元素放入指针max所指的单元最大元素的下标放入指针d所指的单元*/ if(*maxa[i]) {*max=a[i];*d=i;} }
    void fun(int a[],int n,int *max,int *d) { int i; *max=a[0]; *d=0; for(i=0;in;i++) /*将最大的元素放入指针max所指的单元,最大元素的下标放入指针d所指的单元*/ if(*maxa[i]) {*max=a[i];*d=i;} } 解析:该程序直接使用形参max和d,由于它们都是指针变量,所以要引用它所指向的变量时要对它进行指针运算,也即*号运算。

  • 第9题:

    请编写函数fun,其功能是:找出2×M整型二维数组中最大元素的值,并将此值返回调用函数。 注意:部分源程序在文件PROGl.C中。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。


    正确答案:


    【考点分析】
    本题考查:求数组的最大值,需要运用循环语句,因为数组是二维数组,所以应使用二层for循环嵌套。使用for循环语句时需要注意循环变量的取值范围。
    【解题思路】
    此类求最大值或最小值的问题,我们可以采用逐个比较的方式,要求对数组中所有元素遍历一遍,并且从中找出数组最大值或最小值。首先定义变量max存放数组中的第一个元素的值,然后利用for循环逐个找出数组中的元素,并与max比较,如果元素值大于max,则将该值赋予max,循环结束后max的值即为数组最大值,最后将该值返回。
    【解题宝典】
    该类题目考查较多,要掌握逐行比较的方法。对于m*n二维数组,如采用逐行查找方法,代码实现为:


  • 第10题:

    程序定义了NxN的二维数组,并在主函数中自动赋值。请编写函数fun,函数的功能是:使数组右上三角元素中的值乘以m。

    例如:若m的值为2,a数组中的值为:

    注意:部分源程序存在文件PROGl.C文件中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。


    正确答案:
    解析:该程序功能是使数组右上半三角元素中的值乘以m。本题中首先要确定右上角半角元素的特点,然后对元素逐个进行乘以m的操作。其中,右上角的元素是行下标小于等于列下标的元素。

  • 第11题:

    请编写函数proc(),该函数的功能是:实现B=A+A &39;,即把矩阵A加上A的转置,存放在矩阵B中。计算结果在main()函数中输出。

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

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

    试题程序:


    正确答案:


    【解析】矩阵与其逆置矩阵的关系为:逆置矩阵中某一位置上的元素值为原矩阵中,行下标与列下标互换后的位置上的元素。根据这个特点求出各个位置上逆置矩阵中对应的值,进行相加并放在该位置上。

  • 第12题:

    请补充fun()函数,fun()函数的功能是求n的阶乘。 注意:部分源程序给出如下。 请勿改动main()函数和其他函数中的任何内容,仅在fun()函数的横线上填入所编写的若干表达式或语句。 试题程序:


    正确答案:
    【1】n>1或1<n【2】n-1【3】1或11或lL
    【解析】此题应用的是递归算法,因为10!=1091,91=98!,8!=87!…依此类推,而1!=1,2!=21!=2,3!=32!=6…,依此可以推出101,递推算法表示为:n!=1(n=1或n=0)n!=11*(n=1)(n>1)

  • 第13题:

    下列程序定义了NXN的二维数组,并在主函数中自动赋值。请编写函数fun(int a[][N]),该函数的功能是使数组右上半三角元素中的值全部置成0。例如a数组中的值为

    a=4 5 6

    1 7 9

    3 2 6,

    则返回主程序后a数组中的值应为

    0 0 0

    1 0 0

    3 2 0

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

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

    试题程序:

    include<conio.h>

    include<stdio.h>

    include<stdlib.h>

    define N 5

    int fun(int a[ ][N])

    {

    }

    main()

    {

    int a[N][N],i,j;

    clrscr( );

    printf("*****The array*****\n");

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

    /*产生—个随机的5*5矩阵*/

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

    {a[i][j]=rand( )%10;

    printf (“%4d”,a[i][j]);

    }

    printf(“\n”);

    }

    fun(a);

    printf(“THE RESULT\n”);

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

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

    printf(“%4d”,a[i][j]);

    printf(“\n”);

    }

    }


    正确答案:int fun (int a[][N)) { int ij; for(i=0;iN;i++) for(j=i;jN;j++) a[i][j]=0; /*将数组右上半三角元素中的值全部置成0*/ }
    int fun (int a[][N)) { int i,j; for(i=0;iN;i++) for(j=i;jN;j++) a[i][j]=0; /*将数组右上半三角元素中的值全部置成0*/ } 解析:本题旨在考查控制数组中右上半三角元素的算法,也就是两个千篇一律的循环语句,希望学习者能够掌握消化。

  • 第14题:

    请编写函数fun(),该函数的功能是:计算n门课程的平均分,计算结果作为函数值返回。

    例如x有5门课程的成绩是90.5,72,80,61.5,55,则函数的值为71.80。

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

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

    试题程序:

    include <stdio.h>

    float fun (float *a, int n)

    {

    }

    main ()

    {

    float score[30]=(90.5,72,80,61.5,55},

    aver;

    aver=fun(score, 5);

    printf("\nAverage score is: %5.2f

    \n",aver);

    }


    正确答案:float fun (float *a int n) { float av=0.0; int i; for(i=0;i av=av+a[i]; /*求分数的总和*/ return (av/n); /*返回平均值*/ }
    float fun (float *a, int n) { float av=0.0; int i; for(i=0;i av=av+a[i]; /*求分数的总和*/ return (av/n); /*返回平均值*/ } 解析:我们先按数学的思路来计算平均分:总分除以人数即可得到平均分,其实用C语言的指针来实现该问题,也不难。当指针变量指向一个数组时,用该指针变量引用数组元素时,引用方式与数组的引用方式相同。如本题中a指向了score,所以通过a引用score中的元素时可以用下标法,也可以用指针运算法,a[i]和*(a+i)具有相同的作用。下标运算实际上是从当前地址开始往后取出地址中的第几个元素,当前地址下标为0。例如:若有int cc[10],*P=cc+5;,即p指向了cc的第5号元素,则p[0]的作用是取出从当前地址(即p所指地址)开始的第0号元素,它与cc[5]相同:p[3]的作用是取出从当前地址(即p所指地址)开始往后的第3号元素,它与cc[8]相同:p[-2]的作用是取出从当前地址开始往前的第2号元素,它与cc[3]相同,但不提倡使用“负”的F标。

  • 第15题:

    编写函数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求平方根。

  • 第16题:

    请编写函数fun(),函数的功能是求出二维数组周边元素之和,作为函数值返回。二维数组中的值在主函数中赋予。

    例如:若二维数组中的值为

    1 3 5 7 9

    2 9 9 9 4

    6 9 9 9 8

    1 3 5 7 0

    则函数值为61。

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

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

    试题程序:

    include<conio.h>

    include<stdio.h>

    define M 4

    define N 5

    int fun( int a [M][N])

    {

    }

    main()

    {

    int aa[M][N]={{1,3,5,7,9},{2,9,9,9,4},

    {6,9,9,9,8},{1,3,5,7,0}};

    int i, j, y;

    clrscr();

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

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

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

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

    printf("\n ");

    }

    y=fun(aa);

    printf("\nThe sun:%d\n ",y);

    printf("\n");

    }


    正确答案:int fun( int a [M] [N]) { int ijsum=0; for(i=0;iM;i++) for(j=0;iN;j++) if(i==0||i==M-1||j==0||j==N-1) /*只要下标中有一个为0或M-1或N-1则它一定是周边元素*/ sum=sum+a[i][j]; /*将周边元素相加*/ return sum; }
    int fun( int a [M] [N]) { int i,j,sum=0; for(i=0;iM;i++) for(j=0;iN;j++) if(i==0||i==M-1||j==0||j==N-1) /*只要下标中有一个为0或M-1或N-1,则它一定是周边元素*/ sum=sum+a[i][j]; /*将周边元素相加*/ return sum; } 解析:本题采用逐一判断的方式,周边元素的下标一定有一个是0或M-1或N-1,且只要下标中有一个为0或M-1或N-1,则它一定是周边元素。

  • 第17题:

    请编写函数fun(),它的功能是计算下列级数和,和值由函数值返回。

    S=1-x+x2(上标)/2!-x3(上标)/3!+…+ (-1*x) n(上标)/n!

    例如,当n=15,x=0.5时,函数值为0.606531。

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

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

    试题程序:

    include<conio.h>

    include<stdio.h>

    include<math.h>

    double fun(double x, int n)

    {

    }

    main()

    {

    clrscr();

    printf("%f ",fun (0.5,15));

    }


    正确答案:double fun(double x int n) { int ij=1; double s=1.0s1=1.0; for(i=1;i=n;i++) { j=-1*j; s1=s1*i /*各项中的阶乘*/ s=s+j*pow(xi)/s1; /*按公式求出*/ } return s; }
    double fun(double x, int n) { int i,j=1; double s=1.0,s1=1.0; for(i=1;i=n;i++) { j=-1*j; s1=s1*i /*各项中的阶乘*/ s=s+j*pow(x,i)/s1; /*按公式求出*/ } return s; } 解析:本程序中用s1来表示每项的分母(即各项中的阶乘),要注意本程序中s和s1的初值都为1。注意到本题的公式中是加减相间的,这里要学会使用语句j=-1*j来实现。

  • 第18题:

    请编写函数fun(),它的功能是计算:s=(1-In(1)-In(2)-In(3)-…-1n(m))2

    s作为函数值返回。

    在C语言中可调用log(n)函数求In(n)。log函数的引用说明是double log(double x)。

    例如,若m的值为15,则fun()函数值为723.570801。

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

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

    试题程序:

    include <conio.h>

    include <stdio.h>

    include <math.h>

    double fun(int m)

    {

    }

    main()

    {

    clrscr();

    printf("%f\n",fun(15));

    }


    正确答案:double fun(int m) {   int i; double s=1.0; for(i=1;i=m;i++) s=s-log(i); /*计算s=l-In(1)-In(2)-In(3)-…-In(m)*/ return (s*s); /*对s求平方并返回*/ }
    double fun(int m) {   int i; double s=1.0; for(i=1;i=m;i++) s=s-log(i); /*计算s=l-In(1)-In(2)-In(3)-…-In(m)*/ return (s*s); /*对s求平方并返回*/ } 解析:首先,题目要求计算1依次减去1到M的对数,可用从1到M的循环,每次循环都减一个数的对数。该题需要注意,log()函数的形式参数应浩如烟海double型变量,用于循环的基数变量为整数,需要进行强制转换。最后在返回的时求平方。

  • 第19题:

    请补充main函数,该函数的功能是:输出一个N×N矩阵,要求非对角线上的元素赋值为0,对角线元素赋值为1。

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

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

    试题程序:

    include<stdio. h>

    define N 10

    main ( )

    {

    int bb[N] [N];

    int i, j,n;

    clrscr ();

    printf (" \nInput n:\n");

    scanf ("%d", &n);

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

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

    {

    【 】;

    if (i==j)

    bb[i] [j]=【 】;

    if (【 】)

    bb[i] [j]=1;

    }

    printf(" \n***** the result ***** \n");

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

    {

    printf (" \n\n");

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

    printf ("%4d",bb [i] [j] );

    }

    }


    正确答案:bb[i][j]=0 1 j==n-1-i
    bb[i][j]=0 1 j==n-1-i 解析:第一空:本题的解题思路是先将所有元素都置0,然后再将对角线上的元素置1。所以此空是先将当前元素置0。
    第二空:如果当前元素的下标i和j相等,则此元素是主对角线元素,要将它赋值为1。第三空:如果当前元素的下标i和j满足关j==n-1-i,则此元素也是对角线元素,也要将它赋值为1。

  • 第20题:

    请编写函数fun,其功能是分别统计形参t所指二维数组中字母A和c的个数。

    注意:部分源程序存在PROGl.C中,请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所缩写的若干语句。

    试题程序:


    正确答案:
    inti=0,j=0;//循环统计的下标【考点分析】主要考察考生对多重循环的理解与使用,以及字符串的比较。【解题思路】对二维数组的行列分别循环,行优先,查找数组中元素为A或者C,分别对其进行计数。

  • 第21题:

    请补充函数fun(),该函数的功能是:输出一个N×N矩阵,N由键盘输入,矩阵元素的值为随机数,并计算出该矩阵四周边元素的平均值,结果由函数返回。例如:当N=4时:

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

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

    试题程序;

    include<stdio.h>

    include<conio.h>

    include<stdlib.h>

    define N 20

    double fun(int a[ ][N],int n)

    {

    int i,j;

    int k;

    double s=0.0;

    double aver=0.0;

    printf("*****The array*****\n");

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

    {

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

    {

    a[i][j]=rand()%10;

    printf("%4d",a[i][j]);

    if(【 】)

    s+=a[i][j];

    }

    printf("\n");

    }

    k=【 】;

    aver=【 】;

    return aver;

    }

    main( )

    {

    int a[N][N];

    int n;

    double S;

    Clrscr( );

    printf("*****Input the dimension Of array N*****\n");

    scanf(“%d”,&n);

    S=fun(a,n);

    printf(“***** THE RESULT *****\n”);

    printf(“The average is %2,3f\n”,S);

    }


    正确答案:i==0||i==n-1||j==0||j==n—1 4*n-4 s/k
    i==0||i==n-1||j==0||j==n—1 4*n-4 s/k 解析:第一空:用二维数组表示n×n矩阵时,周边元素是行下标为0或n-1,列下标为0或n-1的元素,判断时四个条件中只要有一个条件满足,则该元素就是周边元素,所以用“厂运算符。第二空:变量k记录周边元素的个数,在四个顶角上的元素会重复加入,所以要减去4。第三空:变量s保存周边元素的累加和,平均值等于周边元素的累加和除以个数。

  • 第22题:

    请编写函数proc(),函数的功能是求出二维数组周边元素之和,作为函数值返回。二维数组中的值在主函数中赋予。

    则函数值为59。

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

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

    试题程序:


    正确答案:


    【解析】要求二维数组周边元素之和,首先应该判断数组中的每一个元素是否是周边元素。找出所有的周边元素后求和,返回给主函数。周边元素的下标特点为行或列的下标为。或N—1。根据此特点,找出所有的周边元素然后求和。

  • 第23题:

    请编写程序fun,函数的功能是:实现B=A+Aˊ,即把矩阵A加上A的转置,存放在矩阵B中。计算结果在main函数中输出。

    例如,输入下面的矩阵: 其转置矩阵为:

    1 2 3 1 4 7

    4 5 6 2 5 8

    7 8 9 3 6 9

    程序输出:

    2 6 10

    6 10 14

    10 14 18

    注意:部分源程序在文件PROGl.C中。

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


    正确答案:
    解析:该程序功能是实现B=A+Aˊ,即把矩阵A加上A的转置。其中,所谓矩阵的转置,是把行中的数据与列中的数据进行对调。解题过程中首先求得已给的矩阵的转置,然后在循环过程中对矩阵与该矩阵的转置对应元素求和。