C语言程序设计-–-第-07-章课后习题

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

C语言程序设计–第七章课后习题电子13-02班王双喜2014年5月1日星期四Madebyxkwy.1/10C语言程序设计–第七章课后习题电子13-02班王双喜一、选择题1.以下正确的函数定义是(D)A.doublefun(intx,inty)A.{z=x+y;returnz;}B.fun(intx,y)B.{intz;returnz;}C.fun(x,y)C.{intx,y;doublez;C.z=x+y;returnz;}D.doublefun(intx,inty)D.{doublez;D.z=x+y;returnz;}(解释:A:变量z未定义;B、C:参数未逐一全部指定类型)2.若有函数调用语句:fun(a,(x,y),fun(n,d,(a,b)));,则在此函数调用语句中实参的个数是(S)A.3B.4C.5D.6(解释:函数fun()是一个含有三个参数且有返回值。选D合理,选C亦合理,选A也未尝不可)3.以下程序的正确运行结果是(D)#includestdio.hvoidfunc(inta,intb,intc){c=a*b;}main(){intc;func(2,3,c);printf(\n%d\n,c);}A.0B.1C.6D.不确定(解释:main()函数中的c只能单向地向func()传递数值,调用完毕后不会发生改变。注:c尚未初始化)4.C语言规定,调用函数时实参和形参之间的数据传递是(B)A.地址传递B.值传递C.由实参和形参双向传递D.由用户指定传递方式(解释:的确如此)5.若函数调用时的实参为变量,下列关于函数形参和实参的叙述中正确的是(D)A.函数的实参和其对应的形参共占用同一存储单元B.形参只是形式上的存在,不占用具体存储单元C.同名的实参和形参占同一存储单元D.函数的形参和实参分别占用不同的存储单元(解释:函数被调用时,形参在函数入口处取实参的数值,此后二者再无联系。形参在函数调用时才在动态存储区(栈)中分配存储位置,函数调用完毕后,形参所在内存单元被回收,函数再次调用时再重新分配)6.以下程序有语法性错误,有关错误原因的正确说法是(C)main(){intG=5,k;voidpar_char();k=par_char(G);}A.语句“voidpar_char();”有错,它是函数调用语句,不能用void说明B.变量名不能使用大写字母C.函数声明和函数调用语句之间有矛盾D.函数名不能使用下划线(解释:前一个是声明,后一个是调用;二者参数类型和数目应当保持一致)7.若用数组名作为函数调用的实参,传递给形参的是(A)A.数组的首地址B.数组第一个元素的值C.数组中全部元素的值D.数组元素的个数(解释:在C语言中,数组名是特殊的符号常量,保存该数组首元素的首地址,即数组的首地址)8.数组名作为函数参数传递给函数,作为实在参数的数组名被处理为(D)A.该数组的长度B.该数组的元素个数C.数组中各元素的值D.该数组的首地址(解释:的确如此)C语言程序设计–第七章课后习题电子13-02班王双喜2014年5月1日星期四Madebyxkwy.2/109.在下列叙述中,错误的一条是(D)A.主函数main中定义的变量在整个文件或程序中有效B.不同函数中,可以使用相同名字的局部变量C.形式参数是局部变量D.在一个函数内部,可在复合语句中定义变量,这些变量只能在本复合语句中有效(解释:函数内定义的变量都是局部变量,这句话同样适用与main()函数)10.以下叙述正确的是(C)A.函数调用必须在函数的定义之后B.float类型的函数在调用前不必声明C.函数的形参是自动变量D.函数内部可以定义全局变量(解释:A:只要在调用前声明该函数即可,编译器会自行找其定义所在;B:任何函数调用前必须声明;D:函数内定义的变量都是局部变量,且其作用范围仅限于本函数)11.在C语言中,存储类型为(B)的变量只在使用它们时才占用存储空间A.static和autoB.register和autoC.static和registerD.register和extern(解释:放在动态存储区的变量是使用时才分配存储空间,static和extern都是位于静态存储区的变量)12.下列各种存储类型的变量中,必须定义在函数体外的是(D)A.自动类型变量B.寄存器类型变量C.内部静态类型变量D.外部静态类型变量(解释:外部变量(全局变量)或外部静态变量只能在函数体外进行定义才可实现多函数共享)13.以下叙述错误的是(D)A.一个局部变量的作用域的开始位置完全取决于变量定义语句的位置B.全局变量可以在函数以外的任何部位进行定义C.自动变量的“生存期”只限于本次函数调用,因此不可能将自动变量的运算结果保存至下一次调用D.一个变量说明为static存储类别是为了限制其他编译单位的引用(解释:对变量加static能使其成为静态变量,这样程序当运行到其作用域之外时可保留其数据,待下次运行到其作用域时仍能使用原先的值;对函数定义时加static可以使该函数不能被其它函数调用。由于编译器编译文件是从上往下的,若全局变量定义在文件中间部分,其上面的函数将无法访问该全局变量,因此通常将全局变量放在文件的最开始位置)14.以下程序正确的运行结果是(B)#includestdio.hintm=13;intfun(intx,inty){intm=3;return(x*y-m);}main(){inta=7,b=5;printf(%d\n,fun(a,b)/m);}A.1B.2C.7D.10(解释:打印的是(7*5-3)/13=2)15.以下程序正确的运行结果是(D)#includestdio.hfun(inta){intb=0;staticintc=3;a=c++,b++;return(a);}C语言程序设计–第七章课后习题电子13-02班王双喜2014年5月1日星期四Madebyxkwy.3/10main(){inta=2,i,k;for(i=0;i2;i++)k=fun(a++);printf(%d\n,k);}A.3B.6C.5D.4(解释:fun()函数被调用两次,它执行时,静态变量c自增1,返回值取其自增前的值,因此最终k取4。注:fun()函数的返回值仅取决于其调用次数,与参数a和局部变量b都无关)二、填空题1.程序的子模块在C语言中通常用函数来实现。2.当有多个源文件组成一个C语言程序时,只有其中一个源文件中含有main()函数。3.在C语言中,一个函数一般由两部分组成,它们是函数头部和函数体。4.有参函数中,在定义函数时函数名后面括弧中的变量名称是形式参数,在主函数中调用一个函数时,函数名后面括弧中的参数称为实际参数。在调用时将实际参数的值传给形式参数。5.函数实参可以是常量、变量或表达式,但要求它们有确定的值。6.如果函数定义时函数值的类型和return语句中表达式的值类型不一致,则以定义时类型为准,即这个类型决定函数返回值的类型。7.输入三个int型的整数,求最大数。#includestdio.hmain(){inta,b,c;scanf(%d%d%d,&a,&b,&c);printf(max=%d\n,max(max(a,b),c));}intmax(intx,inty){return(xy?x:y);}(解释:x与y中的大者与z的大者便是三者的最大值。注:程序中max()函数调用前未声明,不太妥当)8.下列程序的运行结果是将“******↙######↙******↙↙↙”(打印三遍)。#includestdio.hvoidprt1();voidprt2();main(){inti;for(i=1;i=3;i++){prt2();printf(\n\n);}}voidprt1(){printf(******\n);}voidprt2(){prt1();C语言程序设计–第七章课后习题电子13-02班王双喜2014年5月1日星期四Madebyxkwy.4/10printf(######\n);prt1();}9.下列程序的运行结果是打印“str[]=abdef”。#includestdio.hvoidabc(charstr[]);main(){charstr[]=abcdef;abc(str);printf(str[]=%s\n,str);}voidabc(charstr[]){inta,b;for(a=b=0;str[a]!='\0';a++)if(str[a]!='c')str[b++]=str[a];str[b]='\0';}(解释:程序的功能是将字符串中的'c'全部剔除。a是数组遍历指针,b是数组重写指针唯有遍历指针所指字符不是'c'时,重写指针才会将遍历指针所指内容写入该指针中)10.n个有序整数数列已放在一维数组中,给定下列程序,函数fun的功能是:利用折半查找算法查找整数m在数组中的位置。若找到,则返回其下标值;反之,则返回-1。折半查找的基本算法是:每次查找前先确定数组中待查找的范围low和high(lowhigh),然后把m与中间位置(mid)中元素的值进行比较。如果m的值大于中间位置元素中的值,则下一次的查找范围放在中间位置之后的元素中;反之,下一次的查找范围放在中间位置之前的元素中。直到lowhigh,查找结束。#includestdio.h#defineM5intfun(intb[],intn){intlow=0,high=M-1,mid;while(high=low){mid=(high+low)/2;if(nb[mid])high=mid-1;elseif(nb[mid])low=mid+1;elsereturn(mid);}return(-1);}main(){inti,b[M]={9,13,45,67,89},j,n;printf(b数组中数据如下:);for(i=0;iM;i++)printf(%d,,b[i]);printf(Entern:);scanf(%d,&n);C语言程序设计–第七章课后习题电子13-02班王双喜2014年5月1日星期四Madebyxkwy.5/10j=fun(b,n);if(j=0)printf(n=%d,index=%d\n,n,j);elseprintf(Notbefound!\n);}(解释:根据信息直接翻译而得)三、改错题每个/****found****/下面的语句中都有一处错误,请将错误的地方改正。注意:不得增行或删行,也不得更改程序的结构。1.函数fun的功能是:判断一个整数m是否是素数,若是返回1,否则返回0。在main函数中,若fun返回1,则输出“YES”,否则输出“NO!”。#includestdio.h/****found****///Apossibleanswer:intfun(intn)voidfun(intn){inti=2;/****found****///Apossibleanswer:while(in&&(n%i))i++;while(i=n&&(n%i==0))i++;/****found****///Apossibleanswer:if(n==i)return1;if(n!=i)return1;elsereturn0;}main(){inta;scanf(%d,&a);if(fun(a))printf(YES\n);elseprintf(NO!\n);}(解释:函数原理是以i(初始为2)作为除数,用n除它,然后将i加1,再除……直到i加到n或者遇到余数不为零的i,这样就可以根据跳出循环后i的值来判断:若i不等于n,则说明在除的过程中有能整除的因子,于是判断n不是素数;反之可得n是素数。注:实际上若要判断素数只需将i加到n/2甚至√足矣)2.函数fun的功能是:从整数1到50之间,选出能被3整除且有一位上的数是5的数,并把这些数放在数组b中,这些数的个数作为函数值返回。规定,函数中a1放个位数

1 / 10
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功