C习题函数部分.docx

上传人:b****6 文档编号:8837588 上传时间:2023-02-02 格式:DOCX 页数:21 大小:24.81KB
下载 相关 举报
C习题函数部分.docx_第1页
第1页 / 共21页
C习题函数部分.docx_第2页
第2页 / 共21页
C习题函数部分.docx_第3页
第3页 / 共21页
C习题函数部分.docx_第4页
第4页 / 共21页
C习题函数部分.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

C习题函数部分.docx

《C习题函数部分.docx》由会员分享,可在线阅读,更多相关《C习题函数部分.docx(21页珍藏版)》请在冰豆网上搜索。

C习题函数部分.docx

C习题函数部分

函数

一、选择题

1.以下说法中错误的是

A.C程序中可以只包含一个main函数__________。

B.C程序由一个main函数和若干其它函数构成

C.C程序中可以没有main函数,但至少包含一个其他函数

D.C程序由函数组成,函数是构成程序的基本单位

2.以下说法中正确的是__________。

A.main函数和其他函数间可相互调用

B.main函数可以调用其他函数,但其他函数不能调用main函数

C.因为main函数可不带参数,所以其后的参数小括号能省略

D.根据情况可以不写main函数

3.以下正确的函数首部定义形式是__________。

A.doublefun(intx,inty)B.doublefun(intx;inty)

C.doublefun(intx,inty);D.doublefun(intx,y);

4.C语言规定,函数返回值的类型是由__________。

A.return语句中的表达式类型所决定B.在定义该函数时所指定的函数类型所决定

C.调用该函数时系统临时决定D.调用该函数时的主调函数类型所决定

5.在C语言程序中,以下正确的描叙是__________。

A.函数的定义可以嵌套,但函数的调用不可以嵌套

B.函数的定义和函数的调用均不可以嵌套

C.函数的定义不可以嵌套,但函数的调用可以嵌套

D.函数的定义和函数的调用均可以嵌套

6.以下正确的说法是__________。

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

B.用户若需调用标准库函数,调用前不必使用预编译命令将函数所在文件包括到用户源文件中,系统自动去调

C.系统根本不允许用户重新定义标准库函数

D.用户可以重新定义标准库函数,若如此,该函数将失去原有含义

7.以下所列的各函数原型中,正确的是__________。

A.voidabc(vara:

intergervarb:

interger)B.voidabc(inta,b)

C.voidabc(inta,intb)D.subabc(aasinterger,aasinterger)

8.在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是__________。

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

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

9.在C语言中,以下正确的说法是__________。

A.实参和与其对应的形参各占用独立的存储单元

B.实参和与其对应的形参共占用一个存储单元

C.只有当实参和与其对应的形参同名时才共占用存储单元

D.形参是虚拟的,不占用存储单元

10.下面函数调用语句含有实参的个数为__________。

func((expl,exp2),(exp3,exp4,exp5));

A.lB.2C.4D.5

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

fun(intx,inty,intz)

{z=x*x+y*y;}

main()

{inta=3l;

fun(5,2,a);

printf(“%d”,a);}

A.0B.29C.3lD.无定值

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

inta,b,

voidfun()

{a=100;b=200;}

main()

{inta=5,b=7;

fun();

printf(‘%d%d\n”,a,b);}

A.100200B.57C.200100D.75

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

intd=1;

fun(intp)

{intd=5;

d+=p++;printf(“%d”,d);}

main()

{inta=3;fun(a);d+=a++;printf(“%d\n”,d);}

A.8,4B.9,6C.9,4D.8,5

13.以下不正确的说法为__________。

A.在不同函数中可以使用相同名字的变量

B.形式参数是局部变量

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

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

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

A.数组的首地址B.数组第一个元素的值

C.数组中全部元素的值D.数组元素的个数

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

的错误定义方式为__________。

inta[3][4];

f(a);

A.f(intarray[][6])B.f(intarray[3][])

C.f(intarray[][4])D.f(intarray[2][5])

16.在C语言中,函数的隐含存储类型是__________。

A.autoB.taticC.externD.无存储类型

17.以下程序的输出结果为__________。

main()

{inta=5;

fun(a);printf(“\n”);}

fun(intb)

{if(b>0)fun(b-1);

printf(“%d”,b);)

A.5432lB.012345C.l2345D.543210

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

#include

f(inta)

{intb=0;

staticc=3;

a=c++,b++;returna;}

main()

{inta=2,i,k;

for(i=0;i<2;i++)

k=f(a++);printf(%d”,k);}

A.3B.0C.5D.4

二、填空题

1.C语言规定,可执行程序的开始执行点是。

main函数开始

2.C语言中,函数的定义由函数首和___________两部分组成。

函数体

3.函数实参传递到形参有两种方式_____________和_________________。

4.C语言允许函数值类型缺省定义,此时该函数值隐含的类型是__________。

int

5.定义变量可以在函数的内部,也可以在函数的外部,在函数外部定义的变量一般称为__________变量全局

6.若自定义函数要求返回一个值,则在该函数体中应有一条______________语句;若自定义函数要求不返回值,则应在该函数说明时加一个类型说明符__________________。

returnvoid

7.函数形参的作用域_________,全局的外部变量与函数体内定义的局部变量同名时,在函数体内,__________变量起作用。

整个函数体内局部

8.静态局部变量的作用域_________________。

定义它的函数或复合语句内部

9.下面add函数的功能是求两个参数的和,并将和值返回调用函数。

函数中错误的部分是_________;改正后为__________。

voidfloat

voidadd(floata,floatb)

{floatc;

c=a+b;

returnc;

}

10.在一个函数内部调用另一个函数的调用方式称为_________。

在一个函数内部直接或间接调用该函数称为函数________________的调用方式。

嵌套递归

11.C语言变量按其作用域分为__________________和___________________。

按其生存期分为______________和_____________________。

局部变量全局变量动态存储变量静态存储变量

12.C语言变量的存储类别有_____________、______________、_____________和_________。

autostaticregisterextern

13.被调用函数执行结束时,此函数中定义的___________________类型的变量不被释放。

静态或static

14.静态型外部变量的作用域是______________________________________。

源程序文件

15.在一个C程序中,若要定义一个只允许本文件中函数使用的全局变量,则该变量需要定义的存储类别为_________________________。

static

16.变量赋初值可以在两个阶段,即__________________和_______________________。

编译阶段运行阶段

三、程序阅读

1.分析下列程序,写出运行结果_______________。

15

intfun(inta,intb)

{return(a+b);}

main()

{intx=2,y=5,z=8,r;

r=fun(fun(x,y),z);

printf(“%d\n”,r);}

2.以下程序的运行结果是(4)。

i=2,j=7,x=5

i=7,j=6,x=7

mian()

{inti=2,x=5,j=7;

fun(j,6);

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

}

fun(inti,intj)

{intx=7;

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

3.分析下列程序,写出运行结果_______________。

64

#include“stdio.h”

main()

{intx,n;

longp,pw();

x=2;n=6;

p=pw(x,n);

printf(“%ld”,p);

}

longpw(intx,intn)

{inti,p=1

for(i=0;i

p*=x;

return(p);

}

4.以下程序的运行结果是________.A+B=9

inta=5;intb=7;

main()

{inta=4,b=5,c;

c=plus(a,b);

printf("A+B=%d\n",c);

}

plus(intx,inty)

{intz;

z=x+y;

return(z);

}

5.分析下列程序,写出运行结果_______________。

8

#include“stdio.h”

intabc();

main()

{inta=24,b=16,c;

c=abc(a,b);

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

}

intabc(intx,inty)

{intt;

while(y)

{t=x%y;x=y;y=t;}

6.分析下列程序,写出运行结果_______________。

84

intd=1;

fun(intp)

{intd;

d+=p++;printf(“%d”,d);

}

main()

{inta=3;

fun(a);

d+=a++;

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

}

7.分析下列程序,写出运行结果_______________。

4

longfib(intn)

{if(n>2)return(fib(n-1)+fib(n-2));

elsereturn

(2);

}

main()

{printf(“%d\n”,fib(3));

}

8.分析下列程序,写出运行结果_______________。

1

longfun(intn)

{longs;

if(n==1||n==2)s=2

elses=n-fun(n-1);

returns;

}

main()

{printf(“%d\n”,fun(3));

}

9.分析下列程序,写出运行结果_______________。

3600

intw=3;

main()

{intw=10;

printf(“%d\n”,fun(5)*w);}

fun(intk)

{if(k==0)returnw;

return(fun(k-1)*k);

}

10.分析下列程序,写出运行结果_______________。

61515

intd=1;

fun(intp)

{staticintd=5;

d+=p;printf(“%d”,d);

return(d);}

main()

{inta=3;

printf(“%d\n”,fun(a+fun(d)));

}

11.分析下列程序,写出运行结果_______________。

9

f(inta)

{intb=0;staticintc=3;

b++;

c++;

return(a+b+c);

}

main()

{inta=2,i;

for(i=0;i<3;i++)

printf(“%d”,f(a));

}

12.分析下列程序,写出运行结果_______________。

sum=55

#include“stdio.h”

intisum(intb[])

{ints,i;

s=i=0;

while(b[i]!

=-999)

s=s+b[i++];

return(s);

}

main()

{staticinta[]={1,2,3,4,5,6,7,8,9,10,-999};

printf(“sum=%d\n”,isum(a));

}

13.分析下列程序,写出运行结果_______________。

81

fun(inta[5])

{

inti;

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

a[i]=a[i-1]*3;

}

main()

{inta[5]={1};

fun(a);

printf(“%d\n”,a[4]);

}

14.下面程序的输出结果_______________。

3,4

main()

{staticinta[]={1,2,3,4};

inti,j=2;

for(i=l;i<3;i++)

{f1(a);j++;}

printf(“%d,%d\n”,a[0],j);}

fl(inta[4])

{inti,j=l;

for(i=l;i<4;i++)

a[i-l]=a[i];

j++;}

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

,其算法是_______________。

-737510冒泡排序

main()

{inta[5]={5,10,-7,3,7},i,t,j;

sort(a);

for(i=0;i<=4;i++)

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

sort(inta[])

{inti,j,t;

for(i=0;i<4;i++)

for(i=0;j<4-i;j++)

if(a[j]>a[j+l]

{t=-a[j];a[j]=a[j+1];a[j+1]=t;}

}

16.以下程序的运行结果是_______________,其算法是_______________。

-13689选择排序

main()

{inta[5]={9,6,8,3,一1},i,t,j,p;

sort(a);

for(i=0;i<=4;i++)

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

}

sort(inta[])

{inti,j,t,p;

forr(j=0;j<4;j++)

{p=j;

for(i=j;i<=4;i++)

if(a[i]

p=i;

t=a[p];

a[p]=a[j];

a[j]=t;

}

}

17.分析下列程序,写出运行结果_______________。

s=-9

#defineN3

intfun(inta[N][N])

main()

{inta[N][N]={1,-2,-5,-1,2,5,-4,4,3},s;

s=fun(a);

printf(“s=%d\n”,s);

}

intfun(inta[N][N])

{

inti,j,sum=0;

for(i=0;i

for(j=0;j

if(a[i][j]

}

四、程序填空

1.函数gongyu的作用是求整数num1和num2的最大公约数,并返回该值。

请填空。

gongyu(intnum1,intnum2)

{inttemp,a,b;

if(num1(_____)num2)<

{temp=num1;num1=num2;num2=temp;}

a=num1;b=num2;

while(____)b!

=0

{temp=a%b;a=b;b=temp;}

return(a);

}

2.下面程序的功能是在fun函数中计算20个学生的平均成绩,返回主函数输出,请填空。

x[i]return(ave)fun(a,20)

floatfun(floatx[],intnum)

{inti;

floatave,s=0;

for(i=0;i

ave=s/num;

_______________

}

#include

main()

{floata[20],t;

inti,n;

for(i=0;i<20;i++){scanf(“%f”,&t);a[i]=t;}

printf(“average=%f\n”,_____________)

}

3.以下函数是求x的y次方,请填空。

doublefun(doublex,doubley)

{intx;doublez=1.0;

for(i=1;

(1);i++)i<=y

z=

(2);z*x

returnz;}

4.下面程序的功能是:

第一个数是1,从地二个数起每个数都是它的前一项加5,求第n个数是多少?

请填空(n从键盘输入,用递归的方法实现该算法)

1add(n-1)add(n)

#include

longadd(intn)

{longm;

if(n==1)m=______________________

elsem=5+_____________;

return(m);

}

main()

{longm;intn;

scanf(“%d”,&n);

m=___________

printf(“%ld\n”,m);}

5.下面程序的功能是用函数的递归调用求1!

+2!

+3!

+4!

+….+10!

,请填空。

n*f(n-1)0f(i)

#include

longf(intn)

{if(n==1);return

(1);

elsereturn(_______________)

}

main()

{inti=1;

longs;

s=_____________

while(i<=10)

{s+=______________;i++;}

printf(“%ld”,s);

}

6.函数acopy将整型数组a的内容逆序复制到整型数组b中(-999为数组的结束标志),请填空。

inta[],intb[]b[j]=a[i]b[i++]

#include

voidacopy(_____________)

{inti=0;j=0;

while(a[j]!

=-999)j++;

b[j]=a[j];j--;

while(a[i]!

=-999)

{________________;

i++;j--;

}}

main()

{staticinta[]={1,3,5,7,9,2,4,6,7,10,-999};

intb[20],i=0;

acopy(a,b);

while(b[i]!

=-999)

printf(“%3d”,_____________);

7.下面程序是将字符串str的字符按相反的次序存放,请填空。

#include

voidinvert(charstr[])

{inti,j,k;

for(i=0,j=

(1);i

{k=str[i];

(2);str[j]=k;}str[i]=str[j]

五、编程

1.请编写函数fun,函数的功能是:

根据以下公式计算s,计算结果作为函数值返回;n通过形参传入。

S=1+1/(1+2)+1/(1+2+3)+、、、、、、+1/(1+2+3+、、、、、+n)

floatfun(intn)

{intI,j,t=0;

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

{t+=i;

s=s+1.0/t;

}

returns;

}

2.编写一个函数,重复打印给定的字符n次。

#include“stdio.h”

#defineN10

main()

{inti;

charc;

printf(“Enteracharacter:

”);

c=getchar();

for(i=0;i

{printf(“%c”,c);

}

}

3.编写一个函数求出一个正整数的所有因子。

如72=2*2*2*3*3

#include“stdio.h”

voidfactors(intnumber)

{inti,factor;

for(i=2;i<=number;i++)

{if(number%2==0)

{factor=i;

break;

}

}

printf(“%d\*”,factor);

if(number!

=i)

{number=number/i;

factors(number);

}

else

{for(i=0;i<2;i++)

{putchar(‘\b’);

putchar(‘’);

}

}

}

main()

{inta;

printf(“pleaseenteranumber\n”);

scanf(“%d”,&a);

printf(“%d=”,a);

factors(a);

}

4.试编程求S的值。

要求在主函数中输入n(n的值大于等于0),输出结果S.功能函数voidfun(float*sn,intn)用来计算S,计算结果通过形参指针sn传回,n的值通过参数传入。

S的计算公式如下所示:

#include

voidfun(float*sn,intn)

{floats=0.0,w,f=-1.0;

inti=0;

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

{f=–1*f;w=f/(2*i+1);s+=w;}

*sn=s;

}

voidmain()

{floats;intn;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1