c语言习题(8)

更新时间:2023-12-18 03:53: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】以下错误的描述是 。

【题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); 函数调用可以

A)出现在执行语句中

B)出现在一表达式中 C)做为一个函数的实参 D)做为一个函数的形参

float f(float a,float b) { }

float value; value=a/b;

return(value);

B)x+y,x-y B)x+y,x-y

C)z+y,z-y C)z+y,z-y

D)z-y,z+y D)z-y,z+y

【1】 A)x-y,x+y 【2】 A)x-y,x+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 { }

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

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

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

hanoi(n-1,one,three,two); move(one,three);

hanoi(n-1,two,one,three);

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

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

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

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

A-->C A-->B B-->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(m

else if(m>a[mid]) 【2】; else return(mid);

return(-1); }

【1】 A)high=mid-1 B)low=mid+1

C)high=mid+1 D)low=mid-1

【2】 A)high=mid-1 B)low=mid+1 C)high=mid+1 D)low=mid-1

【题8.23】以下正确的说法是 。 如果在一个函数中的复合语句中定义了一个变量,则该变量

A) 只在该复合语句中有效

B) 在该函数中有效

C) 在本程序范围内均有效 D) 为非法变量

【题8.24】以下不正确的说法为 。

A) 在不同函数中可以使用相同名字的变量 B) 形式参数是局部变量

C) 在函数内定义的变量只在本函数范围内有效

D) 在函数内的复合语句中定义的变量在本函数范围内有效

【题8.25】以下程序的正确运行结果是 。

A) 0 2 4 6 8 10 12 14 16 18

0 1 2 3 4 #define MAX 10 int a[MAX],i; main() { } sub2() { }

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

for(i=0;i

printf(“\\n”); sub1(); sub3(a); sub2(); sub3(a);

sub1() { }

for(i=0;i

sub3(int a[]) { }

int i;

for(i=0;i

B) 0 1 2 3 4

0 2 4 6 8 10 12 14 16 18 C) 0 1 2 3 4 5 6 7 8 9

0 1 2 3 4

D) 0 2 4 6 8 10 12 14 16 18

0 2 4 6 8 10 12 14 16 18

【题8.26】以下程序的正确运行结果是 。 #include

void num() { }

extern int x,y; int a=15,b=10; x=a-b; y=a+b;

int x,y; main() { }

int a=7,b=5; x=a+b;

y=a-b; num();

printf(“%d,%d\\n”,x,y);

B)不确定

C)5,25

D)1,12

A)12,2

【题8.27】凡是函数中未指定存储类型的局部变量,其隐含的存储类别为 。 A)自动(auto) B)静态(static) C)外部(extern) D)寄存器(register)

【题8.28】在一个C源程序文件中,若要定义一个只允许本源文件中所有函数使用的全局

变量,则该变量需要使用的存储类别是 。 A)extern B)register C)auto D)static

【题8.29】以下程序的正确运行结果是 。

main() { }

int a=2,i;

for(i=0;i<3;i++) printf(“M”,f(a));

f(int a) {

}

int b=0; static int c=3; b++; c++;

return(a+b+c);

B)7 10 13

C)7 9 11

D)7 8 9

A)7 7 7

【题8.30】以下程序的正确运行结果是 。 #include

main() { }

func(int a,int b) { static int m=0,i=2;

i+=m+1; m=i+a+b; int k=4,m=1,p;

p=func(k,m); printf(“%d”,p); p=func(k,m); printf(“%d\\n”,p);

return(m); } A)8,17 B)8,16

C)8,20 D)8,8

8.2 填空题

【题8.31】C语言规定,可执行程序的开始执行点是 。

【题8.32】在C语言中,一个函数一般由两个部分组成,它们是【1】和【2】。

【题8.33】若输入的值是-125,以下程序的运行结果是 。 #include

main() { }

int n;

scanf(“%d”,&n); printf(“%d=”,n); if(n<0) printf(“-”); n=fabs(n); fun(n);

fun(int n) { }

int k,r;

for(k=2;k<=sqrt(n);k++) { }

r=n%k;

while(r==0) { }

printf(“%d”,k); n=n/k;

if(n>1) printf(“*”); r=n%k;

if(n!=1) printf(“%d\\n”,n);

【题8.34】下面add函数的功能是求两个参数的和,并将和值返回调用函数。函数中错误

的部分是【1】;改正后为【2】。

void add(float a,float b) { }

float c; c=a+b; return c;

【题8.35】以下程序的运行结果是 。

main() { int i=2,x=5,j=7; }

fun(int i,int j) { }

int x=7;

printf(“i=%d;j=%d;x=%d\\n”,i,j,x); fun(j,6);

printf(“i=%d;j=%d;x=%d\\n”,i,j,x);

【题8.36】以下程序的运行结果是 。

main() { increment();

}

increment(); increment();

increment() { }

int x=0;

x+=1;

printf(“%d”,x);

【题8.37】以下程序的运行结果是 。

#include main() { }

int a=1,b=2,c;

c=max(a,b);

printf(“max is %d\\n”,c);

max(int x,int y) { }

int z;

z=(x>y)?x:y; return(z);

【题8.38】以下程序的功能是根据输入的“y”(“Y”)与“n”(“N”),在屏幕上分别显

示出“This is YES.”与“This is NO.”。请填空。

#include

void YesNo(char ch) {

switch(ch) { }

case ‘y’:

case ‘Y’: printf(“\\nThis is YES.\\n”); 【1】; case ‘n’:

case ‘N’: printf(“\\nThis is No.\\n”); 【2】;

}

main() {

char ch;

printf(“\\nEnter a char ‘y’,‘Y’or‘n’,‘N’:”);

}

printf(“\\nPlease enter a precision:”); scanf(“%lf”,&x);

printf(“\\neps=%lf,π=%lf”,x,pi(x));

【题8.50】下面是一个计算阶乘的程序。程序中的错误语句是【1】,应改为【2】。 #include

double factorial(int); main() { }

double factorial(int n) { double result=1.0l;

while(n>1||n<170) result*=--n; return result; int n;

printf(“Enter an integer:”);

scanf(“%d”,&n);

printf(“\\n\\n%d!=%lg\\n\\n”,n,factorial(n));

}

【题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) { } main() { }

long n;

printf(“\\nPlease enter a number:”); scanf(“%ld”,&n);

printf(“\\nThe product of its digits is %ld.”,func(n)); long k=1;

num=labs(num); do{ k*=num;

num/=10; }while(num); return(k);

【题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?age(n)???age(n?1)?2(n?1)(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?12(x0?ax0)

#include

double mysqrt(double a,double x0) { } main() { }

double x;

printf(“Enter x:”); scanf(“%lf”,&x);

printf(“The sqrt of %f=%f\\n”,x,mysqrt(x,1.0)); double x1,y;

x1=【1】;

if(fabs(x1-x0)>0.00001) y=mysqrt(【2】); else y=x1; return y;

【题8.58】以下程序的运行结果是 。

#include f(int a[]) { } main() { }

int a[]={1,5,10,9,11,7}; f(a+1);

int i=0;

while(a[i]<=10) { }

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

【题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]);

}

{ }

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

/* 错误语句【2】 */

【题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(int m) { }

m+=k; k+=m; { }

char k=‘B’;

printf(“(2) %d\\n”,k-‘A’); fun(i);

printf(“(1) %d,%d\\n”,i,k);

printf(“(3) %d,%d\\n”,m,k);

【题8.74】以下程序的运行结果是 。

sub(int x,int y) { }

x1=x; x=y; y=x1;

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);

【题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;

cube() { }

x=x*x*x; main() { }

x=5; cube();

printf(“%d\\n”,x);

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

{ } incx() { }

int x=0;

printf(“x=%d\\t”,++x); incx(); incy(); incx(); incy(); incx(); incy();

incy() { }

static int y=0;

printf(“\\ny=%d\\n”,++y);

【题8.80】以下程序的运行结果是 。 main() { increment();

}

increment() { }

static int x=0; x+=1;

printf(“%d”,x); increment(); increment();

【题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) { }

main() { int i; for(i=1;i<=5;i++) }

printf(“%d!=%d\\n”,i,fac(i)); static int f=1; f=f*n;

return(f);

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函数。

nisprime(int a) { }

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

k?1

本文来源:https://www.bwwdw.com/article/1fv5.html

Top