c程序设计第五版谭浩强课后习题答案
第三章 最简单的C程序设计 ----顺序程序设计
1、假如我国国民生产总值的年增长率为7%, 计算10年后我国国民生产总值与现在相比增长多少百分比。计算公式为
p
=
(
1
+
r
)
n
p = (1+r)^n
p=(1+r)n ,其中r为年增长率,n为年数,p为与现在相比的倍数。
题目解析:
此题的关键主要是利用数学库math中pow函数进行计算,若不熟悉可以查阅帮助文档,查看pow函数的用法。
代码示例:
#include<stdio.h>
#include <math.h>
int main()
{C
float p
, r
, n
;
r
= 0.07;
n
= 10;
p
= pow(1 + r
, n
);
printf("p=%f\n", p
);
return 0;
}
运行结果:
2、存款利息的计算。有1000元,想存5年,可按以下5种办法存:
(1)一次存5年期
(2)先存2年期,到期后将本息再存3年期
(3)先存3年期,到期后将本息再存2年期
(4)存1年期,到期后将本息再存1年期,连续存5次
(5)存活期存款,活期利息每一季度结算一次
2017年银行存款利息如下:
1年期定期存款利息为1.5%;
2年期定期存款利息为2.1%;
3年期定期存款利息为2.75%;
5年期定期存款利息为3%;
活期存款利息为0.35%(活期存款每一-季度结算一-次利息)
如果r为年利率,n为存款年数,则计算本息的公式如下:
1年期本息和: P= 1000* (1+r);
n年期本息和: P= 1000* (1+n* r);
存n次1年期的本息和:
P
=
1000
∗
(
1
+
r
)
n
P=1000* (1+r)^n
P=1000∗(1+r)n;
活期存款本息和: P= 1000 *(1+
r
4
\frac{r}{4}
4r)
4
n
^{4n}
4n;
说明: 1000*(1+
r
4
\frac{r}{4}
4r)是一个季度的本息和。
题目解析:
理解题意很关键,其次就是利用数学库math中pow函数进行幂次方计算
代码示例:
#include<stdio.h>
#include <math.h>
int main()
{
float r5
, r3
, r2
, r1
, r0
, p
, p1
, p2
, p3
, p4
, p5
;
p
= 1000;
r5
= 0.0585;
r3
= 0.054;
r2
= 0.0468;
r1
= 0.0414;
r0
= 0.0072;
p1
= p
*((1 + r5
) * 5);
p2
= p
*(1 + 2 * r2
)*(1 + 3 * r3
);
p3
= p
*(1 + 3 * r3
)*(1 + 2 * r2
);
p4
= p
*pow(1 + r1
, 5);
p5
= p
*pow(1 + r0
/ 4, 4 * 5);
printf("p1=%f\n", p1
);
printf("p2=%f\n", p2
);
printf("p3=%f\n", p3
);
printf("p4=%f\n", p4
);
printf("p5=%f\n", p5
);
return 0;
}
运行结果:
3、购房从银行贷了一笔款d,准备每月还款额为p,月利率为r,计算多少月能还清。设d为300 000元,p为6000元,r为1%。对求得的月份取小数点后一位,对第2位按四舍五人处理。
提示:计算还清月数m的公式如下:
可以将公式改写为:
C的库函数中有求对数的函数log10,是求以10为底的对数,log§表示log p。
题目解析:
该题的关键主要是利用数学函数库中的log函数进行求解,然后月份要求按照小数点后一位进行四舍五入进行处理,只需要在输出时进行格式控制即可。
代码示例:
#include<stdio.h>
#include <math.h>
int main()
{
float d = 300000, p = 6000, r = 0.01, m;
m = log10(p / (p - d*r)) / log10(1 + r);
printf("m = %3.1f\n", m);
return 0;
}
运行结果:
4、分析下面的程序:
#include<stdio.h>
int main()
{
char c1
, c2
;
c1
= 97;
c2
= 98;
printf("c1=%c, c2=%c\n", c1
, c2
);
printf("c1=%d, c2=%d\n", c1
, c2
);
return 0;
}
(1)运行时会输出什么信息?为什么?
答:会输出 :
c1=97, c2=98
因为第一行十一字符形式输出,所以会吧97和98当作相依字符的ascii值,输出的时候按照字符显示,
第二行由于是以整形输出,所以输出对应整数值
(2)如果将程序第4,5行改为
c1 = 197;
c2 = 198;
运行时会输出什么信息?为什么?
答: 会输出:
因为c1和c2为char类型,其保存的数据范围为-128~127,当c1=197,c2=198时,已经超出了char类型所能够保存的数据范围,此时会进行相应的转换为c1=-59,c2=-58,只是第一行以字符输出时,c1=-59,c2=-58为不可显示字符,所以输出了?,而第二行以整数输出时就进行了相应的整数显示。
(3)如果将程序第3行改为
int c1, c2;
运行时会输出什么信息?为什么?
答: 会输出
因为c1和c2为int时,第二行以整形输出自然能够保存的下,但第一行以字符输出时,虽然数据int能够储存,但是在输出时需要准换为字符,转换后数据就超出了范围,此时c1=-59,c2=-58,两者都为不可显示字符,所以就显示了?。
5、用下面的scanf 函数输人数据,使a=3,b=7,x=8.5,y=71. 82,cl=‘A’,c2=‘a’。在键盘上应如何输入?
#include<stdio.h>
int main()
{
int a
, b
;
float x
, y
;
char c1
, c2
;
scanf("a=