C语言习题7

更新时间:2024-04-05 03:44:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第八章 函数

8.1 选择题

【题8.1】以下正确的说法是 。 建立函数的目的之一是 A)提高程序的执行效率 B)提高程序的可读性 C)减少程序的篇幅 D)减少程序文件所占内存

【题8.2】以下正确的说法是 。

A) 用户若需调用标准库函数,调用前必须重新定义

B) 用户可以重新定义标准库函数,若如此,该函数将失去原有含义 C) 系统根本不允许用户重新定义标准库函数

D) 用户若需调用标准库函数,调用前不必使用预编译命令将该函数所在文件

包括到用户源文件中,系统自动去调

【题8.3】以下正确的函数定义形式是 。

A) double fun(int x,int y) B) double fun(int x;int y) C) double fun(int x,int y); D) double fun(int x,y);

【题8.4】以下正确的函数形式是 。

A) double fun(int x,int y)

{ z=x+y; return z; } B) fun(int x,y)

{ int z; return z; } C) fun(x,y)

{ int x,y; double z; z=x+y; return z; } D) double fun(int x,int y)

{ double z; z=x+y; return z; }

【题8.5】以下正确的说法是 。 在C语言中 A)实参和与其对应的形参各占用独立的存储单元 B)实参和与其对应的形参共占用一个存储单元 C)只有当实参和与其对应的形参同名时才共占用存储单元 D)形参是虚拟的,不占用存储单元

【题8.6】若调用一个函数,且此函数中没有return语句,则正确的说法是 。 该函数 A)没有返回值 B)返回若干个系统默认值

C)能返回一个用户所希望的函数值 D)返回一个不确定的值

【题8.7】以下不正确的说法是 。 C语言规定 A)实参可以是常量、变量或表达式 B)形参可以是常量、变量或表达式 C)实参可以为任意类型 D)形参应与其对应的实参类型一致 【题8.8】以下正确的说法是 。

A) 定义函数时,形参的类型说明可以放在函数体内 B) return后边的值不能为表达式

C) 如果函数值的类型与返回值类型不一致,以函数值类型为准 D) 如果形参与实参的类型不一致,以实参类型为准

【题8.9】C语言规定,简单变量做实参时,它和对应形参之间的数据传递方式是 。

A) 地址传递 B) 单向值传递

C) 由实参传给形参,再由形参传回给实参 D) 由用户指定传递方式

【题8.10】以下程序有语法性错误,有关错误原因的正确说法是 。 main() { int G=5,k; void prt_char(); ? ? k=prt_char(G); ? ? }

A) 语句void prt_char();有错,它是函数调用语句,不能用void说明 B) 变量名不能使用大写字母

C) 函数说明和函数调用语句之间有矛盾 D) 函数名不能使用下划线

【题8.11】C语言允许函数值类型缺省定义,此时该函数值隐含的类型是 。

A) float型 B) int型 C) long型 D) double型

【题8.12】C语言规定,函数返回值的类型是由 。

A) return语句中的表达式类型所决定 B) 调用该函数时的主调函数类型所决定 C) 调用该函数时系统临时决定

D) 在定义该函数时所指定的函数类型所决定

【题8.13】下面函数调用语句含有实参的个数为 。 func((exp1,exp2),(exp3,exp4,exp5));

A)1 B)2 C)4 D)5

【题8.14】以下错误的描述是 。 函数调用可以 A)出现在执行语句中 B)出现在一表达式中 C)做为一个函数的实参 D)做为一个函数的形参

【题8.15】以下程序的功能是计算函数F(x,y,z)=(x+y)/(x-y)+(z+y)/(z-y)的值,请选择

填空。

#include #include main() { float x,y,z,sum; scanf(“%f %f %f”,&x,&y,&z); sum=f(【1】)+f(【2】); printf(“sum=%f\\n”,sum); } float f(float a,float b) { float value; value=a/b; return(value); } 【1】 A)x-y,x+y B)x+y,x-y C)z+y,z-y D)z-y,z+y 【2】 A)x-y,x+y B)x+y,x-y C)z+y,z-y D)z-y,z+y

【题8.16】以下正确的描述是 。 在C语言程序中 A)函数的定义可以嵌套,但函数的调用不可以嵌套 B)函数的定义不可以嵌套,但函数的调用可以嵌套 C)函数的定义和函数的调用均不可以嵌套 D)函数的定义和函数的调用均可以嵌套

【题8.17】以下程序是选出能被3整除且至少有一位是5的两位数,打印出所有这样的数

及其个数。请选择填空。

sub(int k,int n) { int a1,a2;

a2=【1】; a1=k-【2】; if((k%3==0&&a2==5)||(k%3==0&&a1==5)) { printf(“%d”,k); n++; return n; } else return -1; } main() { int n=0,k,m; for(k=10;k<=99;k++) { m=sub(k,n); if(m!=-1) n=m; } printf(“\\nn=%d”,n); } 【1】 A)k*10 B)k C)k/10 D)k*10 【2】 A)a2*10 B)a2 C)a2/10 D)a2

【题8.18】以下是有关汉诺塔问题的程序段,若在main函数中有调用语句

hanoi(3,‘A’,‘B’,‘C’);则符合程序段运行结果的选项是 。

void move(char getone,char putone) { printf(“%c-->%c\\n”,getone,putone); } void hanoi(int n,char one,char two,char three) { if(n==1) move(one,three); else { hanoi(n-1,one,three,two); move(one,three); hanoi(n-1,two,one,three); } }

A)A-->C B)A-->C C)A-->C D)A-->C A-->B A-->B A-->B A-->B C-->B C-->A C-->B C-->B

B-->A A-->B A-->C A-->C C-->B B-->C B-->A A-->B A-->C A-->C B-->C B-->C A-->B A-->B A-->C A-->C

【题8.19】若用数组名作为函数调用的实参,传递给形参的是 。

A) 数组的首地址

B) 数组第一个元素的值 C) 数组中全部元素的值 D) 数组元素的个数

【题8.20】已有以下数组定义和f函数调用语句,则在f函数的说明中,对形参数组array

的错误定义方式为 。

int a[3][4]; f(a);

A) f(int array[][6]) B) f(int array[3][]) C) f(int array[][4]) D) f(int array[2][5])

【题8.21】若使用一维数组名作函数实参,则以下正确的说法是 。

A) 必须在主调函数中说明此数组的大小 B) 实参数组类型与形参数组类型可以不匹配 C) 在被调函数中,不需要考虑形参数组的大小 D) 实参数组名与形参数组名必须一致

【题8.22】折半查找法的思路是:先确定待查元素的范围,将其分成两半,然后测试位于

中间点元素的值。如果该待查元素的值大于中间点元素,就缩小待查范围,只测试中点之后的元素;反之,测试中点之前的元素,测试方法同前。函数binary的作用是应用折半查找法从存有10个整数的a数组中对关键字m进行查找,若找到,返回其下标值;返回-1。请选择填空。

binary(int a[10],int m) { int low=0,high=9,mid; while(low<=high) { mid=(low+high)/2; if(ma[mid]) 【2】; else return(mid); } return(-1); } 【1】 A)high=mid-1 B)low=mid+1 C)high=mid+1 D)low=mid-1

ch=【3】; printf(“ch:%c”,ch); YesNo(ch); }

【题8.39】以下Check函数的功能是对value中的值进行四舍五入计算,若计算后的值与

ponse值相等,则显示“Well done!!”,否则显示计算后的值。已有函数调用语句Check(ponse,value);请填空。

void Check(int ponse,float value) { int val; val=【1】; printf(“计算后的值:%d”,val); if(【2】) printf(“\\nWELL DONE!!!\\n”); else printf(“\\nSorry the correct answer is %d\\n”,val); }

【题8.40】以下程序的功能是 。 #include f(int n) { int i,j,k; i=n/100; j=n/10-i*10; k=n; if(i*100+j*10+k==i*i*i+j*j*j+k*k*k) return n; else return 0; } main() { int n,k; printf(“output”); for(n=100;n<1000;n++) { k=f(n); if(k!=0) printf(“%d”,k); } printf(“\\n”); }

【题8.41】以下程序的功能是用二分法求方程2x?4x?3x?6?0的根,并要求绝对误

差不超过0.001。请填空。 #include

32 float f(float x) { return(2*x*x*x-4*x*x+3*x-6); } main() { float m=-100,n=90,r; r=(m+n)/2; while(f(r)*f(n)!=0) { if(【1】) m=r; else n=r; if(【2】) break; r=(m+n)/2; } printf(“The is fangcheng jie is %6.3f\\n”,r); }

【题8.42】若输入一个整数10,以下程序的运行结果是 。 main() { int a,e[10],c,i=0; printf(“输入一整数\\n”); scanf(“%d”,&a); while(a!=0) { c=sub(a); a=a/2; e[i]=c; i++; } for(;i>0;i--) printf(“%d”,e[i-1]); } sub(int a) { int c; c=a%2; return c; }

【题8.43】以下程序的功能是计算下面函数的值。请填空。

F(x,y,z)?sin(x)sin(y)sin(z)??sin(x?y)*sin(x?z)sin(y?z)*sin(y?x)sin(z?x)*sin(z?y) float f(float a,float b,float c) { float value; value=【2】; return(value); }

【题8.44】已有函数pow,现要求取消变量i后pow函数的功能不变。请填空。 修改前的pow函数 pow(int x,int y) { int i,j=1; for(i=1;i<=y;++i) j=j*x; return(j); } 修改后的pow函数 pow(int x,int y) { int j; for(【1】;【2】;【3】) j=j*x; return(j); }

【题8.45】以下程序的运行结果是输出如下图形。请填空。 * * * * * * * * * * * * * * * * * * * * * * * * *

#include

#include float f(); main() {

float x,y,z,sum;

printf(“\\ninput x,y,z:\\n”); scanf(“%f %f %f”,&x,&y,&z); sum=【1】;

printf(“sum=%f\\n”,sum); }

#include void a(int i) { int j,k; for(j=0;j<=7-i;j++) printf(“”); for(k=0;k<【1】;k++) printf(“*”); printf(“\\n”); } main() { int i; for(i=0;i<3;i++) 【2】; for(i=3;i>=0;i--) 【3】; }

【题8.46】以下程序的功能是求三个数的最小公倍数,请填空。 #include max(int x,int y,int z) { if(x>y&&x>z) return(x); else if(【1】) return(y); else return(z); } main() { int x1,x2,x3,i=1,j,x0; printf(“Input 3 number:”); scanf(“%d %d %d”,&x1,&x2,&x3); x0=max(x1,x2,x3); while(1) { j=x0*i; if(【2】) break; i=i+1; } printf(“The is %d %d %d zuixiaogongbei is %d\\n”,x1,x2,x3,j); }

【题8.47】函数gongyu的作用是求整数num1和num2的最大公约数,并返回该值,请填空。 gongyu(int num1,int num2) { int temp,a,b;

if(num1【1】num2) { temp=num1; num1=num2; num2=temp; } a=num1; b=num2; while(【2】) { temp=a%b; a=b; b=temp; } return(a); }

【题8.48】以下程序的运行结果是 。 main() { int x=2,y=3,z=0; printf(“(1) x=%d y=%d z=%d\\n”,x,y,z); add(x,y,z); printf(“(3) x=%d y=%d z=%d\\n”,x,y,z); } add(int x,int y,int z) { z=x+y; x=x*x; y=y*y; printf(“(2) x=%d y=%d z=%d\\n”,x,y,z); }

【题8.49】下面函数pi的功能是:根据以下公式,返回满足精度(0.0005)要求的π的

值,请填空。

?1121231234?1?????? 23353573579#include #include #include double pi(double eps) {

double s,t; int n; for(【1】;t>eps;n++) {

s+=t;

t=n*t/(2*n+1); }

return(【2】); }

main() {

double x;

printf(“\\nPlease enter a precision:”); scanf(“%lf”,&x); printf(“\\neps=%lf,π=%lf”,x,pi(x)); }

【题8.50】下面是一个计算阶乘的程序。程序中的错误语句是【1】,应改为【2】。 #include double factorial(int); main() { int n; printf(“Enter an integer:”); scanf(“%d”,&n); printf(“\\n\\n%d!=%lg\\n\\n”,n,factorial(n)); } double factorial(int n) { double result=1.0l; while(n>1||n<170) result*=--n; return result; }

【题8.51】函数f中的形参a为一个10×10的二维数组,n的值为5,以下程序段的运行

结果是 。

f(int a[10][10],int n) { int i,j,k; j=n/2+1; a[1][j]=1; i=1; for(k=2;k<=n*n;k++) { i=i-1; j=j+1; if((i<1)&&(j>n)) { i=i+2; j=j-1; } else { if(i<1) i=n; if(j>n) j=1; } if(a[i][j]==0) a[i][j]=k; else { i=i+2; j=j-1; a[i][j]=k; } } }

【题8.52】下面函数func的功能是 。

#include #include #include long func(long num) { long k=1; num=labs(num); do{ k*=num; num/=10; }while(num); return(k); } main() { long n; printf(“\\nPlease enter a number:”); scanf(“%ld”,&n); printf(“\\nThe product of its digits is %ld.”,func(n)); }

【题8.53】以下程序的运行结果是 。 #include main() { printf(“FACT(5):%d\\n”,fact(5)); printf(“FACT(1):%d\\n”,fact(1)); fact(-5); } fact(int value) { if(value<0) { printf(“FACT(-1):Error!\\n”); return(-1); } else if(value==||value==0) return(1); else return(value*fact(value-1)); }

【题8.54】以下程序的功能是用递归方法计算五位学生的年龄,请填空。 递归公式如下:

10(n?1)?age(n)??

?age(n?1)?2(n?1)#include

age(int n) { int c; if(n==1) c=10; else c=【1】; return(c); } main() { int n=5; printf(“age:%d\\n”,【2】); }

【题8.55】下面程序的功能是【1】,运行结果是【2】。 long fib(int g) { switch(g) { case 0: return 0; case 1: case 2: return 1; } return(fib(g-1)+fib(g-2)); } main() { long k; k=fib(7); printf(“k=%d\\n”,k); }

【题8.56】以下程序的运行结果是 。 main() { int i=5; printf(“%d\\n”,sub(i)); } sub(int n) { int a; if(n==1) return 1;

a=n+sub(n-1); return(a); }

【题8.57】以下程序是应用递归算法求某数a的平方根,请填空。求平方根的迭代公式如

下:

x1?1a(x0?) 2x0 #include

double mysqrt(double a,double x0) { double x1,y; x1=【1】; if(fabs(x1-x0)>0.00001) y=mysqrt(【2】); else y=x1; return y; } main() { double x; printf(“Enter x:”); scanf(“%lf”,&x); printf(“The sqrt of %f=%f\\n”,x,mysqrt(x,1.0)); }

【题8.58】以下程序的运行结果是 。 #include f(int a[]) { int i=0; while(a[i]<=10) { printf(“%d”,a[i]); i++; } } main() { int a[]={1,5,10,9,11,7}; f(a+1); }

【题8.59】以下程序的运行结果是 。 main() { int a[3][3]={1,3,5,7,9,11,13,15,17}; int sum; sum=func(a); printf(“\\nsum=%d\\n”,sum); } func(int a[][3]) { int i,j,sum=0; for(i=0;i<3;i++) for(j=0;j<3;j++) { a[i][j]=i+j; if(i==j) sum=sum+a[i][j]; } return(sum); }

【题8.60】阅读下面程序,完成下列问题中的填空。 问题(1)此程序在调用函数f后运行结果是【1】。 (2)若将函数f中的for(j=i+1;j<4;j++)改为for(j=0;j<3-i;j++),则 程序的运行结果是【2】。 f(int s[][4]) { int i,j,k; for(i=0;i<3;i++) for(j=i+1;j<4;j++) { k=s[i][j]; s[i][j]=s[j][i]; s[j][i]=k; } main() { int s[4][4],i,j; for(i=0;i<4;i++) for(j=0;j<4;j++) s[i][j]=i-j; f(s); for(i=0;i<4;i++) { printf(“\\n”); for(j=0;j<4;j++) printf(“M”,s[i][j]); }

}

【题8.61】以下search函数的功能是利用顺序查找法从数组a的10个元素中对关键字m

进行查找。顺序查找法的思路是:从第一个元素开始,从前向后依次与关键字比较,直到找到此元素或查找到数组尾部时结束。若找到,返回此元素的下标;若仍未找到,则返回值-1。请填空。

#include int search(int a[10],int m) { int i; for(i=0;i<=9;i++) if(【1】) return(i); return(-1); } main() { int a[10],m,i,no; ? no=search(【2】); if(【3】) printf(“\\nOK FOUND!%d”,no+1); else printf(“\\nSorry Not Found!”); }

【题8.62】已定义一个含有30个元素的数组s,函数fav1的功能是按顺序分别赋予各元素

从2开始的偶数,函数fav2则按顺序每五个元素求一个平均值,并将该值存放在数组w中。请填空。

#define SIZE 30 fav1(float s[]) { int k,i; for(k=2,i=0;i

sum+=s[i]; if((i+1)%5==0) { w[k]=sum/5; 【2】; k++; } } } main() { float s[SIZE],w[SIZE/5],sum; int i,k; fav1(s); fav2(s,w); }

【题8.63】以下程序的运行结果是【1】,其算法是【2】。 main() { int a[5]={5,10,-7,3,7},i,t,j; sort(a); for(i=0;i<=4;i++) printf(“%d”,a[i]); } sort(int a[]) { int i,j,t; for(i=0;i<4;i++) for(j=0;j<4-i;j++) if(a[j]>a[j+1]) { t=a[j]; a[j]=a[j+1]; a[j+1]=t; } }

【题8.64】以下程序的运行结果是【1】,其算法是【2】。 main() { int a[5]={9,6,8,3,-1},i,t,j,p; sort(a); for(i=0;i<=4;i++) printf(“%d”,a[i]); } sort(int a[])

{ int i,j,t,p; for(j=0;j<4;j++) { p=j; for(i=j;i<=4;i++) if(a[i]

【题8.65】函数del的作用是删除有序数组a中的指定元素x。已有调用语句n=del(a,n,x);

其中实参n为删除前数组元素的个数,赋值号左边的n为删除后数组元素的个数。请填空。

del(int a[],int n,int x) { int p,i; p=0; while(x>=a[p]&&p

【题8.66】以下程序的运行结果是 。 #include func(int array[][4],int m) { int i,j,k; k=0; for(i=0;i<3;i++) for(j=0;j<4;j++) if(array[i][j]

printf(“\\n”); } m=10; printf(“\\nthe value is %d\\n”,func(a,m)); }

【题8.67】函数swap(int x,int y)可完成对x和y值的交换。在运行调用函数中的如下语

句后,a[0]和a[1]的值分别为【1】,原因是【2】。

a[0]=1; a[1]=2; swap(a[0],a[1]);

【题8.68】函数swap(arr,n)可完成对arr数组从第1个元素到第n个元素两两交换。在运

行调用函数中的如下语句后,a[0]和a[1]的值分别为【1】,原因是【2】。

a[0]=1; a[1]=2; swap(a,2);

【题8.69】以下程序可计算10名学生1门课成绩的平均分,请填空。 float average(float array[10]) { int i; float aver,sum=array[0]; for(i=1;【1】;i++) sum+=【2】; aver=sum/10; return(aver); } main() { float score[10],aver; int i; printf(“\\ninput 10 scores:”); for(i=0;i<10;i++) scanf(“%f”,&score[i]); aver=【3】; printf(“\\naverage score is %5.2f\\n”,aver); }

【题8.70】函数yahui能够按以下形式构成一个杨辉三角形,请填空。 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1

? ? ? ? ? ? #define N 11 yahui(int a[][N]) { int i,j; for(i=1;i

【题8.71】下面程序的功能是:从键盘输入一个整数m(4≤m≤20),则输出如下的整数方阵

(存入二维数组aa)。例如,若输入“4”和“5”,则分别输出

16 9 4 1 25 16 9 4 1 9 4 1 16 16 9 4 1 25 4 1 16 9 9 4 1 25 16 1 16 9 4 4 1 25 16 9 1 25 16 9 4 请改正程序中的错误语句,使它能得出正确的结果。改正后的语句是【1】和【2】。

(注意:不得增行或删行,也不得更改程序的结构。)

#include #include #define M 20 void aMatrix(int n,int xx[][M]) { int i,j; for(j=0;j

{ printf(“\\n”); for(j=0;j

【题8.72】以下程序运行结果是 。 main() { int a=1,b=2,c=3; ++a; c+=++b; { int b=4,c; c=b*3; a+=c; printf(“first:%d,%d,%d\\n”,a,b,c); a+=c; printf(“second:%d,%d,%d\\n”,a,b,c); } printf(“third:%d,%d,%d\\n”,a,b,c); }

【题8.73】以下程序的运行结果是 。 #include int k=1; main() { int i=4; fun(i); printf(“(1) %d,%d\\n”,i,k); } fun(int m) { m+=k; k+=m; { char k=‘B’; printf(“(2) %d\\n”,k-‘A’); } printf(“(3) %d,%d\\n”,m,k); }

【题8.74】以下程序的运行结果是 。 int x1=30,x2=40; main() { int x3=10,x4=20; sub(x3,x4); sub(x2,x1); printf(“%d,%d,%d,%d\\n”,x3,x4,x1,x2); } sub(int x,int y) { x1=x; x=y; y=x1; }

【题8.75】以下程序的运行结果是 。 int i=0; main() { int i=5; reset(i/2); printf(“i=%d\\n”,i); reset(i=i/2); printf(“i=%d\\n”,i); reset(i/2); printf(“i=%d\\n”,i); workover(i); printf(“i=%d\\n”,i); } workover(int i) { i=(i%i)*((i*i)/(2*i)+4); printf(“i=%d\\n”,i); return(i); } reset(int i) { i=i<=2?5:0; return(i); }

【题8.76】以下程序的运行结果是 。 int a=5; int b=7; main()

{ int a=4,b=5,c; c=plus(a,b); printf(“A+B=%d\\n”,c); } plus(int x,int y) { int z; z=x+y; return(z); }

【题8.77】以下程序的运行结果是 。 int a=3,b=5; max(a,b) { int c; c=a>b?a:b; return(c); } main() { int a=8; printf(“%d”,max(a,b)); }

【题8.78】以下程序的运行结果是 。 int x; main() { x=5; cube(); printf(“%d\\n”,x); } cube() { x=x*x*x; }

【题8.79】以下程序的运行结果是 。 main()

{ incx(); incy(); incx(); incy(); incx(); incy(); } incx() { int x=0; printf(“x=%d\\t”,++x); } incy() { static int y=0; printf(“\\ny=%d\\n”,++y); }

【题8.80】以下程序的运行结果是 。 main() { increment(); increment(); increment(); } increment() { static int x=0; x+=1; printf(“%d”,x); }

【题8.81】以下程序的运行结果是 。 int n=1; main() { static int x=5; int y; y=n; printf(“MAIN:x=- y=- n=-\\n”,x,y,n); func();

printf(“MAIN:x=- y=- n=-\\n”,x,y,n); func(); } func() { static int x=4; int y=10; x=x+2; n=n+10; y=y+n; printf(“FUNC:x=- y=- n=-\\n”,x,y,n); }

【题8.82】以下程序的功能是 。 int fac(int n) { static int f=1; f=f*n; return(f); } main() { int i; for(i=1;i<=5;i++) printf(“%d!=%d\\n”,i,fac(i)); }

8.3 编程题

【题8.83】已有变量定义和函数调用语句:int a=1,b=-5,c;c=fun(a,b);fun函数的作用是

计算两个数之差的绝对值,并将差值返回调用函数,请编写fun函数。

fun(int x,int y) { }

【题8.84】已有变量定义和函数调用语句:int x=57; isprime(x);函数isprime()用来判

断一个整型数是否为素数,若是素数,函数返回1,否则返回0。请编写isprime函数。

isprime(int a) { }

【题8.85】已有变量定义和函数调用语句:int a,b; b=sum(a);函数sum()用以求

?k,

k?1n

【题8.86】已有变量定义语句double a=5.0; int n=5;和函数调用语句mypow(a,n);用以

求a的n次方。请编写double mypow(double x,int y)函数。

double mypow(double x,int y) { }

【题8.87】以下程序的功能是用牛顿法求解方程f(x)=cosx-x=0。已有初始值x0=3.1415/4,

要求绝对误差不超过0.001,函数f用计算迭代公式中xn的值,请编写f函数。牛顿迭代公式是:

即:

和数作为函数值返回。若a的值为10,经函数sum的计算后,b的值是55。请

编写sum函数。 sum(int n) { }

xn?1?xn?f(xn)/f?(xn)xn?1?xn?(cosxn?xn)/(sinxn?1)

#include

#include #define PI 3.1415 float f(float x0) { } main() { int t=0,k=100,n=0; float x0=PI/4,x1; while(n

【题8.88】已有函数调用语句c=add(a,b);请编写add函数,计算两个实数a和b的和,并

返回和值。

double add(double x,double y) { }

【题8.89】以下程序的功能是应用弦截法求方程x?5x?16x?80?0的根,其中f函

32 float f(float x) /* 略 */ { ? } float xpoint(float x1,float x2) /* 略 */ { ? } main() { float x1,x2,f1,f2,x; do{ printf(“input x1,x2:\\n”); scanf(“%f %f”,&x1,&x2); printf(“x1=%5.2f,x2=%5.2f\\n”,x1,x2); f1=f(x1); f2=f(x2); }while(f1*f2>=0); x=root(x1,x2); printf(“A root of equation is %8.4f”,x); }

【题8.90】以下函数p的功能是用递归方法计算x的n阶勒让德多项式的值。已有调用语

句p(n,x);请编写p函数。递归公式如下:

数可根据指定的x的值求出方程的值;函数xpoint可根据x1和x2求出f(x1)和f(x2)的连线与x轴的交点;函数root用来求区间(x1,x2)的实根,请编写root函数。

#include

float root(float x1,float x2) { }

1(n?0)??Px(x)??x(n?1)

?((2n?1)*x*P(x)?(n?1)*P(x))/n(n?1)n?1n?2? float p(int n,int x)

{ }

【题8.91】以下程序的功能是应用下面的近似公式计算e的n次方。函数f1用来计算每项

分子的值,函数f2用来计算每项分母的值。请编写f1和f2函数。

x2x3e?1?x????(前20项的和)

2!3!xfloat f2(int n) { }

float f1(int x,int n) { } main() { float exp=1.0; int n,x; printf(“Input a number:”); scanf(“%d”,&x); printf(“%d\\n”,x); exp=exp+x; for(n=2;n<=19;n++) exp=exp+f1(x,n)/f2(n); printf(“\\nThe is exp(%d)=%8.4f\\n”,x,exp); } 运行结果:Input a number:3 The is exp(3)=20.0855

【题8.92】a是一个2×4的整型数组,且各元素均已赋值。函数max_value可求出其中的

最大元素max,并将此值返回主调函数。今有函数调用语句max=max_value(a);请编写max_value函数。

max_value(int arr[][4]) { }

【题8.93】输入若干整数,其值均在1至4的范围内,用-1作为输入结束标志,请编写函

数f用于统计每个整数的个数。

#define M 50 main() { int a[M],c[5]={0},i,n,x; n=0; printf(“Enter 1 or 2 or 3 or 4, to end with -1\\n”); scanf(“%d”,&x); while(x!=-1) { if(x>=1&&x<=4) { a[n]=x; n++; } scanf(“%d”,&x); } f(a,c,n); printf(“Output the result:\\n”); for(i=1;i<=4;i++) printf(“%d:%d\\n”,i,c[i]); printf(“\\n”); }

f(int a[],int c[],int n) { }

本文来源:https://www.bwwdw.com/article/0a5r.html

Top