《C程序设计Ⅱ》作业本学院计算机信息工程学院班级学号姓名2010年2月1第七部分函数一、选择题(共20分,每题1分)1.以下正确的函数形式是____D_。A.doublefun(intx,inty)B.fun(intx,y){z=x+y;returnz;}{intz;returnz;}C.fun(x,y)D.doublefun(intx,inty){intx,y;doublez;z=x+y;returnz;}{doublez;z=x+y;returnz;}2.C语言中,简单变量做参数.以下正确的说法是_____A__。A.实参和与其对应的形参各占用独立的存储单元B.实参和与其对应的形参共占用一个存储单元C.只有当实参和与其对应的形参同名时才共占用存储单元D.形参是虚拟的,不占用存储单元3.若调用一个有返回类型的函数,且此函数中没有return语句,则该函数____D_______。A.没有返回值B.返回若干个系统默认值C.能返回一个用户所希望的函数值D.返回一个不确定的值4.在C语言中,函数的数据类型是指_____A__。A.函数返回值的数据类型B.函数形参的数据类型C.调用该函数时的实参的数据类型D.任意指定的数据类型5.以下不正确的说法是______A。A.定义函数时,形参的类型说明可以放在函数体内B.return后边的值不能为表达式C.如果函数值的类型与返回值不一致,以函数值类型为准D.如果形参与其实参的类型不一致,以形参类型为准6.C语言规定,简单变量做实参时,它和对应形参之间的数据传递方式是____B__。A.地址传递B.单向值传递C.由实参传给形参,再由形参传回给实参D.由用户指定传递方式7.C语言规定,函数返回值的类型是由D_。A.return语句中的表达式类型所决定B.调用该函数时的主调函数类型所决定C.调用该函数时系统临时决定D.在定义该函数时所指定的函数类型所决定8.下面函数调用语句含有实参的个数为_____B。func((exp1,exp2),(exp3,exp4,exp5));A.1B.2C.4D.59.C语言中,函数调用不可以D。A.出现在执行语句中B.出现在一个表达式中C.做为一个函数的实参D.做为一个函数的形参210.以下正确的描述是___B__。A.函数的定义可以嵌套,但函数的调用不可以嵌套B.函数的定义不可以嵌套,但函数的调数用可以嵌套C.函数的定义和函数的调用均不可以嵌套D.函数的定义和函数的调用均可以嵌套11.若有数组名作为函数调用的实参,传递给形参的是____A_。A.数组的首地址B.数组第一个元素的值C.数组中全部元素的值D.数组元素的个数12.如果在一个函数中的复合语句中定义了一个变量,则该变量___A_。A.只在该复合语句中有效B.在该函数中有效C.在本程序范围内均有效D.为非法变量13.以下不正确的说法是___D__。A.在不同函数中可以使用相同名字的变量B.形式参数是局部变量C.在函数内定义的变量只在本函数范围内有效D.在函数内的复合语句中定义的变量在本函数范围内有效14.凡是函数中未指定存储类别的局部变量,其隐含的存储类别为____A_。A.自动(auto)B.静态(static)C.外部(extern)D.寄存器(register)15.已有数组定义inta[3][4];和f函数调用语句f(a);,则在f函数的说明中,对形参数组array的错误定义方式为____B_。(A和D语法虽正确,千万别用)A.f(intarray[][6])B.f(intarray[3][])C.f(intarray[][4])D.f(intarray[2][5])16.以下正确的说法是____C_。A.定义函数时,形参的类型说明可以放在函数体内B.return后边的值不能为表达式C.如果函数值的类型与返回值类型不一致,以函数值类型为准D.如果形参与实参的类型不一致,以实参类型为准17.如果程序中有staticcharc;则编译程序会对其自动设置初值为____C_。(ASCII码为0)A.“\n”B.’\n’C.0D.“\0”18.以下程序有语法性错误,有关错误原因的正确说法是____C_。voidmain(){intG=5,k;voidprt_char();……k=prt_char(G);……}A.语句voidprt_char();有错,它是函数调用语句,不能用void说明B.变量名不能使用大写字母C.函数说明和函数调用语句之间有矛盾D.函数名不能使用下划线319.在一个void类型函数的定义中,函数体中有return;语句,该语句____B__。A.是错的B.表示向主调函数返回(程序控制)C.在执行时不予理睬D.在执行时会中断程序运行20.以下不正确的描述是_____D。A.在函数外部定义的变量是全局变量B.在函数内部定义的变量是局部变量C.函数的形参是局部变量D.局部变量不能与全局变量同名二、填空题(共40分,每题2.5分)1.以下程序的运行结果是#include”stdio.h”voidadd(intx,inty,intz){z=x+y;x=x*x;y=y*y;printf(“(2)x=%dy=%dz=%d\n”,x,y,z);}voidmain(){intx=2,y=3,z=0;printf(“(1)x=%dy=%dz=%d\n”,x,y,z);add(x,y,z);printf(“(3)x=%dy=%dz=%d\n”,x,y,z);}2.若输入一个整数30,以下程序的运行结果是#include“stdio.h”intpr(intn){inti,yes=1;for(i=2;in&&yes;i++)if(n%i==0)yes=0;returnyes;}voidmain(){intm,k;scanf(%d,&m);for(k=3;km/2;k=k+2)if(pr(k)&&pr(m-k))printf(%d=%d+%d,,m,k,m-k);}43.若输入的值是-125,以下程序的运行结果是#include”stdio.h”#include”math.h”voidfun(intn){intk,r;for(k=2;k=sqrt(n);k++){r=n%k;while(r==0){printf(“%d”,k);n=n/k;if(n1)printf(“*”);r=n%k;}}if(n!=1)printf(“%d\n”,n);}voidmain(){intn;scanf(“%d”,&n);printf(“%d=”,n);if(n0)printf(“-“);n=fabs(n);fun(n);}4.函数gongy的作用是求正整数num1和num2的最大公约数,并返回该值。请填空intgongy(intnum1,intnum2){inttemp,a,b;if(num1num2){temp=num1;num1=num2;num2=temp;}a=num1;b=num2;while(){temp=a%b;a=b;b=temp;}return(a);}55.若输入一个整数10,以下程序的运行结果是#include”stdio.h”intsub(inta){intc;c=a%2;returnc;}voidmain(){inta,e[10],c,i=0;printf(“输入一整数\n”);scanf(“%d”,&a);while(a!=0){c=sub(a);a=a/2;e[i]=c;i++;}for(;i0;i--)printf(“%d”,e[i-1]);}6.以下程序的运行结果是#include”stdio.h”longfib(intg){switch(g){case0:return0;case1:case2:return1;}return(fib(g-1)+fib(g-2));}voidmain(){longk;k=fib(7);printf(“k=%d\n”,k);}67.以下程序的运行结果是#include”stdio.h”intsub(intn){inta;if(n==1)return1;a=n+sub(n-1);return(a);}voidmain(){inti=5;printf(“%d\n”,sub(i));}8.以下程序的运行结果是#include”stdio.h”intfact(intvalue){if(value0){printf(“FACT(-1):ERROR!\n”);return(-1);}elseif(value==1||value==0)return(1);elsereturn(value*fact(value-1));}voidmain(){printf(“FACT(5):%d\n”,fact(5));printf(“FACT(1):%d\n”,fact(1));fact(-5);}9.下面程序的功能是用递归的方法将一个整型数num的各位数字转换为对应的数字字符输出,请填空完成程序。#include”stdio.h”voidconvert(intn){intj;j=n/10;if()convert()putchar()}7voidmain(){intnum;scanf(“%d”,&num);if(num0){putchar(‘-‘);num=;}convert(num);}10.折半查找法的思路是:先确定待查元素的范围,将其分成两半,然后测试位于中间点元素的值,如果该待查元素的值大于中间点元素,就缩小待查范围,只测试中点之后的元素;反之,测试中间点之前的元素,测试方式同前。函数binary的作用是应用折半查找法从存有10个整数的a数组中对关键字m进行查找,若找到,返回下标值;反之,返回-1。请填空。intbinary(inta[10],intm){intlow=0,high=9,mid;while(low=high){mid=(low+high)/2;if(ma[mid])elseif(ma[mid])elsereturn(mid);}return(-1);}11.函数del的作用是删除有序数组a中的指定元素x。调用语句为n=del(a,n,x);其中实参n为删除前数组元素的个数,赋值号左边的n为删除后数组元素的个数。已知数组中存在x且没有重复元素,请填空。intdel(inta[],intn,intx){intp,i;p=0;while(x=a[p]&&pn);for(i=p-1;in-1;i++);n=n-1;returnn;}812.函数yanghui能够按以下形式构成一个杨辉三角形,请填空。11112113311464115101051…………………………#defineN11voidyanghui(inta[][N]){inti,j;for(i=1;iN;i++){a[i][1]=1;a[i][i]=1;}for(;iN;i++)for(j=2;;j++)a[i][j]=+a[i-1][j];}13.下面的函数index(chars[],chart[])检查字符串s中是否包含字符串t,若包含,则返回t在s中的开始位置(下标值),否则返回-1。index(chars[],chart[]){inti,j,k;for(i=0;s[i]!='\0';i++){for(j=i,k=0;&&s[j]==t[k];j++,k++);if()return(i);}return(-1);}14.函数squeez(chars[],charc)将字符串s中所出现的与变量ch中相同的字符删去。#include“stdio.h”voidsqueez(chars[],charc){inti,j;for(i=j=0;;i++)if(s[i]!=c);s[j]='\0';}9voidmain(){charstr[128],ch;gets(str);ch=getchar();squeez(str,ch);puts(str);}15.以下程序的运行结果是#i