c语言程序设计高潮版习题四答案.docx
《c语言程序设计高潮版习题四答案.docx》由会员分享,可在线阅读,更多相关《c语言程序设计高潮版习题四答案.docx(11页珍藏版)》请在冰豆网上搜索。
c语言程序设计高潮版习题四答案
习题四
一、选择题
1、一个C语言源程序至少包含一个且只能包含一个_______函数。
(A)MAIN()
(B)main()
(C)open()
(D)close()
答案:
B
2、一个C语言源程序一般包含有许多函数,其中main()函数的位置_______。
(A)必须在最开始
(B)必须在最后
(C)既可以在最开始也可以在最后
(D)可以任意
答案:
D
3、对于C语言程序的函数,下列叙述中正确的是_________。
(A)函数的定义不能嵌套,但函数的调用可以嵌套
(B)函数的定义和调用均不能嵌套
(C)函数的定义可以嵌套,但函数的调用不能嵌套
(D)函数的定义和调用可以嵌套
答案:
A
4、函数声明中不包括下面哪一项?
_______。
(A)函数类型
(B)函数名
(C)函数参数的类型和参数名
(D)函数体
答案:
D
5、以下不正确的说法是___________。
(A)在不同函数中可以使用相同名字的变量
(B)形式参数是局部变量
(C)在函数内定义的变量只在本函数范围内有效
(D)在函数内的复合语句中定义的变量在本函数范围内有效
答案:
D
6、当一个函数无返回值时,函数的类型应定义为___________。
(A)int
(B)void
(C)无
(D)任意
答案:
B
7、在C语言中函数返回值的类型是___________。
(A)由调用该函数时系统临时决定的
(B)由return语句中的表达式类型决定的
(C)由定义该函数时所指定的函数类型决定的
(D)由调用该函数时的主调函数类型决定的
答案:
C
8、下列叙述中,错误的是___________。
(A)一个函数中可以有多条return语句
(B)函数调用执行到return语句即意味着函数调用结束
(C)函数调用必须在一条独立的语句中完成
(D)函数通过return语句返回其函数值
答案:
C
9、在函数中未指定存储类型的变量,其隐含存储类型为__________。
(A)静态(static)
(B)自动(auto)
(C)外部(extern)
(D)存储器(register)
答案:
B
二、填空题
1、一个函数由_____________和_____________两部分组成。
答案:
函数首部函数体@函数头函数体
2、函数体一般包括_______语句和______语句。
答案:
声明执行@声明语句执行语句
3、C语言程序的执行是从________函数开始,在_________函数中结束。
答案:
main()main()@mainmain@main函数main函数@main()函数main()函数
4、一个C语言源程序一般包含有许多函数,其中main()函数是程序执行的入口,所以在整个程序中它必须定义在所有的函数之前。
以上叙述是否正确?
_________
答案:
不正确
5、调用其他函数的函数称为________函数,被其他函数调用的函数称为________函数。
答案:
主调被调@主调函数被调函数
6、从变量存在的时间(即生存期)角度来分,可以分为______存储方式和______存储方式。
答案:
动态静态@静态动态
7、下面add函数的功能是求两个参数的和,并将值返回调用函数。
函数中错误部分是__________,改正后为_____________。
voidadd(floata,floatb)
{floatc;c=a+b;returnc;}
答案:
voidfloat
8、以下程序的运行结果是_____________________。
voidfun(inti,intj){intx=7;printf("#i=%d,j=%d,x=%d",i,j,x);}
intmain()
{
inti=2,x=5,j=7;
fun(j,6);
printf("#i=%d,j=%d,x=%d",i,j,x);
return0;
}
答案:
#i=7,j=6,x=7#i=2,j=7,x=5
9、以下程序中的isLeap()是判断闰年的函数。
请填空。
intmain()
{
intyear;
_____________
printf("Pleaseinputyear:
\n");
scanf("%d",&year);
if(_______________)printf("%disaleapyear.\n",year);
elseprintf("%disnotaleapyear.\n",year);
return0;
}
______isLeap(intyear)
{return(year%4==0&&year%100!
=0||year%400==0);}
答案:
intisLeap(int);isLeap(year)int@intisLeap(intyear);isLeap(year)int
10、已有函数pow():
doublepow(intx,inty)
{inti,j=1;
for(i=1;i<=y;++i)j=j*x;
return(j);
}
现要求取消变量i后pow函数的功能不变,请填空。
doublepow(intx,inty)
{intj;
for(__________;__________;__________)
j=j*x;
return(j);
}
答案:
j=1;y>=1;y--@j=1;y>0;y--@j=1;y>=1;--y@j=1;y>0;--y
11、[程序]
voidmyswap(inta,intb)
{
intt;
if(a>b)t=a,a=b,b=t;}
intmain()
{intx=15,y=12,z=20;
if(x>y)myswap(x,y);
if(x>z)myswap(x,z);
if(y>z)myswap(y,z);
printf("%d,%d,%d",x,y,z);//程序的输出为_________________
return0;
}
答案:
15,12,20
12、以下程序的运行结果是_________。
intfunc(inta,intb)
{staticintm=0,i=2;
i+=m+1;
m=i+a+b;
return(m);
}
intmain()
{intk=4,m=1,p;
p=func(k,m);printf("%d",p);
p=func(k,m);printf("%d",p);
return0;
}
答案:
817
三、程序操作题
1、请打开考生文件夹中的文件Ex0409_1.c,按照例4-9的第一种方法(递推法),上机调试程序。
参考代码:
————考生程序代码————
#include
//递推法求解Fibonacii数列
voidnumber_fibonacci(intn)
{
}
intmain()
{intn;
printf("需输出的Fibonacci数列的项数:
");
scanf("%d",&n);
number_fibonacci(n);
return0;
}
————标准程序代码————
#include
//递推法求解Fibonacii数列
voidnumber_fibonacci(intn)
{
longf,f1=1,f2=1;//f1和f2分别代表数列顺数的第1项和第2项
inti;
printf("%12d%12d\n",f1,f2);//每次输出2个数,每个数占用12个字符输出宽度
for(i=3;i<=n;i++)
{
f=f1+f2;//利用已有的第1项和第2项求当前的新项
f1=f2;//当前的第2项将是下一次求解用的第1项
f2=f;//当前得到的新项将是下一次求解用的第2项
printf("%12d",f);
if(i%2==0)printf("\n");//每输出2项后换行
}
}
intmain()
{intn;
printf("需输出的Fibonacci数列的项数:
");
scanf("%d",&n);
number_fibonacci(n);
return0;
}
2、请打开考生文件夹中的文件Ex0409_2.c,按照例4-9的第二种方法(递归法),上机调试程序。
参考代码:
————考生程序代码————
#include
//递归法求解Fibonacii数列
longfibonacci(intn)
{
}
intmain()
{
intm,n,i;
printf("需输出的Fibonacci数列项数的范围(m~n):
");
scanf("%d%d",&m,&n);
return0;
}
————标准程序代码————
#include
//递归法求解Fibonacii数列
longfibonacci(intn)
{
longf;
if(n<=0)f=0;//条件使用n<=0而不仅仅是n==0,可以包容错误的参数传递
elseif(n==1)f=1;
elsef=fibonacci(n-1)+fibonacci(n-2);
returnf;
}
intmain()
{
intm,n,i;
printf("需输出的Fibonacci数列项数的范围(m~n):
");
scanf("%d%d",&m,&n);
for(i=m;i<=n;i++)
{
printf("%12d",fibonacci(i));//每个输出项占用12个字符输出宽度
if(i%2==0)printf("\n");//每输出2项后换行
}
return0;
}
3、请打开考生文件夹中的文件E0502.c,参照例3-17和例4-13,写一个求素数的函数,然后在main()函数中调用该函数输出200~300间的全部素数。
参考代码:
————考生程序代码————
#include
#include
//判断素数
intisPrime(intn)
{
}
intmain()
{
intn;
for(_________)
if(________)printf("%d",n);//输出素数
printf("\n");
return0;
}
————标准程序代码————
#include
#include
//判断素数
intisPrime(intn)
{
intprime=1;//先假设n为素数
inti,k;
k=(int)sqrt(n);
for(i=2;i<=k;i++)
if(n%i==0){prime=0;break;}
returnprime;
}
intmain()
{
intn;
for(n=201;n<300;n+=2)//偶数肯定不是素数
if(isPrime(n))printf("%d",n);
printf("\n");
return0;
}
4、请打开考生文件夹中的文件E0503.c,完成"习题4"编程题的第5题:
编写一个反转函数reverse(),…,例如将-123转换成-321。
参考代码:
————考生程序代码————
#include
intmain()
{
intn;
printf("输入一个整数:
");
scanf("%d",&n);
printf("反转后的整数:
%d\n",reverse(n));
return0;
}
————标准程序代码————
#include
intmain()
{
intreverse(intn);//函数声明
intn;
printf("输入一个整数:
");
scanf("%d",&n);
printf("反转后的整数:
%d\n",reverse(n));
return0;
}
intreverse(intn)
{
intsign=1,m;//sign为符号位标志
if(n<0)sign=-1;
n=(n>=0?
n:
-n);//取n的绝对值
m=n%10;//取出n的个位数;
while(n>=10)
{
n=n/10;//n的小数点左移一位
m=m*10+n%10;//m的小数点右移一位,并加上当前n的个位数
}
returnsign*m;
}
==END==