对于三个函数f(n)=2008n3+8n2+96000,g(n)=8n3+8n+2008和h(n)=8888nlogn+3n2,下列陈述中不成立的

题目

对于三个函数f(n)=2008n3+8n2+96000,g(n)=8n3+8n+2008和h(n)=8888nlogn+3n2,下列陈述中不成立的是 ( )

A.f(n)是O(g(n))

B.g(n)是O(f(n))

C.h(n)是O(nlogn)

D.h(n)是O(n2)

参考答案和解析
正确答案:C
解析:当n充分大时,由题意可得:f(n)与n3是同阶的,g(n)与n3是同阶的,h(n)与n2是同阶的。所以f(n)=O(g(n)),g(n)=O(f(n)),h(n)=O(n2)。
如果没有搜索结果或未解决您的问题,请直接 联系老师 获取答案。
相似问题和答案

第1题:

请补充函数fun(),该函数的功能是:计算N×N维矩阵元素的方差,结果由函数返回。维数N在主函数中输入。例如:

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

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

试题程序:

include <stdio.h>

include <conio.h>

include <stdlib.h>

include <math.h>

define N 20

double fun(【 】,int n)

{

int i,j;

int k;

double s=0.0;

double f=0.0;

double aver=0.0;

double sd=0.0;

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

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

s+=a[i][j];

aver=【 】;

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

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

f+=(a[i][j]-aver)*(a[i][j]-aver);

f/(n*n);

sd=【 】;

return sd;

}

main()

{

int a[N][N];

int n;

int i,j;

double s;

clrscr();

printf("***+Input the dimension of

array N*****\n");

scanf("%d",&n);

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

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

{

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

{

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

while(a[i][j]=0)

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

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

}

printf("\n\n");

}

s=fun(a,n);

printf("******* THE RESULT *******\n");

printf("%4.3f\n",s);

}


正确答案:int a[][N] s/(n*n) sqrt(f)
int a[][N] s/(n*n) sqrt(f) 解析:第一空;由主函数main()中对函数fun()的调用格式,可以知道,函数fun()的第一个参数是N×N的二维整型数组。第二空:平均值等于所有元素的累加和除以个数。第三空;根据公式,方差sd等于对变量f开平方,这里注意对数学库函数的调用。

第2题:

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

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

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

最后调用函数writeDat(),把结果输出到文件OUT10.DAT中。

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

注意:部分源程序已给出。

请勿改动主函数main()和写函数WriteDat()的内容。

试题程序:

include<stdio.h>

int jsValue(int t)

{

}

main()

{

int n;

n=1000;

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

writeDat();

}

writeDat()

{

FILE *in, *out;

int n,s;

ut = fopen("OUT10.DAT", "w");

s = jsValue(1000); printf("%d",s);

fprintf(out, "%d\n", s);

fclose(out);

}


正确答案:int jsValue(int t) { int f1=0f2=1fn; fn=f1+f2; while(fn=t) {f1=f2;f2=fn;fn=f1+f2;} /*如果当前的Fibonacci数不大于t则计算下一个 Fibonacci数*/ return fn; /*返回Fibonacci数列中大于t的最小的一个数*/ }
int jsValue(int t) { int f1=0,f2=1,fn; fn=f1+f2; while(fn=t) {f1=f2;f2=fn;fn=f1+f2;} /*如果当前的Fibonacci数不大于t,则计算下一个 Fibonacci数*/ return fn; /*返回Fibonacci数列中大于t的最小的一个数*/ } 解析:解答本题的关键是要充分理解题意,只有理解了题意本身的数学过程,才能把数学过程转化为程序逻辑。根据已知数列,我们不难发现:Fibonacci数列中,从第三项开始,每一项都可以拆分为前两项之和。本题要求找到该数列中“大于t的最小的一个数”。这里可以借助一个while循环来依次取数列中的数,直到出现某一项的值大于t,那么这一项就是“大于t的最小的一个数”。注意:在循环体内部,我们用变量f1始终来表示第n项的前面第二项,用变量f2来始终表示第n项的前面第一项。这就实现了变量的活用与巧用。

第3题:

编写函数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

第4题:

若有以下程序includevoidf(intn);main() (voidf(intn); f(5); }void f(intn) {printf(

若有以下程序 #include <stdio.h> void f(int n); main() ( void f(int n); f(5); } void f(int n) { printf("%d\n",n); } 则以下叙述中不正确的是

A.若只在主函数中对函数f进行说明,则只能在土函数中正确调用函数f

B.若在主函数前对函数f进行说明,则在主函数和其后的其他函数中都可以正碗调用函数f

C.对于以上程序,编译时系统会提示出错信息:提示对f函数重复况明

D.函数f无返回值,所以可用void将其类型定义为无值型


正确答案:C
解析:本题考核的知识点是函数说明的方法。若一个函数定义在主调函数之后,其返回值不是int或char型,则必须对之进行函数说明。可在函数外说明也可以在函数内说明,在函数外说明,在其后的所有函数均可调用该函数,若在函数内说明,则只能在本函数内调用该函数。函数只能定义一次,但函数说明可以出现多次,因此选项C是错误的。所以,4个选项中C为所选。

第5题:

请编写函数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是大于指定比较的数的最小的数,而它的前一个数就是小于指定比较的数的最大的数。

第6题:

请完成函数fun( ),它的功能是:求Fibonacc数列中小于t的最大的一个数,结果由函数 0返回。Fibonacc数列F(n)定义为:

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

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

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

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

请勿改动主函数main和其他函数中的任何内容,仅在下划线上填入所需的内容。

include<conio.h>

include<stdio.h>

include<math.h>

in fun(int t)

{

int a=l,b=1,c=0,i;

do

{

【 】;

a=b;

b=C;

}

while( 【 】);

c= 【 】;

return C;

}

main()

{

int n;

clrscr();

n=1000;

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


正确答案:int fun(int t) { int a=1b=1c=Oi; do { c=a+b; a=b; b=c; } while(ct); C=a; return c; }
int fun(int t) { int a=1,b=1,c=O,i; do { c=a+b; a=b; b=c; } while(ct); C=a; return c; } 解析:该数列的最终结果是由两个数列之和组成,所以可以在循环体内部始终把c看成是前两项之和(即第n项),而a始终代表第n-2项,b通过不断地重新赋值,但始终代表第n-1项。应注意,退出循环时得到的数c是大于指定比较的数的最小的数,而它的前一个数就是小于指定比较的数的最大的数。

第7题:

学生的记录由学号和成绩组成,N名学生的数据已存放在主函数的结构体数组s中,请编写函数fun,它的功能是:把低于平均分的学生数据放在b所指的数组中,低于平均分的学生人数通过形参n传回,平均分通过函数值返回。

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

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

[试题源程序]

include<stdio.h>

define N 8

typedef struct

{

char num[10];

double s;

}STREC;

double fun(STREC *a, STREC *b, int *n)

{

}

void main()

{

STREC s[N]={{"GA05", 85},

{"GA03", 76}, {"GA02", 69}, {"GA04", 85},

{"GA01", 91}, {"GA07", 72}, {"GA08", 64},

{"GA06", 87}};

STREC h[N], t; FILE *out;

int i, j, n;

double ave;

ave=fun(s, h, &n);

printf("The %d student data which is lower than %7.3 f:\n", n, ave);

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

printf("%s %4.1f\n", h[i]. num, h[i].s);

printf("\n");

ut=fopen("out.dat", "W");

fprintf(out, "%d\n%7.3f\n", n, ave);

for(i=0; 2<n-1; i++)

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

if(h[i]. s>h[j].s)

{

t=h[i];

h[i]=h[j];

h[j]=t;

}

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

fprintf(out, "%4.1f\n", h[i].s);

fclose(out);

}


正确答案:int fun(STREC *a STREC *b int *n) { double ave=0.0; int i j=0; *n=0; for(i=0; iN; i++) ave+=a[i].s; ave/=N; for(i=0; iN; i++) if(a[i]. save) { b[j]=a[i]; (*n)++; j++; } return ave; }
int fun(STREC *a, STREC *b, int *n) { double ave=0.0; int i, j=0; *n=0; for(i=0; iN; i++) ave+=a[i].s; ave/=N; for(i=0; iN; i++) if(a[i]. save) { b[j]=a[i]; (*n)++; j++; } return ave; } 解析:本题的设计思路是:(1)定义两个变量,分别用于保存总分和平均值,定义循环变量并赋初值:(2)利用循环语句遍历所有学生的分数,累加求和并计算初值;(3)再次遍历结构体数组,找出低于平均分的分数,把该学生的记录保存在形参数组b中,并记录其个数;(4)用return语句返回平均值。

第8题:

T(n)=O(f(n))中,函数O()的正确含义为

A.T(n)为f(n)的函数

B.T(n)为n的函数

C.存在足够大的正整数M,使得T(n)≤M×f(n)

D.存在足够大的正整数M,使得M×f(n)≤T(n)


正确答案:C

第9题:

若有以下程序:includevoid f(int n);main(){void f(int n); f(5);}void f(int n){prin

若有以下程序: #include<stdio.h> void f(int n); main() { void f(int n); f(5); } void f(int n) { printf("%d\n",n);}则以下叙述中不正确的是( )。

A.若只在主函数中对函数f进行说明,则只能在主函数中正确调用函数f

B.若在主函数前对函数f进行说明,则在主函数和其后的其他函数中都可以正确调用函数f

C.对于以上程序,编译时系统会提示出错信息:对f函数重复说明

D.函数f无返回值,所以可用void将其类型定义为无返回值型


正确答案:C
解析:f函数没有重复说明,在main函数中是对f函数声明,在main函数外则是对f函数的定义。

第10题:

若有以下程序includevoid f(int n);main(){ void f(int n);f(5);}void f(int n){print

若有以下程序 #include<stdio.h> void f(int n); main() { void f(int n); f(5); } void f(int n) {printf(“%d\n”,n);} 则以下叙述中不正确的是

A.若只在主函数中对函数f进行说明,则只能在主函数中正确调用函数f

B.若在主函数前对函数f进行说明,则在主函数和其后的其他的其他函数中都可以正确调用函数f

C.对于以上程序,编译时系统会提示出错信息;提示对f函数重复说明

D.函数f无返回值,所以可用void将其类型定义为无值型


正确答案:C
解析:若一个函数定义在主调函数之后,其返回值不是int或char型,则必须对之进行函数说明。可在函数外说明也可以在函数内说明,在函数外说明,在其后的所有函数均可调用该函数,若在函数内说明,则只能在本函数内调用该函数。函数只能定义一次,但函数说明可以出现多次。

更多相关问题