以下正确的函数定义是.docx
《以下正确的函数定义是.docx》由会员分享,可在线阅读,更多相关《以下正确的函数定义是.docx(24页珍藏版)》请在冰豆网上搜索。
以下正确的函数定义是
一、选择题
1.以下正确的函数定义是()。
A.doublefun(intx,inty)B.doublefun(intx,y)
{z=x+y;returnz;}{intz;returnz;}
C.fun(x,y)D.doublefun(intx,inty)
{intx,y;doublez;{doublez;
z=x+y;returnz;}returnz;}
【答案】D
【说明】其返回值与函数类型相符。
2.若调用一个函数,且此函数中没有return语句,则正确的说法是()。
A.该函数没有返回值B.该函数返回若干个系统默认值
C.能返回一个用户所希望的函数值D.返回一个不确定的值
【答案】A
3.以下不正确的说法是()。
A.实参可以是常量,变量或表达式
B.形参可以是常量,变量或表达式
C.实参可以为任意类型
D.如果形参和实参的类型不一致,则以形参类型为准
【答案】B
【说明】形参只能是变量或数组。
4.C语言规定,简单变量做实参时,它和对应的形参之间的数据传递方式是()。
A.地址传递B.值传递
C.有实参传给形参,再由形参传给实参D.由用户指定传递方式
【答案】B
【说明】地址传递是在实参和形参是数组的情况下进行的。
5.C语言规定,函数返回值的类型是决定于()。
A.return语句中的表达式类型B.调用该函数时的主调函数类型
C.调用该函数时由系统临时D.在定义函数时所指定的函数类型
【答案】D
6.若用数组名作为函数调用的实参,传递给形参的是()。
A.数组的首地址B.数组中第一个元素的值
C.数组中的全部元素的值D.数组元素的个数
【答案】A
7.如果在一个函数中的复合语句中定义了一个变量,则该变量()。
A.只在该复合语句中有定义B.在该函数中有定义
C.在本程序范围内有定义D.为非法变量
【答案】C
【说明】因为该变量为局部变量。
8.下面程序的输出是()。
inti=2;
printf("%d%d%d",i*=2,++i,i++);
A.8,4,2B.8,4,3C.4,4,5D.4,5,6
【答案】A
9.已知一个函数的定义如下:
doublefun(intx,doubley)
{}
则该函数正确的函数原型声明为()。
A.doublefun(intx,doubley)B.fun(intx,doubley)
C.doublefun(int,double);D.fun(x,y);
【答案】A
10.以下不正确的说法是()。
A.全局变量,静态变量的初值是在编译时指定的
B.静态变量如果没有指定初值,则其初值为0
C.局部变量如果没有指定初值,则其初值不确定
D.函数中的静态变量在函数每次调用时,都会重新设置初值
【答案】D
【说明】静态局部变量在其函数调用结束后仍然可以保留变量值。
11.以下任何情况下计算平方数时都不会引起二义性的宏定义是()。
A.#definePOWER(x)x*xB.#definePOWER(x)(x)*(x)
C.#definePOWER(x)(x*x)D.#definePOWER(x)((x)*(x))
【答案】D
12.以下正确的叙述是()。
A.C语言的预处理功能是指完成宏替换和包含文件的调用。
B.C语言的预处理指令只能位于C源程序文件的首部。
C.凡是C源程序中行首以“#”标识的控制行都是预处理指令。
D.C语言的编译预处理就是对源程序进行初步的语法检查。
【答案】B
13.C语言提供的预处理功能包括条件编译,其基本形式是:
#XXX标识符
程序段1
#else
程序段2
#endif
这里XXX可以是()。
A.define或includeB.ifdef或include
C.ifdef或ifndef或defineD.ifdef或ifndef
【答案】D
二、填空题
1.C语言函数返回类型的默认定义类型是。
【答案】整型
2.函数调用语句:
fun((a,B.,(c,d,e))实参个数为。
【答案】2
3.函数的实参传递到形参有两种方式:
和。
【答案】传值、传址
4.在一个函数内部调用另一个函数的调用方式称为。
在一个函数内部直接或间接调用该函数成为函数的调用方式。
【答案】嵌套调用递归
5.C语言变量按其作用域分为和;按其生存期分为和。
【答案】全局变量局部变量动态变量静态变量
6.已知函数定义:
voiddothat(intn,doublex){…},其函数声明的两种写法为
和。
【答案】dothat(intn,doublex){…}dothat(int,double){…}
7.C语言变量的存储类别有,,和。
【答案】自动变量和寄存器变量静态外部变量静态局部变量外部变量
8.凡在函数中未指定存储类别的局部变量,其默认的存储类别为。
【答案】自动
9.在一个C程序中,若要定义一个只允许本源程序文件中所有函数使用的全局变量,则该变量需要定义的存储类别为。
【答案】静态全局变量
10.变量被赋初值可以分为两个阶段:
即和。
【答案】定义时赋值运行中赋值
11.下面程序的运行结果是。
#defineMAX(a,b)(a>b?
a:
b)+1
main()
{intj=6,k=8,f;
printf("%d\n",MAX(j,k));}
【答案】9
12.下面程序的运行结果是。
#defineA4
#defineB(x)A*x/2
main()
{floatc,a=4.5;
c=B(a);
printf("%5.1f\n",c);}
【答案】9.0
13.以下程序的输出结果是。
#include"stdio.h"
#defineF(y)3.84+y
#definePR(A.printf("%d",(int)(A.)
#definePRINT(A.PR(A.;putchar('\n')
main()
{intx=2;
PRINT(F(3)*x);}
【答案】9
14.设有以下程序,为使之正确运行,请在横线中填入应包含的命令行。
main()
{intx=2,y=3;
printf("%d\n",pow(x,y));}
【答案】#include
15.下面程序的运行结果是。
main()
{inta=10,b=20,c;
c=a/b;
#ifdefDEBUG
printf("a=%d,b=%d",a,b);
#endif
printf("c=%d\n",c);}
【答案】c=0
16.下面程序的运行结果是。
#defineDEBUG
main()
{inta=14,b=15,c;
c=a/b;
#ifdefDEBUG
printf("a=%d,b=%d,",a,b);
#endif
printf("c=%d\n",c);}
【答案】a=14,b=15,c=0
三、程序阅读题
1.写出下面程序的运行结果。
func(inta,intB.
{staticintm=0,i=2;
i+=m+1;
m=i+a+b;
return(m);
}
main()
{intk=4,m=1,p1,p2;
p1=func(k,m);p2=func(k,m);
printf("%d,%d\n",p1,p2);
}
【答案】8,17
2.写出下面程序的运行结果。
#defineMAX10
inta[MAX],i;
sub1()
{for(i=0;i}
sub2()
{inta[MAX],i,max;
max=5;
for(i=0;i}
sub3(inta[])
{inti;
for(i=0;iprintf("\n");
}
main()
{sub1();sub3(A.;sub2();sub3(A.;
}
【答案】
024*********
024*********
3.若输入的值是-125,写出下面程序的运行结果。
#include
fun(intn)
{intk,r;
for(k=2;k<=sqrt(n);k++)
{r=n%k;
while(!
r)
{printf("%d",k);n=n/k;
if(n>1)printf("*");
r=n%k;
}
}
if(n!
=1)printf("%d\n",n);
}
main()
{intn;
scanf("%d",&n);
printf("%d=",n);
if(n<0)printf("-");
n=fabs(n);fun(n);
}
【答案】
-5*5*5
4.写出下面程序的运行结果。
inti=0;
fun1(inti)
{i=(i%i)*(i*i)/(2*i)+4;
printf("i=%d\n",i);
return(i);
}
fun2(inti)
{i=i<=2?
5:
0;
return(i);
}
main()
{inti=5;
fun2(i/2);printf("i=%d\n",i);
fun2(i=i/2);printf("i=%d\n",i);
fun2(i/2);printf("i=%d\n",i);
fun1(i/2);printf("i=%d\n",i);
}
【答案】
i=5
i=2
i=2
i=4
i=2
5.写出下面程序的功能。
func(intn)
{inti,j,k;
i=n/100;j=n/10-i*10;k=n%10;
if((i*100+j*10+k)==(i*i*i+j*j*j+k*k*k))
returnn;
return0;
}
main()
{intn;
for(n=100;n<1000;n++)
if(n==func(n))printf("%d",n);
}
【答案】输出100~1000之间的水仙花数
四、程序判断题
1.下面add函数是求两个参数的和;判断下面程序的正误,如果错误请改正过来。
voidadd(inta,intb)
{intc;
c=a+b;
return(c);
}
【答案】错误
add(inta,intb)
{intc;
c=a+b;
return(c);}
2.下面函数fun的功能是:
将长整型数中偶数位置上的数依次取出,构成一个新数返回,例如,当s中的数为87653142时,则返回的数为8642;判断下面程序的正误,如果错误请改正过来。
longfun(longs)
{longt,sl=1;
intd;
t=0;
while(s>0)
{d=s%10;
if(d%2=0)
{t=d*sl+t;
sl*=10;
}
s/=10;
}
return(t);
}
【答案】错误
longfun(longs)
{longt,sl=1;
intd;
t=0;
while(s<0)
{d=s/10;
if(d%2=0)
{*t=d*sl+*t;
sl*=10;
}
s/=10;
}
return(t);
}
3.下面函数fun的功能是:
统计字符串s中各元音字母(即A,E,I,O,U)的个数,(字母不分大,小写)判断下面程序的正误,如果错误请改正过来。
fun(chars[],intnum[5])
{intk;i=5;
for(k=0;k
num[i]=0;
for(k=0;s[k];k++)
{i=-1;
switch(s)
{case'a':
case'A':
i=0;
case'e':
case'E':
i=1;
case'i':
case'I':
i=2;
case'o':
case'O':
i=3;
case'u':
case'U':
i=4;
}
if(i>=0)
num[i]++;
}
}
【答案】错误
fun(chars[],intnum[5])
{intk;i=5;
for(k=1;k<=i;k++)
num[k]=0;
for(k=1;s[k]='\0';k++)
{i=-1;
switch(s)
{case'a':
case'A':
i=1;
case'e':
case'E':
i=2;
case'i':
case'I':
i=3;
case'o':
case'O':
i=4;
case'u':
case'U':
i=5;
}
if(i>0)
num[i]++;
}
}
4.函数fun的功能是:
根据整型形参m,计算如下公式的值:
y=1-1/2×2-1/3×3-…-1/m×m
判断下面程序的正误,如果错误请改正过来。
fun(intm)
{doubley=0,d;
intI;
for(i=100,i<=m,i+=100)
{d=(double)i*(double)i;
y+=1.0/d;
}
return(y);
}
【答案】错误
fun(intm)
{doubley=1.0,d;
inti;
for(i=2,i<=m,i+=1)
{d=(double)i*(double)i;
y-=1.0/d;
}
return(y);
}
5.下面函数fun的功能是:
依次取出字符串中所有数字字符,形成新的字符串,并取代原字符串;判断下面程序的正误,如果错误请改正过来。
voidfun(chars[])
{inti,j;
for(i=0,j=0;s[i]!
='\0';i++)
if(s[i]>='0'&&s[i]<='9')
s[j]=s[i];
s[j]="\0";
}
【答案】错误
voidfun(chars[])
{inti,j;
for(i=0,j=1;s[i]!
='\0';i++)
if(s[i]>='0'&&s[i]<='9')
{s[j]=s[i];
j++;}
s[j]="\0";
}
五、程序填空题
1.经典算法提示:
折半查找法的思路是先确定待查元素的范围,将其分成两半,然后比较位于中间点元素的值。
如果该待查元素的值大于中间点元素的值,则将范围重新定义为大于中间点元素的范围,反之亦然。
intsearch(inta[10],intm)
{intx1=0,x2=9,mid;
while(x1<=x2)
{mid=(x1+x2)/2;
if(melseif(m>a[mid])②;
elsereturn(mid);
}
return(-1);
}
【答案】
①x2=mid-1②x1=mid+1
2.del函数的作用是删除有序数组a中的指定元素x,n为数组a的元素个数,函数返回删除后的数组a元素个数,请填空使程序完整。
intdel(inta[10],intn,intx)
{intp=0,i;
while(x>=a[p]&&pfor(i=p-1;ireturn(n-1);}
【答案】
①a[p]='\0'②a[i]=a[i+1]
3.以下程序的功能是计算函数F(x,y,z)=(x+y)/(x-y)+(z+y)/(z-y)的值,请填空使程序完整。
#include
①;
main()
{floatx,y,z,f;
scanf("%f,%f,%f",&x,&y,&z);
f=fun(②);
f+=fun(③);
printf("f=%d",f);
}
floatfun(floata,floatb)
{return(a/b);
}
【答案】①#include②x+y,x-y③z+y,z-y
4.avg函数的作用是计算数组array的平均值返回,请填空使程序完整。
floatavg(floatarray[10])
{inti;
floatavgr,sum=0;
for(i=1;①;i++)
sum+=②;
avgr=sum/10;
③;}
【答案】
①i<=10②array[i]③return(avgr)
六、编程题
1.用递归法计算n!
可用下述公式表示:
①②③④。
n!
=1(n=0,1)
n×(n-1)!
(n>1)
【参考程序】
longff(intn)
{longf;
if(n<0)printf("n<0,inputerror");
elseif(n==0||n==1)f=1;
elsef=ff(n-1)*n;
return(f);
}
main()
{intn;
longy;
printf("\ninputainteagernumber:
\n");
scanf("%d",&n);
y=ff(n);
printf("%d!
=%ld",n,y);
}
2.写两个整数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果,两个整数由键盘输入。
【参考程序】
#include"stdio.h"
main()
{intu,v,h,l;
printf("pleaseinputtwonumbers:
\n");
scanf("%d,%d",&u,&v);
h=hcf(u,v);
printf("hcf=%d\n",h);
l=lcd(u,v,h);
printf("lcd=%d\n",l);
}
hcf(u,v)
intu,v;
{inta,b,t,r;
if(u>v)
{t=u;u=v;v=t;
}
a=u;b=v;
while((r=b%a)!
=0)
{b=a;a=r;
}
return(a);
}
lcd(u,v,h)
intu,v,h;
{return(u*v/h);
}
3.写一函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串。
【参考程序】
main()
{charstr0[100];
gets(str0);
fanxu(str0);
puts(str0);
}
fanxu(str1)
charstr1[100];
{inti,t,j;
charstr2[100];strcpy(str2,str1);
t=strlen(str1);
for(i=0,j=t-1;j>-1;i++,j--)
str1[i]=str2[j];
}
4.写一函数,输入一个十六进制数,输出相应的十进制数。
【参考程序】
#include
#include"math.h"
intx;
intff(charshu[])
{inti=strlen(shu)-1,n;
intsum=0.0;
x=0;
n=i;
for(;i>-1;i--)
{if(shu[n-i]>=48&&shu[n-i]<=57)sum=sum+(shu[n-i]-48)*pow(16,i);
elseif(shu[n-i]>=65&&shu[n-i]<=90)sum=sum+(shu[n-i]-55)*pow(16,i);
elseif(shu[n-i]>=97&&shu[n-i]<=102)sum=sum+(shu[n-i]-87)*pow(16,i);
x=1;
}
returnsum;
}
main()
{charshufu[100];
ints;
gets(shufu);
s=ff(shufu);
if(x)printf("\ns(d)=%d\n",s);
elseprintf("Thenumberisnotox\n");
}
5.写一函数,用“冒泡法”对输入的10个字符按由小到大顺序排列。
【参考程序】
intpaixu(x)
intx[];
{inti,j,t;
for(j=1;j<10;j++)
for(i=0;i<=9-j;i++)
if(x[i]>x[i+1]){t=x[i+1];x[i+1]=x[i];x[i]=t;}
}
main()
{inty[10];inti;
for(i=0;i<10;i++)
scanf("%d",&y[i]);
paixu(y);
for(i=0;i<10;i++)
printf("%5d",y[i]);
printf("\n");
}
6.写一函数,使给定的一个二维数组(3×3)转置,即行列互换。
【参考程序】
intzhuangzhi(intb[3][3])
{inti,j,t;
for(i=0;i<3;i++)
for(j=0;j>=i&&j<3-i;j++)
{t=b[i][j];b[i][j]=b[j][i];b[j][i]=t;}
}
main()
{inta[3][3];inti,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
for(i=0;i<3;i++)
{for(j=0;j<3;j++)
printf("%d",a[i][j]);
printf("\n");}
zhuangzhi(a);
for(i=0;i<3;i++)
{for(j=0;j<3;j++)
printf("%d",a[i][j]);
printf("\n");}
}
7.利用递归函数调用方式,将所输入的5个字符,以相反