《C语言程序设计》课后习题参考答案.docx
- 文档编号:27943499
- 上传时间:2023-07-06
- 格式:DOCX
- 页数:39
- 大小:40.23KB
《C语言程序设计》课后习题参考答案.docx
《《C语言程序设计》课后习题参考答案.docx》由会员分享,可在线阅读,更多相关《《C语言程序设计》课后习题参考答案.docx(39页珍藏版)》请在冰豆网上搜索。
《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行)。
1
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言程序设计 语言程序设计 课后 习题 参考答案
![提示](https://static.bdocx.com/images/bang_tan.gif)