当前位置:文档之家› 从问题到程序--习题答案

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

从问题到程序—高级语言程序设计第二章练习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 - 0XFA3)24 * 3 / 5 + 6 4)36 + - (5 - 23)/ 45)35 * 012 + 27 / 4 / 7 * (12 - 4)答:1)210 2)-75 3)20 4)40 5)3503. 在下面表达式的计算过程中,在什么地方将发生类型转换,各个转换是从什么类型转换到什么类型,表达式计算的结果是什么?1)3 * (2L + 4.5f) - 012 + 442)3 * (int)sqrt(34) - sin(6) * 5 + 0x2AF3)cos(2.5f + 4) - 6 *27L + 1526 - 2.4L答:1)53.5 2)703.397077 在此题中十六进制数会在计算中(编译时)自动转成十进制数3)1362.593574. 写程序计算第3 题中各个表达式的值。

答:#include<stdio.h>#include<math.h>int main(){printf("%f\n",3 * (2L + 4.5f) - 012 + 44);printf("%f\n",3 * (int)sqrt(34) - sin(6) * 5 + 0x2AF);printf("%f\n",cos(2.5f + 4) - 6 *27L + 1526 - 2.4);system("pause");return 0;}5. 写程序计算下面各个表达式的值:1) 2 341 257.+ 2)106524*133)23 5827 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.6813−(2.24−0.242 )2 9)1 23 4 5 + + / 10)ln(2π13+ e )6. 已知铁的比重是7.86,金的比重是19.3。

写几个简单程序,分别计算出直径100 毫米和150 毫米的铁球与金球的重量。

答:#include<stdio.h>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",f1(0.1/2),f2(0.1/2.0));printf("铁球的重量为: %f,金球的重量为: %f\n",f1(0.15/2),f2(0.15/2.0));system("pause");return 0;}7. 写程序计算5x2+ 2x + 6 的两个根,考虑用合适的方式输出。

(提示:对这个具体问题,可以先人工计算出判别式b2 −4ac 的值,以此作为已知信息,就可以写出程序了。

)答:#include <stdio.h>#include <math.h>void f(double a,double b,double c){double temp=b*b-4*a*c;if(temp>0)printf("方程的根为:%f,%f",(-b+sqrt(temp))/2/a,(-b-sqrt(temp))/2/a); else if(temp==0)printf("方程有两个相同的根为:%f",-b/2/a);elseprintf("方程无解!");}int main(){f(5,2,6); //可以测试不同的数据system("pause");return 0;}8. 在计算机上试验本章正文中的一些程序。

对它们做一些修改,观察程序加工和运行的情况,并对程序的行为做出解释。

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

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

第三章练习1. 下面的字符序列中哪些不是合法的变量名:-abc __aa for pp.288IBM/PC tihsWhile r24_s25 __a__b a"bc _345答:-abc for pp.288 to be IBM/PC ms-c #micro m%ust While a"bc2. 假设整型变量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=43. 假设整型变量a 的值是1,b 的值是2,c 的值是0,写出下面各个表达式的值。

1)a && !((b || c) && !a)2)!(a && b) || c ? a || b : a && b && c3)!(a + b < c) && b <= c * a – b答:1)1 2)0 3)04. 下面程序在执行时,哪些地方将发生类型转换?程序打印的值是什么?int f (int n, float m) {return (m + n) / 4;}int main () {float y = 3;printf("%d\n", f(y, y + 1));return 0;}答:{}}5. 在计算机上试验本章正文中的一些程序。

对它们做一些修改,观察程序加工和运行的情况,并对程序的行为做出解释。

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

答:#include<stdio.h>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;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",f1(0.15));printf("圆球的面积为%f\n",f2(0.15));printf("圆柱体的体积为%lf\n",f3(0.15,0.5));printf("圆柱体的面积为%lf\n",f4(0.15,0.5));system("pause");return 0;}7. 1)不用函数,直接写一个主程序计算并输出直径为100 毫米和150 毫米的金、银、铜、铁、锡球的重量(以kg 为单位输出)。

2)重新完成上面程序,先定义一个带有两个参数的函数,它能求出直径为x 的比重为y 的圆球的重量,而后在主程序里调用这个函数完成所需工作。

将这样得到的解与不用函数的解比较,比较它们的长度、容易出错的程度。

假设现在要求修改所用圆周率的精度,考虑用两种方式写程序的修改难度。

3)请写程序,求出边长为100 毫米和150 毫米的金、银、铜、铁、锡立方体的重量。

你可以利用前面的程序吗?是否很容易修改前面程序,完成这一计算?比较不用函数的解法和使用函数的解法在易修改和重复使用方面的效用。

8. 定义函数:double tmax(double, double, double),它返回三个参数中最大的一个。

写一个主函数试验各种参数情况。

答:#include<stdio.h>double tmax(double x,double y,double z){if(x>y)return x>z?x:z;elsereturn y>z?y:z;}int main(){printf("最大的一个为:%f",tmax(8,3,2));printf("最大的一个为:%f",tmax(8,13,2));printf("最大的一个为:%f",tmax(8,3,22));system("pause");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 <stdio.h>#include <math.h>void f(double a,double b,double c){double temp=b*b-4*a*c;if(a==0)printf("方程的根为:%f",-c/b);if(temp>0)printf("方程的根为:%f,%f",(-b+sqrt(temp))/2/a,(-b-sqrt(temp))/2/a);else if(temp==0)printf("方程有两个相同的根为:%f",-b/2/a);elseprintf("方程无解!");}int main(){f(5,2,6); //可以测试不同的数据system("pause");return 0;}13. 写一个简单程序,它输出从1 到10 的整数。

相关主题