从问题到程序--习题答案

从问题到程序—高级语言程序设计 第二章

练习

1. 指出下面的哪些字符序列不是合法的标识符: _abc x+- 3x1 Xf_1__4 Eoof___ x__x__2 ____ I am 答:不合法的标示符有: a$#24 非法符号# x+- 非法符号#

3x1 不是以英文字母开头 I am 非法符号“空格” bg--1 非法符号-

2. 手工计算下列表达式的值: 1)125 + 0125 2)0XAF - 0XFA

3)24 * 3 / 5 + 6 4)36 + - (5 - 23) / 4 5)35 * 012 + 27 / 4 / 7 * (12 - 4)

答:1)210 2)-75 3)20 4)40 5)350

3. 在下面表达式的计算过程中,在什么地方将发生类型转换,各个转换是从什么类型转换 到什么类型,表达式计算的结果是什么? 1)3 * (2L + 4.5f) - 012 + 44

2)3 * (int)sqrt(34) - sin(6) * 5 + 0x2AF 3)cos(2.5f + 4) - 6 *27L + 1526 - 2.4L

答:1)53.5 2)703.397077 在此题中十六进制数会在计算中(编译时)自动转成十进制数 3)1362.59357

4. 写程序计算第3 题中各个表达式的值。 答:

#include #include

int main(){

printf(\

printf(\ printf(\ system(\ return 0; }

5. 写程序计算下面各个表达式的值: 1) 2 34

1 257 .

+ 2) 1065

24*13

3) 23 582

7 96 3 67 .

. / . 4)

π2 +1 7)ln ln(10 1) 2π +

5)log5 2π ?1 6)e π +1 7)arctan(log ( )) 3 e + π 8) 3.68

13?(2.24?0.242 )2 9)3 4 5

1 2

+ + / 10)ln(2π 13+ e )

6. 已知铁的比重是7.86,金的比重是19.3。写几个简单程序,分别计算出直径100 毫米和 150 毫米的铁球与金球的重量。 答:

#include

double f1(double r){ double v,w;

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

double f2(double r){ double v,w;

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

int main(){

printf(\铁球的重量为: %f,金球的重量为: %f\\n\ printf(\铁球的重量为: %f,金球的重量为: %f\\n\ system(\ return 0; }

2

7. 写程序计算 5x + 2x + 6 的两个根,考虑用合适的方式输出。(提示:对这个具体问题,可以先人工计算

2

出判别式 b? 4ac 的值,以此作为已知信息,就可以写出程序

了。) 答:

#include #include

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

if(temp>0)

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

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

printf(\方程无解!\ }

int main(){

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

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

9. 在一个能正确工作工作的输出整数结果的程序里,将printf 的相应转换描述改为 %f 或者 %ld,看看会出现什么问题。在一个能正确工作工作的输出双精度结果的程序里, 1、 将printf 的相应转换描述改为 %d 或者 %ld,看看会出现什么问题。

第三章

练习

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) {

return (m+n) /4; }

int main () { float y=3; printf(\ f (y,y+1)); system(\ return 0; }

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

1:表达式y+1求值:

参与+的对象有int:1

和float:y,int转换为

float

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

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

#include double f1(double r){

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

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; 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;

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4