《C语言程序设计》课后习题参考答案.docx

上传人:b****6 文档编号:15649599 上传时间:2023-07-06 格式:DOCX 页数:39 大小:40.23KB
下载 相关 举报
《C语言程序设计》课后习题参考答案.docx_第1页
第1页 / 共39页
《C语言程序设计》课后习题参考答案.docx_第2页
第2页 / 共39页
《C语言程序设计》课后习题参考答案.docx_第3页
第3页 / 共39页
《C语言程序设计》课后习题参考答案.docx_第4页
第4页 / 共39页
《C语言程序设计》课后习题参考答案.docx_第5页
第5页 / 共39页
《C语言程序设计》课后习题参考答案.docx_第6页
第6页 / 共39页
《C语言程序设计》课后习题参考答案.docx_第7页
第7页 / 共39页
《C语言程序设计》课后习题参考答案.docx_第8页
第8页 / 共39页
《C语言程序设计》课后习题参考答案.docx_第9页
第9页 / 共39页
《C语言程序设计》课后习题参考答案.docx_第10页
第10页 / 共39页
《C语言程序设计》课后习题参考答案.docx_第11页
第11页 / 共39页
《C语言程序设计》课后习题参考答案.docx_第12页
第12页 / 共39页
《C语言程序设计》课后习题参考答案.docx_第13页
第13页 / 共39页
《C语言程序设计》课后习题参考答案.docx_第14页
第14页 / 共39页
《C语言程序设计》课后习题参考答案.docx_第15页
第15页 / 共39页
《C语言程序设计》课后习题参考答案.docx_第16页
第16页 / 共39页
《C语言程序设计》课后习题参考答案.docx_第17页
第17页 / 共39页
《C语言程序设计》课后习题参考答案.docx_第18页
第18页 / 共39页
《C语言程序设计》课后习题参考答案.docx_第19页
第19页 / 共39页
《C语言程序设计》课后习题参考答案.docx_第20页
第20页 / 共39页
亲,该文档总共39页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

《C语言程序设计》课后习题参考答案.docx

《《C语言程序设计》课后习题参考答案.docx》由会员分享,可在线阅读,更多相关《《C语言程序设计》课后习题参考答案.docx(39页珍藏版)》请在冰点文库上搜索。

《C语言程序设计》课后习题参考答案.docx

《C语言程序设计》课后习题参考答案

高等院校计算机基础教育规划教材《C++程序设计》课后习题参考答案

             ――武汉大学出版社

习题1参考答案

一、选择题

1. A2.D

二、填空题

1.BASIC、FORTRAN、AL_GOL60和COBOL

2.8

3. 关键字

4.编辑、编译、链接和运行

三、简答题

1.答:

(1)C语言具有结构化的控制语句。

C语言提供了结构化程序所必需的基本控制语句,实现了对逻辑流的有效控制。

(2)C语言具有丰富的数据结构类型。

C语言除提供整型、实型、字符型等基本数据类型外,还提供了用基本数据类型构造出的各种复杂的数据结构,如数组、结构、联合等。

C语言还提供了与地址密切相关的指针类型。

此外,用户还可以根据需要自定义数据类型。

(3)C语言具有丰富的运算符。

C语言提供了多达34种运算符,丰富的数据类型与丰富的运算符相结合,使C语言的表达力更具灵活性,同时也提高了执行效率。

(4)C语言简洁、紧凑,使用方便、灵活,程序书写自由,有9种控制语句。

(5)C语言既具有高级语言的功能,又具有低级语言的许多功能,通常被称为中级计算机语言。

它既是成功的系统描述语言,又是通用的程序设计语言。

(6)C语言与汇编语言相比,可移植性好。

(7)功能强大。

C语言具有低级语言的一些功能,所以,生成目标代码质量高,程序执行效率高。

现在许多系统软件都用C语言来描述,可以大大提高了编程效率。

2.答:

运行一个C语言程序,一般需要经过如下几个步骤:

①上机输入并编辑源程序;②编译源程序;③与库函数连接;④生成可执行目标程序;⑤运行目标程序。

3.答:

(1)操作系统的设计与实现。

C语言是一种应用非常广泛的结构化高级程序设计语言,既适合编写应用软件,又适合编写系统软件。

(2)工业控制。

由于C语言具有简洁、灵活、代码效率高、能进行位操作等优点,C语言大量应用在单板机、单片机上,以及嵌入式领域等。

(3)图形图像处理。

C语言在内存管理和进程控制方面有丰富的指令,而且它能提供快速运行的代码,因而C语言适合进行图形程序设计。

(4)教学领域。

C语言是理想的结构化程序设计语言,其描述能力强,应用十分广泛,因此广泛应用于教学领域。

许多计算机相关课程,如数据结构及算法大多是用C语言进行描述的。

习题2参考答案

一、选择题

1.A2.A 3.C

二、填空题

1.基本数据类型、构造数据类型、指针类型、空类型

2.反斜线“\”

3.枚举数据类型(EnumeratedDataType)

三、简答题

1.答:

在C语言中,数据类型可分为:

基本数据类型、构造数据类型、指针类型、空类型四大类。

基本类型是数据类型的基础,由它可以构造出其他复杂的数据类型。

基本类型的值不可以再分解为其他类型。

C语言的基本类型包括整型、实型(浮点型)、字符型和枚举型。

C语言的构造类型包括数组类型、结构类型和联合类型。

构造类型是根据已定义的一种或多种数据类型用构造的方法定义的。

也就是说,一个构造类型的值可以分解成若干个"成员"或"元素"。

每个"成员"或"元素"都是一个基本数据类型,或又是一个构造类型。

指针是一种特殊而又具重要作用的数据类型,其值表示某个量在内存中的地址。

虽然指针变量的取值类似于整型量,但这是两种完全不同类型的量,一个是变量的数值,一个是变量在内存中存放的地址。

在调用函数时,被调用函数通常应向调用函数返回一个函数值。

返回的函数值具有一定的数据类型,应在函数定义的函数说明中给以说明。

例如,在例1-1中给出的max函数定义中,函数头为"intmax(inta,intb,intc)",其中写在函数名max之前的类型说明符"int"表示该函数的返回值为整型量。

但是,也有一类函数,被调用后并不向调用函数返回函数值,这种函数可以定义为"空类型"(也称"无值型"),其类型说明符为void。

习题3参考答案

一、选择题

1.C2.B3.B4.D

二、填空题

1.4字节,1字节,4字节,8字节

2. 20

3. 6 60

4.2625

5.25622

三、简答题

1. C语言的基本类型包括整型、实型(浮点型)、字符型和枚举型。

2.定义符号常量和定义变量都要指定数据类型,系统将为其分配一定的存储空间。

其不同之处在于:

定义符号常量必须给出常量值,且以后不能修改本常量的值;而变量可以在定义变量的同时赋初值,以后可以修改该变量。

3. 常量就是在程序的运行过程中该量是不可修改的量;变量在程序的运行过程中允许对该变量的值进行修改。

四、程序题

1.程序运行结果为:

11

10

10

11

-10

-11

2.程序运行结果为:

3,12,4,4

习题4参考答案

一、选择题

1.C2.D 3.C4.C5.B6.D 7.B8.C9.B

二、填空题

1.!

&&||

2.01

3.1

4.4

5.-1

三、编程题

1.给出等级成绩′A′、′B′、′C′、′D′、′E′,假设,90分以上为′A′,80~89分为′B′,70~79分为′C′,60~69分为′D′,60分以下为′E′,输入一个等级成绩,问属于哪一个分数段。

参考代码如下:

main()

{

 intscore,m,n;

char grade;

 n=1;

while(n)

 {printf("Pleaseenter thescore:

");

    scanf("%d",&score);

 if((score>100)||(score<0))

ﻩprintf("\nWrong!

\n");

    elsen=0;

 }

if(score==100) m=9;

 else m=(score-score%10)/10;

switch(m)

{case0:

case1:

case2:

case3:

case4:

case5:

grade='E';break;

  case 6:

grade='D';break;

case7:

grade='C';break;

case8:

grade='B';break;

  case9:

grade='A';

}

printf("score=%d,grade=%c\n",score,grade);

}

2.编程序打印出以下图形:

1

121

12321

12345678987654321

参考代码如下:

#include

main()

{

inti,j;

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

{

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

 printf("%d",j);

 for(j=i-1;j>0;j--)

  printf("%d",j);

printf("\n");

 }

}

3.用1元5角钱人民币兑换5分、2分和1分的硬币(每一种都要有)共100枚,问共有几种兑换方案?

每种方案各换多少枚?

[提示:

设5分、2分和1分的硬币各换x,y,z枚,依题意有x+y+z=100,5x+2y+z=150,由于每一种硬币都要有,故5分硬币最多可换28枚,2分硬币最多可换73枚,1分硬币可换100-x-y枚,x,y,z只需满足第2个方程即可打印,对每一组满足条件的x,y,z值,用计数器计数即可得到兑换方案的数目。

]

参考代码如下:

main()

{

 intx,y,z,s=0;

for(x=1;x<=28;x++)

 for(y=1;y<=73;y++)

 for(z=1;z<=148;z++)

{

if(150==5*x+2*y+z)

 if(100==x+y+z)

ﻩ{

ﻩ printf("x=%dy=%dz=%d\n",x,y,z);

s++;

ﻩ}

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

}

4.编程:

从键盘输入正整数n,输出1+(1+2)+(1+2+3)+……+(1+2+3+…+n)。

参考代码如下:

#include <stdio.h>

main()

{

intn,i,s=0,t=0;

printf("Pleaseentern=");

scanf("%d",&n);

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

 t=t+i;

  s=s+t;

  }

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

}

习题5参考答案

一、选择题

1.B 2.A3.A 4.D 5.C6.B 7.A8.A

二、填空题

1.按行的顺序依次存放的

2.0

3.4

4.6

三、编程题

1.有一个多项式:

Pn(x)=a0xn+a1xn-1+…+an

它们的系数a0,a1,…,an存放在一个一维数组中。

编制程序,输入系数和x的值,计算并输出Pn(x)。

参考代码如下:

#defineN4

main()

{ inta[N+1],p,x,i;

 printf("Pleaseentera[%d],...,a[0]:

\n",N);

for(i=N;i>=0;i--)

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

printf("Pleaseenterx=\n");

   scanf("%d",&x);

 p=a[N];

for(i=N;i>0;i--)

 p=p*x+a[i-1];

}

 printf("Pn(x)=%d\n",p);

}

2.打印以下的杨辉三角形(要求打印6行)。

11

121

1331

14641

参考代码如下:

#include

#include

#defineN6

main()

 inti,j,max[N][N];

 for(i=0;i

 {

  for(j=0;j

 { max[i][0]=1;

   max[i][i]=1;

}

}

 for(i=2;i<N;i++)

{

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

  { max[i][j]=max[i-1][j-1]+max[i-1][j];}

 }

for(i=0;i

 {

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

{printf("%d",max[i][j]); }

  printf("\n");

}

}

3.编写程序,将一个数插入到有序的数列中去,插入后的数列仍然有序。

参考代码如下:

/*假设原有5个数*/

#include 

main()

{inta[6]={1,2,6,10,15};

 intn,i,j;

printf("Pleaseenterthe insertnumber:

");

scanf("%d",&n);

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

  if(n>a[i])

   continue;

   else

 break;

  for(j=4;j>=i;j--)

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

a[i]=n;

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

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

 printf("\n");

 }

4.编写程序,在有序的数列中查找某数,若该数在此数列中,则输出它所在的位置,否则输出nofound。

参考代码如下:

#include

main()

 {int a[10]={1,2,3,4,5,6,7,8,9,10};

intn,i,j,k=0;

   printf("Pleaseenterthenumber:

");

  scanf("%d",&n);

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

 { while(n==a[i])

ﻩ{k=1;j=i;break;}

   }

 if(k==1)

 printf("a[%d]\n",j);

  else

   printf("nofound.\n");

}

5.编程将下列矩阵中的元素向右移动一列,最右一列移至第一列。

1 4   6

 8 1012

[提示:

用二维数组v存放矩阵中元素,数组v可在定义时初始化;有两种方法实现这种移动:

一种方法是将移动后的元素放在另一个二维数组中;另一种方法是利用一个中间变量仍将移动后的元素放在数组v中。

]

#include

voidmain()

{inti,j;

inta[2][3]={1,4,6,8,10,12};

intb[2][3];

 b[0][0]=a[0][2];

 b[0][1]=a[0][0];

b[0][2]=a[0][1];

 b[1][0]=a[1][2];

 b[1][1]=a[1][0];

b[1][2]=a[1][1];

printf("a[2][3]:

");

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

{printf("\n");

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

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

}

printf("\nresult:

\n");

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

{printf("\n");

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

 printf("%5d",b[i][j]);

 }

printf("\n");

 getch();

}ﻺ

6.利用公式

计算m×n的矩阵A和m×n的矩阵B之和,已知

为矩阵A的元素,

为矩阵B的元素,

为矩阵C的元素,

[提示:

用二维数组元素做函数参数编程实现矩阵相加。

]

#include<stdio.h>

#include

#defineM 2

#define N 2

inta[M][N];

intb[M][N];

int c[M][N];

void matrix(inta[][M],int b[][N]);

main()

{

  inti,j,t;

 clrscr();

printf("Pleaseinputa[%d][%d]\n",M,N);

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

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

 {scanf("%d",&t);

 a[i][j]=t;

}

 printf("Pleaseinput b[%d][%d]\n",M,N);

 for(i=0;i

 for(j=0;j

 {scanf("%d",&t);

b[i][j]=t;

 }

matrix(b,c);

printf("a[%d][%d]",M,N);

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

{printf("\n");

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

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

  }

printf("\n");

printf("b[%d][%d]",M,N);

for(i=0;i

{printf("\n");

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

 printf("%5d",b[i][j]);

 }

 printf("\n");

 printf("c[%d][%d]=A+B:

",M,N);

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

  {printf("\n");

 for(j=0;j

  printf("%5d",c[i][j]);

}

}

voidmatrix(inta[][M],intb[][N])

{int i,j,k,t;

 for(i=0;i

 for(j=0;j

c[i][j]=a[i][j]+b[i][j];

}

习题6参考答案

一、选择题

1.A2.D3.D

二、填空题

1.指针取地址

2.3

3.9876

876

4.24

三、编程题

1.输入3个整数,按从大到小的次序输出。

参考代码如下:

main()

 inta[3],i,j,t;

 printf("Pleaseenterthreenumber:

\n")

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

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

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

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

if(a[j]<a[j+1])

{t=a[j];a[j]=a[j+1];a[j+1]=t;}

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

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

2.编写将n阶正方矩阵进行转置的函数。

在主函数中对一个4行4列的矩阵调用此函数。

参考代码如下:

intarray[4][4];

convert(intarray[4][4])

{

inti,j,t;

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

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

   {

  t=array[i][j];

   array[i][j]=array[j][i];

 array[j][i]=t;

  }

}

main()

{

inti,j;

printf("Inputarray:

\n");

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

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

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

printf("\noriginalarray:

\n");

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

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

   printf("%5d",array[i][j]);

  printf("\n");}

convert(array);

printf("convertarray:

\n");

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

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

  printf("%5d",array[i][j]);

 printf("\n");

 }

}

3.有三个整型变量i,j,k,请编写程序,设置三个指针变量p1,p2,p3,分别指向i,j,k。

然后通过指针变量使i,j,k三个变量的值顺序交换,即把i的原值赋给j,把j的原值赋给k,把k的原值赋给i。

要求输出i,j,k的原值和新值。

参考代码如下:

main()

{

 inti,j,k,temper;

 int*p1,*p2,*p3;

printf("Pleaseinput 3integers:

\n");

  scanf("%d%d%d",&i,&j,&k);

 p1=&i;p2=&j; p3=&k;

printf("beforechanged,the3numbersare:

\n");

printf("i=%d,j=%d,k=%d\n",i, j,k);

 temper=*p1;*p1=*p3;*p3=*p2;*p2=temper;

printf("afterchanged,the3 numbers are:

\n");

 printf("i=%d,j=%d,k=%d\n",i, j,k);

}

4.用指针编写程序,把输入的字符串按逆顺序输出。

参考代码如下:

#include

#include

char *s="1a2b3c4d";

voidmain()

{

  inti,j;

 chart;

for(i=0,j=strlen(s)-1;i<j;++i,--j)

{

 t=s[i];

 s[i]=s[j];

s[j]=t;

  }

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

}ﻺ

习题7参考答案

一、选择题

1.C2.B 3.C

二、填空题

1.float

2.自动(auto)

3.12

4.9.000000

二、编程题

1.编写函数,已知三角形的三个边长,求三角形的面积。

参考代码如下:

#include

#include

main()

{

  float a,b,c,s,area;

 printf("Pleaseenterthreesides:

\n");

 scanf("%f,%f,%f",&a,&b,&c);

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

 {

s=(a+b+c)/2;

area=sqrt(s*(s-a)*(s-b)*(s-c));

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

}

 elseprintf("It isnotatriangle!

\n");

}

2.编程计算p=k!

(m-k)!

的值。

参考代码如下:

#include<stdio.h>

voidmain()

{

 int k,m;

longp;

 printf("Pleaseenterk,m:

");

  scanf("%d,%d",&k,&m);

p=f(k)*f(m-k);

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

}

intf(int n)

if(n>1)

returnn*f(n-1);

else

 return1;

}

3.写一函数,使给定的一个二维数组(3×3)转置,即行列互换。

并在主函数中调用该函数时,使用数组作为实际参数。

参考代码如下:

#defineN 3

intarray[N][N];

convert(intarray[N][N])

{

inti,j,t;

for(i=0;i

for(j=i+1;j

  {

   t=array[i][j];

   array[i][j]=array[j][i];

  array[j][i]=t;

 }

}

main()

{

inti,j;

printf("Input array(3*3):

\n");

for(i=0;i

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

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

printf("\noriginalarray:

\n");

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

{for(j=0;j

   printf("%5d",array[i][j]);

  printf("\n");}

convert(array);

printf("convert array:

\n");

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

{ for(j=0;j

  

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

当前位置:首页 > 经管营销 > 经济市场

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

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