C语言函数习题及答案(20200506225202) 下载本文

5.

#include void {

int t; while(m

*s, int

fun(int

m, int n)

{t=s[m]; s[m]=s[n]; s[n]=t; m++; n--;} } main() {

Int a[5]={1,2,3,4,5},k; fun(a,0,4);

for(k=0;k<5;k++) printf(\ }

6.

int fun(char s[]) {

int n=0;

while(*s<='9'&&*s>='0') {

n=10*n+*s-'0';

s++;

}

return(n); } main() {

char s[10]={'6','1','*','4','*','9','*','0','*'}; printf(\ }

7.

#include {

int y;

if(x==0||x==1) y=x*x-fun(x-2) return } main() {

int x,y;

y;

return(3);

Int fun(int x)

\

x=fun(3); y=fun(4);

printf(\ }

8.

fun(int n,int *s) {

int f1, f2;

if(n==1 || n==2) else {

fun(n-1, &f1); fun(n-2, &f2); *s=f1+f2; } } main() {

int x; fun(6,&x); printf(\ }

*s=1;

三、填空题

1. 以下程序实现了计算 x 的 n 次方,请将程序填写完整。

float power(float x,int n)

{ int i; float t=1;

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

t=t*x;

【 1 】 ; } main( ) {float x,y; int

n;

scanf(\ y=power(x,n); printf(\

}

2.

以下程序实现了求两个数的最大公约数,请将程序填写完整。

int divisor(int a,int b) { int r; r=a%b;

while( 【 2 】 )

{ a=b;b=r;r=a%b;} return b;

}

void main() { int a,b,d,t;

scanf(\ if (a

{ t=a; a=b; b=t; } d=divisor(a,b); printf(\ }

3. 以下函数 my_cmp( )的功能是比较字符串 s 和 t 的大小,当 s 等于 t 时返回 0,否则返

回 s 和 t 的第一个不同字符的 ASCII 码差值,即 s>t 时返回正值, s

my_cmp(char *s,char *t) {

while(*s == *t) {

if ( 【 3】 ) return 0; ++s; ++t; }

return 【4】 ; }

4. 以下程序的功能是 :删去一维数组中所有相同的数 ,使之只剩一个。数组中的数已按由小到大

的顺序排列 ,函数返回删除后数组中数据的个数。请将程序填写完整。 例如 ,若一维数组中的数据是

: :

2223445666677899101010 2345678910 。

删除后 ,数组中的内容应该是

#include

#define N 80 int fun(int a[], int n) {int i,j=1; for(i=1;i

if(a[j-1] 【 5 】 a[i])

a[j++]=a[i]; return 【6 】;

}

main( ) {

int a[N]={2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10},i,n=19; printf(\ for(i=0;i

printf( “%d ”,a[i]); n=fun(a,n);

printf(\ for(i=0; i

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

}

四、编程题

1. 请用自定义函数的形式编程实现, 2. 请用自定义函数的形式编程实现求 3. 请编写两个自定义函数,

求 s=m!+n!+k! ,m、n、k 从键盘输入 (值均小于 7)。 10 名学生 1 门课程成绩的平均分。

分别实现求两个整数的最大公约数和最小公倍数,

并用主函数

调用这两个函数,输出结果(两个整数由键盘输入得到)。 4. 已知二阶 Fibonacci 数列:

0

Fib(n)

1

若 n=0 若 n=1

其他情况

Fib(n-1)+Fib(n-2)

请编写一个递归函数,实现求

Fib(n) 。

第 6 章

一、选择题

B

2.

C

3.

12. A 22. D

1. B 4. B 5. C 6. 16.

D C

7. D 8. C 9. D 10. D 20. A

11. A 21. A 30. A

13. C 23. C

14. D 24. B

15. D 25. A

17. B 18. A 19. A

26. 【1】A 26. 【2】D 27. 【1】B

27. 【2】D 33. 【3】A 36. 【1】D 38. 【1】C

27. 【3】C 31. D 34. 【1】D 36. 【2】B 38. 【2】B 40. 【2】B

28. 【1】D 32. 【1】B 34. 【2】C 36. 【3】A 38. 【3】A 40. 【3】D

28. 【2】 C 32. 【2】 A 35. 【1】 C 37. 【1】 A 39. 【1】 C

29. 【1】 C 33. 【1】 C 35. 【2】 A 37. 【2】 B 39. 【2】 B

29.【 2】D 33.【 2】B 35.【 3】B 37.【 3】A 39.【 3】A

40. 【1】C 1. 2. 3. 4. 5. 6. 7. 8.

31 15

二、读程序写结果:

asd af aa z67 *p1=20,*p2=10 x=10,y=20 5 4 3 2 61 6,15 8

1

三、填空题

1 .【 1 】 return t 2 .【 2 】 r!=0 3 .【 3 】 *s == ,\\0?

【 4 】 *s-*t 4.【 5】 !=

【 6 】 j

四、编程题

1.

#include long fun(int x) { long y=1;

while(x>0) { y*=x; x--; } return(y); } main() { int m,n,k;

printf(\ scanf(\ printf(\ }

2 .

#include #define N 10

float average(float array[])

{ int i=0; float s=0; for(i=0;i

s+=array[i];

s=s/N; return s;

} main()

{ float score[N],i; float ave;

printf(\for(i=0;i

scanf(\ ave=average(score);

printf(\ }

3.

#include int divisor(int a,int b) {int r; while((r=a%b)!=0)

{ a=b;