第8章函数及其参数.docx

上传人:b****6 文档编号:7740521 上传时间:2023-01-26 格式:DOCX 页数:21 大小:32.69KB
下载 相关 举报
第8章函数及其参数.docx_第1页
第1页 / 共21页
第8章函数及其参数.docx_第2页
第2页 / 共21页
第8章函数及其参数.docx_第3页
第3页 / 共21页
第8章函数及其参数.docx_第4页
第4页 / 共21页
第8章函数及其参数.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

第8章函数及其参数.docx

《第8章函数及其参数.docx》由会员分享,可在线阅读,更多相关《第8章函数及其参数.docx(21页珍藏版)》请在冰豆网上搜索。

第8章函数及其参数.docx

第8章函数及其参数

第8章函数及其参数

1.C语言是以(3)为单位进行编译的。

①语句②函数③源程序文件④工程

2.以下有关C语言函数的论述不正确的是(4)。

①所有函数都是平等的(平行的),即任一函数的定义都是互相独立的②所有函数都不从属于另一函数,即函数不能嵌套定义③任何函数之间都可以互相调用,但不能调用main()函数④所有函数都不能嵌套调用

3.退出函数的语句是

(1)。

①return②exit(0)③break④enddo

4.以下运行后输出

(2)。

#include"stdio.h"

intf(floatx,floaty)

{floatz=3.5;

z=x>y?

x:

y;

returnz;}

voidmain(){printf("%g",1.0*f(1.5,2.5));}①1.5②2③2.5④3.5

5.以下关于函数定义和函数说明(引用性声明)区别正确的是(4)。

①说明可省数据类型而定义不能②说明可省形参类型而定义不能

③说明可省存储类别而定义不能④说明可省形参名称而定义不能

6.以下关于函数可不必说明(引用性声明)的叙述不正确的是(3)。

①整型函数可不必说明②先定义后使用的函数可不必说明

③实型或字符型函数可不必说明④函数外文件头说明过的可不必说明

7.以下用于求和的函数定义中正确的是(34)。

①add(intx,y){returnx+y;}②add(intx,inty);{returnx+y;}

③intadd(intx,inty){returnx+y;}④add(intx,inty){returnx+y;}

⑤add(intx,y);{returnx+y;}

8.要在以下程序下划线位置添加对f()函数的引用性说明,正确的是(134)。

#include"stdio.h"

___________________

voidmain()

{printf("%g",f(3,2));}

floatf(floatx,floaty)

{returnx/y;}

①floatf(floatx,floaty);②floatf(floatx,floaty)

③floatf(float,float);④floatf(floata,floatb);⑤floatf(x,y);

9.如下函数调用中,要传递的实参为inta[3][10],则形参定义正确的是(125)。

#include"stdio.h"

voidf(_______)

{/*省略*/}

voidmain()

{inta[3][10];f(a);}

①inta[5][10];②inta[][10];③inta[3][];④inta[][];⑤intx[3][10];

10.#include"stdio.h"

f(intx,inty)

{if(x>y)printf("%d>%d",x,y);

elseprintf("%d<=%d",x,y);}

voidmain()

{inta[2]={2,8};

f(a[0],a[1]);}输出:

_____2<=8_______________

11.#include"stdio.h"

voidswap(intx,inty)

{intz;z=x;x=y;y=z;

printf("x=%d,y=%d,",x,y);}

voidmain()

{inta=3,b=4;swap(a,b);

printf("a=%d,b=%d",a,b);}运行后结果输出:

__x=4,y=3,a=3,b=4_________

12.分析以下程序的运行结果。

#include"stdio.h"

intf()

{return4.99;/*作为函数调用的值*/}

voidmain()

{printf("%d",100*f());}运行结果输出:

_____400_________

13.#include"stdio.h"

voidf(intx,inty,intz)

{printf("x=%d,y=%d,z=%d",x,y,z);}

voidmain()

{inta=2;f(a*=3,a*=4,a*=5);}运行后结果输出:

x=120,y=40,z=10___________

14.#include"stdio.h"

intfun(intx)

{intp;

if(x<2)return3;

p=x-fun(x-2);returnp;}

voidmain()

{printf("%d",fun(9));}运行结果输出:

___7_____________

15.#include"stdio.h"

voidmain()

{inta[10]={5,6,1,4,9,3,2,7,8},m;

m=min(a,10);printf("%d",m);}

intmin(intx[],intn)

{inti,m=32767;

for(i=0;i

returnm;}运行结果输出:

____0_______________

16.用二分法求方程f(x)=x3-5x2+16x-80=0的根(y的误差小于10-4)。

运行后输入:

09,则输出结果:

求19次,根为5

参考答案:

#include"stdio.h"

#include"math.h"

intn=0;

floatf(floatx)

{return((x-5)*x+16)*x-80;}

floatxpoint(floatx1,floatx2)

{return/*【*/(x1+x2)/2/*】*/;/*二分法效率高*/}

floatroot(floatx1,floatx2)

{floatx,y,y1;

/*【*/y1=f(x1)/*】*/;

do

{x=/*【*/xpoint(x1,x2)/*】*/;/*求(x1,y1)和(x2,y2)构成的弦与x轴的交点x*/

y=f(x);n++;

if(/*【*/y*y1>0/*】*/){y1=y;x1=x;}/*(x,y)作弦的起点*/

else/*【*/x2=x/*】*/;/*(x,y)作弦的终点*/

}while(/*【*/fabs(y)>=1e-4/*】*/);

returnx;}

voidmain()

{floatx1,x2,y1,y2;

scanf("%f%f",&x1,&x2);y1=f(x1);y2=f(x2);

if(y1*y2>=0)printf("你输入区间两端点同号,方程可能无解");

elseprintf("求%d次,根为%g",n,root(x1,x2));}

17.用递归调用求n!

其递归公式如下:

运行后输入:

5,则输出结果:

120

参考答案:

#include"stdio.h"

/*【*/long/*】*/f(intn)

{intz;

if(/*【*/n<2/*】*/)z=/*【*/1/*】*/;

elsez=/*【*/n*f(n-1)/*】*/;

return/*【*/z/*】*/;}

voidmain()

{intn;scanf("%d",&n);printf("%Ld",f(n));}

18.用递归调用求Fibonacci数列的第n项,这个数列可写成如下递归公式:

┏f(n-1)+f(n-2),当n>2

f(n)=┃

┗1,当n=2或n=1运行后输入:

5,则输出结果:

120

参考答案:

#include"stdio.h"

/*【*/long/*】*/f(intn)

{intz;

if(/*【*/n<3/*】*/)z=/*【*/1/*】*/;

elsez=/*【*/f(n-1)+f(n-2)/*】*/;

return/*【*/z/*】*/;}

voidmain()

{intn;scanf("%d",&n);printf("%Ld",f(n));}

19.编写字符串比较函数cmp(…)。

程序运行后输入两字符串(允许有空格),然后比较两串的大小,输出第一个不相等字符的差值。

(实现TC下的strcmp(s1,s2)功能,使用字符数组方式实现)运行后输入:

ABCabc则输出结果:

-32

参考答案:

#include"stdio.h"

intcmp(chars1[],chars2[])

{inti=/*【*/0/*】*/;

while(/*【*/s1[i]==s2[i]&&s1[i]/*】*/)/*【*/i++/*】*/;

return/*【*/s1[i]-s2[i]/*】*/;}

voidmain()

{chars1[80],s2[80];

gets(s1);gets(s2);printf("%d",/*【*/cmp(s1,s2)/*】*/);}

20.编写函数len(…)实现strlen()的功能。

(使用字符数组方式操作)

运行后输入:

abc,则输出结果:

3参考答案:

#include"stdio.h"

intlen(chars[])

{inti=/*【*/0/*】*/;

while(/*【*/s[i]/*】*/)/*【*/i++/*】*/;

return/*【*/i/*】*/;}

voidmain()

{chars[80];gets(s);printf("%d",/*【*/len(s)/*】*/);}

21.用归递方法实现Hanoi(汉诺)塔问题。

运行后输入:

2,则输出结果:

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

参考答案:

#include"stdio.h"

voidmove(charx,chary)

{printf("%c->%c,",x,y);}/*x移1个盘到y*/

voidhanoi(intn,charA,charB,charC)

{/*将n个盘借助B从A搬到C*/

if(/*【*/n==1/*】*/)/*【*/move(A,C)/*】*/;/*只有1个盘直接从A搬到C*/

else

{/*【*/hanoi(n-1,A,C,B)/*】*/;/*将n-1个盘借助C从A搬到B*/

/*【*/move(A,C)/*】*/;/*将剩余1个盘直接从A搬到C*/

/*【*/hanoi(n-1,B,A,C)/*】*/;/*将n-1个盘借助A从B搬到C*/}}

voidmain()

{intn;scanf("%d",&n);

hanoi(n,'A','B','C');/*将n个盘借助B从A搬到C*/}

22.用归递方法实现十进制数n转换为二进制数。

运行后输入:

124,则输出结果:

1111100B

参考答案:

#include"stdio.h"

#include"string.h"

voidD2B(chars[],intn)

{if(/*【*/n<=1/*】*/)/*【*/s[strlen(s)]='0'+n/*】*/;

else

{D2B(s,/*【*/n/2/*】*/);/*【*/s[strlen(s)]='0'+n%2/*】*/;}}

voidmain()

{chars[80]="\0";intn;scanf("%d",&n);

D2B(s,n);printf("%sB\n",/*【*/s/*】*/);}

23.选择排序对输入的n个数从大到小排序。

运行后输入:

1012531757911196,

则输出结果:

25191711976531

参考答案:

#include"stdio.h"

voidsort(inta[10],intn)

{inti,j,t;

for(i=0;i

for(j=/*【*/i+1/*】*/;j

if(/*【*/a[i]

{t=/*【*/a[i]/*】*/;a[i]=/*【*/a[j]/*】*/;/*【*/a[j]=t/*】*/;}}

voidmain()

{inta[10],i,n;

scanf("%d",&n);

for(i=0;i

sort(a,n);

for(i=0;i<10;i++)printf("%d",a[i]);}

24.数组元素作为函数实参时,传递的是实参的值,数组名作为函数实参时,传递的是实参的地址。

[][√]

25.执行以下函数调用时,各实参表达式的计算顺序是自右而左,即各实参表达式的求值顺序是En,…E3,E2,E1。

[]f(E1,E2,E3,…,En)[√]

26.程序的功能是:

写一函数求两点间的距离并在主函数中调用。

(要求:

输入带括号,不输出无意义的0)如:

运行后输入:

(0,0),(3,4),则结果输出:

5运行后输入:

(1,1),(9,7),则结果输出:

10以下程序在/*【*/和/*】*/之间的5行语句或式子有错,请将/*【*/和/*】*/之间的语句或式子替换成正确的语句或式子。

参考答案:

#include"stdio.h"

/*【*/#include"math.h"/*】*/

/*【*/float/*】*/dis(/*【*/floatx1,floaty1,floatx2,floaty2/*】*/)

{/*【*/returnsqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))/*】*/;}

voidmain()

{floatx1,y1,x2,y2;

/*【*/scanf("(%f,%f),(%f,%f)",&x1,&y1,&x2,&y2)/*】*/;

printf("%g",dis(x1,y1,x2,y2));}

27.程序的功能是:

编写一个递归函数,用于将一个不多于4位数的十六进制正整数转换成十进制输出(每一位后加一逗号),并在主函数中调用。

(课后作业P2038.16)如:

运行后输入:

FA,则结果输出:

2,5,0,运行后输入:

250,则结果输出:

5,9,2,

参考答案:

#include"stdio.h"

voidp(intn)

{if(/*【*/n/10>0/*】*/)p(/*【*/n/10/*】*/);

printf(/*【*/"%d,"/*】*/,/*【*/n%10/*】*/);}

voidmain()

{intn;scanf(/*【*/"%x"/*】*/,&n);p(n);}

28.程序的功能是:

编写一个递归函数,用于将一个不多于5位数的正整数转换成八进制输出,并在主函数中调用。

(课后作业8.16演变)如:

运行后输入:

10,则结果输出:

12

运行后输入:

25,则结果输出:

31参考答案:

#include"stdio.h"

voidp(intn)

{if(/*【*/n/8>0/*】*/)p(/*【*//*】*/);

printf(/*【*//*】*/,/*【*//*】*/);}

voidmain()

{intn;scanf(/*【*//*】*/,&n);p(n);}

29.程序的功能是:

编写一个函数,求一行中最长单词的字母数并输出,在主函数中调用。

(课后作业8.10)如:

运行后输入:

Iamastudent,则结果输出:

7运行后输入:

Thatisgood,则结果输出:

4分析:

按顺序读取每一个字符,

(1)若是字母则变量m累计加1,若当前累计值m超过最大(最大长度)max,则将m存max;

(2)若不是字母则变量m清0。

算法复杂度为O(n)

参考答案:

#include"stdio.h"

intLongest(chars[80])

{intmax=0,m=0,i=0;

for(;/*【*/s[i]/*】*/;i++)

if(/*【*//*】*/)

{/*【*//*】*/;if(m>max)/*【*//*】*/;}

else/*【*//*】*/;

returnmax;}

voidmain()

{chars[80];gets(s);

printf("%d",Longest(s));}

30.程序的功能是:

编写一个函数,求一行中最长单词的字母数和相应单词并输出(多个最长单词则输出最后一个最长单词),在主函数中调用。

(课后作业8.10)如:

运行后输入:

Iamastudent,则结果输出:

student7运行后输入:

Thatisgood,则结果输出:

good4

分析:

按顺序读取每一个字符,

(1)若是字母则存临时数组a且变量m累计加1,若当前累计值m超过最大(最大长度)max,则将m存max;

(2)若不是字母,则㈠先判断当前单词是否最长,若是存b数组;㈡变量m清0。

算法复杂度为O(n)

参考答案:

#include"stdio.h"

#include"string.h"

intLongest(chars[80])

{intmax=0,m=0,i=0;chara[80],b[80];

do

{if(/*【*//*】*/)

{a[m]=s[i];/*【*//*】*/;

if(m>max)/*【*//*】*/;}

else

{if(max==m){a[max]=0;strcpy(b,a);}

/*【*//*】*/;}}

while(/*【*//*】*/);

printf("%s",b);

returnmax;}

voidmain()

{chars[80];gets(s);

printf("%d",Longest(s));}

31.程序的功能是:

编写一个函数f(x),求实数x的平方,在主函数中调用并输出。

(要求不输出无意义的0)如:

运行后输入:

2.5,则结果输出:

6.25运行后输入:

2,则结果输出:

4

参考答案:

#include"stdio.h"

/*【*//*】*/;

voidmain()

{floata;

scanf("%f",&a);

printf(/*【*//*】*/,/*【*//*】*/);}

/*【*//*】*//*定义函数f(x)*/

{

/*【*//*】*/;}

32.程序的功能是:

定义一个函数Max(…)求二值中较大值,请编写该函数。

如:

运行后输入:

3,4,则结果输出:

3和4的较大者是4运行后输入:

6,4,则结果输出:

6和4的较大者是6

参考答案:

intMax(a,b)

{returna>b?

a:

b;}

33.程序的功能是:

写一函数prime(n),判断数n是否素数并在主函数中调用。

如:

运行后输入:

5,则结果输出:

5是素数运行后输入:

6,则结果输出:

6不是素数

参考答案:

intprime(intn)

{inti;

for(i=2;i<=sqrt(n)&&n%i!

=0;i++);

returni>sqrt(n);}

34.程序的功能是:

编写一个求a和b最大公约数函数gcd(a,b),返回值为a和b的最大公约,并在主函数中调用。

如:

运行后输入:

1218,则结果输出:

最大公约数为6运行后输入:

3624,则结果输出:

最大公约数为12

参考答案:

intgcd(inta,intb)

{intr;

do

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

while(r);

returna;}

35.程序的功能是:

编写一个求a和b最小公倍数函数lcm(a,b),并在主函数中调用。

如:

运行后输入:

23,则结果输出:

最小公倍数为6运行后输入:

68,则结果输出:

最小公倍数为24参考答案:

intlcm(inta,intb)

{intr,cj;

cj=a*b;

do

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

while(r);

returncj/a;}

36.程序的功能是:

编写一个函数,用于将一个不多于5位数的正整数按逆序输出,并在主函数中调用。

如:

运行后输入:

13579,则结果输出:

97531

运行后输入:

23,则结果输出:

32参考答案:

voidp(intn)

{printf("%d",n%10);if(n/10>0)p(n/10);}

37.程序的功能是:

编写一个(递归)函数,用于将一个不多于5位数的正整数转换成十进制输出(要求每位数前有一个空格),并在主函数中调用。

(课后作业8.8)如:

运行后输入:

2009,则结果输出:

2009运行后输入:

13579,则结果输出:

13579

参考答案:

voidp(intn)

{if(n/10>0)p(n/10);printf("%d",n%10);}

38.函数内定义变量时默认存储类别

(1)①auto②static③register④extern

39.函数外定义变量时默认存储类别(4)。

①auto②static③register④extern

40.为加快程序运行速度,通常将使用频率较高的变量定义为(3)型。

①auto②static③register④extern

41.全局变量缺省存储类别是(4)。

①auto②static③register④extern

42.在程序设计中希望某些外部变量只限于被本文件中被引用,而不能被其它文件引用,可以在定义这些变量时加一个

(2)声明。

①auto②static③register④extern

43.函数定义默认存储类别是(4)。

①auto②static③register④extern

44.外部函数存储类别是(4)。

①auto②static③register④extern

45.内部函数存储类别是

(2)。

①auto②static③register④extern

46.内部函数的作用域只限于一个

(2)。

①工程或C程序②源程序文件③函数④程序块

47.外部函数的作用域只限于一个

(1)①工程或C程序②源程序文件③函数④程序块

48.TC的工程(项目)文件名的扩展名为(3)。

①.c②.cpp③.prj④.dsw

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

①函数内定义的变量叫局部变量②函数内部复合语句(程序块)中定义的变量是局部变量③函数的形式参数是局部变量④main函数中定义的变量可作为全局变量使用⑤局部变量的作用域只在定义它的函数或程序块中有效

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

①函数外定义的变量叫全局变量,也叫外部变量②全局变量可以在多个函数中使用③全局变量的作用域从该变量的定义性声明或引用性声明位置开始到本源程序文件结束④所有全局变量都可以通过extern将其作用域扩展到其它文件⑤若全局变量与局部变量同名,则在局部变量的作用域内“屏蔽”全局变量的作用,即全局变量失去作用

51.可用于初始化数组元素的存储类别是(24)①auto②static③register④extern⑤cpu

52.一般存储于动态存储区的存储类别是(13)。

①auto②static③register④extern⑤cpu

53.存储于静态存储区的存储类别是(24)①auto②static③register④ex

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

当前位置:首页 > 表格模板 > 合同协议

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

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