第七章练习题及答案.docx
《第七章练习题及答案.docx》由会员分享,可在线阅读,更多相关《第七章练习题及答案.docx(18页珍藏版)》请在冰豆网上搜索。
第七章练习题及答案
第七章习题
一、选择题(*号题选做)
(1)若各选项中所用变量已正确定义,函数fun中通过return语句返回一个函数值,以下选项中错误的程序是A
A)main()
B)floatfun(inta,intb){……}
{……x=fun(2,10);……}
main()
floatfun(inta,intb){……}
{……x=fun(i,j);……}
C)floatfun(int,int);
D)main()
main()
{floatfun(inti,intj);
{……x=fun(2,10);……}
……x=fun(i,j);……}
floatfun(inta,intb){……}
floatfun(inta,intb){……}
*
(2)已定义以下函数
intfun(int*p)
{return*p;}
fun函数返回值是B
A)不确定的值B)一个整数C)形参p中存放的值D)形参p的地址值
*(3)若有以下函数首部。
intfun(doublex[10],int*n)
则下面针对此函数的函数声明语句中正确的是()。
D
A)intfun(doublex,int*n);B)intfun(double,int);
C)intfun(double*x,intn);D)intfun(double*,int*);
(4)若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是D
A)函数的实参和其对应的形参共占同一存储单元
B)形参只是形式上的存在,不占用具体存储单元
C)同名的实参和形参占同一存储单元
D)函数的形参和实参分别占用不同的存储单元
(5)下面的函数调用语句中func函数的是实参个数是 ()A
func(f2(v1,v2)),(v3,v4,v5),(v6,max(v7,v8)));
A)3 B)4 C)5 D)8
(6)以下叙述中错误的是()B
A)用户定义的函数中可以没有return语句
B)用户定义的函数中可以有多个return语句,以便可以调用一次返回多个函数值
C)用户定义的函数中若没有return语句,则应当定义函数为void类型
D)函数的return语句中可以没有表达式
(7)以下关于return语句的叙述中正确的是B
A)一个自定义函数中必须有一条return语句
B)一个自定义函数中可以根据不同情况设置多条return语句
C)定义成viod类型的函数中可以有带返回值的return语句
D)没有return语句的自定义函数在执行结束时不能返回到调用处
(8)有以下程序
intfun1(doublea){returna*=a;}
intfun2(doublex,doubley)
{
doublea=0,b=0;
a=fun1(x);b=fun1(y);return(int)(a+b);
}
main()
{doublew;w=fun2(1.1,2.0);……}
程序执行后变量w中的值是C
A)5.21 B)5 C)5.0 D)0.0
(9)有以下程序:
fun(intx,inty){return(x+y);}
main()
{inta=1,b=2,c=3,sum;
sum=fun((a++,b++,a+b),c++);
printf("%d\n",sum);
}
执行后的输出结果是()。
C
A)6B)7C)8D)9
(10)有以下程序:
voidfun2(chara,charb){printf("%c,%c",a,b);}
chara='A',b='B';
voidfun1(){a='C';b='D';}
main()
{fun1();
printf("%c%c",a,b);
fun2('E','F');
}
程序的运行结果是()。
A
A)CDEFB)ABEFC)ABCDD)CDAB
*(11)有以下程序
main(intargc,char*argv[])
{intn=0,i;
for(i=1;i printf(“%d\n”,n);
}
编译连接后生成可执行文件tt.exe,若运行时输入以下命令行
tt12345678
程序运行后的输出结果是D
A)12 B)12345 C)12345678 D)136
(12)有如下程序:
#include
voidfun(inta,intb)
{
intt;
t=a;a=b;b=t;
}
main()
{intc[10]={1,2,3,4,5,6,7,8,9,0},i;
for(i=0;k<10;i+=2)fun(c[i],c[i+1]);for(i=0;k<10;i++)printf("%d",c[i]);printf("\n");
}
程序的运行结果是A
A)1,2,3,4,5,6,7,8,9,0, B)2,1,4,3,6,5,8,7,0,9,
C)0,9,8,7,6,5,4,3,2,1, D)0,1,2,3,4,5,6,7,8,9,
(13)有以下程序
#include
int f(int x,int y)
{ return ((y-x)*x);}
main()
{ int a=3,b=4,c=5,d;
d=f(f(a,b),f(a,c));
printf("%d\n",d);
}
程序运行后的输出结果是B
A)10
B)9
C)8
D)7
(14)有以下程序
#include
int fun(int x,int y)
{ if(x==y) return (x);
else return((x+y)/2);
}
main()
{ int a=4,b=5,c=6;
printf("%d\n",fun(2*a,fun(b,c)));
}
程序运行后的输出结果是B
A)3
B)6
C)8
D)12
(15)有以下程序
#include
void fun(int p)
{ int d=2;
p=d++;
printf("%d",p);
}
main()
{ int a=1;
fun(a);
printf("%d\n",a);
}
程序运行后的输出结果是C
A)32
B)12
C)21
D)22
(16)有以下程序
#include<stdio.h>
int f(int x);
main()
{int n=1,m;
m=f(f(f(n)));printf(”%d\n”,m);
}
int f(int x)
{return x*2;}
程序运行后的输出结果是D
A)1 B)2 C)4 D)8
(17)有以下程序
intfun(intn)
{
if(n==1)return1;
else
return(n+fun(n-1));
}
main()
{intx;
scanf(“%d”,&x);x=fun(x);printf(“%d\n”,x);
}
程序执行时,给变量x输入10,程序的输出结果是A
A)55 B)54 C)65 D)45
(18)有以下程序:
fun(intx)
{intp;
if(x==0||x==1)return(3);
p=x-fun(x-2);
returnp;
}
main()
{printf("%d\n",fun(7));}
执行后的输出结果是()。
C
A)7B)3C)2D)0
(19)有以下程序
#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
(20)有以下程序
#include
int fun(inta,intb)
{if(b==0)return a;
else return(fun(--a,--b));
}
main()
{ printf(“%d\n”,fun(4,2); }
程序的运行结果是B
A)1 B)2 C)3 D)4
(21)有以下程序
#include
intf(intt[],intn);
main()
{inta[4]={1,2,3,4},s;
s=f{a,4};printf("%d\n",s);
}
intf(intt[],intn)
{if(n>0)returnt[n-1]+f(t,n-1);
elsereturn0;
}
程序运行后的输出结果是B
A)4B)10C)14D)6
(22)有以下程序
#include<stdio.h>
void fun(intx)
{if(x/2>1)fun(x/2);
printf(”%d”,x);
}
main()
{fun(7);printf(”\n”);}
程序运行后的输出结果是D
A)137 B)731 C)73 D)37
(23)有以下程序
intfun(intx[],intn)
{staticintsum=0,i;
for(i=0;isum+=x[i];
returnsum;
}
main()
{inta[]={1,2,3,4,5},b[]={6,7,8,9},s=0;
s=fun(a,5)+fun(b,4);printf(“%d\n”,s);
}
程序执行后的输出结果是C
A)45 B)50 C)60 D)55
(24)有以下程序:
fun(intx,inty)
{staticintm=0,i=2;
i+=m+1;m=i+x+y;returnm;
}
main()
{intj=1,m=1,k;
k=fun(j,m);printf("%d",k);
k=fun(j,m);printf("%d\n",k);
}
执行后的输出结果是()。
B
A)5,5B)5,11C)11,11D)11,5
(25)有以下程序
inta=4;
intf(intn)
{intt=0;staticinta=5;
if(n%2){inta=6;t+=a++;}
else{inta=7;t+=a++;}
returnt+a++;
}
main()
{ints=a,i=0;
for(;i<2;i++)s+=f(i);
printf(“%d\n”,s);
}
程序运行后的输出结果是B
A)24 B)28 C)32 D)36
(26)设函数中有整型变量n,为保证其在未赋初值的情况下初值为0,应该选择的存储类别是C
A)auto
B)register
C)static
D)auto或register
(27)有以下程序
#include
int f(int n);
main()
{ int a=3,s;
s=f(a);s=s+f(a);printf("%d\n",s);
}
int f(int n)
{ static int a=1;
n+=a++;
return n;
}
程序运行后的输出结果是C
A)7
B)8
C)9
D)10
(28)有以下程序
#include
intfun()
{staticintx=1;
x*=2;returnx;
}
main()
{inti,s=1;
for(i=1;i<=2;i++)s=fun();
printf("%d\n",s);
}
程序运行后的输出结果是C
A)0B)1C)4D)8
(29)有以下程序
#include<stdio.h>
intfun()
{staticintx=1;
x+=1;returnx;
}
main()
{inti;s=1;
for(i=1;i<=5;i++)s+=fun();
printf(”%d\n”,s);
}
程序运行后的输出结果是B
A)11 B)21 C)6 D)120
(30)有以下程序:
#include
#defineN5
#defineMN+1
#definef(x)(x*M)
main()
{inti1,i2;
i1=f
(2);
i2=f(1+1);
printf("%d%d\n",i1,i2);
}
程序的运行结果是()。
B
A)1212B)117C)1111D)127
(31)若程序中有宏定义行:
#define N 100 则以下叙述中正确的是B
A)宏定义行中定义了标识符N的值为整数100
B)在编译程序对C源程序进行预处理时用100替换标识符N
C)对C源程序进行编译时用100替换标识符N
D)在运行时用100替换标识符N
(32)以下叙述中错误的是D
A)在程序中凡是以“#”开始的语句行都是预处理命令行
B)预处理命令行的最后不能以分号表示结束
C)#defineMAX是合法的宏定义命令行
D)C程序对预处理命令行的处理是在程序执行的过程中进行的
(33)以下关于宏的叙述中正确的是()C
A)宏名必须用大写字母表示
B)宏定义必须位于源程序中所有语句之前
C)宏替换没有数据类型限制
D)宏调用比函数调用耗费时间
(34)有以下程序
#include
#define PT 3.5 ;
#define S(x) PT*x*x ;
main()
{ int a=1,b=2 ; printf("%4.1f\n",S(a+b));}
程序运行后的输出结果是C
A)14.0
B)31.5
C)7.5
D)程序有错无输出结果
(35)有以下程序
#include
#define f(x) x*x*x
main()
{ int a=3,s,t;
s=f(a+1);t=f((a+1));
printf("%d,%d\n",s,t);
}
程序运行后的输出结果是A
A)10,64
B)10,10
C)64,10
D)64,64
(36)以下程序
#include
#defineSUB(a)(a)-(a)
main()
{inta=2,b=3,c=5,d;
d=SUB(a+b)*c;
printf("%d\n",d);
}
程序运行后的结果是C
A)0B)-12C)-20D)10
二填空题
(1)以下isprime函数的功能是判断形参a是否为素数,是素数,函数返回1,否则返回0,请填空
intisprime(inta)
{inti;
for(i=2;i<=a/2;i++)
if(a%i==0)__[]___;//return0
__[]___;//return1
}
(2)以下程序中,函数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(【】);//x+8
y2=fun(【】);//sin(x)
printf("y1=%lf,y2=%lf\n",y1,y2);
}
(3)以下程序中函数f的功能是在数组x的n个数(假定n个数互不相同)中找出最大最小数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换.请填空.
#include
viod f(int x[],int n)
{ int p0,p1,i,j,t,m;
i=j=x[0]; p0=p1=0;
for(m=0;m{ if(x[m]>i) {i=x[m]; p0=m;}
else if(x[m]}
t=x[p0]; x[p0]=x[n-1]; x[n-1]=t;
t=x[p1];x[p1]=_[]_______;_[]_______=t;//x[0],x[0]
}
main()
{ int a[10],u;
for(u=0;u<10;u++) scanf("%d",&a[u]);
f(a,10);
for(u=0;u<10;u++) printf("%d",a[u]);
printf("\n");
}
(4)请将以下程序中的函数声明语句补充完整。
#include
int 【】;//max(int,int)
main()
{ int x,y,(*p)();
scanf("%d%d",&x,&y);
p=max;
printf("%d\n",(*p)(x,y));
}
int max(int a,int b)
{ return (a>b?
a:
b);}
(5)以下fun函数的功能是:
找出具有N个元素的一维数组中的最小值,并作为函数值返回。
请填空。
(设N已定义)i
intfun(intx[N])
{inti,k=0;
for(i=0;iif(x[i]returnx[k];
}
(6)以下fun函数的功能是在N行M列的整形二维数组中,选出一个最大值作为函数值返回,请填空。
(设M,.N已定义)a[row][col]
intfun(inta[N][M])
{inti,j,row=0,col=0;
for(i=0;i for(j=0;j if(a[i][j]>a[row][col]){row=i;col=j;}
return(【】):
}
(7)以下程序的运行结果是:
__[]____11
fun(intt[],intn)
{inti,m;
if(n==1)returnt[0];
else
if(n>=2){m=fun(t,n-1);returnm;}
}
main()
{
inta[]={11,4,6,3,8,2,3,5,9,2};
printf(“%d\n”,fun(a,10));
}
(8)下面程序的运行结果是【】。
18
#include
intf(inta[],intn)
{if(n>1)
returna[0]+f(a+1,n-1);
else
returna[0];
}
main()
{intaa[10]={1,2,3,4,5,6,7,8,9,10},s;
s=f(aa+2,4);printf("%d\n",s);
}
(9)以下程序的输出结果是【】。
13
#include
voidfun(intx)
{if(x/2>0)fun(x/2);
printf(“%d”,x);
}
main()
{fun(3);printf(“\n”);}
(10)以下程序的功能是:
通过函数func输入
字符并统计输入字符的个数。
输入时用字符@作为输入标志。
请填空。
#include
long【】;
main()
{ longn;
n=func(); printf("n=%ld\n",n);
}
longfunc()
{ longm;
for(m=0;getchar()!
='@';【】);
returnm;
}
答案:
func();m++
(11)有以下程序
#include
fun(int x)
{ if(x/2>0) fun(x/2);
printf("%d ",x);
}
main()
{ fun(6);printf("\n");}
程序运行后的输出结果是【】136
(12)以下程序的运行结果是m=4k=4i=5k=5。
intk=0;
voidfun(intm)
{m+=k;k+=m;printf(“m=%d\nk=%d”,m,k++);}
main()
{inti=4;
fun(i++);