第8章 函数
一、选择题(在下列各题的A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确选项填涂在答题卡相应位置上。)8.1 若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是
A)函数调用可以作为独立的语句存在
B)函数调用可以作为一个函数的实参
C)函数调用可以出现在表达式中
D)函数调用可以作为一个函数的形参
考生答案: 正确答案: D
8.2 在调用函数时,如果实参是简单的变量,它与对应形参之间的数据传递方式是
A)地址传递
B)单向值传递
C)由实参传形参,再由形参传实参
D)传递方式由用户指定
考生答案: 正确答案: B
8.3 以下正确的说法是
A)定义函数时,形参的类型说明可以放在函数体内
B)return后边的值不能为表达式
C)如果函数值的类型与返回值类型不一致,以函数值类型为准
D)如果形参与实参类型不一致,以实参类型为准
考生答案: 正确答案: C
8.4 以下正确的说法是
A)用户若需调用标准库函数,调用前必须重新定义
B)用户可以重新定义标准库函数,若如此,该函数将失去原有含义
C)系统根本不允许用户重新定义标准库函数
D)用户若需调用标准库函数,调用前不必使用预编译命令将该函数所在文件包括到用户源文件中,系统自动调用
考生答案: 正确答案: B
8.5 以下叙述正确的是
A)函数可以嵌套定义但不能嵌套调用
B)函数既可以嵌套调用也可以嵌套定义
C)函数既不可以嵌套定义也不可以嵌套调用
D)函数可以嵌套调用但不可以嵌套定义
考生答案: 正确答案: D
8.6 下面对C语言的描述中,正确的是
A)函数一定有返回值,否则无法使用函数
B)C语言函数既可以嵌套定义又可以递归调用
C)在C语言中,调用函数时,只能将实参的值传递给形参
D)C语言程序中有调用关系的所有函数都必须放在同一源程序文件中
考生答案: 正确答案: C
8.7 下列说法中错误的是
A)静态局部变量的初值是在编译时赋予的,在程序执行期间不再赋予初值
B)若全局变量和某一函数中的局部变量同名,则在该函数中,此全局变量被屏蔽
C)静态全局变量可以被其他的编辑单位所引用
D)所有自动类局部变量的存储单元都是在进入这些局部变量所在的函数体(或复合语
句)时生成,退出其所在的函数体(或复合语句)时消失
考生答案: 正确答案: C
8.8 以下程序有语法错误,有关错误原因的正确说法是
main()
{ int G=5,k;
void prt_char();
...
k=prt_char(G);
...
}
A)语句 void prt_char();有错,它是函数调用语句,不能用void说明
B)变量名不能使用大写字母
C)函数说明和函数调用语句之间有矛盾
D)函数名不能使用下划线
考生答案: 正确答案: C
8.9 以下正确的函数头定义形式是
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);
考生答案: 正确答案: A
8.10 以下所列的各函数首部中,正确的是
A)void play(var :Integer,var b:Integer)
B)void play(int a,b)
C)void play(int a,int b)
D)Sub play(a as integer,b as integer)
考生答案: 正确答案: C
8.11 不合法的main函数命令行参数表示形式是
A)main(int a,char *c[])
B)main(int arc,char **arv)
C)main(int argc,char *argv)
D)main(int argv,char *argc[])
考生答案: 正确答案: C
8.12 下面函数调用语句含有实参的个数为
func((exp1,exp2),(exp3,exp4,exp5));
A)1
B)2
C)4
D)5
考生答案: 正确答案: B
8.13 设有如下函数
fun (float x)
{ printf("\n%d",x*x);
}
则函数的类型是
A)与参数x的类型相同 B)是void
C)是int型 D)无法确定
考生答案: 正确答案: C
8.14 有以下程序
float fun(int x,int y)
{ return(x+y);}
main()
{ int a=2,b=5,c=8;
printf("%3.0f\n",fun((int)fun(a+c,b),a-c));
}
程序运行后的输出结果是
A)编译出错
B)9
C)21
D)9.0
考生答案: 正确答案: B
8.15 以下程序中函数sort的功能是对a数组中的数据进行由大到小的排序
void sort(int a[],int n)
{ int i,j,t;
for(i=0;ifor(j=i+1;jif(a[i]{ t=a[i];a[i]=a[j];a[j]=t;}
}
main()
{ int aa[10]={1,2,3,4,5,6,7,8,9,10},i;
sort(&aa[3],5);
for(i=0;i<10;i++) printf("%d,",aa[i]);
printf("\n");
}
程序运行后的输出结果是
A)1,2,3,4,5,6,7,8,9,10,
B)10,9,8,7,6,5,4,3,2,1,
C)1,2,3,8,7,6,5,4,9,10,
D)1,2,10,9,8,7,6,5,4,3,
考生答案: 正确答案: C
8.16 下列程序执行后的输出结果是
void func1(int i);
void func2(int i);
char st[]="hello,friend!";
void func1(int i)
{ printf("%c",st[i]);
if(i<3) { i+=2;func2(i);}
}
void func2(int i)
{ printf("%c",st[i]);
if(i<3) { i+=2;func1(i);}
}
main()
{ int i=0; func1(i); printf("\n");
}
A)hello
B)hel
C)hlo
D)hlm
考生答案: 正确答案: C
8.17 以下函数返回a所指数组中最大值所在的下标值
fun(int *a,int n)
{ int i,j=0,p;
p=j;
for(i=j;iif(a[i]>a[p]) _________;
return(p);
}
在下划线处应填入的内容是
A)i=p
B)a[p]=a[i]
C)p=j
D)p=I
考生答案: 正确答案: D
8.18 有以下程序
int f(int n)
{ if(n==1) return 1;
else return f(n-1)+1;
}
main()
{ int i,j=0;
for(i=1;i<3;i++) j+=f(i);
printf("%d\n",j);
}
程序运行后的输出结果是
A)4
B)3
C)2
D)1
考生答案: 正确答案: B
8.19 有如下程序:
long fib(int n)
{ if(n>2) return(fib(n-1)+fib(n-2));
else return(2);
}
main()
{ printf("%d\n",fib(3));
}
该程序的输出结果是
A)2
B)4
C)6
D)8
考生答案: 正确答案: B
8.20 下列函数的运行结果是
main()
{ int i=2,p;
int j,k;
j=i;
k=++i;
p=f(j,k);
printf("%d",p);
}
int f(int a,int b)
{ int c;
if(a>b) c=1;
else if(a==b) c=0;
else c=-1;
return(c);
}
A)-1
B)1
C)2
D)编译出错,无法运行
考生答案: 正确答案: A
8.21 阅读下列程序,当运行函数时,输入asd af aa z67,则输出为
#include
#include
#include
int fun (char *str)
{ int i,j=0;
for(i=0;str[i]!=′\0′;i++)
if(str[i]!=′ ′) str[j++]=str[i];
str[j]= ′\0′;
}
main()
{ char str[81];
int n;
clrscr();
printf("Input a string : ");
gets(str);
puts(str);
fun(str);
printf("%s\n",str);
}
A)asdafaaz67
B)asd af aa z67
C)asd
D)z67
考生答案: 正确答案: A
8.22 以下程序的输出结果是
long fun( int n)
{ long s;
if(n==1||n==2) s=2;
else s=n-fun(n-1);
return s;
}
main()
{ printf("%ld\n", fun(3));
}
A)1
B)2
C)3
D)4
考生答案: 正确答案: A
8.23 已有变量定义和函数调用语句:int a=25;print_value(&a);下面函数的正确输出结果是
void print_value(int *x)
{ printf("%d\n",++*x);
}
A)23
B)24
C)25
D)26
考生答案: 正确答案: D
8.24 下面程序应能对两个整型变量的值进行交换。以下正确的说法是
main()
{ int a=10,b=20;
printf("(1)a=%d,b=%d\n",a,b);
swap(&a,&b);
printf("(2)a=%d,b=%d\n",a,b);
}
swap(int p,int q)
{ int t;
t=p;p=q;q=t;
}
A)该程序完全正确
B)该程序有错,只要将语句swap(&a,&b);中的参数改为a,b即可
C)该程序有错,只要将swap()函数中的形参p和q以及t均定义为指针(执行语句不变)即可
D)以上说法都不对
考生答案: 正确答案: D
8.25 以下程序的输出结果是
int f()
{ static int i=0;
int s=1;
s+=i; i++;
return s;
}
main()
{ int i,a=0;
for(i=0;i<5;i++) a+=f();
printf("%d\n",a);
}
A)20
B)24
C)25
D)15
考生答案: 正确答案: D
8.26 阅读下面程序段,则执行后输出的结果是
#include "stdio.h"
main()
{ char fun(char,int);
char a=′A′;
int b=13;
a=fun(a,b);
putchar(a);
}
char fun(char a,int b)
{ char k;
k=a+b;
return k;
}
A)A
B)M
C)N
D)L
考生答案: 正确答案: C
8.27 编写求两个双精度数之和的函数,选项中正确的是
A)double add(double a,double b)
{ double s;
s=a+b;
return s;
}
B)double add(double a,b)
{ double s;
s=a+b;
return (s);
}
C)double add(double a double b)
{ double s;
s=a+b;
returns;
}
D)double add(a,b)
{ double a,b,s;
s=a+b;
return (s);
}
考生答案: 正确答案: A
8.28 现有如下程序
#include "stdio.h"
int fun(int x)
{ printf("x=%d\n",++x);
}
main()
{ fun(12+5);
}
则程序的输出结果是
A)12
B)13
C)17
D)18
考生答案: 正确答案: D
8.29 现有如下程序段
#include "stdio.h"
int aa(int x,int y);
main()
{ int a=24,b=16,c;
c=aa(a,b);
printf("%d\n",c);
}
int aa(int x,int y)
{ int w;
while(y)
{ w=x%y;
x=y;
y=w;
}
return x;
}
则程序段的输出结果是
A)8
B)7
C)6
D)5
考生答案: 正确答案: A
8.30 下列程序的输出结果是
#include "stdio.h"
#define N 3
#define M 3
void fun(int a[M][N])
{ printf("%d\n",*(a[1]+2));
}
main()
{ int a[M][N];
int i,j;
for(i=0;ifor(j=0;ja[i][j]=i+j-(i-j);
fun(a);
}
A)3
B)4
C)5
D)6
考生答案: 正确答案: B
8.31 阅读下面程序,则执行后的结果为
#include "stdio.h"
main()
{ fun3(fun1(),fun2());
}
fun1()
{ int k=20;
return k;
}
fun2()
{ int a=15;
return a;
}
fun3(int a,int b)
{ int k;
k=(a-b)*(a+b);
printf("%d\n",k);
}
A)0
B)184
C)175
D)编译不通过
考生答案: 正确答案: C
8.32 阅读下面程序,则程序执行后的结果为
#include "stdio.h"
main()
{ int a=4,b=6,c=7;
double d,fun(int,int,int);
d=fun(a,b,c);
printf("%lf\n",d);
}
double fun(int a,int b,int c)
{ double s;
s=a%b*c;
return s;
}
A)27
B)27.000000
C)28
D)28.000000
考生答案: 正确答案: D
8.33 现有如下程序,则程序的输出结果为
#include "stdio.h"
int f(int a,int b)
{ int c;
if(a>0&&a<10) c=(a+b)/2;
else c=a*b/2;
return c;
}
main()
{ int a=8,b=20,c;
c=f(a,b);
printf("%d\n",c);
}
A)随机数 B)80 C)28 D)14
考生答案: 正确答案: D
8.34 阅读如下程序段,则程序段的执行后的输出结果为
#include "stdio.h"
main()
{ char c;
int i;
char count();
int p(char);
for(i=0;i<30;i++) c=count();
p(c);
}
char count()
{ char str=′A′;
str+=1;
return(str);
}
p(char c)
{ putchar(c);
putchar(′\n′);
}
A)A
B)B
C)a
D)b
考生答案: 正确答案: B
8.35 阅读程序,则执行后的结果为
#include "stdio.h"
main()
{ int i,m,n;
for(i=0;i<3;i++)
{ m=test1();
n=test2();
}
printf("%d,%d\n",m,n);
}
test1()
{ int x=0;
x++;
return x;
}
test2()
{ static int x=0;
x++;
return x;
}
A)1,1
B)1,3
C)3,1
D)3,3
考生答案: 正确答案: B
二、填空题(请将每一个空的正确答案写在答题卡相应序号后。)8.36 当调用函数时,实参是一个数组名,则向函数传递的是【1】。
A 考生答案: 正确答案: 数组的首地址
8.37 函数fun的功能是:根据以下公式求p的值,结果由函数值返回。m与n为两个正数且要求m>n。
例如:m=12,n=8时,运行结果应该是495.000000。请在题目的空白处填写适当的程序语句,将该程序补充完整。
#include
#include
float fun (int m, int n)
{ int i;
double p=1.0;
for(i=1;i<=m;i++) 【2】;
for(i=1;i<=n;i++) 【3】;
for(i=1;i<=m-n;i++) p=p/i;
return p;
}
main ()
{ clrscr();
printf ("p=%f\n",fun (12,8));
}
A 考生答案: 正确答案: p=p*i 正确答案: p=p/i
8.38 以下程序的输出结果是【4】。
void fun()
{ static int a=0;
a+=2; printf("%d",a);
}
main()
{ int cc;
for(cc=1;cc<4;cc++) fun();
printf("\n");
}
A 考生答案: 正确答案: 2 4 6
8.39 以下程序运行结果是【5】 。
long fib (int g)
{ switch (g)
{ case 0∶ return 0;
case 1∶
case2∶return 1;
}
return (fib (g-1)+fib(g-2));
}
main ()
{ long k;
k=fib (5);
printf ("k=%(d\n)",k);
}
A 考生答案: 正确答案: k=5
8.40 以下程序的输出结果是【6】。
unsigned fun6(unsigned num)
{ unsigned k=1;
do
{ k *=num; num/=10;
} while (num);
return k;
}
main()
{ unsigned n=26;
printf("%d\n", fun6(n));
}
A 考生答案: 正确答案: 12
8.41 以下函数的功能是【7】。
float av(a, n)
float a[];
int n;
{ int i; float s;
for(i=0, s=0; ireturn s/n;
}
A 考生答案: 正确答案: 求出数组元素平均值
8.42 下面的函数fun的功能是将形参x的值转换成二进制数,所得二进制数的每一位放在一维数组中返回,二进制的最低位放在下标为0的元素中,其他依次类推,请填空。
fun(int x,int b[])
{ int k=0,r;
do
{ r=x% 【8】 ;
b[ 【9】 ]=r;
x/= 【10】 ;
} while(x);
}
正确答案: 2 正确答案: k++ 正确答案: 2
8.43 下面函数的功能是将一个字符串的内容颠倒过来,请填空。
void fun(char str[])
{ int i,j, 【11】 ;
for(i=0,j= 【12】 ;i{ k=str[i];
str[i]=str[j];
str[j]=k;
}
}
正确答案: k 正确答案: strlen(str)-1
8.44 现有如下程序段,则程序段的输出结果为 【13】 。
#include "stdio.h"
int fun()
{ static int k;
return k;
}
main()
{ int m;
m=fun();
printf("%d\n",m);
}
A 考生答案: 正确答案: 0
8.45 下面函数是一个求阶乘的递归调用函数。请填空。
int fun(int k)
{ if(k==1)【14】 ;
else return( 【15】 );
}
正确答案: return 1 正确答案: k*fun(k-1)