廈門大學《C語言程序設(shè)計》第四版教材課后習題答案
本文是廈門大學《C語言程序設(shè)計》教材第四版課后習題的完整答案。完整版答案word文檔共38頁,10章內(nèi)容,由于篇幅限制本文只放出第1-4章內(nèi)容部分,需者自取~~~
關(guān)注我+給本篇文章點贊投幣收藏+截圖私信我,即可領(lǐng)取本文完整文檔~~~
祝大家學習進步,考試順利!?。?/strong>
???第一章 緒論
一、問答題
1、下面列出一些C語言編寫的基本規(guī)則,請指出正確規(guī)則。
(1)語句結(jié)束必須用分號
(2)程序中的標點符號(如分號“;”)必須用英文的標點符號
(3)注釋不影響程序的運行
(4)\n實現(xiàn)換行
(5)main函數(shù)必不可少
(6)若使用printf輸出結(jié)果,則必須在程序前添加#include<stdio.h>
答案:正確規(guī)則有(1)(2)(3)(4)(5)(6)
?
2、請指出下面程序的錯誤。
int mian()
{
??printf(“hello world”)
? return 0;
}
(1)printf(“hello world”)后面少分號。
(2)主函數(shù)名寫錯。
(3)多了return 0;
(4)main()后面少分號。
(5)少了#include<stdio.h>
答案:(1)(2)(5)
?
3、指出輸出結(jié)果為500+200=700的語句。
答案:(1)printf(“500+200=%d”,500+200);
???? (2)printf(“500+200=700”);
?
4、下面是關(guān)于C程序注釋的敘述,指出其中正確的。
答案:正確的有
(1)/*......*/可以注釋多行,也可以注釋一行
(4)//是行注釋,從//開始至行尾為注釋內(nèi)容
?
5、設(shè)有程序“1.cpp”,編譯后運行該程序,執(zhí)行的是()文件
答案:(3)1.exe
?
二、單選題
1、下面的敘述正確的是()
答案:A、一個C的源程序可以由一個或多個函數(shù)組成
2、C程序是從()開始執(zhí)行的
答案:A、主函數(shù)
3、下面程序的運行結(jié)果是()
答案:A、程序出錯,不能運行????? 原因是:/*沒有對應(yīng)的*/
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、? 為下面的每個數(shù)據(jù),選擇short,int,long,float,double中能存儲他們的最小類型
(1)?????? int(2)int(3)short(4)float
3、? 編程求1/20的值,下面哪個公式結(jié)果為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語言中的=并不是數(shù)學符號中的等號,指出下面錯誤的表達式
?? (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)上面兩個語句輸出的結(jié)果都相同,都是2,問:為什么結(jié)果相同?
++i是先讓i自加1后再參加其他運算,所以第一個輸出2,這時候i的值已經(jīng)變成2,所以下一個仍輸出2
(2)?????? 輸出結(jié)果相同嗎?
?? 不同,i++是先參加其他運算i再自加1,所以先輸出結(jié)果為1,這時執(zhí)行i++,i的值為2,第二個輸出結(jié)果為2
???? 8、將下列數(shù)學式子改成合法的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兩個值,輸出兩個數(shù)中較大值的平方根。a和b兩數(shù)的較大值為(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、編一程序,計算從鍵盤輸入的一個數(shù)的平方和立方。
?
#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、編寫程序,從鍵盤輸入四個實數(shù),輸出他們的平均值
#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函數(shù)可以向終端輸出一個D)字符或字符變量值
4、運行以下程序時,從鍵盤輸入25,13,10(回車),則輸出結(jié)果是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(chǎn)’+’A’);
則輸出結(jié)果是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,周長和面積取小數(shù)點后兩位數(shù)字。
#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.編寫程序,把整數(shù)華式溫度f轉(zhuǎn)換為浮點型的攝氏溫度c。轉(zhuǎn)換公式為c=5/9(f-32)計算并輸出攝氏溫度,輸出時要求有文字說明,取2位小數(shù)。
#include<stdio.h>
void main()
{
??????? float f,c;
??????? printf("輸入華氏溫度:");
??????? scanf("%f",&f);
??????? c=5.0/9*(f-32);
??????? printf("攝氏溫度是:%.2f",c);
}
3.編寫程序,從鍵盤輸入一個5位正整數(shù),然后分別求出它的個位數(shù)、十位數(shù)、百位數(shù)、千位數(shù)和萬位數(shù),并打印出這5位數(shù)字的和。
#include<stdio.h>
int main()
{
??????? int num;
??????? int n1,n2,n3,n4,n5;
??????? printf("請輸入一個5位整數(shù)\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.編寫一個程序,輸入一個小寫字母,輸出其對應(yīng)的大寫字母。
#include<stdio.h>
void main()
{
??????? char ch;
??????? printf("輸入一個小寫字母,將輸出一個相應(yīng)大寫字母:");
??????? ch=getchar();
??????? ch=ch-‘a(chǎn)’+’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’,想得到以下的輸出結(jié)果,請寫出程序(包括定義變量和輸出設(shè)計)。
#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、編寫程序,輸入銷售員的銷售額,計算并輸出其月工資,公司規(guī)定銷售員的工資由底薪加提成構(gòu)成,底薪為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、輸入一個整數(shù),判別它是奇數(shù)還是偶數(shù)。
#include<stdio.h>
void? main()
{
? int n;
? scanf("%d",&n);
? if(n%2==0) printf("%d是偶數(shù)\n",n);
? else printf("%d是奇數(shù)\n",n);
}
?
2、從鍵盤輸入一個字符,如果輸入的是大寫字母,則將它轉(zhuǎn)換成小寫字母后輸出,否則輸出原來輸入的字符。
#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位的整數(shù),確定這個數(shù)的位數(shù)并輸出。
#include<stdio.h>
void main()
{
?? int n,
?? sacnf(“%d”,&n);
?? if(n<0)
????? n=-n;? //保證n是正數(shù)
?? if(n<=9)
????? printf(“一位數(shù)”);
?? else if(n<=99)
????? printf(“二位數(shù)”);
else if(n<=999)
????? printf(“三位數(shù)”);
?? else if(n<=9999)
????? printf(“四位數(shù)”);
?? 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個整數(shù),從中找出最大值和最小值并輸出。要求盡可能少使用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、輸入三角形三條邊的長度,判斷是否構(gòu)成三角形,是否為直角三角形
#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("構(gòu)成三角形!\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("不能構(gòu)成三角形!\n");
}
?? 8、輸入員工的工作時間,計算并輸出該員工的工資。公司規(guī)定每個雇員40小時以內(nèi)的報酬為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、根據(jù)分段函數(shù)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月的天數(shù)*/
???? ??case 11: sum+=31; /*第10月的天數(shù)*/
???? ??case 10: sum+=30; /*第9月的天數(shù)*/
???? ??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");
}
?