C语言程序设计教程答案~有追加悬赏100分!

C语言程序设计教程答案~有追加悬赏100分!,第1张

1 【C语言】《C语言程序设计教程(第二版)》习题答案

说明

1. 本文所指的《C语言程序设计教程(第二版)》是李凤霞主编、北京理

工大学出版社出版的,绿皮。

2 第1章 程序设计基础知识

一、单项选择题(第23页)

1-4.CBBC 5-8.DACA

二、填空题(第24页)

1.判断条件 2.面向过程编程 3.结构化 4.程序 5.面向对象的程序设计语言 7.有穷性 8.直到型循环 9.算法 10.可读性 11.模块化 12.对问题的分析和模块的划分

三、应用题(第24页)

2.源程序

main()

{int i,j,k/* i:公鸡数,j:母鸡数,k:小鸡数的1/3 */

printf("cock hen chick\n")

for(i=1i<=20i++)

for(j=1j<=33j++)

for(k=1k<=33k++)

if (i+j+k*3==100&&i*5+j*3+k==100)

printf(" %d %d %d\n",i,j,k*3)}

执行结果:

cock hen chick

4 18 78

8 11 81

12 4 84

3.现计算斐波那契数列的前20项。

递推法 源程序:

main()

{long a,bint i

a=b=1

for(i=1i<=10i++) /*要计算前30项,把10改为15。*/

{printf("%8ld%8ld",a,b)

a=a+bb=b+a}}

递归法 源程序:

main()

{int i

for(i=0i<=19i++)

printf("%8d",fib(i))}

fib(int i)

{return(i<=1?1:fib(i-1)+fib(i-2))}

执行结果:

1 1 2 3 5 8 13 21 34 55

89 144 233 377 610 987 1597 2584 4181 6765

4.源程序:

#include "math.h"

main()

{double x,x0,deltax

x=1.5

do {x0=pow(x+1,1./3)

deltax=fabs(x0-x)

x=x0

}while(deltax>1e-12)

printf("%.10f\n",x)}

执行结果:

1.3247179572

5.源程序略。(分子、分母均构成斐波那契数列)

结果是32.66026079864

6.源程序:

main()

{int a,b,c,m

printf("Please input a,b and c:")

scanf("%d %d %d",&a,&b,&c)

if(a<b){m=aa=bb=m}

if(a<c){m=aa=cc=m}

if(b<c){m=bb=cc=m}

printf("%d %d %d\n",a,b,c)}

执行结果:

Please input a,b and c:123 456 789

789 456 123

7.源程序:

main()

{int a

scanf("%d",&a)

printf(a%21==0?"Yes":"No")}

执行结果:

42

Yes

3 第2章 C语言概述

一、单项选择题(第34页)

1-4.BDCB 5-8.AABC

二、填空题(第35页)

1.主 2.C编译系统 3.函数 函数 4.输入输出 5.头 6. .OBJ 7.库函数 8.文本

三、应用题(第36页)

5.sizeof是关键字,stru、_aoto、file、m_i_n、hello、ABC、SIN90、x1234、until、cos2x、s_3是标识符。

8.源程序:

main()

{int a,b,c

scanf("%d %d",&a,&b)

c=aa=bb=c

printf("%d %d",a,b)}

执行结果:

12 34

34 12

4 第3章 数据类型与运算规则

一、单项选择题(第75页)

1-5.DBACC 6-10.DBDBC 11-15.ADCCC 16-20.CBCCD 21-25.ADDBC 26-27.AB

二、填空题(第77页)

1.补码 2.±(10^-308~10^308) 3.int(整数) 4.单目 自右相左 5.函数调用 6.a或b 7.1 8.65,89

三、应用题(第78页)

1.10 9

2.执行结果:

11

0

0

12

1

5 第4章 顺序结构程序设计

一、单项选择题(第90页)

1-5.DCDAD 6-10.BACBB

二、填空题(第91页)

1.一 ;2. 5.169000 3.(1)-2002500 (2)I=-200,j=2500 (3)i=-200

j=2500 4.a=98,b=765.000000,c=4321.000000 5.略 6.0,0,3 7.3 8.scanf("%lf%lf%lf",&a,&b,&c)9. 13 13.000000,13.000000 10.a=a^cc=c^aa=a^c(这种算法不破坏b的值,也不用定义中间变量。)

三、编程题(第92页)

1.仿照教材第27页例2-1。

2.源程序:

main()

{int h,m

scanf("%d:%d",&h,&m)

printf("%d\n",h*60+m)}

执行结果:

9:23

563

3.源程序:

main()

{int a[]={-10,0,15,34},i

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

printf("%d\370C=%g\370F\t",a[i],a[i]*1.8+32)}

执行结果:

-10℃=14°F 0℃=32°F 15℃=59°F 34℃=93.2°F

4.源程序:

main()

{double pi=3.14159265358979,r=5

printf("r=%lg A=%.10lf S=%.10lf\n",r,2*pi*r,pi*pi*r)}

执行结果:

r=5 A=31.4159265359 S=49.3480220054

5.源程序:

#include "math.h"

main()

{double a,b,c

scanf("%lf%lf%lf",&a,&b,&c)

if (a+b>c&&a+c>b&&b+c>a)

{double s=(a+b+c)/2

printf("SS=%.10lf\n",sqrt(s*(s-a)*(s-b)*(s-c)))}

else printf("Data error!")}

执行结果:

4 5 6

SS=9.9215674165

6.源程序:

main()

{int a=3,b=4,c=5float d=1.2,e=2.23,f=-43.56

printf("a=%3d,b=%-4d,c=**%d\nd=%g\ne=%6.2f\nf=%-10.4f**\n",a,b,c,d,e,f)}

7.源程序:

main()

{int a,b,c,m

scanf("%d %d %d",&a,&b,&c)

m=aa=bb=cc=m

printf("%d %d %d\n",a,b,c)}

执行结果:

5 6 7

6 7 5

8.源程序:

main()

{int a,b,c

scanf("%d %d %d",&a,&b,&c)

printf("average of %d,%d and %d is %.2f\n",a,b,c,(a+b+c)/3.)

执行结果:

6 7 9

average of 6,7 and 9 is 7.33

9.不能。修改后的源程序如下:

main()

{int a,b,c,x,y

scanf("%d %d %d",&a,&b,&c)

x=a*by=x*c

printf("a=%d,b=%d,c=%d\n",a,b,c)

printf("x=%d,y=%d\n",x,y)}

6 第5章 选择结构程序设计

一、单项选择题(第113页)

1-4.DCBB 5-8.DABD

二、填空题(第115页)

1.非0 0 2.k==0

3.if (abs(x)>4) printf("%d",x)else printf("error!")

4.if((x>=1&&x<=10||x>=200&&x<=210)&&x&1)printf("%d",x)

5.k=1 (原题最后一行漏了个d,如果认为原题正确,则输出k=%。)

6. 8! Right!11 7.$$$a=0 8.a=2,b=1

三、编程题(第116页)

1.有错。正确的程序如下:

main()

{int a,b,c

scanf("%d,%d,%d",&a,&b,&c)

printf("min=%d\n",a>b?b>c?c:b:a>c?c:a)}

2.源程序:

main()

{unsigned long a

scanf("%ld",&a)

for(aprintf("%d",a%10),a/=10)}

执行结果:

12345

54321

3.(1)源程序:

main()

{int x,y

scanf("%d",&x)

if (x>-5&&x<0)y=x

if (x>=0&&x<5)y=x-1

if (x>=5&&x<10)y=x+1

printf("%d\n",y)}

(2)源程序:

main()

{int x,y

scanf("%d",&x)

if(x<10) if(x>-5) if(x>=0) if(x>=5)y=x+1

else y=x-1else y=x

printf("%d\n",y)}

(3)源程序:

main()

{int x,y

scanf("%d",&x)

if(x<10) if(x>=5)y=x+1

else if(x>=0)y=x-1

else if(x>-5)y=x

printf("%d\n",y)}

(4)源程序:

main()

{int x,y

scanf("%d",&x)

switch(x/5)

{case -1:if(x!=-5)y=xbreak

case 0:y=x-1break

case 1:y=x+1}

printf("%d\n",y)}

4.本题为了避免考虑每月的天数及闰年等问题,故采用面向对象的程序设计。

现给出Delphi源程序和C++ Builder源程序。

Delphi源程序:

procedure TForm1.Button1Click(Sender: TObject)

begin

edit3.Text:=format('%.0f天',[strtodate(edit2.text) -strtodate(edit1.text)])

end

procedure TForm1.FormCreate(Sender: TObject)

begin

Edit2.Text:=datetostr(now)

button1click(form1)

end

C++ Builder源程序:

void __fastcall TForm1::Button1Click(TObject *Sender)

{

Edit3->Text=IntToStr(StrToDate(Edit2->Text)-StrToDate(Edit1->Text))+"天"

}

void __fastcall TForm1::FormCreate(TObject *Sender)

{

Edit2->Text=DateToStr(Now())

Button1Click(Form1)

}

执行结果:(运行于Windows下) http://img378.photo.163.com/nxgt/41463572/1219713927.jpg

5.源程序:

main()

{unsigned a,b,c

printf("请输入三个整数:")

scanf("%d %d %d",&a,&b,&c)

if(a&&b&&c&&a==b&&a==c)printf("构成等边三角形\n")

else if(a+b>c&&a+c>b&&b+c>a)

if(a==b||a==c||b==c)printf("构成等腰三角形\n")

else printf("构成一般三角形\n")

else printf("不能构成三角形\n")}

执行结果:

请输入三个整数:5 6 5

构成等腰三角形

6.源程序:

main()

{int x,y

scanf("%d",&x)

if(x<20)y=1

else switch(x/60)

{case 0:y=x/10break

default:y=6}

printf("x=%d,y=%d\n",x,y)}

7.源程序:

main()

{unsigned mfloat n

scanf("%d",&m)

if(m<100)n=0

else if(m>600)n=0.06

else n=(m/100+0.5)/100

printf("%d %.2f %.2f\n",m,m*(1-n),m*n)}

执行结果:

450

450 429.75 20.25

8. 2171天(起始日期和终止日期均算在内)

本题可利用第4小题编好的程序进行计算。把起始日期和终止日期分别打入“生日”和“今日”栏内,单击“实足年龄”按钮,将所得到的天数再加上1天即可。

9.源程序:

#include "math.h"

main()

{unsigned long i

scanf("%ld",&i)

printf("%ld %d\n",i%10,(int)log10(i)+1)}

执行结果:

99887

7 5

10.源程序:

main()

{unsigned long iunsigned j[10],m=0

scanf("%ld",&i)

for(i){j[m++]=(i+2)%10i/=10}

for(mm--)i=i*10+j[m-1]

printf("%ld\n",i)}

执行结果:

6987

8109

(注:要加密的数值不能是0或以0开头。如果要以0开头需用字符串而不能是整数。)

7 第6章 循环结构程序设计

一、单项选择题(第142页)

1-4.BCCB 5-8.CBCA

二、填空题(第143页)

1.原题可能有误。如无误,是死循环 2.原题有误。如果把b=1后面的逗号改为分号,则结果是8。 3.20 4.11 5. 2.400000 6.*#*#*#$ 7.8 5 2 8.①d=1.0 ②++k ③k<=n 9.①x>=0 ②x<amin

三、编程题(第145页)

1. 源程序:

main()

{int i=1,sum=i

while(i<101){sum+=i=-i-2sum+=i=-i+2}

printf("%d\n",sum)}

执行结果:

51

2.源程序:

main()

{double p=0,n=0,fint i

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

{scanf("%lf",&f)

if (f>0)p+=felse n+=f}

printf("%lf %lf %lf\n",p,n,p+n)}

3.源程序:

main()

{unsigned a

scanf("%ld",&a)

for (aprintf("%d,",a%10),a/=10)

printf("\b \n")}

执行结果:

23456

6,5,4,3,2

4.源程序:

main()

{unsigned long a,b,c,i

scanf("%ld%ld",&a,&b)

c=a%1000

for(i=1i<bi++)c=c*a%1000

if(c<100)printf("0")

if(c<10)printf("0")

printf("%ld\n",c)}

执行结果:

129 57

009

5.略

6.原题提供的计算e的公式有误(前面漏了一项1)。正确的公式是e= 1 + 1 + 1/2! + 1/3! + … + 1/n! + …

(1)源程序:

main()

{double e=1,f=1int n

for(n=1n<=20n++){f/=ne+=f}

printf("e=%.14lf\n",e)}

执行结果:

e=2.71828182845905

(2)源程序:

main()

{double e=1,f=1int n

for(n=1f>1e-4n++){f/=ne+=f}

printf("e=%.4f\n",e)}

执行结果:

e=2.7183

7.源程序:

main()

{unsigned long a=0,b=1,c=0int i,d

scanf("%d",&d)

for (i=1i<=(d+2)/3i++)

printf("%10ld%10ld%10ld",a,b,(a+=b+c,b+=c+a,c+=a+b))}

本题还可以用递归算法(效率很低),源程序如下:

unsigned long fun(int i)

{return i<=3?i:fun(i-1)+fun(i-2)+fun(i-3)}

main()

{int i,dscanf("%d",&d)

for(i=1i<=di++)

printf("%10ld",fun(i))}

执行结果:

15

1 2 3 6 11 20 37 68

125 230 423 778 1431 2632 4841

8.源程序:

main()

{int i

for(i=1010i<=9876i+=2)

if(i/100%11&&i%100%11&&i/10%100%11&&i/1000!=i%10&&i/1000!=i/10%10&&i/100%10!=i%10)printf(" %d",i)}

执行结果:

1024 1026 1028 1032 1034 1036 …… …… 9874 9876

9.源程序:

main()

{int i,j,k

printf("apple watermelon pear\n")

for(i=1i<=100i++)

for(j=1j<=10j++)

if((k=100-i-j)*2==400-i*4-j*40)

printf("%4d%7d%9d\n",i,j,k)}

执行结果:

apple watermelon pear

5 5 90

24 4 72

43 3 54

62 2 36

81 1 18

10.源程序:

#include "stdio.h"

#define N 4 /* N为阶数,可以改为其他正整数 */

main()

{int m=N*2,i,j

for(i=1i<mprintf("\n"),i++)

for(j=1j<m

putchar(N-abs(i-N)<=abs(j++-N)?' ':'*'))}

如果把N值改为5,则执行结果如下:

*

***

*****

*******

*********

*******

*****

***

*

作者:宁西贯通2006-5-7 23:41 回复此发言

--------------------------------------------------------------------------------

8 说明

注意:上面最后一题的输出结果应该是由星号组成的一个菱形,

9 第7章 数 组

一、单项选择题(第192页)

1-4.BBCC 5-8.AABA

二、填空题(第194页)

1.1

2

4

8

16

32

64

128

256

512

2. ①a[age]++ ②i=18i<26

3. ①break ②i==8

4. ①a[i]>b[j] ②i<3 ③j<5

5. ①b[j]=a[j][0] ②b[j]<a[j][k] 6.a[k++]=a[j]

三、编程题(第196页)

1.源程序:

main()

{int a[4][4],i,j,s=0

for(i=0i<4i++)

for(j=0j<4j++)

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

for(i=0i<4i++)

for(j=0j<4j++)

if(i==j||i+j==3)s+=a[i][j]

printf("%d\n",s)} /* 注:5×5矩阵不能照此计算! */

执行结果:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

68

2. 源程序:

main()

{int i,a[36]

a[0]=2

for(i=1i<=29i++)a[i]=a[i-1]+2

for(i<=35i++)a[i]=a[(i-30)*5+2]

for(i=0i<=35i++)printf("%d\t",a[i])}

执行结果:

2 4 6 8 10 12 14 16 18 20

22 24 26 28 30 32 34 36 38 40

42 44 46 48 50 52 54 56 58 60

6 16 26 36 46 56

3. 源程序:

#include "stdlib.h"

#include "time.h"

main()

{int a[30],i,m=0

randomize()

for(i=0i<=29i++)

{a[i]=rand()

if(m<a[i])m=a[i]

printf("%d\t",a[i])}

for(i=0i<=29i++)if(a[i]==m)a[i]=-1

printf("\n-----------------\n")

for(i=0i<=29i++)

if(~a[i])printf("%d\t",a[i])

printf("\n")}

执行结果:

20679 29377 18589 9034 27083 4959 3438 5241 32278 23344

32499 29305 22340 5927 13031 2161 2583 31855 22977 14283

4851 22038 6992 11394 20887 27381 6293 18347 16414 10210

-----------------

20679 29377 18589 9034 27083 4959 3438 5241 32278 23344

29305 22340 5927 13031 2161 2583 31855 22977 14283 4851

22038 6992 11394 20887 27381 6293 18347 16414 10210

4.源程序:

main()

{int i,n=0,b[16]

scanf("%d",&i)

for(ii>>=1)b[n++]=i&1

for(n)printf("%d",b[--n])}

执行结果:

9876

10011010010100

本题也可以不用数组。源程序如下:

#include "stdio.h"

main()

{int i,n

scanf("%d",&i)

for(n=16nn--)

{asm ROL i,1

putchar(i&1|48)}

} /* ROL是循环左移的汇编指令 */

5. 源程序:

#include "stdlib.h"

#include "time.h"

#define M 5

#define N 6

main()

{int a[M][N],i,j,t[M]

randomize()

/*生成M行N列随机数*/

for(i=0i<Mprintf("\n"),t[i++]=0)

for(j=0j<Nj++)

printf("%4d",a[i][j]=random(50))

/*找出每行的最小数,t[M]是第M行的最小数所在的列数*/

for(i=0i<Mi++)

for(j=0j<Nj++)

if(a[i][t[i]]>a[i][j])t[i]=j

/*比较每个最小数在其所在的列上是否也是最小*/

for(j=0j<Mj++)

for(i=0i<Mi++)

{if(i==j)continue

if(a[j][t[j]]>a[i][t[j]])

{t[j]=-1break}

}

printf("-------------------\n")

/*输出在行和列上均为最小的数*/

for(i=0i<Mi++)

if(t[i]!=-1)

printf("a[%d,%d]=%d\n",i,t[i],a[i][t[i]])

}

执行结果:

13 19 13 20 0 1

20 41 6 16 35 30

3 5 37 8 23 15

6 36 24 29 18 1

1 5 28 21 46 34

-------------------

a[0,4]=0

a[1,2]=6

a[3,5]=1

a[4,0]=1

6. 源程序:

#include "stdlib.h"

#include "time.h"

#define M 5

#define N 7

main()

{int a[M][N],i,j,t=0

randomize()

for(i=0i<Mi++)

{a[i][N-1]=0

for(j=0j<N-1j++)

{printf("%4d",a[i][j]=random(91)+10)

a[i][N-1]+=a[i][j]}

printf("%4d\n",a[i][N-1])}

for(i=1i<Mi++)

if(a[i][N-1]>a[t][N-1])t=i

if(t)for(j=0j<Nj++)

{i=a[0][j]a[0][j]=a[t][j]a[t][j]=i}

printf("-----------------\n")

for(i=0i<Mprintf("\n"),i++)

10 第7章 数 组

for(j=0j<Nj++)

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

}

执行结果:

89 17 32 95 35 20 288

39 48 22 27 73 22 231

51 87 39 71 84 46 378

84 94 97 77 27 26 405

69 50 56 89 37 46 347

-----------------

84 94 97 77 27 26 405

39 48 22 27 73 22 231

51 87 39 71 84 46 378

89 17 32 95 35 20 288

69 50 56 89 37 46 347

7. 源程序:

#include "stdlib.h"

#include "time.h"

#define M 5

#define N 6

main()

{int a[M][N],i,j

struct data{int value,x,y}max,min

max.value=0min.value=100

randomize()

for(i=0i<Mprintf("\n"),i++)

for(j=0j<Nj++)

{printf("%4d",a[i][j]=random(100)+1)

if(max.value<a[i][j])

{max.value=a[i][j]max.x=imax.y=j}

if(min.value>a[i][j])

{min.value=a[i][j]min.x=imin.y=j}

}

printf("-----------------\n")

i=a[0][N-1]a[0][N-1]=max.valuea[max.x][max.y]=i

i=a[M-1][0]a[M-1][0]=min.valuea[min.x][min.y]=i

for(i=0i<Mprintf("\n"),i++)

for(j=0j<Nj++)

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

}

执行结果:

51 53 74 65 30 40

30 26 50 6 61 27

47 16 54 58 76 19

57 74 44 92 71 48

73 57 60 32 73 67

-----------------

51 53 74 65 30 92

30 26 50 73 61 27

47 16 54 58 76 19

57 74 44 40 71 48

6 57 60 32 73 67

9. 源程序:

main()

{char s[255]int i,j,b=1

printf("Input a string:")

scanf("%s",s)

i=strlen(s)

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

b=b&&(s[j-1]==s[i-j])

printf(b?"Yes\n":"No\n")}

执行结果:

Input a string:level

Yes

10. 源程序:

main()

{char s[255],t,max=0,min=0,l,i

printf("Input a string(length>4):")

gets(s)

l=strlen(s)

for(i=0i<li++)

{if(s[max]<s[i])max=iif(s[min]>s[i])min=i}

t=s[1]s[1]=s[max]s[max]=tif(min==1)min=max

t=s[l-2]s[l-2]=s[min]s[min]=t

printf("%s\n",s)}

执行结果:

Input a string(length>4):C++Builder

Cu+Beild+r

11. 源程序:

main()

{char m[13][10]={"****","January","February","March",

"April","May","June","July","August","September",

"October","November","December"}

int i,j,k,a,s,n

printf("Please input an integer(100..999):")

scanf("%d",&n)

printf("%d:%d+%d+%d=%d, %d%%13=%d, %s\n", n,i,j,k,s,s,a,m[a=((s=(i=n/100)+(j=n/10%10)+(k=n%10))%13)])}

执行结果:

Please input an integer(100..999):539

539:5+3+9=17, 17%13=4, April

11 第8章 函 数

一、单项选择题(第241页)

1-5.BCCAA 6-10.CCDDD 11-15.ACACB

二、填空题(第243页)

1.看不出原题的意图。因为要计算1~n的累加和,n应是一个≥1的正整数。可是题目中却出现了n=0的情况。除非另加规定当n=0时1~n的累加和为0,或者把原题中的计算式改为计算0~n的累加和。据此猜测,原题应填为:①return(0) ②return(n+sum(n-1))

根据题意,如下程序较为合理:

int sum(int n)

{if(n<=0)return(-1)/* -1是出错标志 */

else if(n==1)return(1)

else return(n+sum(n-1))}

2. ①return(1) ②return(n*facto(n-1))

三、编程题(第244页)

3.源程序:

main()

{int i,a,b,c

for(i=100i<999i++)

if((a=i/100)*a*a+(b=i/10%10)*b*b+(c=i%10)*c*c==i)

printf("%d\t",i)}

执行结果:

153 370 371 407

8.源程序(非递归算法):

#define P 13 /* P可以改为其他正整数 */

main()

{int a[P],r,c

for(r=0r<=Pr++)

{a[r]=1

for(c=r-1c>=1a[c--]+=a[c-1])

printf("%*d",(P-r)*3+1,a[0])

for(c=1c<=rprintf("%6d",a[c++]))

printf("\n")}

}

执行结果:

(应该排列成一个三角形,是贴吧造成现在这个样子的,不是程序有问题)

1

1 1

1 2 1

1 3 3 1

1 4 6 4 1

1 5 10 10 5 1

1 6 15 20 15 6 1

1 7 21 35 35 21 7 1

1 8 28 56 70 56 28 8 1

1 9 36 84 126 126 84 36 9 1

1 10 45 120 210 252 210 120 45 10 1

1 11 55 165 330 462 462 330 165 55 11 1

1 12 66 220 495 792 924 792 495 220 66 12 1

1 13 78 286 715 1287 1716 1716 1287 715 286 78 13 1

9.源程序(递归算法):

#include "stdio.h"

void printOCT(unsigned long n)

{unsigned long i

if(i=n>>3)printOCT(i)

putchar((n&7)+48)}

main()

{unsigned long i

scanf("%ld",&i)

printOCT(i)}

执行结果:

1234567890

11145401322

本题也可以不用递归算法,源程序请参考第7章第三题4。

12 回复:【C语言】《C语言程序设计教程(第二版)》习题答案

但是不同时间印刷的版本课后题不太一样呢,象我们的是1999年12月第2版,2005年12月第69次印刷的。没有选择填空,应用题和楼主不知道有多少相同的,因为看不到原题。这个比较麻烦呢。

作者:210.77.204.* 2006-5-9 18:38 回复此发言

--------------------------------------------------------------------------------

13 回复:【C语言】《C语言程序设计教程(第二版)》习题答案

你对照一下主编和出版社,看看对吗?(见说明的第一条。)

我不是说叫你有问题另发帖子吗?

14 第9章 指 针

一、单项选择题(第276页)

1-5.DCDAC 6-10.CCABC 11-16.AABBB 16-20.DCDBD

二、填空题(第278页)

1.①int * ②*z

2.*p++

3.①'\0' ②++

4.①q=p+1 ②q<p+10 ③*q>max ④*q<min

三、编程题(第280页)

7.源程序:

main()

{int i=0char c[20]

do{scanf("%s",&c)i++}

while(strcmp(c,"stop"))

printf("%d\n",i)}

执行结果:

This car ran form Nanyang

to Luoyang without a stop

10

9.源程序:

main()

{char s[255],c[255]={0}int i

gets(s)

for(i=0s[i]c[s[i++]]++)

for(i=0i<255i++)

if(c[i])printf("%c=%d\t",i,c[i])}

执行结果:

abcedabcdcd

a=2 b=2 c=3 d=3 e=1

c语言程序设计教程吴国栋版答案在书本后面的二维码扫码可以找到。C语言是一门面向过程、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。尽管C语言提供了许多低级处理的功能,仍然保持着跨平台的特性,以一个标准规格写出的C语言程序可在包括一些类似嵌入式处理器以及超级计算机等作业平台的许多计算机平台上进行编译。

(1)下面叙述正确的是________。

A)算法的执行效率与数据的存储结构无关

B)算法的空间复杂度是指算法程序中指令(或语句)的条数

C)算法的有穷性是指算法必须能在执行有限个步骤之后终止

D)算法的时间复杂度是指执行算法程序所需要的时间

(1)C

知识点:算法的基本概念;算法复杂度的概念和意义(时间复杂度与空间复杂度)

评 析:算法的设计可以避开具体的计算机程序设计语言,但算法的实现必须借助程序设计语言中提供的数据类型及其算法。数据结构和算法是计算机科学的两个重要支柱。它们是一个不可分割的整体。算法在运行过程中需辅助存储空间的大小称为算法的空间复杂度。算法的有穷性是指一个算法必须在执行有限的步骤以后结束。算法的时间复杂度是指执行算法所需要的计算工作量,即算法执行过程中所需要的基本运算次数。

(2)以下数据结构属于非线性数据结构的是________。

A)队列 B)线性表 C)二叉树 D)栈

(2)C

知识点:栈和队列的定义;栈和队列的顺序存储结构及其基本运算

评 析:线性表、栈和队列等数据结构所表达和处理的数据以线性结构为组织形式。栈是一种特殊的线性表,这种线性表只能在固定的一端进行插入和删除 *** 作,允许插入和删除的一端称为栈顶,另一端称为栈底。一个新元素只能从栈顶一端进入,删除时,只能删除栈顶的元素,即刚刚被插入的元素。所以栈又称后进先出表(Last In First Out)。队列可看作是插入在一端进行,删除在另一端进行的线性表,允许插入的一端称为队尾,允许删除的一端称为队头。在队列中,只能删除队头元素,队列的最后一个元素一定是最新入队的元素。因此队列又称先进先出表(First In First Out)。二叉树的数据结构是树型结构,结构中数据元素之间存在着一对多的关系,因此它是一种非线性数据结构。

(3)在一棵二叉树上第8层的结点数最多是________。

A)8 B)16 C)128 D)256

(3)C

知识点:二叉树的定义及其存储结构

评 析:根据二叉树的性质:二叉树第i(I>1)层上至多有2i-1个结点。得到第8层的结点数最多是128。

(4)下面描述中,不符合结构化程序设计风格的是________。

A)使用顺序、选择和重复(循环)三种基本控制结构表示程序的控制逻辑

B)自顶向下

C)注重提高程序的执行效率

D)限制使用goto语句

(4)C

知识点:结构化程序设计

评 析:结构化程序设计方法的四条原则是:1.自顶向下:2.逐步求精;3.模块化;4.限制使用goto语句。“自顶向下”是说,程序设计时,应先考虑总体,后考虑细节,先考虑全局目标,后考虑局部目标;“逐步求精’’是说,对复杂问题,应设计一些子目标作过渡,逐步细节化;“模块化”是说,一个复杂问题肯定是由若干稍简单的问题构成,解决这个复杂问题的程序,也应对应若干稍简单的问题,分解成若干稍小的部分。

(5)下面概念中,不属于面向对象方法的是________。

A)对象、消息 B)继承、多态 C)类、封装 D)过程调用

(5)D

知识点:面向对象的程序设计方法、对象、方法、属性及继承与多态性

评 析:面向对象方法是一种运用对象、类、封装、继承、多态和消息等概念来构造、测试、重构软件的方法。面向对象方法从对象出发,发展出对象、类、消息、继承等概念。

(6)在结构化方法中,用数据流程图(DFD)作为描述工具的软件开发阶段是________。

A)可行性分析 B)需求分析 C)详细设计 D)程序编码

(6)B

知识点:结构化设计方法

评 析:软件开发阶段包括需求分析、总体设计、详细设计、编码和测试五个阶段。其中需求分析阶段常用的工具是数据流程图和数据字典。

(7)软件生命周期中所花费用最多的阶段是________。

A)详细设计 B)软件编码 C)软件测试 D)软件维护

(7)D

知识点:软件工程基本概念,软件生命周期概念,软件工具与软件开发环境

评 析:软件生命周期分为软件定义、软件开发及软件运行维护3个阶段。本题中详细设计、软件编码和软件测试都属于软件开发阶段;维护是软件生命周期的最后一个阶段,也是持续时间最长,花费代价最大的一个阶段,软件工程学的一个目的就是提高软件的可维护性,降低维护的代价。

(8)数据库系统的核心是________。

A)数据模型 B)DBMS C)软件工具 D)数据库

(8)B

知识点:数据库的基本概念:数据库,数据库管理系统,数据库系统

评 析:数据库管理系统DBMS是数据库系统的核心。DBMS是负责数据库的建立、使用和维护的软件。DBMS建立在 *** 作系统之上,实施对数据库的统一管理和控制。用户使用的各种数据库命令以及应用程序的执行,最终都必须通过DBMS。另外,DBMS还承担着数据库的安全保护工作,按照DBA所规定的要求,保证数据库的完整性和安全性。

(9)下列叙述中正确的是________。

A)数据处理是将信息转化为数据的过程

B)数据库设计是指设计数据库管理系统

C)如果一个关系中的属性或属性组并非该关系的关键字,但它是另一个关系的关键

字,则称其为本关系的外关键字

D)关系中的每列称为元组,一个元组就是一个字段

(9)C

知识点:数据模型,实体联系模型及E-R图,从E-R图导出关系数据模型

评 析:数据处理是指将数据转换成信息的过程,故选项A叙述错误;设计数据库的目的实质上是设计出满足实际应用需求的实际关系模型,故选项B叙述错误;关系中的行称为元组,对应存储文件中的记录,关系中的列称为属性。对应存储文件中的字段,故D选项叙述错误。

(10)下列模式中,_______是用户模式。

A)内模式 B)外模式 C)概念模式 D)逻辑模式

(10)B

知识点:数据库的基本概念:数据库,数据库管理系统,数据库系统

评 析:数据库管理系统的三级模式结构由外模式、模式和内模式组成。外模式,或称子模式,或称用户模式,是指数据库用户所看到的数据结构,是用户看到的数据视图。模式,或称逻辑模式,是数据库中对全体数据的逻辑结构和特性的描述,是所有用户所见到的数据视图的总和。外模式是模式的一部分。内模式,或称存储模式,或称物理模式,是指数据在数据库系统内的存储介质上的表示。即对数据的物理结构和存取方式的描述。

36)算法的时间复杂度是指_______。

A)执行算法程序所需要的时间

B)算法程序的长度

C)算法执行过程中所需要的基本运算次数

D)算法程序中的指令条数

(36)C

知识点:算法复杂度的概念和意义(时问复杂度与空间复杂度)

评析:所谓算法的时间复杂度,是指执行算法所需要的计算工作量。为了能够比较客观地反映出一个算法的效率,在度量一个算法的工作量时,不仅应该与所使用的计算机、程序设计语言以及程序编制者无关,而且还应该与算法实现过程中的许多细节无关。为此,可以用算法在执行过程中所需基本运算的执行次数来度量算法的工作量。

(37)下列叙述中正确的是_______。

A)线性表是线性结构 B)栈与队列是非线性结构

C)线性链表是非线性结构 D)二叉树是线性结构

(37)A

知识点:线性结构与非线性结构的概念

评析:根据数据结构中各数据元素之间相关联关系的复杂程度,一般将数据结构分为两大类型:线性结构与非线性结构。如果一个非空的数据结构满足下列两个条件: (1)有且只有一个根结点; (2)每一个结点最多有一个前件,也最多有一个后件。则称该数据结构为线性结构,又称线性表。所以线性表、栈与队列、线性链表都是线性结构,而二叉树是非线性结构。

(38)下面关于完全二叉树的叙述中,错误的是_______。

A)除了最后一层外,每一层上的结点数均达到最大值

B)可能缺少若干个左右叶子结点

C)完全二叉树一般不是满二叉树

D)具有结点的完全二叉树的深度为[log2n]+l

(38)B

知识点:二叉树的定义及其存储结构

评析:这里考察完全二又树与满二叉树的定义及二叉树的性质。满二叉树指除最后一层外每一层上所有结点都有两个子结点的二叉树。完全二叉树指除最后一层外,每一层上的结点数均达到最大值,在最后一层上只缺少右边的若干子结点(叶子结点)的二叉树。因此选项A是正确的,而选项B是错误的。由定义可知,满二叉树肯定是完全二又树,而完全二又树一般不是满二叉树,因此选项c是正确的叙述。选项D即二又树性质(5),也是正确的。

(39)结构化程序设计主要强调的是_______。

A)程序的规模 B)程序的易读性

C)程序的执行效率 D)程序的可移植性

(39)B

知识点:结构化程序设计

评析:结构化程序设计主要强调的足结构化程序清晰易读,可理解性好,程序员能够进行逐步求精、程序证明和测试.以保证程序的正确性。

(40)在软件生命周期中,能准确地确定软件系统必须做什么和必须具备哪些功能的阶段是_______。

A)概要设计 B)详细设计 C)可行性分析 D)需求分析

(40)D

知识点:软件工程基本概念,软件生命周期概念,软件工具与软件开发环境

评析:通常,将软件产品从提出、实现、使用维护到停止使用退役的过程称为软件生命周期。也就是说,软件产品从考虑其概念开始,到该软件产品不能使用为止的整个时期都属于软件生命周期。软件生命周期的主要活动阶段为:

① 可行性研究和计划制定。确定待开发软件系统的开发目标和总的要求,给出它的功能、性能、可靠性以及接口等方面的可行方案,制定完成开发任务的实施计划。

②需求分析。对待开发软件提出的需求进行分析并给出详细定义,即准确地确定软件系统的功能。编写软件规格说明书及初步的用户手册,提交评审。

③软件设计。系统设计人员和程序设计人员应该在反复理解软件需求的基础上,给出软件的结构、模块的划分、功能的分配以及处理流程。

④软件实现。把软件设计转换成计算机可以接受的程序代码。即完成源程序的编码,编写用户手册、 *** 作手册等面向用户的文档,编写单元测试计划。

⑤软件测试。在设计测试用例的基础上,检验软件的各个组成部分。编写测试分析报告。

⑥运行和维护。将已交付的软件投入运行,并存运行使用中不断地维护,根据新提出的需求进行必要而且可能的扩充和删改。

(41)数据流图用于抽象描述一个软件的逻辑模型,数据流图由一些特定的图符构成。下列图符名标识的图符不属于数据流图合法图符的是_______。

A)控制流 B)加工 C)数据存储 D)源和潭

(41)A

知识点:结构化分析方法,数据流图,数据字典,软件需求规格说明书

评析:数据流图从数据传递和加工的角度,来刻画数据流从输入到输出的移动变换过程。数据流图中的主要图形元素有:加工(转换)、数据流、存储文件(数据源)、源和潭。

(42)软件需求分析一般应确定的是用户对软件的_______。

A)功能需求 B)非功能需求 C)性能需求 D)功能需求和非功能需求

(42)D

知识点:结构化设计方法

评析:软件需求分析中需要构造一个完全的系统逻辑模型,理解用户提出的每一功能与性能要求,是用户明确自己的任务。因此,需求分析应确定用户对软件的功能需求和非功能需求。

(43)下述关于数据库系统的叙述中正确的是_______。

A)数据库系统减少了数据冗余

B)数据库系统避免了一切冗余

C)数据库系统中数据的一致性是指数据类型的一致

D)数据库系统比文件系统能管理更多的数据

(43)A

知识点:数据库的基本概念:数据库,数据库管理系统,数据库系统

评析:由于数据的集成性使得数据可为多个应JH=j所共享,特别是在网络发达的今天,数据库与网络的结合扩大了数据关系的应用范围。数据的共享自身义可极大地减少数据冗余性,不仅减少了不必要的存储空间,更为重要的是可以避免数据的不一致性。所谓数据的一致性是指在系统中同一数据的不同出现应保持相同的值,而数据的不一致性指的是同一个数据在系统的不同拷贝处有不同的值。

(44)关系表中的每一横行称为一个_______。

A)元组 B)字段 C)属性 D)码

(44)A

知识点:数据库的基本概念:数据库.数据库管理系统,数据库系统

评析:在关系数据库中,关系模型采用二维表来表示,简称“表”。二维表是由表框架及表元组组成。在表框架中,按行可以存放数据,每行数据称为元组。

(45)数据库设计包括两个方面的设计内容,它们是_______。

A)概念设计和逻辑设计 B)模式设计和内模式设计

C)内模式设计和物理设计 D)结构特性设计和行为特性设计

(45)A

知识点:数据库设计方法和步骤:需求分析、概念设计、逻辑设计和物理设计的相关策略

评析:数据库设计可分为概念设计与逻辑设计。数据库概念设计的目的是分析数据问内存语义关联,在此基础上建立一个数据的抽象模型。数据库逻辑设计的主要工作是将E-R图转换为指定的RDBMS中的关系模型。

(61)字符(char)型数据在微机内存中的存储形式是________。

A)反码 B)补码

C)EBCDIC码 D)ASCII码

(61)D

知识点:字符数据在内存中的存储形式

评析:将一个字符常量放到一个字符变量中,实际上并不是把该字符本身放到内存单元中去,而是将该字符的ASCII码值放到存储单元中。

71)算法的空间复杂度是指_______。

A)算法程序的长度 B)算法程序中的指令条数

C)算法程序所占的存储空间 D)算法执行过程中所需要的存储空间

(71)D

知识点:算法的复杂度

评析:一个算法的空间复杂度,一般是指执行这个算法所需的内存空间。

一个算法所占用的存储空间包括算法程序所占的空间、输入的初始数据所占的存储空间以及算法执行过程中所需要的额外空间。

(72)下列关于栈的叙述中正确的是_______。

A)在栈中只能插入数据 B)在栈中只能删除数据

C)栈是先进先出的线性表 D)栈是先进后出的线性表

(72)D

知识点:栈的输入输出 *** 作

评析:栈是限定在一端进行插入与删除的线性表。

栈是按照“先进后出”的或“后进先出”的原则组织数据的,因此,栈也被称为“先进后出”表或“后进先出”表。

(73)在深度为5的满二叉树中,叶子结点的个数为_______。

A)32 B)31 C)16 D)15

(73)C

知识点:二叉树的概念

评析:所谓满二叉树是指除最后一层外,每层上的所有结点都有两个子结点。也就是说,在满二又树中,每一层上的结点数都达到最大值,即在满二叉树的第K层上有2k-1个结点,且深度为m的满二叉树有2m个结点。

在满二叉树中,最后一层的结点个数就是叶子结点的个数,本题中深度为5,故叶子结点数为25-1=24==16。

(74)对建立良好的程序设计风格,下面描述正确的是_______。

A)程序应简单、清晰、可读性好 B)符号名的命名要符合语法

C)充分考虑程序的执行效率 D)程序的注释可有可无

(74)A

知识点:程序设计风格

评析:要形成良好的程序设计风格,主要应注重和考虑下述一些因素:符号名的命名应具有一定的实际含义,以便于对程序功能的理解;正确的注释能够帮助读者理解程序;程序编写应优先考虑清晰性,除非对效率有特殊要求,程序编写要做到清晰第一,效率第二。

(75)下面对对象概念描述错误的是_______。

A)任何对象都必须有继承性 B)对象是属性和方法的封装体

C)对象问的通讯靠消息传递 D) *** 作是对象的动态性属性

(75)A

知识点:对象的概念

评析:对象是由数据和容许的 *** 作组成的封装体,与客观实体有直接的对应关系。对象之间通过传递消息互相联系,以模拟现实世界中不同事物彼此之间的联系。

(76)下面不属于软件工程的3个要素的是_______。

A)工具 B)过程 C)方法 D)环境

(76)D

知识点:软件:[程的要素

评析:软件工程包括3个要素,即方法、工具和过程。

(77)程序流程图(PFD)中的箭头代表的是_______。

A)数据流 B)控制流 C)调用关系 D)组成关系

(77)B

知识点:软件设计工具

评析:程序流程图(PFD)是一种传统的、应用广泛的软件过程设计表示工具,通常也称为程序框图,其箭头代表的是控制流。

(78)在数据管理技术的发展过程中,经历了人工管理阶段、文件系统阶段和数据库系统阶段。其中数据独立性最高的阶段是_______。

A)数据库系统 B)文件系统 C)人工管理 D)数据项管理

(78)A

知识点:数据管理技术的发展

评析:在数据管理技术的发展过程中,经历了人工管理阶段、文件系统阶段和数据库系统阶段。其中数据独立性最高的阶段是数据库系统。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7750828.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-09
下一篇 2023-04-09

发表评论

登录后才能评论

评论列表(0条)

保存