C primer plus 第五章课后编程练习答案笔记解释整理

编程练习

  1. 编写一个程序,把用分钟表示的时间转换成用小时和分钟表示的时间。使用#define或者const创建一个表示60的符号常量或者const常量。通过while循环让用户重复输入值,直到用户输入小于或等于0的值才停止循环。

题目分析:

程序需要实现的功能是将用户输入的以分钟表示的时间转换成以小时表示的时间。转换的基本算法是将用户输入数据除以60,所得结果的商即是程序需要显示的小时数,余数则是不足一小时的分钟数。对于程序功能的分析可以通过模拟用户输入的形式实现。例如,模拟用户输入100分钟后,程序应当将该数据转换成1小时40分钟。这时,就可以判断程序内应当分别使用整数的除和取模两种运算符进行计算。

       在分析程序的主要算法之后,程序设计中还需要注意按照题目要求,使用任意一种常量形式表示每小时的分钟数。应用while循环实现用户选择并控制程序的运行。

 2.编写一个程序,提示用户输入一个整数,然后打印从该数到比该数大10的所有整数(例如,用户输入5,则打印5~15的所有整数,包括5和15)。要求打印的各值之间用一个空格、制表格或者换行符分开。

编程分析:

题目要求程序打印一定范围内的整型数据。可以使用循环的方式打印指定范围的数据,程序首先通过scanf()函数读取用户输入,循环指定打印从输入数据开始的10个整数。代码如下。

3.编写一个程序,提示用户输入天数,然后将其转换为周数和天数。例如如果输入18,则转换为2周4天,一下面的格式显示结果。

18 days are 2 weeks,4 days

通过while循环让用户重复输入天数,当用户输入一个非正值时,循环结束。

编程分析:

题目要求程序循环读取用户输入的天数,计算周数和不足一周的天数。可以通过“/”除法运算符和“%”取余运算符进行计算。完整代码如下。

4.一个程序,提示用户输入一个身高(单位是cm),并分别以厘米和英寸为单位,显示该值,允许有小数部分。程序应该能让用户重复输入身高,直到用户输入一个非正值,其输入示例如下。

5.修改程序addemp.c(程序清单5.13),你可以认为addemup.c是计算20天里赚了多少钱的程序(假设第一天赚了¥1,第二天赚了¥2,第三天赚了¥3,以此类推)。修改程序,使其可以与用户交互,根据用户输入的数进行计算(即,用读入的变量替代20)。

编程分析:

程序清单5.13原来的功能是利用循环计算工资总和。题目要求通过用户输入的工作天数,计算对应的工资总和。计算方法还是使用循环的方式,但是循环的次数需要使用用户输入的天数进行循环入口判断。完整代码如下。

6.修改编程练习5的程序,使之能够计算整数的平方和(可以认为第一天赚1¥,第二天赚4¥,第三天赚9¥,以此类推,这看起来很不错),c没有平方函数,但是可以用n*n来表示n的平方。

编程分析:

在编程练习5的基础上,将天数对应的工资转换成平方,即以n*n的方式进行累计计算,程序其他部分保留原有代码。完整程序如下。

7.编写一个程序,提示用户输入一个double类型的数,并打印该数的立方值。自己设计一个函数,计算并打印立方值。main函数要把用户输入的值传递给该函数。

编程分析:

题目要求设计一个函数计算double类型数据的立方值。函数的参数是double类型的数据,返回值是double类型的立方值。在main()函数内提示用户输入数据并读取输入的double类型数据,调用函数计算其立方值。完整代码如下。

8.编写一个程序,显示求模运算的结果。把用户输入的第一个整数作为求模运算符的第二个运算对象,该数在运算过程中保持不变。用户输入的最后一个数是第一个运算对象。当用户输入一个非正值时程序结束。其输出示例如下。

编程分析:程序要求读取用户输入的数据并进行求模运算。当用户输入非正数时,退出循环块,因此循环的条件是用户输入的数据与0的比较关系运算,循环计算中需要保证第一个输入数据不变,只反复读取第二个运算对象。完整代码如下。

9.编写一个程序,要求用户输入一个华氏温度。程序应读取double类型的值作为温度值,并把该值作为参数传递给一个用户自定义函数Temperatures()。该函数计算摄氏温度和开氏温度,并以小数点后面两位数字的精度显示三种温度。要使用不同的温标来表示3个温度值。下面是华氏温度转换为摄氏温度的公式。

                          摄氏温度=5.0/9.0*(华氏温度-32)

       开氏温标常用于科学研究,0表示绝对零度,代表最低的温度。下面是摄氏温度转换为开氏温度的公式。

                     开氏温度=摄氏温度+273.16

Temperatures()函数中用const创建温度转换中使用的变量。在main()函数中使用一个循环让用户重复输入温度,当用户输入q或者其他非数字时,循环结束。scanf()函数返回读取数据的数量,所以如果读取数字则返回1,如果读取q则不返回1。可以使用“==”运算符将scanf()的返回值和1做比较,测试两值是否相等。

编程分析:

题目要求程序通过Temperatures()函数进行温度转换计算,计算公式为开氏温度=摄氏温度+273.16,函数的参数为化氏温度,函数内通过printf()函数打印转换结果。main()函数内通过循环读取用户的输入数据,调用函数计算并显示温度转换结果。While循环的入口判断条件是scanf()函数读取数据后的返回值,如果用户输入字符,返回值为0,则应当退出循环。完整代码如下。

注:void main() 

int a;
int b;
int c;
printf("
请输入三个整数:");
int x=scanf("%d%d%d",&a,&b,&c);
printf("%d/n%d/n",a,x);
}
1.scanf()
函数有返回值且为int型。
2.scanf()函数返回的值为:正确按指定格式输入变量的个数;也即能正确接收到值的变量个数。
从上边的例子中可以得到验证,这里用变量x接收scanf()函数的返回值,并输出显示出来。

当运行中输入三个整数:5 6 7x的值为3

如果输入5 6 d(即给c 赋值不正确)则x的值为2

如果输入5 t d(即给bc 赋值不正确)则x的值为1

scanf函数的第一个变量格式不正确时返回值为0,即,当scanf函数的第n个变量格式不正确时,返回值为n-1

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值