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

内容发布更新时间 : 2024/12/23 16:31:11星期一 下面是文章的全部内容请认真阅读。

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

if (n==0) return ; else{ print(n/10); printf(\ return ;

} }

A.5 3 7 8 B.8 7 3 5 C.3 5 7 8 D.8 7 5 3

*6.根据下面函数f,选出f(f(3))的值是( )。

int f(int x)

{

static int k=0; x=x+k;

k--;

return x; }

A.5 B.3 C.2 解:(1)B (2)D (3)B (4)A (5)A 二、写出下列程序的输出结果 *1.

#include

int f1(int,int),f11(int); void f2(int); void main() {

int i,j;

for(i=0;i<5;i++) { f2((5-i)*3);

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

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

int f1(int m,int n) {

return f11(m)/f11(n)/f11(m-n); }

int f11(int k) {

if(k<=1)

return 1;

return k*f11(k-1); }

void f2(int n) {

for(int i=1;i<=n;i++) putchar(' ');

}

解: 1 1 1 1 2 1

28

D.4

(6)C 1 3 3 1 1 4 6 4 1 *2.

#include int f(int m,int n) {

if(m%n==0) return n;

else return f(n,m%n); }

void main() {

printf(\

}

解:24 3.

#include

void fun(int a,int b,int c,int add,int mult) {

add=a+b+c; mult=a*b*c;

printf(\}

void main() {

int x,y; x=y=0;

fun(9,12,-4,x,y);

printf(\ }

解:add=17 mult=-432

add=0 mult=0 4.

#include int add, mult;

void fun(int a,int b,int c,) {

add=a+b+c; mult=a*b*c;

printf(\}

void main() {

fun(9,12,-4);

printf(\ }

解:add=17 mult=-432

add=17 mult=-432 5.

#include int a;

void main() {

int i;

void fun();

29