C语言程序设计(第二版)习题参考答案1 下载本文

}

}

printf(“\\n”);

*19.猴子吃桃子。第1天猴子吃掉桃子总数一半多一个,第2天又将剩余的桃子吃掉一半多一个,以后每天吃掉前一天剩下的一半多一个,到第十天准备吃的时候只剩下一个桃子。请问第1天开始吃的时候桃子的总数。

//递推公式 x=2*(x+1)

解:#include

void main() {

int n,x;

x=1; //第10天的挑子数 for(n=9; n>=1; n--)

{ x=2*(x+1); //计算第n天的桃子数 }

printf(\第1天吃前挑子总数=%d\\n\ }

*20.用循环体编程序,分别输出如下两个图形,如图4.15所示。*

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 左图

解:#include void main() {

int i,j;

for(i=1;i<=4;i++) {

for(j=1;j<=8-2*i;j++)

putchar(' ');

for(j=1;j<=2*i-1;j++)

printf(\ putchar('\\n'); } }

右图

解:#include

void main() {

24

*

int i,j;

for(i=1;i<=4;i++) //图上半部分 {

for(j=1;j<=8-2*i;j++)

putchar(' ');

for(j=1;j<=2*i-1;j++) printf(\ putchar('\\n'); }

for(i=3;i>=0;i--) //图下半部分 {

for(j=1;j<=8-2*i;j++)

putchar(' ');

for(j=1;j<=2*i-1;j++) printf(\ putchar('\\n'); } }

21.输入正整数a、b,输出a、b之间所有素数之和。

解:#include void main() {

int i,j,a,b,sum=0;

printf(“请输入a b (a≤b)\\n”); scanf(“%d%d”,&a,&b);

for(i=a;i<=b;i++) {

for(j=2;j<=i/2;j++)

if(i%j==0)break; // 此时可判定i不是素数 if(j>i/2&&i!=1)

sum+=i;// 满足此条件表示除1和自身外,其它数均不能整除i

}

printf(“%d至%d之间的素数和=%d\\n”,a,b,sum); }

解:#include void main() {

int i,j,a,b,sum=0,flag; printf(“请输入a b (a≤b)\\n”); scanf(“%d%d”,&a,&b);

for(i=a;i<=b;i++)

{ flag=1; // 要判别当前i是否素数,先将标志变量赋值为1

25

for(j=2;j<=i/2;j++) if(i%j==0){

flag=0;break; }// 此时可判定i不是素数,退出循环 if(flag==1&&i!=1)

sum+=i;//满足此条件表示除1和自身外,其它数均不能整除i }

printf(“%d至%d之间的素数和=%d\\n”,a,b,sum); }

*22.当x为–2,–1.5,–1,?,1.5,2时,求函数f(x)=x2–3.14x–6的解所取的最大值、最小值。

解:#include void main() {

double x,y,max,min;

max=min=(-2)*(-2)-3.14*(-2)-6;

//f(-2)作为max、min的初始值

for(x=-1.5;x<=2;x+=0.5) {

y=x*x-3.14159*x-6;

if(y>max) max=y;

else if(y

}

printf(\ }

*23.当n取值在–39~40范围内时,判断表达式n2+n+41的值是否都是素数。 解:#include

#include void main() {

int i,j,y,count=0;

for(i=-39;i<=40;i++) { y=i*i+i+41;

for(j=2;j<=sqrt(y);j++) if(y%j==0)

{ printf(\当i为%d时,y=%d,结论不成立!\\n\ count++; break; } }

if (count!=0) printf(\共有%d个i值,使结论不成立!\\n\ else printf(\结论成立,都是素数!\\n\ }

26

*24.用区间对分法求x2+xsinx–5=0在区间[0,5]内的一个实根(设ε=10–5)。

【说明】 在[a,b]区间连续的函数f(x),若满足条件f(a)·f(b)<0,则必有a<ξ

(2)若|f(c)|<ε或|b-a|<ε,则输出c作为近似解,并终止程序执行。 (3)如果f(a)·f(c)<0,则b=c;否则a=c,再次执行第(1)步。

解:#include

#include void main() {

float a,b,c;

a=0; b=5; //初始化区间a、b值 do {

c=(a+b)/2; //计算a、b区间的中值

if((a*a+a*sin(a)-5)*(c*c+c*sin(c)-5)<0 )

b=c; //以c代替区间b值

else a=c; //以c代替区间a值

}while(fabs(c*c+c*sin(c)-5)>=1e-5&&fabs(b-a)>=1e-5); printf(\}

习 题 5

一、单项选择题

1.下列叙述中,正确的叙述项是( )。

A.定义函数时,必须要有形参

B.函数中可以没有return语句,也可以有多条return语句 C.函数f可以用f(f(x))形式调用,这种调用形式是递归调用 D.函数必须有返回值

2.下列叙述中,不正确的叙述项是( )。

A.函数调用时,形参变量只有在被调用时才被创建(分配存储单元) 错误!未指定书签。B.函数调用时,实参可以是常量、变量或表达式 C.定义变量时,省略对变量的存储类别定义,则变量是自动型变量 D.语句return(a,b);则函数可以返回两个值

3.传值调用的特点是( )。

A.实参传给形参变量的数据是地址

B.在函数中形参变量值改变后,不改变实参变量的值 C.在函数中形参变量值改变后,实参变量的值随之也改变 D.实参必须是变量

4.如果在函数中定义一个变量,有关该变量作用域正确的是( )。

A.只在该函数中有效 B.在该文件中有效 C.在本程序中有效 D.为非法变量

5.根据下面函数print的定义,选出调用函数print(5378)的值是( )。

void print(long n)

{

27