从问题到程序--裘宗燕--课后习题部分答案(第三章)

更新时间:2023-09-19 05:22:01 阅读量: 小学教育 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第三章

练习

1. 下面的字符序列中哪些不是合法的变量名: -abc __aa for pp.288 IBM/PC tihs

While r24_s25 __a__b a\ _345 答:

-abc for pp.288 to be IBM/PC ms-c #micro m%ust While a\

2. 假设整型变量a 的值是1,b 的值是2,c 的值是3,在这种情况下分别执行下 面各个语句,写出执行对应语句后整型变量u 的值。 1) u = a ? b : c;

2) u = (a = 2) ? b + a : c + a; 答:

1)u=2 2)u=4

3. 假设整型变量a 的值是1,b 的值是2,c 的值是0,写出下面各个表达式的值。 1) a && !((b || c) && !a)

2) !(a && b) || c ? a || b : a && b && c 3) !(a + b < c) && b <= c * a – b 答:

1)1 2)0 3)0

4. 下面程序在执行时,哪些地方将发生类型转换?程序打印的值是什么?

int f (int n, float m) { return (m + n) / 4; }

int main () { float y = 3;

printf(\return 0; }

答:

2:参数1传递:形式参数为int,实际参数 为float,float转换为int #include

int f(int n,float m)

4:除操作:参与/的对象有int型的4和float型有(m+n),int转换为float

{

return (m+n) /4; }

int main () { float y=3;

printf(\ f (y,y+1)); system(\ return 0; }

3:加操作:参与+的对象有int:n和float:m,int型的n转换为float

1:表达式y+1求值:

参与+的对象有int:1

和float:y,int转换为

float

5. 在计算机上试验本章正文中的一些程序。对它们做一些修改,观察程序加工和运行的情 况,并对程序的行为做出解释。 答案:略

6. 定义求圆球的体积、求圆球的表面积、求圆柱体的体积、求圆柱体的表面积的函数。 答:

#include double f1(double r){ double v;

v=4.0/3.0*r*r*r*3.1415926; return v; }

double f2(double r){ double s;

s=4*r*r*3.1415926; return s; }

double f3(double r,double h){ double v;

v=r*r*3.1415926*h;

5:函数结果传递:(m+n)/4 结果的类型为float型,而函数要求返回的值类型为int,因而发生float型转换为int型

return v; }

double f4(double r,double h){ double s;

s=2*3.1415926*r*h+2*3.1415926*r*r; return s; }

int main(){

printf(\圆球的体积为%f\\n\ printf(\圆球的面积为%f\\n\

printf(\圆柱体的体积为%lf\\n\ printf(\圆柱体的面积为%lf\\n\ system(\ return 0; }

7. 1)不用函数,直接写一个主程序计算并输出直径为100 毫米和150 毫米的金、银、铜、 铁、锡球的重量(以kg 为单位输出)。

2)重新完成上面程序,先定义一个带有两个参数的函数,它能求出直径为x 的比重为 y 的圆球的重量,而后在主程序里调用这个函数完成所需工作。将这样得到的解与不用 函数的解比较,比较它们的长度、容易出错的程度。假设现在要求修改所用圆周率的精 度,考虑用两种方式写程序的修改难度。

3)请写程序,求出边长为100 毫米和150 毫米的金、银、铜、铁、锡立方体的重量。 你可以利用前面的程序吗?是否很容易修改前面程序,完成这一计算?比较不用函数的 解法和使用函数的解法在易修改和重复使用方面的效用。

8. 定义函数:double tmax(double, double, double),它返回三个参数中最大的 一个。写一个主函数试验各种参数情况。 答:

#include

double tmax(double x,double y,double z){ if(x>y)

return x>z?x:z; else

return y>z?y:z; }

int main(){

printf(\最大的一个为:%f\ printf(\最大的一个为:%f\ printf(\最大的一个为:%f\ system(\ return 0; }

9. 写函数,它以两个电阻的值作为参数,求出并联的电阻值。

答:并联电阻值的计算公式为:R1*R2/(R1+R2)

10. 如果四边形四个边的长度分别为a、b、c、d ,一对对角之和为2α ,则其面积为:

S = (s ? a)(s ? b)(s ? c)(s ? d ) ? abcd cos2α

其中s =(a + b + c + d)/2。

定义一个函数计算任意四边形的面积。设有一个四边形,其

四条边边长分别为3、4、5、5,一对对角之和为145o ,写程序计算它的面积。

11. 修改已知四边长求四边形面积的函数,增加对各种参数错误情况的检查和处理(如返回 值0),用各种实例数据检查你的函数否检查出所有可能的错误情况。

12. 分析本章正文中给出的求二次方程根的函数,看它缺乏对哪些特殊情况的处理。补充这 些处理,在需要时输出适当的信息,使之成为一个更完整的函数。写一个主函数,用各 种特殊情况和一般情况测试所完成的函数。 答:

#include #include

void f(double a,double b,double c){ double temp=b*b-4*a*c;

if(a==0)printf(\方程的根为:%f\ if(temp>0)

printf(\方程的根为:%f,%f\ else if(temp==0)

printf(\方程有两个相同的根为:%f\ else

printf(\方程无解!\ }

int main(){

f(5,2,6); //可以测试不同的数据 system(\ return 0; }

13. 写一个简单程序,它输出从1 到10 的整数。 14. 写一个简单程序,它输出从10 到-10 的整数。

15. 写一个两个整型参数的简单函数,它输出从第一个整数到第二个整数为止的整数序列。 16. 用定义函数double power(double x, int n),它求出x 的n 次幂。用主函数试

验很大的n 值(例如令x 值为1),看看会出现什么情况;用大的x 和n 值,看看发生 浮点数计算溢出时会出现什么情况。

17. 写一个程序,它在0~90 度之间每隔5 度输出一行数据,打印一个表。每行中包括5 个 项目:角度数,以及它所对应的正弦、余弦、正切、余切函数值。 答:

#include #include

int main(){

double s=0*3.1415926/180; int i;

for(i=0;i<=90/5;i++){

printf(\ s+=5*3.1415926/180; }

system(\ return 0;

}18. 查看有关公式,写求解并输出一元三次方程的根的函数。 19. 写出求等差级数的和 ka k

n

=

Σ

1

的函数。两种循环结构给出函数定义,再利用等差级数求和公式给出函数定义。 答:

#include

double f1(int n,double a){ int i;

double sum=0;

for(i=1;i<=n;++i) sum+=i*a; return sum; }

double f2(int n,double a){ int i=1;

double sum=0; while(i<=n){ sum+=i*a; ++i;}

return sum; }

double f3(int n,double a){ return n*(a+n*a)/2; }

int main(){

printf(\ printf(\ printf(\

system(\ return 0; }

20. 请到查出银行一年定期存款的利率和5 年定期存款的利率。假定现在要存入100 元钱, 存款到期后立即将利息与本金一起再次存入。请写出程序,计算按每次存一年和按照每 次存5 年,总共存50 年后两种存款方式的得款总额。对两种情况都每隔5 年输出一次 当时的总金额。

21. 写一个程序打印出2 的顺序各次幂。让它打印出2 的前30 个幂,看看会出现什么情况。 用一个条件为真的循环打印2 的各次幂,看看会出现什么情况。

本文来源:https://www.bwwdw.com/article/lsrh.html

Top