厦门大学《C语言程序设计》第四版教材课后习题答案
本文是厦门大学《C语言程序设计》教材第四版课后习题的完整答案。完整版答案word文档共38页,10章内容,由于篇幅限制本文只放出第1-4章内容部分,需者自取~~~
关注我+给本篇文章点赞投币收藏+截图私信我,即可领取本文完整文档~~~
祝大家学习进步,考试顺利!!!
第一章 绪论
一、问答题
1、下面列出一些C语言编写的基本规则,请指出正确规则。
(1)语句结束必须用分号
(2)程序中的标点符号(如分号“;”)必须用英文的标点符号
(3)注释不影响程序的运行
(4)\n实现换行
(5)main函数必不可少
(6)若使用printf输出结果,则必须在程序前添加#include<stdio.h>
答案:正确规则有(1)(2)(3)(4)(5)(6)
2、请指出下面程序的错误。
int mian()
{
printf(“hello world”)
return 0;
}
(1)printf(“hello world”)后面少分号。
(2)主函数名写错。
(3)多了return 0;
(4)main()后面少分号。
(5)少了#include<stdio.h>
答案:(1)(2)(5)
3、指出输出结果为500+200=700的语句。
答案:(1)printf(“500+200=%d”,500+200);
(2)printf(“500+200=700”);
4、下面是关于C程序注释的叙述,指出其中正确的。
答案:正确的有
(1)/*......*/可以注释多行,也可以注释一行
(4)//是行注释,从//开始至行尾为注释内容
5、设有程序“1.cpp”,编译后运行该程序,执行的是()文件
答案:(3)1.exe
二、单选题
1、下面的叙述正确的是()
答案:A、一个C的源程序可以由一个或多个函数组成
2、C程序是从()开始执行的
答案:A、主函数
3、下面程序的运行结果是()
答案:A、程序出错,不能运行 原因是:/*没有对应的*/
4、以下正确的printf语句是()
答案:A、printf(“This is a C program.\n”);
三、编程题
1、编写一个程序,在屏幕上显示下列信息:
We study the C programming language.
We all like it.
#include <stdio.h>
void main()
{
printf("We study the C Programming language.\nWe all like it.\n");
/*或者printf("We study the C Programming language.\n”);
printf(“We all like it.\n"); */
}
2、编写一个程序,在屏幕中央显示你的姓名、学号和出生日期。
#include <stdio.h>
void main()
{
printf("姓名:郑杭杰\n学号:23020091152716\n出生日期:19870118\n");
}
3、编写一个程序,在屏幕上显示下列信息
This Program prints a formula:
72*88=6336
答案
#include <stdio.h>
void main()
{
printf("This Program prints a formula:\n”);
printf(“72*88=%d\n",72*88);
}
第二章
一、 问答题
1、 下面哪些是C语言的合法常量?
(1) 是(2)是(3)否(4)是(5)是(6)否(7)是(8)是
2、 为下面的每个数据,选择short,int,long,float,double中能存储他们的最小类型
(1) int(2)int(3)short(4)float
3、 编程求1/20的值,下面哪个公式结果为0?
(1)1/20
4、有int型变量a、b,求a与b的平均值,为得到精确值,可以使用下面哪些公式?
(2)(a+b)/2.0
(3)(a+b)/2.
(4)(float)(a+b)/2
5、在C语言中的=并不是数学符号中的等号,指出下面错误的表达式
(2)3=a
(3)x+1=6
6、下面两个语句都正确吗?请将不正确的改正
(1)int a=b=c=5 不正确,int a=5,b=5,c=5 ;
7、printf(“%d”,表达式);语句将输出表达式的值,(1)上面两个语句输出的结果都相同,都是2,问:为什么结果相同?
++i是先让i自加1后再参加其他运算,所以第一个输出2,这时候i的值已经变成2,所以下一个仍输出2
(2) 输出结果相同吗?
不同,i++是先参加其他运算i再自加1,所以先输出结果为1,这时执行i++,i的值为2,第二个输出结果为2
8、将下列数学式子改成合法的C语言表达式
(1)fabs((x+y)*(z+u)+2*c)
(2)3.14* r*r/(a+b)
(3)(In(x)+cos(y))/3
(4)4*x*x*x+2*exp(y)
(5)4*3.14*R*R
9、说出下列C语言表达式的值和类型
(1)-5,int
(2)6,int
(3)24.0,double
(4)100.5,double
(5)5,int
10、指出可以使整型变量i的值加1的语句
(1)i++ (2)++i (3)i=i+1 (4)i+=1
11、下面3组语句能完成变量a,b两个变量值的交换吗?
(1)可以 (2)可以 (3)不可以
二、单选题
1.D 2.C 3.C 4.B 5.C 6.A 7.A 8.A 9.A 10.A 11.A 12.B 13.D 14.A
三、编程题
1、编写程序,输出|-6|+16.3*5.4的值
#include<stdio.h>
#include<math.h>
int main()
{
printf("%f\n",abs(-6)+16.3*5.4);
return 0;
}
2、编一程序,输入a,b两个值,输出两个数中较大值的平方根。a和b两数的较大值为(a+b+abs(a-b))/2
#include<stdio.h>
#include<math.h>
int main()
{
int a,b,max;
float c;
scanf("%d%d",&a,&b);
max=(a+b+abs(a-b))/2;
c=sqrt(max);
printf("%f\n",c);
return 0;
}
3、编一程序,计算从键盘输入的一个数的平方和立方。
#include<stdio.h>
#include<math.h>
int main()
{
double a,b,c;
scanf("%lf",&a);
b=a*a;
c=a*a*a;
printf("%.2f\n",b);
printf("%.2f\n",c);
return 0;
}
4、编写程序,从键盘输入四个实数,输出他们的平均值
#include<stdio.h>
#include<math.h>
int main()
{
double a,b,c,d,avg;
scanf("%lf%lf%lf%lf",&a,&b,&c,&d);
avg=(a+b+c+d)/4;
printf("%.2f\n",avg);
return 0;
}
5.编写程序,从键盘输入两个字符分别存放在变量c1,c2中,要求交换c1和c2的值并输出
#include<stdio.h>
void main(){
char c1,c2,temp;
scanf(“%c,%c”,&c1,&c2);
temp=c1;
c1=c2;
c2=temp;
printf(“after:c1=%c,c2=%c\n”,c1,c2);
}
第三章
一、问答题
查找下列程序段的错误,并将其改正。
(1) float x,y;
scanf(“%f , %f”,x,y);
(2) double f=3.1415926;
printf ( “%d”,f);
(3) float x, y;
scanf (“%f%f\n”,x ,y);
(4) double x; long y;
scanf ( “%f%d”,&x,&y);
(1) 将scanf(“%f , %f”,x,y); 改为 scanf(“%f , %f”, &x, &y);
(2)将printf ( “%d”,f); 改为 printf ( “%f”,f);或printf ( “%lf”,f);都可以.
(3)将scanf (“%f%f\n”,x ,y); 改为scanf (“%f%f”,&x ,&y);
(4)将scanf ( “%f%d”,&x,&y);改为scanf ( “%lf%ld”,&x,&y);
二、选择题
1、A
2、A
3、putchar函数可以向终端输出一个D)字符或字符变量值
4、运行以下程序时,从键盘输入25,13,10(回车),则输出结果是A)a1+a2+a3=48
main() {
int a1,a2,a3;
scanf(“%d,%d,%d”,&a1,&a2,&a3);
printf(“a1+a2+a3=%d\n”,a1+a2+a3);
}
5、若有以下定义和语句
char c1=’b’,c2=’e’;
printf(“%d,%c\n”,c2-c1,c2-‘a’+’A’);
则输出结果是B) 3,E
6、下面的语句正确地描述了计算公式。C)y=(a*x*x*x)/(x-b)
7、有以下列程序,叙述正确的是B)程序输出小写字母m
void main ()
{ char a1=‘M’,a2=‘m’;
printf (“%c\n”,(a1,a2));
}
三、编程题
1、请编程序 输入圆的半径,计算并输出圆的周长和面积。常量PI的值取3.14159,周长和面积取小数点后两位数字。
#include<stdio.h>
#define PI 3.14159
void main()
{
float r,s,c;
printf("输入半径:");
scanf("%f",&r);
s=PI*r*r;
c=2.0*PI*r;
printf("圆的面积是:%.2f\n",s);
printf("圆的周长是:%.2f\n",c);
}
2.编写程序,把整数华式温度f转换为浮点型的摄氏温度c。转换公式为c=5/9(f-32)计算并输出摄氏温度,输出时要求有文字说明,取2位小数。
#include<stdio.h>
void main()
{
float f,c;
printf("输入华氏温度:");
scanf("%f",&f);
c=5.0/9*(f-32);
printf("摄氏温度是:%.2f",c);
}
3.编写程序,从键盘输入一个5位正整数,然后分别求出它的个位数、十位数、百位数、千位数和万位数,并打印出这5位数字的和。
#include<stdio.h>
int main()
{
int num;
int n1,n2,n3,n4,n5;
printf("请输入一个5位整数\n");
scanf("%d",&num);
n1=num/10000;
n2=num/1000%10;
n3=num/100%10;
n4=num/10%10;
n5=num%10;
printf("%d\n",n1+n2+n3+n4+n5);
return 0;
}
4.输入三角形的三边长,求三角形面积。请编程序。
#include<stdio.h>
#include<math.h>
main()
{
float a,b,c,s,area;
printf("输入三角形的三条边长:");
scanf("%f%f%f",&a,&b,&c);
if(a+b>c&&a+c>b&&b+c>a) {
s=1.0/2*(a+b+c);
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf("面积是:%f",area);
}
else
printf("该三角形不存在!");
}
5.编写一个程序,输入一个小写字母,输出其对应的大写字母。
#include<stdio.h>
void main()
{
char ch;
printf("输入一个小写字母,将输出一个相应大写字母:");
ch=getchar();
ch=ch-‘a’+’A’;
putchar(ch);
}
6、若a=3,b=4,c=5,x=1.2,y=2.4,z= -3.6,u=51274,n=128765,c1=’a’,c2=’b’,想得到以下的输出结果,请写出程序(包括定义变量和输出设计)。
#include<stdio.h>
int main()
{
int a = 3, b = 4, c = 5;
double x = 1.2, y = 2.4, z = -3.6;
int u = 51274, n = 128765;
char c1 = 'a', c2 = 'b';
printf("a=%d b=%d c=%d\n",a,b,c);
printf("x=%.6f y=%.6f z=%.6f\n",x,y,z);
printf("x+y=%.2f y+z=%.2f z+x=%.2f\n",x+y,y+z,z+x);
printf("u=%6d n=%6d\n",u,n);
printf("c1='%c' or %d(ASCII)\n",c1,c1);
printf("c2='%c' or %d(ASCII)\n", c2, c2);
return 0;
}
7、编写程序,社银行定期存款的年利率rate为3.25%,存款期为n年,存款本金为capital元,计算并输出n年后的本利之和deposit.
Interest(利息)=principal(本金)*rate(年利率)*n(年)
#include<stdio.h>
void main()
{
float r=0.0325,n,c,d;
printf("输入存款期n:");
scanf("%f",&n);
printf("输入本金c:");
scanf("%f",&c);
d=c*(r*n+1);
printf("%f",d);
}
8、编写程序,输入销售员的销售额,计算并输出其月工资,公司规定销售员的工资由底薪加提成构成,底薪为1000元,提成为当月总销售额的9%。
#include<stdio.h>
void main()
{
float r=1000.0,n,d;
printf("输入销售额n:");
scanf("%f",&n);
d=r+n*0.09;
printf("%f",d);
}
第四章
一、问答题
1、(1)1 (2)1 0 (3)1 (4)0 (5)1 3,4,5 (6)1 8,8,9 (7)1 2,1,1
2、(1)3,2,2 (2)1,2,3
3、t %f %f a=b
4、等价
二、单选题
1.D 2.C 3.C 4.A 5.A 6.C 7.A 8.D 9.D 10.D 11.A 12.B 13.C 14.C 15.C 16.B 17.C 18.B
三、编程题
1、输入一个整数,判别它是奇数还是偶数。
#include<stdio.h>
void main()
{
int n;
scanf("%d",&n);
if(n%2==0) printf("%d是偶数\n",n);
else printf("%d是奇数\n",n);
}
2、从键盘输入一个字符,如果输入的是大写字母,则将它转换成小写字母后输出,否则输出原来输入的字符。
#include<stdio.h>
void main()
{
char c;
scanf("%c",&c);
if(c>='A'&&c<='Z') printf("%c\n",c-‘A’+’a’);
else printf("%c\n",c);
}
3、输入一个不超过4位的整数,确定这个数的位数并输出。
#include<stdio.h>
void main()
{
int n,
sacnf(“%d”,&n);
if(n<0)
n=-n; //保证n是正数
if(n<=9)
printf(“一位数”);
else if(n<=99)
printf(“二位数”);
else if(n<=999)
printf(“三位数”);
else if(n<=9999)
printf(“四位数”);
else
printf(“输入错误”);
}
4、输入24小时制的时间,输出12小时制的格式。
#include <stdio.h>
void main()
{ int hour,minute;
scanf(“%d:%d”,&hour,&minute);
if( hour<12 )
printf(“%d:%d AM”, hour, minute);
else
printf(“%d:%d PM”,hour-12,minute);
}
5、输入两个日期,判断并输出哪个日期更早,要求日期格式为mm/dd/yy
#include <stdio.h>
void main()
{ int month1,day1,year1,month2,day2,year2;
printf(“Enter first date(mm/dd/yy):”);
scanf(“%d/%d/%d”,&month1,&day1,&year1);
printf(“Enter second date(mm/dd/yy):”);
scanf(“%d/%d/%d”,&month2,&day2,&year2);
if( year1==year2 && month1==month2 && day1==day2)
printf(“equal day”);
else if( year1<year2 || (year1==year2 && month1<month2)
|| (year1==year2 && month1==month2 && day1<day2 ) )
printf( “%d/%d/%d is earlier than %d/%d/%d\n”,
month1,day1,year1,month2,day2,year2);
else
printf( “%d/%d/%d is later than %d/%d/%d\n”,
month1,day1,year1,month2,day2,year2);
}
6、输入4个整数,从中找出最大值和最小值并输出。要求尽可能少使用IF语句
#include<stdio.h>
void main(){
int a,b,c,d,max1,max2,min1,min2;
scanf(“%d%d%d%d”,&a,&b,&c,&d);
if(a>b)
{max1=a; min1=b;}
else
{max1=b; min1=a;}
if(c>d)
{max2=c; min2=d;}
else
{max2=d; min2=c;}
printf(“max=%d\nmin=%d\n”,max1>max2?max1:max2,min1<min2?min1:min2);
}
7、输入三角形三条边的长度,判断是否构成三角形,是否为直角三角形
#include<stdio.h>
void main()
{ float a, b, c;
scanf("%f%f%f",&a, &b, &c);
if (a+b>c&&a+c>b&&b+c>a) {
printf("构成三角形!\n");
if (a*a+b*b==c*c||a*a+c*c==b*b||b*b+c*c==a*a)
printf("是直角三角形!\n");
else
printf("不是直角三角形!\n");
}
else
printf("不能构成三角形!\n");
}
8、输入员工的工作时间,计算并输出该员工的工资。公司规定每个雇员40小时以内的报酬为10.00美元/小时,超出40小时以外的按工资的1.5倍工资付酬。
#include<stdio.h>
void main()
{
float hour,salary;
scanf("%f",&hour);
if(hour<=40) salary=10*hour;
else salary=400+(hour-40)*10*1.5;
printf("该员工工资为%.2f\n",salary);
}
9、根据分段函数y=f(x)的定义,输入x,输出y的值
#include<stdio.h>
#include<math.h>
void main()
{
float x,y;
scanf("%f",&x);
if(x<=-1) y=2*x*x*x-1;
else if(x<=0) y=x*x;
else if(x<=1) y=sqrt(x);
else y=3*x+2;
printf("%.2f",y);
}
10、输入某年某月某日,计算这一天是该年的第几天
#include<stdio.h>
void main()
{ int year,month,day,sum;
scanf("%d%d%d",&year,&month,&day);
sum=day;
switch(month) {
case 12: sum+=30;/*第11月的天数*/
case 11: sum+=31; /*第10月的天数*/
case 10: sum+=30; /*第9月的天数*/
case 9 : sum+=31;
case 8: sum+=31;
case 7: sum+=30;
case 6: sum+=31;
case 5: sum+=30;
case 4: sum+=31;
case 3: if( year%400==0 || year%4==0 && year%100!=0 ) sum+=29;
else sum+=28;
case 2: sum+=31;
case 1: break;
default : printf(“月份输入有误!”);break;
}
printf("该日是该年的第%d天\n",sum);
}
11、判断体重属于何种类型
#include<stdio.h>
void main()
{
float weight,height,t;
scanf("%f%f",&weight,&height);
t=weight/(height*height);
if(t<18) printf("体重偏轻\n");
else if(t<25) printf("体重正常\n");
else if(t<27) printf("体重超重\n");
else printf("肥胖\n");
}