1以下正确的函数定义是(

学习情境五

一、选择题

函数与编译预处理习题解答

1.以下正确的函数定义是( )。

A.double fun(int x, int y) B.double fun(int x,y) { z=x+y; return z ; } { int z; return z;} C.fun (x,y) D.double fun (int x, int y) { int x, y; double z ; { double z ; z=x+y; return z;} return z;} 【答案】D

【说明】其返回值与函数类型相符。

2.若调用一个函数,且此函数中没有return语句,则正确的说法是( )。

A.该函数没有返回值 B.该函数返回若干个系统默认值 C.能返回一个用户所希望的函数值 D.返回一个不确定的值 【答案】A

3.以下不正确的说法是( )。

A.实参可以是常量,变量或表达式 B.形参可以是常量,变量或表达式 C.实参可以为任意类型

D.如果形参和实参的类型不一致,则以形参类型为准 【答案】B

【说明】形参只能是变量或数组。

4.C语言规定,简单变量做实参时,它和对应的形参之间的数据传递方式是( )。

A.地址传递 B.值传递 C.有实参传给形参,再由形参传给实参 D.由用户指定传递方式 【答案】B

【说明】地址传递是在实参和形参是数组的情况下进行的。 5.C语言规定,函数返回值的类型是决定于( )。

A.return语句中的表达式类型 B.调用该函数时的主调函数类型 C.调用该函数时由系统临时 D.在定义函数时所指定的函数类型 【答案】D

6.若用数组名作为函数调用的实参,传递给形参的是( )。

A.数组的首地址 B.数组中第一个元素的值 C.数组中的全部元素的值 D.数组元素的个数 【答案】A

7.如果在一个函数中的复合语句中定义了一个变量,则该变量( )。

A.只在该复合语句中有定义 B.在该函数中有定义 C.在本程序范围内有定义 D.为非法变量

C语言程序设计实训指导与习题解答

【答案】C

【说明】因为该变量为局部变量。 8.下面程序的输出是( )。

int i=2;

printf(

A.8,4,2 B.8,4,3 【答案】A

9.已知一个函数的定义如下:

double fun(int x, double y) { }

C.4,4,5 D.4,5,6

则该函数正确的函数原型声明为( )。 A.double fun (int x,double y) B.fun (int x,double y) C.double fun (int ,double ); D.fun(x,y) ; 【答案】A

10.以下不正确的说法是( )。

A.全局变量,静态变量的初值是在编译时指定的 B.静态变量如果没有指定初值,则其初值为0 C.局部变量如果没有指定初值,则其初值不确定

D.函数中的静态变量在函数每次调用时,都会重新设置初值 【答案】D

【说明】静态局部变量在其函数调用结束后仍然可以保留变量值。 11.以下任何情况下计算平方数时都不会引起二义性的宏定义是( )。

A.#define POWER(x) x*x B.#define POWER(x) (x)*(x) C.#define POWER(x) (x*x) D.#define POWER(x) ((x)*(x)) 【答案】D

12.以下正确的叙述是( )。

A.C语言的预处理功能是指完成宏替换和包含文件的调用。 B.C语言的预处理指令只能位于C源程序文件的首部。

C.凡是C源程序中行首以“#”标识的控制行都是预处理指令。 D.C语言的编译预处理就是对源程序进行初步的语法检查。 【答案】B

13.C语言提供的预处理功能包括条件编译,其基本形式是:

#XXX 标识符 程序段1 #else 程序段2 #endif

这里XXX可以是( )。

A.define或 include C.ifdef或ifndef或define 【答案】D

B.ifdef或include D.ifdef或 ifndef

第6章 函数习题解答123

二、填空题

1.C语言函数返回类型的默认定义类型是。

【答案】整型

2.函数调用语句:fun((a,B.,(c,d,e))实参个数为。

【答案】2

3.函数的实参传递到形参有两种方式:和

【答案】传值、传址 4.在一个函数内部调用另一个函数的调用方式称为在一个函数内部直接或间接

调用该函数成为函数 的调用方式。 【答案】嵌套调用 递归

5.C语言变量按其作用域分为;按其生存期分为和。

【答案】全局变量 局部变量 动态变量 静态变量

6.已知函数定义:void dothat(int n,double x) { „ },其函数声明的两种写法为和 。

【答案】dothat(int n,double x) { „ } dothat(int,double) { „ }

7.C语言变量的存储类别有,和。

【答案】自动变量和寄存器变量 静态外部变量 静态局部变量 外部变量 8.凡在函数中未指定存储类别的局部变量,其默认的存储类别为

【答案】自动

9.在一个C程序中,若要定义一个只允许本源程序文件中所有函数使用的全局变量,则

该变量需要定义的存储类别为 。 【答案】静态全局变量

10.变量被赋初值可以分为两个阶段:即

【答案】定义时赋值 运行中赋值 11.下面程序的运行结果是

#define MAX(a,b) (a>b?a:b)+1 main()

{ int j=6,k=8,f;

printf(

【答案】9

12.下面程序的运行结果是。

#define A 4

#define B(x) A*x/2 main()

{ float c,a=4.5; c=B(a );

printf(

【答案】9.0

13.以下程序的输出结果是。

#include

#define PR(A. printf(

C语言程序设计实训指导与习题解答

#define PRINT(A. PR(A.;putchar('\n') main()

{ int x=2;

PRINT(F(3)*x);}

【答案】9

14.设有以下程序,为使之正确运行,请在横线中填入应包含的命令行。

main()

{ int x=2,y=3;

printf(

【答案】#include

15.下面程序的运行结果是。

main()

{ int a=10,b=20,c; c=a/b;

#ifdef DEBUG

printf(

printf(

【答案】c=0

16.下面程序的运行结果是。

#define DEBUG main()

{ int a=14,b=15,c; c=a/b;

#ifdef DEBUG

printf(

printf(

【答案】a=14,b=15,c=0 三、程序阅读题

1.写出下面程序的运行结果。

func(int a,int B.

{ static int m=0,i=2; i+=m+1; m=i+a+b; return (m); }

main()

{ int k=4,m=1,p1,p2;

p1=func(k,m); p2=func(k,m); printf(

【答案】8,17

2.写出下面程序的运行结果。

#define MAX 10 int a[MAX], i;

第6章 函数习题解答125

sub1()

{ for(i=0; i

sub2()

{ int a[MAX], i ,max; max=5;

for(i=0; i

sub3(int a[]) { int i;

for(i=0; i

main()

{ sub1(); sub3(A.; sub2(); sub3(A.; }

【答案】

[**************] [**************]

3.若输入的值是-125,写出下面程序的运行结果。

#include fun(int n) { int k,r;

for(k=2; k

while(!r)

{ printf(

if(n!=1) printf(

main() { int n;

scanf(

if(n

n=fabs(n); fun(n); }

【答案】

-5*5*5

4.写出下面程序的运行结果。

int i=0; fun1(int i)

{ i=(i%i)*(i*i)/(2*i)+4; printf(

C语言程序设计实训指导与习题解答

}

fun2(int i) { i=i

main()

{ int i=5;

fun2(i/2); printf(

【答案】

i=5 i=2 i=2 i=4 i=2

5.写出下面程序的功能。

func(int n) { int i,j,k;

i=n/100; j=n/10-i*10; k=n%10;

if((i*100+j*10+k)==(i*i*i+j*j*j+k*k*k)) return n; return 0; }

main() { int n;

for(n=100; n

if(n==func(n)) printf(

【答案】输出100~1000之间的水仙花数 四、程序判断题

1.下面add函数是求两个参数的和;判断下面程序的正误,如果错误请改正过来。

void add(int a,int b ) { int c; c=a+b;

return(c); }

【答案】错误

add(int a,int b ) { int c; c=a+b;

return(c);}

2.下面函数fun的功能是:将长整型数中偶数位置上的数依次取出,构成一个新数返回,

例如,当s中的数为87653142时,则返回的数为8642;判断下面程序的正误,如果错误请改正过来。

第6章 函数习题解答127

long fun(long s) { long t, sl=1; int d; t=0;

while(s>0) { d=s%10; if(d%2=0) { t=d*sl+t; sl*=10; } s/=10; }

return(t); }

【答案】错误

long fun(long s) { long t, sl=1; int d; t=0;

while(s

{ *t=d* sl+*t; sl*=10; } s/=10; }

return(t); }

3.下面函数fun的功能是:统计字符串s中各元音字母(即A,E,I,O,U)的个数,(字

母不分大,小写)判断下面程序的正误,如果错误请改正过来。

fun(char s[], int num[5]) { int k; i=5;

for(k=0; k

for(k=0; s[k]; k++) { i=-1;

switch(s)

{ case 'a':case 'A':i=0; case 'e':case 'E':i=1; case 'i':case 'I':i=2; case 'o':case 'O':i=3; case 'u':case 'U':i=4; }

if(i>=0) num[i]++; } }

C语言程序设计实训指导与习题解答

【答案】错误

fun(char s[], int num[5]) { int k; i=5;

for(k=1; k

for(k=1; s[k]='\0'; k++) { i=-1;

switch(s)

{ case 'a':case 'A':i=1; case 'e':case 'E':i=2; case 'i':case 'I':i=3; case 'o':case 'O':i=4; case 'u':case 'U':i=5; }

if(i>0)

num[i]++; } }

4.函数fun的功能是:根据整型形参m,计算如下公式的值:

y=1-1/2×2-1/3×3-…-1/m×m

判断下面程序的正误,如果错误请改正过来。

fun(int m)

{ double y=0, d; int I;

for(i=100,i

{ d=(double) i*(double) i; y+=1.0/d; }

return(y); }

【答案】错误

fun(int m)

{ double y=1.0, d; int i;

for(i=2,i

{ d=(double)i*(double)i; y-=1.0/d; }

return(y); }

5.下面函数fun的功能是:依次取出字符串中所有数字字符,形成新的字符串,并取代原

字符串;判断下面程序的正误,如果错误请改正过来。

void fun(char s[]) { int i,j;

for(i=0,j=0; s[i]!='\0'; i++) if(s[i]>='0'&&s[i]

第6章 函数习题解答129

【答案】错误

void fun(char s[]) { int i,j;

for(i=0,j=1; s[i]!='\0'; i++) if(s[i]>='0' && s[i]

s[j]=

五、程序填空题

1.经典算法提示:

折半查找法的思路是先确定待查元素的范围,将其分成两半,然后比较位于中间点元素的值。如果该待查元素的值大于中间点元素的值,则将范围重新定义为大于中间点元素的范围,反之亦然。

int search(int a[10],int m) { int x1=0,x2=9,mid; while(x1

if(m

else if(m>a[mid]) ② ; else return(mid); }

return(-1); }

【答案】

① x2=mid-1 ② x1=mid+1

2.del函数的作用是删除有序数组a中的指定元素x,n为数组a的元素个数,函数返回删

除后的数组a元素个数,请填空使程序完整。

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

while(x>=a[p]&&p

【答案】

① a[p]='\0' ② a[i]=a[i+1]

3.以下程序的功能是计算函数F(x,y,z)=(x+y)/(x-y)+(z+y)/(z-y)的值,请填空使程序完整。

#include

① ; main()

{ float x,y,z,f;

scanf(

float fun(float a,float b) { return(a/b); }

【答案】① #include ② x+y,x-y ③ z+y,z-y

C语言程序设计实训指导与习题解答

4.avg函数的作用是计算数组array的平均值返回,请填空使程序完整。

float avg(float array[10]) { int i;

float avgr, sum=0; for(i=1; ① ; i++) sum+= ② ; avgr=sum / 10; ③ ;}

【答案】

① i

1.用递归法计算n!可用下述公式表示:①②③④。

n!=1(n=0,1) n×(n-1)!(n>1) 【参考程序】

long ff(int n) { long f;

if(n

main() { int n; long y;

printf(

printf(

2.写两个整数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,

并输出结果,两个整数由键盘输入。 【参考程序】

#include

{ int u,v,h,l;

printf(

printf(

printf(

hcf(u,v) int u,v;

第6章 函数习题解答131

{ int a,b,t,r;

if(u>v)

{ t=u; u=v; v=t;

}

a=u; b=v;

while((r=b%a )!=0)

{ b=a; a=r;

}

return(a);

}

lcd(u,v,h)

int u,v,h;

{ return(u*v/h);

}

3.写一函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串。

【参考程序】

main()

{ char str0[100];

gets(str0);

fanxu(str0);

puts(str0);

}

fanxu(str1)

char str1[100];

{ int i,t,j;

char str2[100];strcpy(str2,str1);

t=strlen(str1);

for(i=0,j=t-1;j>-1;i++,j--)

str1[i]=str2[j];

}

4.写一函数,输入一个十六进制数,输出相应的十进制数。

【参考程序】

#include

#include

int x;

int ff(char shu[])

{ int i=strlen(shu)-1,n;

int sum=0.0;

x=0;

n=i;

for(;i>-1;i--)

{ if(shu[n-i]>=48&&shu[n-i]

else if(shu[n-i]>=65&&shu[n-i]=97&&shu[n-i]

}

return sum;

}

C语言程序设计实训指导与习题解答

main()

{ char shufu[100];

int s;

gets(shufu);

s=ff(shufu);

if(x) printf(

else printf(

}

5.写一函数,用“冒泡法”对输入的10个字符按由小到大顺序排列。

【参考程序】

int paixu(x)

int x[];

{ int i,j,t;

for(j=1;j

for(i=0;i

if(x[i]>x[i+1]) {t=x[i+1];x[i+1]=x[i];x[i]=t;}

}

main()

{ int y[10];int i;

for(i=0;i

scanf(

paixu(y);

for(i=0;i

printf(

printf(

}

6.写一函数,使给定的一个二维数组(3×3)转置,即行列互换。

【参考程序】

int zhuangzhi(int b[3][3])

{ int i,j,t;

for(i=0;i

for(j=0;j>=i&&j

{ t=b[i][j];b[i][j]=b[j][i];b[j][i]=t;}

}

main()

{ int a[3][3];int i,j;

for(i=0;i

for(j=0;j

scanf(

for(i=0;i

{ for(j=0;j

printf(

printf(

zhuangzhi(a);

for(i=0;i

{ for(j=0;j

printf(

printf(

}

第6章 函数习题解答133

7.利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。

【参考程序】

#include

main()

{ int i=5;

void palin(int n);

printf(

palin(i);

printf(

}

void palin(n)

int n;

{ char next;

if(n

{ next=getchar();

printf(

putchar(next);

}

else

{ next=getchar();

palin(n-1);

putchar(next);

}

}

8.定义一个带参数的宏,使两个参数的值互换。在主函数中输入两个数作为使用宏的实

参,输出已交换后的两个值。

【说明】在程序主函数使用宏时只能用两个实参,如swap(a,b),不能用3个实参。

【参考程序】

#define CHANGE(a,b,t) t=a;a=b;b=t

main()

{ int c,d,s;

scanf(

CHANGE(c,d,s);

printf(

}

学习情境五

一、选择题

函数与编译预处理习题解答

1.以下正确的函数定义是( )。

A.double fun(int x, int y) B.double fun(int x,y) { z=x+y; return z ; } { int z; return z;} C.fun (x,y) D.double fun (int x, int y) { int x, y; double z ; { double z ; z=x+y; return z;} return z;} 【答案】D

【说明】其返回值与函数类型相符。

2.若调用一个函数,且此函数中没有return语句,则正确的说法是( )。

A.该函数没有返回值 B.该函数返回若干个系统默认值 C.能返回一个用户所希望的函数值 D.返回一个不确定的值 【答案】A

3.以下不正确的说法是( )。

A.实参可以是常量,变量或表达式 B.形参可以是常量,变量或表达式 C.实参可以为任意类型

D.如果形参和实参的类型不一致,则以形参类型为准 【答案】B

【说明】形参只能是变量或数组。

4.C语言规定,简单变量做实参时,它和对应的形参之间的数据传递方式是( )。

A.地址传递 B.值传递 C.有实参传给形参,再由形参传给实参 D.由用户指定传递方式 【答案】B

【说明】地址传递是在实参和形参是数组的情况下进行的。 5.C语言规定,函数返回值的类型是决定于( )。

A.return语句中的表达式类型 B.调用该函数时的主调函数类型 C.调用该函数时由系统临时 D.在定义函数时所指定的函数类型 【答案】D

6.若用数组名作为函数调用的实参,传递给形参的是( )。

A.数组的首地址 B.数组中第一个元素的值 C.数组中的全部元素的值 D.数组元素的个数 【答案】A

7.如果在一个函数中的复合语句中定义了一个变量,则该变量( )。

A.只在该复合语句中有定义 B.在该函数中有定义 C.在本程序范围内有定义 D.为非法变量

C语言程序设计实训指导与习题解答

【答案】C

【说明】因为该变量为局部变量。 8.下面程序的输出是( )。

int i=2;

printf(

A.8,4,2 B.8,4,3 【答案】A

9.已知一个函数的定义如下:

double fun(int x, double y) { }

C.4,4,5 D.4,5,6

则该函数正确的函数原型声明为( )。 A.double fun (int x,double y) B.fun (int x,double y) C.double fun (int ,double ); D.fun(x,y) ; 【答案】A

10.以下不正确的说法是( )。

A.全局变量,静态变量的初值是在编译时指定的 B.静态变量如果没有指定初值,则其初值为0 C.局部变量如果没有指定初值,则其初值不确定

D.函数中的静态变量在函数每次调用时,都会重新设置初值 【答案】D

【说明】静态局部变量在其函数调用结束后仍然可以保留变量值。 11.以下任何情况下计算平方数时都不会引起二义性的宏定义是( )。

A.#define POWER(x) x*x B.#define POWER(x) (x)*(x) C.#define POWER(x) (x*x) D.#define POWER(x) ((x)*(x)) 【答案】D

12.以下正确的叙述是( )。

A.C语言的预处理功能是指完成宏替换和包含文件的调用。 B.C语言的预处理指令只能位于C源程序文件的首部。

C.凡是C源程序中行首以“#”标识的控制行都是预处理指令。 D.C语言的编译预处理就是对源程序进行初步的语法检查。 【答案】B

13.C语言提供的预处理功能包括条件编译,其基本形式是:

#XXX 标识符 程序段1 #else 程序段2 #endif

这里XXX可以是( )。

A.define或 include C.ifdef或ifndef或define 【答案】D

B.ifdef或include D.ifdef或 ifndef

第6章 函数习题解答123

二、填空题

1.C语言函数返回类型的默认定义类型是。

【答案】整型

2.函数调用语句:fun((a,B.,(c,d,e))实参个数为。

【答案】2

3.函数的实参传递到形参有两种方式:和

【答案】传值、传址 4.在一个函数内部调用另一个函数的调用方式称为在一个函数内部直接或间接

调用该函数成为函数 的调用方式。 【答案】嵌套调用 递归

5.C语言变量按其作用域分为;按其生存期分为和。

【答案】全局变量 局部变量 动态变量 静态变量

6.已知函数定义:void dothat(int n,double x) { „ },其函数声明的两种写法为和 。

【答案】dothat(int n,double x) { „ } dothat(int,double) { „ }

7.C语言变量的存储类别有,和。

【答案】自动变量和寄存器变量 静态外部变量 静态局部变量 外部变量 8.凡在函数中未指定存储类别的局部变量,其默认的存储类别为

【答案】自动

9.在一个C程序中,若要定义一个只允许本源程序文件中所有函数使用的全局变量,则

该变量需要定义的存储类别为 。 【答案】静态全局变量

10.变量被赋初值可以分为两个阶段:即

【答案】定义时赋值 运行中赋值 11.下面程序的运行结果是

#define MAX(a,b) (a>b?a:b)+1 main()

{ int j=6,k=8,f;

printf(

【答案】9

12.下面程序的运行结果是。

#define A 4

#define B(x) A*x/2 main()

{ float c,a=4.5; c=B(a );

printf(

【答案】9.0

13.以下程序的输出结果是。

#include

#define PR(A. printf(

C语言程序设计实训指导与习题解答

#define PRINT(A. PR(A.;putchar('\n') main()

{ int x=2;

PRINT(F(3)*x);}

【答案】9

14.设有以下程序,为使之正确运行,请在横线中填入应包含的命令行。

main()

{ int x=2,y=3;

printf(

【答案】#include

15.下面程序的运行结果是。

main()

{ int a=10,b=20,c; c=a/b;

#ifdef DEBUG

printf(

printf(

【答案】c=0

16.下面程序的运行结果是。

#define DEBUG main()

{ int a=14,b=15,c; c=a/b;

#ifdef DEBUG

printf(

printf(

【答案】a=14,b=15,c=0 三、程序阅读题

1.写出下面程序的运行结果。

func(int a,int B.

{ static int m=0,i=2; i+=m+1; m=i+a+b; return (m); }

main()

{ int k=4,m=1,p1,p2;

p1=func(k,m); p2=func(k,m); printf(

【答案】8,17

2.写出下面程序的运行结果。

#define MAX 10 int a[MAX], i;

第6章 函数习题解答125

sub1()

{ for(i=0; i

sub2()

{ int a[MAX], i ,max; max=5;

for(i=0; i

sub3(int a[]) { int i;

for(i=0; i

main()

{ sub1(); sub3(A.; sub2(); sub3(A.; }

【答案】

[**************] [**************]

3.若输入的值是-125,写出下面程序的运行结果。

#include fun(int n) { int k,r;

for(k=2; k

while(!r)

{ printf(

if(n!=1) printf(

main() { int n;

scanf(

if(n

n=fabs(n); fun(n); }

【答案】

-5*5*5

4.写出下面程序的运行结果。

int i=0; fun1(int i)

{ i=(i%i)*(i*i)/(2*i)+4; printf(

C语言程序设计实训指导与习题解答

}

fun2(int i) { i=i

main()

{ int i=5;

fun2(i/2); printf(

【答案】

i=5 i=2 i=2 i=4 i=2

5.写出下面程序的功能。

func(int n) { int i,j,k;

i=n/100; j=n/10-i*10; k=n%10;

if((i*100+j*10+k)==(i*i*i+j*j*j+k*k*k)) return n; return 0; }

main() { int n;

for(n=100; n

if(n==func(n)) printf(

【答案】输出100~1000之间的水仙花数 四、程序判断题

1.下面add函数是求两个参数的和;判断下面程序的正误,如果错误请改正过来。

void add(int a,int b ) { int c; c=a+b;

return(c); }

【答案】错误

add(int a,int b ) { int c; c=a+b;

return(c);}

2.下面函数fun的功能是:将长整型数中偶数位置上的数依次取出,构成一个新数返回,

例如,当s中的数为87653142时,则返回的数为8642;判断下面程序的正误,如果错误请改正过来。

第6章 函数习题解答127

long fun(long s) { long t, sl=1; int d; t=0;

while(s>0) { d=s%10; if(d%2=0) { t=d*sl+t; sl*=10; } s/=10; }

return(t); }

【答案】错误

long fun(long s) { long t, sl=1; int d; t=0;

while(s

{ *t=d* sl+*t; sl*=10; } s/=10; }

return(t); }

3.下面函数fun的功能是:统计字符串s中各元音字母(即A,E,I,O,U)的个数,(字

母不分大,小写)判断下面程序的正误,如果错误请改正过来。

fun(char s[], int num[5]) { int k; i=5;

for(k=0; k

for(k=0; s[k]; k++) { i=-1;

switch(s)

{ case 'a':case 'A':i=0; case 'e':case 'E':i=1; case 'i':case 'I':i=2; case 'o':case 'O':i=3; case 'u':case 'U':i=4; }

if(i>=0) num[i]++; } }

C语言程序设计实训指导与习题解答

【答案】错误

fun(char s[], int num[5]) { int k; i=5;

for(k=1; k

for(k=1; s[k]='\0'; k++) { i=-1;

switch(s)

{ case 'a':case 'A':i=1; case 'e':case 'E':i=2; case 'i':case 'I':i=3; case 'o':case 'O':i=4; case 'u':case 'U':i=5; }

if(i>0)

num[i]++; } }

4.函数fun的功能是:根据整型形参m,计算如下公式的值:

y=1-1/2×2-1/3×3-…-1/m×m

判断下面程序的正误,如果错误请改正过来。

fun(int m)

{ double y=0, d; int I;

for(i=100,i

{ d=(double) i*(double) i; y+=1.0/d; }

return(y); }

【答案】错误

fun(int m)

{ double y=1.0, d; int i;

for(i=2,i

{ d=(double)i*(double)i; y-=1.0/d; }

return(y); }

5.下面函数fun的功能是:依次取出字符串中所有数字字符,形成新的字符串,并取代原

字符串;判断下面程序的正误,如果错误请改正过来。

void fun(char s[]) { int i,j;

for(i=0,j=0; s[i]!='\0'; i++) if(s[i]>='0'&&s[i]

第6章 函数习题解答129

【答案】错误

void fun(char s[]) { int i,j;

for(i=0,j=1; s[i]!='\0'; i++) if(s[i]>='0' && s[i]

s[j]=

五、程序填空题

1.经典算法提示:

折半查找法的思路是先确定待查元素的范围,将其分成两半,然后比较位于中间点元素的值。如果该待查元素的值大于中间点元素的值,则将范围重新定义为大于中间点元素的范围,反之亦然。

int search(int a[10],int m) { int x1=0,x2=9,mid; while(x1

if(m

else if(m>a[mid]) ② ; else return(mid); }

return(-1); }

【答案】

① x2=mid-1 ② x1=mid+1

2.del函数的作用是删除有序数组a中的指定元素x,n为数组a的元素个数,函数返回删

除后的数组a元素个数,请填空使程序完整。

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

while(x>=a[p]&&p

【答案】

① a[p]='\0' ② a[i]=a[i+1]

3.以下程序的功能是计算函数F(x,y,z)=(x+y)/(x-y)+(z+y)/(z-y)的值,请填空使程序完整。

#include

① ; main()

{ float x,y,z,f;

scanf(

float fun(float a,float b) { return(a/b); }

【答案】① #include ② x+y,x-y ③ z+y,z-y

C语言程序设计实训指导与习题解答

4.avg函数的作用是计算数组array的平均值返回,请填空使程序完整。

float avg(float array[10]) { int i;

float avgr, sum=0; for(i=1; ① ; i++) sum+= ② ; avgr=sum / 10; ③ ;}

【答案】

① i

1.用递归法计算n!可用下述公式表示:①②③④。

n!=1(n=0,1) n×(n-1)!(n>1) 【参考程序】

long ff(int n) { long f;

if(n

main() { int n; long y;

printf(

printf(

2.写两个整数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,

并输出结果,两个整数由键盘输入。 【参考程序】

#include

{ int u,v,h,l;

printf(

printf(

printf(

hcf(u,v) int u,v;

第6章 函数习题解答131

{ int a,b,t,r;

if(u>v)

{ t=u; u=v; v=t;

}

a=u; b=v;

while((r=b%a )!=0)

{ b=a; a=r;

}

return(a);

}

lcd(u,v,h)

int u,v,h;

{ return(u*v/h);

}

3.写一函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串。

【参考程序】

main()

{ char str0[100];

gets(str0);

fanxu(str0);

puts(str0);

}

fanxu(str1)

char str1[100];

{ int i,t,j;

char str2[100];strcpy(str2,str1);

t=strlen(str1);

for(i=0,j=t-1;j>-1;i++,j--)

str1[i]=str2[j];

}

4.写一函数,输入一个十六进制数,输出相应的十进制数。

【参考程序】

#include

#include

int x;

int ff(char shu[])

{ int i=strlen(shu)-1,n;

int sum=0.0;

x=0;

n=i;

for(;i>-1;i--)

{ if(shu[n-i]>=48&&shu[n-i]

else if(shu[n-i]>=65&&shu[n-i]=97&&shu[n-i]

}

return sum;

}

C语言程序设计实训指导与习题解答

main()

{ char shufu[100];

int s;

gets(shufu);

s=ff(shufu);

if(x) printf(

else printf(

}

5.写一函数,用“冒泡法”对输入的10个字符按由小到大顺序排列。

【参考程序】

int paixu(x)

int x[];

{ int i,j,t;

for(j=1;j

for(i=0;i

if(x[i]>x[i+1]) {t=x[i+1];x[i+1]=x[i];x[i]=t;}

}

main()

{ int y[10];int i;

for(i=0;i

scanf(

paixu(y);

for(i=0;i

printf(

printf(

}

6.写一函数,使给定的一个二维数组(3×3)转置,即行列互换。

【参考程序】

int zhuangzhi(int b[3][3])

{ int i,j,t;

for(i=0;i

for(j=0;j>=i&&j

{ t=b[i][j];b[i][j]=b[j][i];b[j][i]=t;}

}

main()

{ int a[3][3];int i,j;

for(i=0;i

for(j=0;j

scanf(

for(i=0;i

{ for(j=0;j

printf(

printf(

zhuangzhi(a);

for(i=0;i

{ for(j=0;j

printf(

printf(

}

第6章 函数习题解答133

7.利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。

【参考程序】

#include

main()

{ int i=5;

void palin(int n);

printf(

palin(i);

printf(

}

void palin(n)

int n;

{ char next;

if(n

{ next=getchar();

printf(

putchar(next);

}

else

{ next=getchar();

palin(n-1);

putchar(next);

}

}

8.定义一个带参数的宏,使两个参数的值互换。在主函数中输入两个数作为使用宏的实

参,输出已交换后的两个值。

【说明】在程序主函数使用宏时只能用两个实参,如swap(a,b),不能用3个实参。

【参考程序】

#define CHANGE(a,b,t) t=a;a=b;b=t

main()

{ int c,d,s;

scanf(

CHANGE(c,d,s);

printf(

}


相关内容

  • 江苏省计算机二级资料整理大全
  • 江苏省计算机二级资料整理大全(主页菌花了好多金币在百度文库下的) 第一部分 计算机基础知识部分 一.计算机基础 1 信息技术的基本概念和发展 2 计算机硬件基础知识 3 数字媒体基本知识 4 计算机软件基础知识 5 计算机网络基础知识 6 计算机与数据库基础知识 7 PC机操作使用的基本技能 要求: ...

  • 专升本C语言历年考试题及答案10
  • 专升本C语言历年考试题及答案 一.单项选择题(1~30题每小题1分,31~45题每小题2分,共60分) 1. 以下合法的用户自定义标识符是(D). A. b-b B.float C. D. _isw 2. 若变量已正确定义并赋值,以下不符合C语言语法的表达式是(B). A.a*b/c; B.3.14 ...

  • 2016年计算机二级c语言题库及答案;
  • 2016年计算机二级c 语言题库及答案 一.选择题(每小题1分,共40小题,共40分) 1. 设循环队列的存储空间为Q(1:35) ,初始状态为front=rear=35.现经过一系列入队与退队运算后,front=15,rear=15,则循环队列中的元素个数为( ). A.20 B.0或35 C.1 ...

  • 下列关于构造函数的描述正确的是(
  • ZHEJIANG WATER CONSERVANCY AND HYDROPOWER COLLEGE 浙 江 水 利 水 电 专 科 学 校 习题集 Exercises 1. 下列关于构造函数的描述正确的是( ) A.构造函数可以声明返回类型. B.构造函数不可以用private修饰 C.构造函数必须 ...

  • (甘志国)谈谈人教版教材中函数极值的定义
  • 谈谈人教版教材中函数极值的定义 甘志国(该文已发表 中学数学杂志2011(5):15-16) 普通高中课程标准实验教科书<数学·选修2-2·A 版>(人民教育出版社,2007年第2版) (下简称<选修2-2>) 第27页给出了函数极值的定义: 定义1 如图1,以a , b 两 ...

  • Oracle笔试题目带答案
  • 1. ( )程序包用于读写操作系统文本文件.(选一项) A.Dbms_output B.Dbms_lob C.Dbms_random D.Utl_file 2. ( )触发器允许触发操作的语句访问行的列值.(选一项) A.行级 B.语句级 C.模式 D.数据库级 3. ( )是oracle在启动期间 ...

  • 函数及其表示 知识点与题型归纳
  • ●高考明方向 1. 了解构成函数的要素,会求一些简单函数的 定义域和值域,了解映射的概念. 2. 在实际情境中,会根据不同的需要选择恰当 的方法(如图象法.列表法.解析法) 表示函数. 3. 了解简单的分段函数,并能简单地应用. ★备考知考情 从近三年的高考试题看,函数的表示方法多以选择题.填空题形 ...

  • 南昌大学C++题库
  • 一.单项选择题 1. 在C++语言中,对函数参数默认值描述正确的是:( ) A) 函数参数的默认值只能设定一个 B) 一个函数的参数若有多个,则参数默认值的设定可以不连续 C) 函数参数必须设定默认值 D) 在设定了参数的默认值后,该参数后面定义的所有参数都必须设定默认值 2. 假定 AB 为一个类 ...

  • 初级程序员2010下半年下午试题
  • 初级程序员2010下半年下午试题 试题一 阅读以下说明和流程图,回答问题1至问题4,将解答填入对应栏内. [说明] 下面的流程图中有两个判断条件A >0和B >0.这些判断条件的各种组合情况如下表所示.表中Y 表示相应的条件成立,N 表示相应的条件不成立.每一 ] 1.当遇到哪几种条件组 ...