C语言入门经典第4版课后练习参考答案.docx

上传人:b****8 文档编号:23826373 上传时间:2023-05-21 格式:DOCX 页数:81 大小:33.47KB
下载 相关 举报
C语言入门经典第4版课后练习参考答案.docx_第1页
第1页 / 共81页
C语言入门经典第4版课后练习参考答案.docx_第2页
第2页 / 共81页
C语言入门经典第4版课后练习参考答案.docx_第3页
第3页 / 共81页
C语言入门经典第4版课后练习参考答案.docx_第4页
第4页 / 共81页
C语言入门经典第4版课后练习参考答案.docx_第5页
第5页 / 共81页
点击查看更多>>
下载资源
资源描述

C语言入门经典第4版课后练习参考答案.docx

《C语言入门经典第4版课后练习参考答案.docx》由会员分享,可在线阅读,更多相关《C语言入门经典第4版课后练习参考答案.docx(81页珍藏版)》请在冰豆网上搜索。

C语言入门经典第4版课后练习参考答案.docx

C语言入门经典第4版课后练习参考答案

《C语言入门经典(第4版)》课后练习参考答案

第1章C语言编程

练习1.1编写一个程序,用两个printf()语句分别输出自己的名字和地址。

#include

intmain(void){

printf("姓名:

小狮子\n");

printf("地址:

月亮之上\n");

return0;

}

练习1.2将上一个练习修改成所有的输出只用一个printf()语句。

#include

intmain(void){

printf("姓名:

小狮子\n地址:

月亮之上\n");

return0;

}

练习1.3编写一个程序,输出下列文本,格式如下所示:

"It'sfreezinginhere,"hesaidcoldly.

#include

intmain(void){

printf("\"It'sfreezinginhere,\"hesaidcoldly.\n");

return0;

}

第2章编程初步

习题2.1编写一个程序,提示用户用英寸输入一个距离,然后将该距离值输出为码、英尺和英寸的形式。

#include

/*

*1码=3英尺=36英寸

*/

intmain()

{

floatlen_inch=0.0f;//英寸

floatlen_foot=0.0f;//英尺

floatlen_yard=0.0f;//码

//提示用户用英寸输入一个距离

printf("请用英寸输入一个距离:

");

scanf("%f",&len_inch);

//计算英尺

len_foot=len_inch/12;

//计算码

len_yard=len_foot/3;

//输出计算后的结果

printf("%.2f英寸=%.2f英尺=%.2f码\n",len_inch,len_foot,len_yard);

return0;

}

习题2.2编写一个程序,提示用户用英尺和英寸输入一个房间的长和宽,然后计算并输出面积,单位是平方码,精度为小数点后两位数。

#include

intmain()

{

floatlength_in_foot=0.0f;//房间的宽度单位英尺

floatwidth_in_inch=0.0f;//房间的宽度单位英寸

floatarea_in_yard=0.0f;//房间的面积单位平方码

//提示用户输入房间的长度

printf("请输入房间的长度(单位:

foot):

");

scanf("%f",&length_in_foot);

//提示用户输入房间的宽度

printf("请输入房间的宽度(单位:

inch):

");

scanf("%f",&width_in_inch);

//计算房间的面积1码=3英尺=36英寸

area_in_yard=(length_in_foot/3)*(width_in_inch/36);

//输出房间的面积

printf("房间的面积是:

%.2f平方码。

\n",area_in_yard);

return0;

}

习题2.3一个产品有两个版本:

其一是标准版,价格是$3.5,其二是豪华版,价格是$5.5。

编写一个程序,使用学到的知识提示用户输入产品的版本和数量,然后根据输入的产品数量,计算并输出价格。

#include

intmain()

{

floatprice_of_normal=3.5;//普通版单价

floatprice_of_deluxe=5.5f;//豪华版单价

intnumber_of_normal=0;//普通版的数量

intnumber_of_deluxe=0;//豪华版的数量

floattotal_price=0.0f;//总价

//提示用户输入产品的数量

printf("请输入普通版的数量:

");

scanf("%d",&number_of_normal);

printf("请输入豪华版的数量:

");

scanf("%d",&number_of_deluxe);

//计算总价

total_price=number_of_normal*price_of_normal+number_of_deluxe+price_of_deluxe;

//输出总价

printf("总价为:

$%.2f\n",total_price);

return0;

}

习题2.4编写一个程序,提示用户从键盘输入一个星期的薪水(以美元为单位)和工作时数,它们均为浮点数,然后计算并输出每个小时的平均时薪,输出格式如下所示:

Youraveragehourlypayrateis7dollarsand54cents.

#include

intmain()

{

floatsalary=0.0f;//一个星期的薪水(以美元为单位)

floathours=0.0f;//工作时数

floatsalary_per_hour=0.0f;//每个小时的平均时薪

//提示用户输入一个星期的薪水

printf("请输入一个星期的薪水(以美元为单位):

");

scanf("%f",&salary);

//提示用户输入工作时数

printf("请输入工作时数:

");

scanf("%f",&hours);

//计算每个小时的平均时薪

salary_per_hour=salary/hours;

//输出结果

printf("Youraveragehourlypayrateis%ddollarsand%dcents.\n",(int)salary_per_hour,(int)(salary_per_hour*100)%100);

return0;

}

第3章条件判断

习题3.1编写一个程序,首先给用户以下两种选择:

(1)将温度从摄氏度转换为华氏度。

(2)将温度从华氏度转换为摄氏度。

接着,程序提示用户输入温度值,并输出转换后的数值。

从摄氏度转换为华氏度,可以乘以1.8再加上32。

从华氏度转换为摄氏度,可以先减去32后,再乘以5,除以9。

#include

#include

intmain()

{

floattemperature=0.0f;//用户输入的温度值

charch='\0';

floatresult=0.0f;//转换后的温度值

//提示用户都有哪种转换方式

printf("程序提供如下两种转换方式:

\n");

printf("A.将温度从摄氏度转换为华氏度\nB.将温度从华氏度转换为摄氏度\n");

//提示用户输入选择的转换方式

printf("请选择转换方式(AorB):

");

scanf("%c",&ch);

if(tolower(ch)=='a')

{

printf("请输入温度值:

");

scanf("%f",&temperature);

result=temperature*1.8+32;

printf("%.2f摄氏度=%.2f华氏度\n",temperature,result);

}

elseif(tolower(ch)=='b')

{

printf("请输入温度值:

");

scanf("%f",&temperature);

result=(temperature-32)*5/9;

printf("%.2f华氏度=%.2f摄氏度\n",temperature,result);

}

else

{

printf("选择错误\n");

}

return0;

}

习题3.2编写一个程序,提示用户输入3个整数值,分别代表月、日、年。

例如用户输入了12、31、2003,程序就以31stDecember2003的格式输出该日期。

必须在日期值的后面加上th、nd、st和rd。

例如1st、2nd、3rd、4th、11th、12th、13th、14th、21st、22nd、23rd、24th。

#include

intmain()

{

intyear=0;

intmonth=0;

intday=0;

//定义一个代表12个月份的枚举类型,枚举器值从1开始

enumMonth{January=1,February,March,April,May,June,July,August,September,October,November,December};

//提示用户输入月、日、年

printf("请输入月、日、年:

");

scanf("%d%d%d",&month,&day,&year);

//输出日

if(day<1||day>31)

{

printf("输入日期有误");

}

elseif(day%10==1&&day!

=11)

{

printf("%dst",day);

}

elseif(day%10==2&&day!

=12)

{

printf("%dnd",day);

}

elseif(day%10==3&&day!

=13)

{

printf("%drd",day);

}

else

{

printf("%dth",day);

}

//输出月

switch(month)

{

caseJanuary:

printf("January");

break;

caseFebruary:

printf("February");

break;

caseMarch:

printf("March");

break;

caseApril:

printf("April");

break;

caseMay:

printf("May");

break;

caseJune:

printf("June");

break;

caseJuly:

printf("July");

break;

caseAugust:

printf("August");

break;

caseSeptember:

printf("September");

break;

caseOctober:

printf("October");

break;

caseNovember:

printf("November");

break;

caseDecember:

printf("December");

break;

default:

printf("输入月份有误");

break;

}

//输出年

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

return0;

}

习题3.3编写一个程序,根据从键盘输入的一个数值,计算总价(单价是$5),数值超过30的折扣是10%,数值超过50的折扣是15%。

#include

intmain()

{

floatunit_price=5.0f;//商品单价

floatdiscount=0.0f;//商品折扣

intnumber=0;//商品数量

//提示用户输入商品数量

printf("请输入商品数量:

");

scanf("%d",&number);

//计算折扣

if(number<=30)

{

discount=0.0f;

}

elseif(number<=50)

{

discount=0.1f;

}

else

{

discount=0.15f;

}

//输出总价

printf("商品的总价为:

%.2f\n",number*unit_price*(1-discount));

return0;

}

习题3.4修改本章最后的计算器例子,让用户选择输入y或Y,以执行另一个计算,输入n或N就结束程序。

(注意:

这需要实用goto语句,下一章将介绍一个更好的方法。

#include

intmain()

{

doublenumber1=0.0;

doublenumber2=0.0;

charoperation=0;

charchoice=0;

begin:

printf("Enterthecaculation\n");

scanf("%lf%c%lf",&number1,&operation,&number2);

switch(operation)

{

case'+':

printf("=%lf\n",number1+number2);

break;

case'-':

printf("=%lf\n",number1-number2);

break;

case'*':

printf("=%lf\n",number1*number2);

break;

case'/':

if(number2==0)

printf("\n\n\aDivisionbyzeroerror!

\n");

else

printf("=%lf\n",number1/number2);

break;

case'%':

if((long)number1==0)

printf("\n\n\aDivisionbyzeroerror!

\n");

else

printf("=%ld\n",(long)number1%(long)number2);

break;

default:

printf("\n\n\aIllegaloperation!

\n");

break;

}

printf("Doyouwanttocontinue?

(yorn):

");

scanf("%c",&choice);//注意:

%c前面的空格不能去掉

if(choice=='y'||choice=='Y')

gotobegin;

return0;

}

第4章循环

习题4.1编写一个程序,生成一个乘法表,其大小由用户输入来决定。

例如,如果表的大小是4,该表就有4行4列。

行和列标记为1~4.表中的每一个单元格都包含行列之积,因此第三行第4列的单元格包含12。

#include

intmain()

{

intnum_row=0;

intnum_col=0;

printf("请输入行数和列数:

");

scanf("%d%d",&num_row,&num_col);

printf("");

for(inti=1;i<=num_col;i++)

{

printf("%3d",i);

}

printf("\n");

for(inti=1;i<=num_row;i++)

{

printf("%-4d",i);

for(intj=1;j<=num_col;j++)

{

printf("%3d",i*j);

}

printf("\n");

}

return0;

}

习题4.2编写一个程序,为0~127之间的字符码输出可打印的字符。

输出每个字符码和它的符号,这两个字符占一行。

列要对齐(提示:

可以使用在ctype.h中声明的isgraph()函数,确定哪个字符是可以打印的)。

#include

#include

intmain()

{

for(inti=0;i<=127;i++)

{

if(isgraph(i))

{

printf("%d%c\n",i,i);

}

}

return0;

}

习题4.3扩展上一题,给每个空白字符输出对应的名称,例如newline,space,tab等。

//本题略

习题4.4使用嵌套循环输出一个用星号绘制的盒子,与程序4.2类似,但是它的宽和高由用户输入。

#include

intmain()

{

intheight=0;

intwidth=0;

printf("请输入盒子的宽和高:

");

scanf("%d%d",&width,&height);

for(inti=1;i<=height;i++)

{

for(intj=1;j<=width;j++)

{

if(i==1||i==height)

{

printf("*");

}

else

{

if(j==1||j==width)

{

printf("*");

}

else

{

printf("");

}

}

}

printf("\n");

}

return0;

}

习题4.5修改程序4.7的猜谜游戏,在玩家猜错数字后,可以用一个选项让玩家继续玩下去,且想玩多久就玩多久。

#include

#include

#include

#include

intmain()

{

intchosen=0;

intguess=0;

intlimit=20;

charanother_game='Y';

srand(time(NULL));

chosen=1+rand()%limit;

printf("\nThisisaguessinggame."

"\nIhavechosenanumberbetween1and20whichyoumustguess.\n");

do

{

printf("\nEnteraguess:

");

scanf("%d",&guess);

if(guess==chosen)

{

printf("\nYouguessedit!

\n");

return0;

}

if(guess<1||guess>20)

{

printf("\nIsaidbetween1and20.\n");

}

else

{

printf("\nSorry.%diswrong.\n",guess);

}

printf("\nDoyouwanttoplayagain(y/n)?

");

scanf("%c",&another_game);

}while(toupper(another_game)=='Y');

return0;

}

第5章数组

习题5.1编写一个程序,从键盘上读入5个double类型的值,将它们存储到一个数组中。

计算每个值的倒数(值x的倒数是1.0/x),将结果存储到另一个数组中。

输出这些倒数,并计算和输出倒数的总和。

#include

intmain()

{

doubleoriginal[5]={0.0};

doubleresult[5]={0.0};

doublesum=0.0;

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

{

printf("%d->",i+1);

scanf("%lf",&original[i]);

}

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

{

result[i]=1.0/original[i];

}

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

{

printf("result[%d]=%lf\n",i,result[i]);

sum+=result[i];

}

printf("sum=%lf\n",sum);

return0;

}

习题5.2定义一个数组data,它包含100个double类型的元素。

编写一个循环,将以下的数值序列存储到数组的对应元素中:

1/(2*3*4)1/(4*5*6)1/(6*7*8)...upto1/(200*201*202)

编写另一个循环,计算:

data[0]-data[1]+data[2]-data[3]+...-data[99]

将这个结果乘以4.0,加3.0,输出最后的结果。

#include

intmain()

{

doubledata[100]={0.0};

doublesum=0.0;

doubleresult=0.0;

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

{

data[i-1]=1.0/((2*i)*(2*i+1)*(2*i+2));

}

for(inti=0;i<100;i++)

{

sum+=(i%2?

-1:

1)*data[i];

}

result=sum*4.0+3.0;

printf("计算结果为:

%lf\n",result);

return0;

}

习题5.3编写一个程序,从键盘上读入5个值,将它们存储到一个float类型的数组amounts中。

创建两个包含5个long元素的数组dollars和cents。

将amounts数组元素的整数部分存储到dollars的对应元素中,amounts数组元素的小数部分存储到cents中,只保存两位

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

当前位置:首页 > 外语学习 > 英语考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1