第8章和第10章习题答案.docx
- 文档编号:6157708
- 上传时间:2023-05-09
- 格式:DOCX
- 页数:19
- 大小:20.64KB
第8章和第10章习题答案.docx
《第8章和第10章习题答案.docx》由会员分享,可在线阅读,更多相关《第8章和第10章习题答案.docx(19页珍藏版)》请在冰点文库上搜索。
第8章和第10章习题答案
习题(函数和指针)
一、选择题
1-5
A
B
D
D
B
6-10
D
C
B
C
C
1.若有”fun(inta[],intn)”,以下说法正确的是()。
A.函数的类型为单精度类型
B.第一个实参应该是数组名
C.实参和形参之间是一个值传递的过程
D.以上说法都不对
2.下列有关函数调用的说法不正确的是()。
A.若用值传递方式,则形式参数在函数被调用时才分配内存
B.实际参数和形式参数不可以同名
C.主调函数和被调用函数可以不在同一个文件中
D.函数间传送数据可以使用外部全局变量
3.下列叙述中正确的是()。
A.函数可以嵌套定义,但不能嵌套调用
B.函数可以嵌套调用,也可以嵌套定义
C.函数不可以嵌套定义,也不可以递归调用
D.函数可以嵌套调用,但不能嵌套定义
4.若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是
A.函数的实参和其对应的形参共占同一存储单元
B.形参只是形式上的存在,不占用具体存储单元
C.同名的实参和形参占同一存储单元
D.函数的形参和实参分别占用不同的存储单元
5.函数中未指定存储类型的变量,其隐含的存储类型是()。
A.staticB.autoC.externD.register
6.在一个C语言源程序文件中所定义的全局变量,其作用域为:
A.所在文件的全部范围B.所在程序的全部范围
C.所在函数的全部范围D.由具体定义位置和extern说明来决定范围
7.所谓静态存储即是在程序运行期间分配固定的()。
A.变量名称B.变量值C.存储单元D.作用域
8.以下只有在使用时才为该类型变量分配内存的存储类型是()。
A.auto和staticB.auto和register
C.register和staticD.extern和register
9.设函数中有整型变量n,为保证其在未赋值的情况下初值为0,应选择的存储类别是()。
A.autoB.registerC.staticD.auto或register
10.若变量定义时未初始化,则其值不确定的是()。
A.静态全局变量 B.静态局部变量 C.局部变量 D.全局变量
11-16
B
D
D
C
B
A
11.以下叙述中错误的是()。
A.用户定义的函数中可以没有return语句
B.用户定义的函数中可以有多个return语句,以便可以调用一次返回多个函数值
C.用户定义的函数中若没有return语句,则应当定义函数为void类型
D.函数的return语句中可以没有表达式
12.下列关于指针定义的描述中不正确的是()。
A.指针变量是一种变量,该变量是用来存放某个变量的地址值的
B.指针变量的类型与它所指向的变量类型一致
C.指针变量的命名规则与标识符相同
D.在定义指针时,”*”号表示指针变量的指向
13.若有说明语句:
double*p,a;则能通过scanf语句正确给输入项读入数据的程序段是()。
A.*p=&a;scanf(“%lf”,p);B.*p=&a;scanf(“%f”,p);
C.p=&a;scanf(“%lf”,*p);D.p=&a;scanf(“%lf”,p);
14.以下叙述中错误的是()。
A.改变函数形参的值,不会改变对应实参的值B.函数可以返回地址值C.可以给指针变量赋一个整数作为地址值
D.当在程序的开头包含文件stdio.h时,可以给指针变量赋NULL
15.下列程序的运行结果是()。
#include"stdio.h"
intf(inta)
{switch(a)
{case0:
return0;
case1:
case2:
return1;
}
return(f(a-2)+f(a-3));
}
main()
{intb;
b=f(9);
printf(“%d\n”,b);
}
A.10 B.7 C.8 D.9
16.以下程序的输出结果是()。
intf(intb[],intm,intn)
{inti,s=1;
for(i=m;i {b[i]=b[i-1]+b[i+1];s+=b[i];} returns;} main() {intx,a[]={1,2,3,4,5,6,7,8,9,10}; x=f(a,3,5); printf("%d\n",x);} A.23 B.26 C.42 D.35 17-20 B B B D 17.下列程序的输出结果是(B)。 #include"stdio.h" intf(intn) {staticintk,s; n--; for(k=n;k>0;k--) s+=k; returns; } main() {intk; k=f (2); printf("(%d,%d)\n",k,f(k)); } A.(3,3) B.(1,1) C.(3,6) D.(6,12) 18.函数f定义如下,执行语句”m=f(5);”后,m的值应为(B)。 intf(intk) {if(k==0||k==1)return1; elsereturnf(k-1)+f(k-2); } A.3 B.8 C.5 D.13 19.下列程序段的输出结果是(B)。 intc[]={1,7,12}; int*k=c+1; printf("%d",*k++); A.2B.7C.8D.12 20.下列程序的运行结果是(D)。 main() {inta=4,y; y=fun(a,++a); printf(“%d”,y); } intfun(intx,intc) {intb; if(x elseif(x==c)b=0; elseb=-1; return(b); } A.4 B.-1 C.1 D.0 21-24 A A C D 21.下列程序的输出结果是(A)。 intf() {staticinti=0; ints=1; s+=i;i++; returns;} main() {inti,a=0; for(i=0;i<6;i++) a+=f(); printf(“%d\n”,a); } A.21 B.24 C.25 D.15 22.若有如下程序: voids(char*m,intn) { *m=*m+3;n=n+3; printf("%c,%c,",*m,n); } main() { charp=’b’,q=’B’; s(&q,p); printf("%c,%c\n",p,q); } 则程序运行后的输出结果是(A)。 A.E,e,b,E B.e,E,b,F C.E,e,e,E D.e,E,b,E 23.函数f定义如下,执行语句”sum=f(4)+f (2);”后,sum的值应为(C)。 intf(intm) {staticinti=0;ints=0; for(;i<=m;i++)s+=i;returns; } A.13 B.16 C.10 D.8 24.若有以下调用语句,则不正确的fun函数的首部为(D)。 main() {… inta[50],n; … fun(n,&a[9]); … } A.voidfun(intm,intx[]) B.voidfun(ints,inth[41]) C.voidfun(intp,int*s) D.voidfun(intn,inta) 25-28 C A C B 25.有以下程序 #include intf(intx) {inty; if(x==0||x==1)return(3); y=x*x-f(x-2); returny; } main() {intz; z=f(3);printf("%d\n",z); } 程序的运行结果是C A.0B.9C.6D.8 26.下列程序执行后的输出结果是A voidfunc(int*a,intb[]) {b[0]=*a+6;} main() {inta,b[5]; a=0;b[0]=3; func(&a,b);printf("%d\n",b[0]);} A.6B.7C.8D.9 27.有以下程序 #include voidfun(intp) {intd=2; p=d++;printf(“%d”,p);} main() {inta=1; fun(a);printf(“%d\n”,a);}程序运行后的输出结果是C A.32B.12C.21D.22 28.有以下程序 #include voidfun(int*a,int*b) {int*c; c=a;a=b;b=c;} main() {intx=3,y=5,*p=&x,*q=&y; fun(p,q);printf(“%d,%d,”,*p,*q); fun(&x,&y);printf(“%d,%d\n”,*p,*q);}程序运行后的输出结果是B A.3,5,5,3B.3,5,3,5C.5,3,3,5D.5,3,5,3 29-34 A C B D C B 29.有以下程序 #include voidf(int*p,int*q); main() {intm=1,n=2,*r=&m; f(r,&n); printf(“%d,%d”,m,n);} voidf(int*p,int*q) {p=p+1;*q=*q+1;} 程序运行后输出的结果是A A.1,3B.2,3C.1,4D.1,2 30.以下函数按每行8个输出数组中的数据 voidfun(int*w,intn) {inti; for(i=0;i {_________________ printf(“%d”,w);} printf(“\n”);}下划线处应填入的语句是C A.if(i/8==0)printf(“\n”);B.if(i/8==0)continue; C.if(i%8==0)printf(“\n”);D.if(i%8==0)continue; 31.有以下程序 #include intfun(intx,inty) {if(x==y)return(x); elsereturn((x+y)/2);} main() {inta=4,b=5,c=6; printf(“%d\n”,fun(2*a,fun(b,c)));}程序运行后的输出结果是B A.3B.6C.8D.12 32.有以下程序 #include voidfun(inta[],intn) {inti,t; for(i=0;i } main() {intk[10]={1,2,3,4,5,6,7,8,9,10},i; fun(k,5); for(i=2;i<8;i++)printf("%d",k[i]); printf("\n"); }程序的运行结果是()。 D A.345678B.876543C.1098765D.321678 33.有以下程序 #include intfun(chars[]) {intn=0; while(*s<=’9’&&*s>=’0’){n=10*n+*s-’0’;s++;} return(n);} main() {chars[10]={‘6’,’1’,’*’,’4’,’*’,’9’,’*’,’0’,’*’}; printf("%d\n",fun(s));}程序运行的结果是(C)。 A.9B.61490C.61D.5 34.已定义以下函数 intfun(int*p) {return*p;}fun函数返回值是(B)。 A.不确定的值B.一个整数C.形参p中存放的值D.形参p的地址值 二、填空题 1 strlen 2 有参函数库函数 3 32 4 staticregisterextern 5 编译0 6 形参实参值传递 7 2 8 变量地址 9 double*p=&a; 10 4 1.求字符串长度的标准库函数是。 2.从函数的形式看,函数分为__________和无参函数,从用户使用的角度看,函数分为________和用户自定义函数。 3.已知inta[4]={1,3,5,7},*q;q=a;,则*(q+1)的值为_____,*q+1的值为_____. 4.根据变量存储方式的不同,变量共有auto、______、_______和________四种类型。 5.静态局部变量在_________时被赋初值,并且如果在定义静态局部变量时不赋初值的话,则它的值为_______。 6.形式参数简称_____,实际参数简称______。 根据形成参数的不同,实际参数传给形式参数可以分为_________和地址传递两类。 7.已知函数fun()存在,并且有调用表达式fun(a,(a,b)),则可以判断出此函数有_______个形式参数。 8.指针变量是用于存放的变量。 9.已知doublea=9;请定义一个指针p,并指向变量a,要求用一条语句实现: ____________________. 10.已知inta[]={2,4,6,8,9,7,8,9},*p=a+2;则p++执行后,p指向数组a的第____个元素。 三、程序分析题 1 9 2 10 3 ABC 4 125 5 3025 6 123 7 3,6 8 9.8,7.5 9 6.3,5.7 1.以下程序的输出结果是: _________。 floatfun(intx,inty) { return(x+y); } main() {inta=2,b=5,c=8; printf("%3.0f\n",fun((int)fun(a+c,b),a-c)); } 2.以下程序的运行结果是__________。 #include"stdio.h" inta=3,b=6; main() {inta=4,c; c=plus(a,b); printf(“%d\n”,c); } plus(intx,inty) {intz; z=x+y; return(z);} 3.以下程序的运行结果是__________。 #include"stdio.h" #include"string.h" main() {charstr1[20]={"WO"},str2[20]={"ABC"}; strcpy(str1,str2); printf("%s",str1); } 4.以下程序运行后的输出结果是_________。 intx; main() {x=5; cube(); printf(“%d\n”,x); } cube() {x=x*x*x;} 5.有以下程序 #include inta=5; voidfun(intb) {inta=10; a+=b; printf(“%d”,a); } main() {intc=20; fun(c); a+=c; printf(“%d\n”,a);}程序运行后的输出结果是________。 6.有以下程序 #include fun(intx) {if(x/2>0)fun(x/2); printf(“%d“,x); } main() {fun(6);printf(“\n”);}程序运行后的输出结果是________。 7.以下程序运行后的输出结果是_____________________。 #include intmain() {inta,b; int*p,*q; p=&a;q=&b; *p=3;*q=a+*p; printf("%d,%d\n",a,b); return0; } 8.以下程序运行后的输出结果是_____________________。 #include voidfun(double*x,double*y) {double*t; t=x; x=y; y=t;} intmain() {doublea=9.8,b=7.5; fun(&a,&b); printf("%.1f,%.1f\n",a,b); return0; } 9.以下程序运行后的输出结果是_____________________。 #include voidfun(doublex,doubley) {doublet; t=x;x=y;y=t; } intmain() {doublea=6.3,b=5.7; fun(a,b); printf("%.1f,%.1f\n",a,b); return0; } 四、程序填空题 1 x+8 sin(x) 2 return0; return1; 1.以下程序中,函数fun的功能是计算x2-2x+6,主函数中将调用fun函数计算: y1=(x+8)2-2(x+8)+6 y2=sin2(x)-2sin(x)+6 请填空。 #include"math.h" doublefun(doublex) {return(x*x-2*x+6);} main() {doublex,y1,y2;printf("Enterx: ");scanf("%lf",&x); y1=fun(______);y2=fun(________); printf("y1=%lf,y2=%lf\n",y1,y2);} 2.以下isprime函数的功能是判断形参a是否为素数,是素数,函数返回1,否则返回0,请填空 intisprime(inta) {inti; for(i=2;i<=a/2;i++) if(a%i==0); ; } 五、编程题 1.编写一个函数,求三个数的最大值。 函数头部为: doublefun(doublex,doubley,doublez) 方法一、 doublefun(doublex,doubley,doublez) { intmax; max=x; if(y>max)max=y; if(z>max)max=z; returnmax; } 方法二、 doublefun(doublex,doubley,doublez) { intmax; if(x>y)max=x; elsemax=y; if(z>max)max=z; returnmax; } 2.编写一个函数求1+2+3+……n 函数头部为: intfun(intn) 方法一、 intfun(intn) {intsum=0,i; for(i=1;i<=n;i++) sum=sum+i; returnsum; } 方法二、 intfun(intn) {intsum=0,i=1; while(i<=n) {sum=sum+i; i++; } returnsum; } 3.编写一个函数,求一个5×5整型矩阵的两条对角线元素之和。 函数头部为doublefun(doublea[5][5]) doublefun(doublea[5][5]) { inti,j; doublesum=0; for(i=0;i<5;i++) for(j=0;j<6;j++) if(i==j||i+j==4)sum=sum+a[i][j]; returnsum; } 4.编写一个函数,交换两个数的值,要求用指针实现。 函数头部为: voidfun(int*x,int*y) voidfun(int*x,int*y) {intt; t=*x;*x=*y;*y=t; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 章和 10 习题 答案