给定程序中,函数fun的功能是:判定形参a所指的N×N(规定N为奇数)的矩阵是否是“幻方”,若是,则函数返回值为1;若不

题目
问答题
给定程序中,函数fun的功能是:判定形参a所指的N×N(规定N为奇数)的矩阵是否是“幻方”,若是,则函数返回值为1;若不是,则函数返回值为0。“幻方”的判定条件是:矩阵每行、每列、主对角线及反对角线上元素之和都相等。  例如,以下3×3的矩阵就是一个“幻方”:  4 9 2  3 5 7  8 1 6  请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。  注意:部分源程序给出如下。  不得增行或删行,也不得更改程序的结构!  试题程序:#include #define N 3int fun(int (*a)[N]){ int i,j,m1,m2,row,colum; m1=m2=0; for(i=0; i
如果没有搜索结果或未解决您的问题,请直接 联系老师 获取答案。
相似问题和答案

第1题:

编写函数fun(),它的功能是:计算和输出下列级数的和。

S=1/(1×2)+1/(2×3)+…+1/(n×(n+1))

例如,当n=10时,函数值为0.909091。

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

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

试题程序;

include<conio.h>

include<stdio.h>

double fun(int n)

{

}

main ( )

{

clrscr();

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

}


正确答案:double fun(int n) { int i; double s=0.0; for (i=l; i<=n; i++) s=s+l.0/(i* (i+l)); /*求级数的和*/ return s; }
double fun(int n) { int i; double s=0.0; for (i=l; i<=n; i++) s=s+l.0/(i* (i+l)); /*求级数的和*/ return s; } 解析:解决数学序列的问题,我们的思路依然是“数学先行”,即先看清楚题目的数学逻辑,然后再根据C语言来“翻译”出来。本题中,每一项的值都是n*(n+1)的倒数。当输入n时,从1开始循环,注意,此处for(i=1;i

第2题:

若给fun函数的形参s传送字符串:"]]6354abcc" (其中]表示空格字符),则函数的返回值是【19】。

#include <ctype.h>

long fun(char s[])

{long n;int sign;

for(;isspace(*s);s++);

sign=(*s==′-′)?-1:1;

if(*s==′+′||*s==′-′)s++;

for(n=0;isdigit(*s);s++)n=10*n+(*s-′0′);

return sign*n;

}


正确答案:
6354

第3题:

以下函数 fun 的功能是返回 str 所指字符串中以形参 c 中字符开头的后续字符串的首地址 , 例如 : st r所指字符串为 : Hello! , c 中的字符为 e ,则函数返回字符串 : ello! 的首地址。若 str 所指字符串为空串或不包含 c 中的字符,则函数返回 NULL 。请填空。

char *fun(char *str,char c)

{ int n=0; char *p=str;

if(p!=NULL)

while(p[n]!=c&&p[n]!='\0') n++;

if(p[n]=='\0') return NULL;

return( 【 1 2 】 );

}


正确答案:
(12) 【 12 】 p+n
解析 : n++ 到一定数值 , 就找到所指的字符 , 返回 c 的地址。

第4题:

请编写函数fun(),该函数的功能是判断字符串是否为回文,若是则函数返回1,主函数中输出YES:否则返回0,主函数中输出NO。回文是指顺读和倒读都一样的字符串。

例如:字符串LEVEL是回文,而字符串123312就不是回文。

注意;部分源程序已存在文件test26_.cpp中。

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

文件test26_2.cpp的内容如下:

include<iostream.h>

include<stdio.h>

define N 80

int fun(char*str)

{

}

void main()

{char s[N];

cout<<"Enter a string:"<<endl;

gets{s);

cout<<"\n\n";

puts(s);

if(fun(s))

cout<<"YES\n";

else

cout<<"NO\n";

}


正确答案:int fun(char*str) {int in=Ofg=1; char*p=str; while(*p) {n++; p++;} for(i=0;in/2;i++) if(str[i]==str[n-1-i]) ; else {fg=O;break;} return fg; }
int fun(char*str) {int i,n=O,fg=1; char*p=str; while(*p) {n++; p++;} for(i=0;in/2;i++) if(str[i]==str[n-1-i]) ; else {fg=O;break;} return fg; } 解析:解答本题的主要思路是:首先要利用循环中指针的移动来求得字符串的长度n,然后用一个for循环依次取得数组中的前半部分元素,用取得的前半部分内的元素逐个与后半部分内的对应位置的元素进行比较,如果相同,不做任何工作,接着取下一个元素,继续比较:如果不相同,可以判断该字符串肯定不是回文,就给标志变量fg赋值0(fg的初始值为1)。最终把fg作为函数的返回值返回(fg值为1表明是回文,fg值为0表明不是回文)。

第5题:

请编写一个函数fun(),它的功能是计算并输出给定整数n的所有因子(不包括1与自身)之和(规定n的值不大于1000)。

例如:输入n的值为856,则输出为sum=763。

注意:部分源程序已存在文件test33_2.cpp中。

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

文件test33_2.cpp清单如下:

include<stdio. h>

include<iostream. h>

int fun(int n)

{

}

void main ( )

{

int n, sum;

cout<<"Input n:"<<end1;

cin>>n;

sum=fun (n);

cout<<" sum= \n"<<sum<<end1;

}


正确答案:int fun(int n) {int s=0i; for(i=2;i=n-1;i++) if (n%i==0) s+=i; return s; }
int fun(int n) {int s=0,i; for(i=2;i=n-1;i++) if (n%i==0) s+=i; return s; } 解析:本题的解题思路是用n逐个去除以2到n-1之间的所有数,如果n能被除尽,则把所得到的一个因子累加到s中去。此种题型为典型考题。

第6题:

已知递归函数fun的定义如下: int fun(int n) { if(n<=1)return 1;//递归结束情况 else return n*fun(n-2);//递归 } 则函数调用语句fun(5)的返回值是( )。

A.5

B.12

C.15

D.30


正确答案:C
解析:递归函数fun被定义为含有参数int n返回整型.其中 fun函数递归调用本身,当n=1时,fun返回1,如果大于1那么执行n*fun(n-2)。所以,当n等于5时,执行5*fun(3);当n等于3时继续调用fun,3*fun(1),即fun(5)=5*(3*fun(1)),答案为15。

第7题:

下列给定程序中,函数fun()的功能是计算并输出high以内的素数之和。high由主函数传给fun()函数。

例如:若high的值为100,则函数的返回值为1060。

请改正程序中的错误,使它能得到正确结果。

[注意] 不要改动main函数,不得增行或删行,也不得更改程序的结构。

[试题源程序]

include <conio.h>

include <stdio.h>

include<math.h>

int fun(int high)

{

int sum=0, n=0, j, yes;

while(high>=2)

{

yes=1;

for(j=2;j<=high/2; j++)

**********************found**********************/

ifhigh%j==0

{

yes=0;

break;

}

/**********************found**********************/

if(yes==0)

{

sum+=high;

n++;

}

high--;

}

return sum;

}

main()

{

clrscr();

printf("%d\n", fun(100));

}


正确答案:(1)错误:ifhigh%j==0 正确:if(high%j==0) (2)错误:if(yes==0) 正确:if(yes)
(1)错误:ifhigh%j==0 正确:if(high%j==0) (2)错误:if(yes==0) 正确:if(yes) 解析:fun函数的功能是:用while循环查找high以内的素数;用for循环判断一个数是否为素数;用变量n记录找到的素数的个数:用return返回素数之和sum。
错误1:这个错误比较明显,if语句的两侧要加括号。
错误2:yes为1时,说明被判断的数是素数,要累加到sum。

第8题:

下列给定程序中,函数 fun() 的功能是:计算并输出下列级数的的N项之和SN,直到SN+1大于q为止,q的值通过形参传入。

SN=2/1+3/2+4/3+(N+1)/N

例如,若q的值为50.0,则函数值为49.394948。

请改正程序中的错误,使它能得出正确的结果。

注意;不要改动main 函数,不得增行或删行,也不得更改程序的结构.

试题程序:

include <conio.h>

include <stdio. h>

/**************found***************/

double fun(double q)

{ int n; double s,t;

n=2;

s=2.0;

while (s<=q)

{

t=s

/*************found *************/

s=s+ (n+1)/n;

n++;

}

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

/************found***************/

return s;

}

main ()

{ clrscr();

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

}


正确答案:(1)错误:double fun (double q) 正确:double fun (int q) (2)错误:s=s+(n+1)/n; 正确:s=s+(double)(n+1)/n; (3)错误:return s; 正确:return t;
(1)错误:double fun (double q) 正确:double fun (int q) (2)错误:s=s+(n+1)/n; 正确:s=s+(double)(n+1)/n; (3)错误:return s; 正确:return t; 解析:该程序中多次出现了函数调用过程中定义混乱的错误,关于类似问题,我们在前面的试题中已经做过比较详细的解释,主要是对基础知识的把握。在这里我们再对函数调用规则做一简单说明。
C语言规定,在以下几种情况下可以不在调用函数前对被调用函数做类型说明。
(1)如果函数的值(函数的返回值)是整型或字符型,可以不必进行说明,系统对它们自动按整型说明。但为清晰起见,建议都加以说明为好。
(2)如果被调用函数的定义出现在主调函数之前,可以不必加以说明。因为编译系统已经先知道了已定义的函数类型,会自动处理的。也就是说,将被调用的函数的定义放在主调函数之前,就可以不必另加类型说明。
(3)如果已在所有函数定义之前,在文件的开头,在函数的外部已说明了函数类型,则在各个主调函数中不必对所调用的函数再做类型说明。
除了以上3种情况外,都应该按上述介绍的方法对所调用函数的返回值做类型说明,否则编译时就会出现错误。

第9题:

请编写函数fun(),其功能是;计算井输出下列多项式值。

S=(1-1/2)+(1/3-1/4)+…+(1/(2n-1)-1/2n)

例如,若主函数从键盘给n输入8后,则输出为 S-0.662872。

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

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

试题程序;

include<stdio. h>

double fun(int n)

{

}

main ()

{

int n;

double s;

printf("\nInput n: ");

scanf ("%d", &n);

s=fun (n);

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

}


正确答案:double fun(int n) { int i; double s=0.0; for (i=1; i=n; i++) s=s+(1.0/(2*i-1)-1.0/(2*i)); /*计算S= (1-1/2) + (1/3-1/4) +…+ (1/(2n-1)-l/2n) */ return s; }
double fun(int n) { int i; double s=0.0; for (i=1; i=n; i++) s=s+(1.0/(2*i-1)-1.0/(2*i)); /*计算S= (1-1/2) + (1/3-1/4) +…+ (1/(2n-1)-l/2n) */ return s; } 解析:本题中s=s+(1.0/(2*i-1)-1,O/(2*i));语句是用C程序去表达题目中的每一项,这是关键,其他问题不难理解。

第10题:

请编写函数fun(),其功能是:计算并输出下列多项式的值。

S=1+4/(1+2)+1/(1+2+3)+…+1/(1+2+3+…+n)

例如,着主函数从键盘给n输入50后,则输出为 S=1.960784。

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

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

试题程序:

include <stdio.h>

double fun(int n)

{

}

main ()

{

int n;

double s;

printf ("\nInput n: ");

scanf ("%d", &n);

s=fun (n);

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

}


正确答案:double fun (int n) { int i; double s=0.0s1=0.0; for(i=1;i=n;i++) {s1=s1+i; /*求每—项的分母*/ s=s+1.0/s1; /*求S=1+1/(1+2)+1/(1+2+3)+…+1/(1+2+3+…+n)*/ } return s; }
double fun (int n) { int i; double s=0.0,s1=0.0; for(i=1;i=n;i++) {s1=s1+i; /*求每—项的分母*/ s=s+1.0/s1; /*求S=1+1/(1+2)+1/(1+2+3)+…+1/(1+2+3+…+n)*/ } return s; } 解析:该程序的数学思路是:在程序中输入n后,以前n项的和作为分母递加,由于s1是浮点类数据所以s=s+1.0/s1; for 循环的作用是每一次循环给总结果s加上一项1.0/s1。

更多相关问题