习题5.docx

上传人:b****6 文档编号:7921599 上传时间:2023-05-12 格式:DOCX 页数:21 大小:39.74KB
下载 相关 举报
习题5.docx_第1页
第1页 / 共21页
习题5.docx_第2页
第2页 / 共21页
习题5.docx_第3页
第3页 / 共21页
习题5.docx_第4页
第4页 / 共21页
习题5.docx_第5页
第5页 / 共21页
习题5.docx_第6页
第6页 / 共21页
习题5.docx_第7页
第7页 / 共21页
习题5.docx_第8页
第8页 / 共21页
习题5.docx_第9页
第9页 / 共21页
习题5.docx_第10页
第10页 / 共21页
习题5.docx_第11页
第11页 / 共21页
习题5.docx_第12页
第12页 / 共21页
习题5.docx_第13页
第13页 / 共21页
习题5.docx_第14页
第14页 / 共21页
习题5.docx_第15页
第15页 / 共21页
习题5.docx_第16页
第16页 / 共21页
习题5.docx_第17页
第17页 / 共21页
习题5.docx_第18页
第18页 / 共21页
习题5.docx_第19页
第19页 / 共21页
习题5.docx_第20页
第20页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

习题5.docx

《习题5.docx》由会员分享,可在线阅读,更多相关《习题5.docx(21页珍藏版)》请在冰点文库上搜索。

习题5.docx

习题5

习题5和参考解答

1)选择题

(1)在下列关于C函数定义的叙述中,正确的是()。

A.函数可以嵌套定义,但不可以嵌套调用

B.函数不可以嵌套定义,但可以嵌套调用

C.函数不可以嵌套定义,也不可以嵌套调用

D.函数可以嵌套定义,也可以嵌套调用

【答案】B

【解析】C语言规定:

函数不可以嵌套定义,但可以嵌套调用。

(2)以下描述错误的是()。

A.调用函数时,实参可以是表达式

B.调用函数时,实参与形参可以共用内存单元

C.调用函数时,将为形参分配内存单元

D.调用函数时,实参与形参的类型应该一致

【答案】B

【解析】调用函数时实参与形参各自占用独立的内存单元。

(3)以下说法正确的是()。

A.对于用户自定义函数,在使用之前必须加以说明

B.说明函数必须指明其参数类型和返回类型

C.函数可以返回一个值,也可以什么值也不返回

D.空函数不完成任何操作,所以在程序设计中没有用处

【答案】C

【解析】在主函数之前定义的函数不必声明;传统函数说明不说明参数类型。

(4)函数调用不可以()。

A.出现在执行语句中B.出现在一个表达式中

C.作为一个函数的实参D.作为一个函数的形参

【答案】D

【解析】函数的形参只能是变量。

(5)函数调用语句“func((exp1,exp2),(exp3,exp4,exp5));”包含的实参个数为()。

A.1B.2C.4D.5

【答案】B

【解析】本题主要考查对于函数形参的理解。

(6)将一个函数声明为static后,该函数将()。

A.既可以被同一源文件中的函数调用,也可以被其他源文件中的函数调用

B.只能被同一源文件中的函数调用,不能被其他源文件中的函数调用

C.只能被其他源文件中的函数调用,不能被同一源文件中的函数调用

D.既不能被同一源文件中的函数调用,也不能被其他源文件中的函数调用

【答案】B

【解析】静态函数只能被同一编译单元(源文件)中的函数调用。

(7)以下叙述中错误的是()。

A.在不同函数中可以使用相同名称的变量

B.函数中的形参是局部变量

C.在一个函数内定义的变量只在本函数范围内有效

D.在一个函数的复合语句中定义的变量在本函数范围内有效

【答案】D

【解析】在一个函数内的复合语句中定义的变量只在本复合语句范围内有效。

(8)以下叙述中正确的是()。

A.全局变量的作用域一定比局部变量的作用域范围大

B.静态类别变量的生存期贯穿于整个程序的运行期间

C,函数的形参都属于全局变量

D.未在定义语句中赋初值的auto变量和static变量都将是随机值

【答案】B

【解析】静态类别变量的生存期贯穿于整个程序的运行期间,即使退出对应的函数后,该类型的变量也没有释放存储空间,下次调用该函数时仍有效。

(9)以下说法正确的是()。

A.定义函数时,形参的类型说明可以放在函数体内

B.return之后不能紧跟表达式

C.若函数类型与返回值类型不一致,则以函数类型为准

D.若形参与实参类型不一致,则以实参类型为准

【答案】C

【解析】函数类型决定最终返回值的类型。

(10)以下描述正确的是()。

A.调用函数时的实参只能是有确定值的变量

B.return语句的括号中可以是变量、常量或有确定值的表达式

C.函数调用时实参和形参间的参数传递方式不都是值传递

D.实参和形参若类型不匹配,则编译时将报错

【答案】B

【解析】函数调用时实参与形参间的参数传递方式只有值传递,而且实参可以是变量,也可以是常量或表达式,实参类型和形参不匹配时,编译时不会报错,而是在执行时报错。

(11)凡是函数中未指定存储类别的局部变量,其隐含的存储类别为()。

A.自动(auto)B.静态(static)

C.外部(extern)D.寄存器(register)

【答案】A

【解析】对于未加特殊说明的局部变量,其存储类别为自动型。

(12)递归函数f(n)=f(n-1)+n(n>1)的递归体是()。

A.f

(1)=0B.f(0)=1

C.f(n)=f(n-1)+nD.f(n)=n

【答案】C

【解析】递归函数的两个要素为递归体和递归出口,这里主要考查递归体。

(13)下列程序的输出结果是()。

#include

fun(inta,intb,intc)

{

c=a*b;

}

intmain()

{

intc;

fun(2,3,c);

printf("%d\n",c);

return0;

}

A.0B.1C.6D.无法确定

【答案】D

【解析】函数之间的参数传递方式为单向值传递,因为变量c在定义时没有初始化,所以函数调用结束后c的值仍无法确定。

(14)下列程序的输出结果是()。

#include

intx=1;

func(intx)

{

x=3;

}

intmain()

{

func(x);

printf("%d\n",x);

return0;

}

A.3B.1C.0D.无法确定

【答案】B

【解析】局部变量的作用域为其所在的函数,并且当局部变量与全局变量同名时,局部变量将屏蔽全局变量。

(15)下列程序的输出结果是()。

#include

floatfun(intx,inty)

{

return(x+y);

}

voidmain()

{

inta=2,b=5,c=8;

printf(“%3.0f\n”,fun((int)fun(a+c,b),a-c));

}

A.编译出错B.9C.21D.9.0

【答案】B

【解析】该题主要考查函数调用作为函数实参的情况。

2)填空题

(1)下列程序的执行结果是。

#include

voidfunc(inta,intb,intc)

{

printf(“a=%d,b=%d,c=%d\n”,a,b,c);

}

voidmain()

{

inti=2;

func(i,i++,i--);

}

【答案】a=2,b=1,c=2

(2)下列程序的运行结果是。

#include

invert(int*s,inti,intj)

{

intt;

if(i

{

invert(s,i+1,j-1);

t=*(s+i);*(s+i)=*(s+j);*(s+j)=t;

}

}

voidmain()

{

inta[6]={10,6,23,-90,0,3},i;

invert(a,0,5);

for(i=0;i<6;i++)

printf(“%d,”,a[i]);

printf(“\n”);

}

【答案】3,0,-90,23,6,10

(3)下列程序的输出结果是。

#include

intfac_sum(intn)

{

staticintf=1,t=1,s=0;

inti;

if(n>t)

for(i=t+1;i<=n;i++)

f=f*i;

else

{

f=1;

for(i=1;i<=n;i++)

f=f*i;

}

t=n;s=s+f;

return(s);

}

voidmain()

{

inta[]={3,5,2},i,sum;

for(i=0;i<3;i++)

sum=fac_sum(a[i]);

printf(“sum=%d\n”,sum);

}

【答案】sum=128

(4)下列程序的输出结果是。

#include

voidss(char*s,chart)

{

while(*s)

{

if(*s==t)

*s=t-‘a’+’A’;

s++;

}

}

voidmain()

{

charstr1[100]=”abcddfefdbd”,c=’d’;

ss(str1,c);

printf(“%s\n”,str1);

}

【答案】abcDDfefDbD

(5)函数voidfun(float*sn,intn)的功能是:

根据以下公式计算S,计算结果通过形参指针sn传回。

要求n通过形参传入,n≥0。

请填空。

S=1-

+

-

+…

voidfun(float*sn,intn)

{

floats=0.0,w,f=-1.0;

inti=0;

for(i=0;i<=n;i++)

{

f=*f;

w=f/(2*i+1);

s+=w;

}

=s;

}

【答案】-1*sn

(6)下列程序的运行结果是。

#include

#include

char*ss(char*s)

{

returns+strlen(s)/2;

}

voidmain()

{

char*p,*str=”abcdefgh”;

p=ss(str);

printf(“%s\n”,p);

}

【答案】efgh

(7)下列程序的运行结果是。

#include

intn=1;

func()

{

staticintx=4;

inty=10;

x=x+2;

n=n+10;

y=y+n;

printf(“FUNC:

x=%2dy=%2dn=%2d\n”,x,y,n);

}

voidmain()

{

staticintx=5;

inty;y=n;

printf(“MAIN:

x=%2dy=%2dn=%2d\n”,x,y,n);

func();

printf(“MAIN:

x=%2dy=%2dn=%2d\n”,x,y,n);

func();

}

【答案】MAIN:

x=5y=1n=1

FUNC:

x=6y=21n=11

MAIN:

x=5y=1n=11

FUNC:

x=8y=31n=21

(8)函数gongyu()的作用是求整数num1和num2的最大公约数,并返回该值,请填空。

gongyu(intnum1,intnum2)

{

inttemp,a,b;

if(num1num2)

{

temp=num1;

num1=num2;

num2=temp;

}

a=num1;b=num2;

while()

{

;a=b;b=temp;

}

return(a);

}

【答案】

=0temp=a%b

(9)函数pi()的功能是:

根据以下公式,返回满足精度(0.0005)要求的π值,请填空。

=1+

+

+

+

+…

#include

#include

#include

doublepi(doubleeps)

{

doubles,t;

intn;

for(;t>eps;n++)

{

s+=t;

t=n*t/(2*n+1);

}

return();

}

voidmain()

{

doublex;

printf(“\nPleaseinputaprecision:

”);

scnaf(“%lf”,&x);

printf(“\neps=%lf,π=%lf”,x,pi(x));

}

【答案】n=1,s=0.0,t=1.02.0*s

(10)若输入整数10,则下列程序的运行结果是。

#include

sub(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(;i>0;i--)

printf(“%d”,e[i-1]);

}

【答案】1010

3)编程题

(1)编写程序,调用函数求一个圆柱体的表面积和体积。

【参考源程序】

#include

voidfun(intr,inth)

{

floatarea;

area=2*3.14*r*h;

vol=3.14*r*r*h;

printf("area=%.2f,vol=%.2f",area,vol);

}

intmain()

{

intr,h;

scanf("%d%d",&r,&h);

fun(r,h);

return0;

}

(2)编写一个函数,输出一个整数的全部素数因子。

例如,m=120时,因子为2,3,5。

【参考源程序】

#include

intfun(intn)

{

intflag=1,i;

for(i=2;i

if(n%i==0)

flag=0;

returnflag;

}

intmain()

{

intm,i;

scanf("%d",&m);

for(i=2;i

if(m%i==0)

if(fun(i))

printf("%d",i);

return0;

}

(3)编写程序,调用函数使输入的一个字符串反序存放并输出。

【参考源程序】

#include

#include

voidfun(chars[])

{

inti=0,n;

chart;

n=strlen(s)-1;

while(i<=n)

{

t=s[i];s[i]=s[n];s[n]=t;

i++;n--;

}

}

intmain()

{

chars[20];

gets(s);

fun(s);

puts(s);

return0;

}

(4)编写一个函数,输入一个十六进制数,输出相应的十进制数。

【参考源程序】

#include

intfun(chars[])

{

inti=0,n,m=0;

if(s[i]>='a')

n=s[i]-'a'+10;

else

n=s[i]-'0';

while(s[++i]!

='\0')

{

if(s[i]>='a')

m=s[i]-'a'+10;

else

m=s[i]-'0';

n=n*16+m;

}

returnn;

}

voidmain()

{

chars[6];

intn;

gets(s);

n=fun(s);

printf("%d\n",n);

}

(5)编写程序完成以下功能:

在主函数中通过键盘输入10个互不相同的整数并存入一维数组中,调用函数找出数组中的最大值,并从数组中删除该值,最后在主函数中输出删除后的数组。

【参考源程序】

#include

voidfun(inta[10])

{

inti,j=0,max=a[0];

for(i=1;i<10;i++)

{

if(max

{

max=a[i];j=i;

}

}

for(i=j;i<9;i++)

a[i]=a[i+1];

}

intmain()

{

inti,a[10];

for(i=0;i<10;i++)

scanf("%d",&a[i]);

fun(a);

for(i=0;i<9;i++)

printf("%d",a[i]);

return0;

}

(6)编写程序,调用函数输出如下杨辉三角形。

【参考源程序】

#include

voidyhui(inta[7][7])

{

inti,j;

for(i=1;i<7;i++)

{

a[i][1]=1;a[i][i]=1;

}

for(i=3;i<7;i++)

for(j=2;j

a[i][j]=a[i-1][j-1]+a[i-1][j];

for(i=1;i<7;i++)

{

for(j=1;j<=i;j++)

printf("%3d",a[i][j]);

printf("\n");

}

}

intmain()

{

inta[7][7];

yhui(a);

return0;

}

(7)用递归法计算

的值,n的值由键盘输入。

【参考源程序】

#include

intsum(intn)

{

intr;

if(n<=0)

printf("dataerror\n");

if(n==1)

r=1;

else

r=sum(n-1)+n*n;

returnr;

}

intmain()

{

intn;

scanf("%d",&n);

printf("result=%d\n",sum(n));

return0;

}

(8)用递归法计算

的值,n的值由键盘输入。

【参考源程序】

#include

intsum(intn)

{

intr;

if(n<=0)

printf("dataerror\n");

if(n==1)

r=1;

else

r=sum(n-1)+n;

returnr;

}

intmain()

{

intn;

scanf("%d",&n);

printf("sum(%d)=%d\n",n,sum(n));

return0;

}

(9)已知

可以用下面的公式表示。

编写函数求

,要求最后一项近似到

利用该函数求

【参考源程序】

#include

floatfun1(intn)

{

inti;

floatr=1;

for(i=1;i<=n;i++)

r=r*i;

returnr;

}

floatfun2(floatx,intn)

{

inti;

floatr=1;

for(i=1;i<=n;i++)

r=r*x;

returnr;

}

floatfun(floatx)

{

floatp,s=0;

intn=0;

p=fun2(x,n)/fun1(n);

while(p>1e-4)

{

s+=p;

n++;

p=fun2(x,n)/fun1(n);

}

returns;

}

intmain()

{

printf("%f\n",fun

(1));

printf("%f\n",fun

(2));

printf("%f\n",fun(-0.5));

return0;

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2