从问题到程序--裘宗燕--课后习题部分答案
- 格式:doc
- 大小:119.50 KB
- 文档页数:12
抽象代数基础丘维声答案【篇一:index】t>------关于模n剩余类环的子环和理想的一般规律[文章摘要]通过对模n剩余类的一点思考,总结出模n剩余类环的子环和理想的规律:所有理想为主理想,可以由n的所有因子作为生成元生成,且这些主理想的个数为n的欧拉数。
使我们得以迅速求解其子环和理想。
[关键字]模n剩余类环循环群子环主理想[正文]模n剩余类是近世代数里研究比较透彻的一种代数结构。
一,定义:在一个集合a里,固定n(n可以是任何形式),规定a元间的一个关系r,arb,当而且只当n|a-b的时候这里,符号n|a-b表示n能整除a-b。
这显然是一个等价关系。
这个等价关系普通叫做模n的同余关系,并且用a?b(n)来表示(读成a同余b模n)。
这个等价关系决定了a的一个分类。
这样得来的类叫做模n的剩余类。
二,我们规定a的一个代数运算,叫做加法,并用普通表示加法的符号来表示。
我们用[a]来表示a所在的剩余类。
规定:[a]+[b]=[a+b];[0]+[a]=[a];[-a]+[a]=[0];根据群的定义我们知道,对于这个加法来说,a作成一个群。
叫做模n剩余类加群。
这样得到的剩余类加群是循环群,并且[1]是其生成元,[0]是其单位元。
三,我们再规定a的另一个代数运算,叫做乘法,并且规定:[a][b]=[ab];根据环的定义我们知道,对于加法和乘法来说,a作成一个环。
叫做模n剩余类环。
四,关于理想的定义:环a的一个非空子集a叫做一个理想子环,简称为理想,假如:(i) a,b?a?a-b?a;(ii)a?a,b?a?ba,ab?a;所以如果一个模n剩余类环a的子环a要作为一个理想,需要满足: (i) [a],[b]?a?[a-b]?a;(ii)[a]?a,[b]?a?[ba],[ab]?a;由以上四点可得到对一个模n剩余类环,求其所有子环和理想的一个方法。
思路:第一,模n剩余类环对加法构成加群,根据群的定义,找出所有子群;第三,对所有子群,根据环的定义,对乘法封闭,从所有子群里找出所有环;第四,对所有子环,根据理想的定义,找出所有理想。
第一章 程序设计和C语言在开始学习程序设计时,初学者首先遇到的问题可能是:“什么是程序”?“什么是程序设计语言”?本章首先讨论这方面的问题,以期帮助读者在比较直观的基础上建立起对程序、程序设计、程序设计语言的基本认识。
而后将简单介绍本书中讨论程序设计问题时所用的一种程序设计语言——C语言,并通过一个简单实例介绍C语言程序的一些基本情况和有关概念。
最后介绍了程序设计中必然要遇到的一些问题。
1.1 程序和程序语言程序一词也来自生活,通常指完成某些事务的一种既定方式和过程。
从表述方面看,可以将程序看着对一系列动作的执行过程的描述。
日常生活中也可以找到许多“程序”实例。
例如,一个学生早上起床后的行为可以描述为:1,起床;2,刷牙;3,洗脸;4,吃饭;5,早自习;这是一个直线形程序,是最简单形式的程序。
描述这种程序的就是给出一个包含其中各个基本步骤的序列。
如果按顺序实施这些步骤,其整体效果就完成了该项事务。
现在考虑另一个复杂些的过程:到图书馆借教学参考书。
这一常见过程可以描述为:1,进入图书馆;2,查书目;3,填写索书单;4,交图书馆工作人员取书;5,如果该书已经借出,读者可以有两种选择:5.1,回到第2步(进一步查找其他参考书的书目);5.2,放弃借书,离开图书馆;6,(工作人员找到了要借的书)办理借书手续;7,离开图书馆。
这个程序比前一个复杂得多。
可以看到,这一程序不是一个平铺直叙的动作序列,其中步骤更多,还出现了分情况处理和可能出现的重复性动作。
如果仔细探究这个实例,我们还可以可以看到,这一程序还可以进一步细化。
例如可以找出许多上面描述中未处理的情况,例如:若查找图书目录时没有找到所需书目;填写好索书单后已经到了下班时间;借书时发现自己没有带借书证;工作人员查到该读者的借书册数已经达到限额,或发现该读者有逾期未还的图书,因此拒绝借出等等。
由这些现实生活中的例子,可以初步看到程序的一些直观特征。
现实生活中有许多程序性活动,当我们身处其中时,通常需要按部就班地一步步完成一系列动作。
第六章 数据对象的顺序组合:数组程序的工作都与数据有关,如输入数据、输出数据、存储数据、对数据进行各种计算和修改等。
客观世界中需要处理的数据千姿百态,为能处理所关注事物的有关特征和性质,就需要在程序里表示它们。
为此,程序语言需要提供一套手段,使人能在写程序时方便地处理与数据表示有关的各种问题,这就是语言的数据机制。
需要由程序处理的数据可能很简单,也可能很复杂,数据之间可能有丰富多采的各种关系。
为了反映这些情况,语言的数据机制必须足够丰富。
这里也有简洁性与方便性的问题,有关数据机制不能无限制地庞大,使语言过分臃肿,难以使用;也不应过于低级,以至要描述一点东西都非常烦琐。
后一情况正是机器语言和汇编语言的一个弱点。
经过几十年的研究和实践,高级语言领域在这方面已经形成了一套公认的有效方式,数据机制基本框架通常包括下面几个互相联系的方面:1. 把语言要处理的数据对象划分为一些类型,每个类型是一个数据值的集合。
例如C语言里的int类型就是该类型能表示的所有整数值的集合。
2. 提供一组基本数据类型,确定其书写方式(文字量),提供一组基本操作(运算),支持基本数据对象的表示和使用。
例如C语言的int、double等。
3. 提供一组由简单数据类型或数据对象构造更复杂数据类型或数据对象的手段。
反复使用这些手段可以构造出任意复杂的数据结构,以满足复杂数据处理的需要。
这里提到的数据结构是计算机科学中的一个重要概念,也是一门后续计算机课程的名称。
C语言采用了通行的数据机制。
它提供了一组基本数据类型,其数据构造机制是下面几章的基本内容,包括本章将要介绍的数组,后面章节要介绍的指针、结构、联合等。
利用它们可以把多个(基本或非基本的)数据对象组合起来,作为整体在程序里使用。
这样组合而成的数据对象称作复合数据对象,由所有“同类”复合对象形成的类型称为复合数据类型。
一个复合数据对象的组成部分称为它的成分、成员或元素。
程序中可以建立存放复合类型数据的变量,这使复合数据对象也能命名。
第9章习题参考答案1. 新建图形窗口,设置其标题为“对数函数的图像”,在该窗口中绘制对数函数ln f x =在010x <<的图像参考答案:>> figure,title('对数函数的图像'),plot(0:0.2:10, log(0:0.2:10))2. 编写程序,实现功能为:创建图形窗口,并且设置其默认背景为黄色,默认线宽为4 个像素,在该窗口中绘制椭圆 22221x y a b+=的图像,其中的a 和b 任选 参考答案:figure('Color','y');set(gca,'DefaultLineLineWidth',4);a = 4;b = 3;x = linspace(-a,a,100);y1 = sqrt((1-x.^2/(a^2))*b^2);y2 = -sqrt((1-x.^2/(a^2))*b^2);plot(x,y1);hold on ;plot(x,y2);3. 编写 MATLAB 程序,绘制下面的函数:()()cos 2sin 2t x t t y t ππ⎧⎛⎫= ⎪⎪⎪⎝⎭⎨⎛⎫⎪= ⎪⎪⎝⎭⎩,其中22t -≤≤该程序在绘制图形之后等待用户的鼠标输入,每单击其中一条曲线,就随机修改该曲线的颜色,包括红色、绿色、蓝色、黑色和黄色。
参考答案:t = -2:0.1:2;x = cos(t/pi);y = 2*sin(t/(2*pi));figure,plot(t,x);hold on ; plot(t,y);%if waitforbuttonpresswhile (1)if waitforbuttonpress==0get(gcf,'CurrentObject');c = ceil((rand) * 5);switch ccase 1set(get(gcf,'CurrentObject'),'Color', 'r');case 2set(get(gcf,'CurrentObject'),'Color', 'g');case 3set(get(gcf,'CurrentObject'),'Color', 'b');case 4set(get(gcf,'CurrentObject'),'Color', 'k');case 5set(get(gcf,'CurrentObject'),'Color', 'y');endendend。
第8章习题参考答案1. 编写程序,该程序在同一窗口中绘制函数在 []0,2π之间的正弦曲线和余弦曲线,步长为 /10π,线宽为 4 个象素,正弦曲线设置为蓝色实线,余弦曲线颜色设置为红色虚线,两条曲线交点处,用红色星号标记。
参考答案:>> x=0:pi/10:2*pi;>> sinx = sin(x);>> cosx = cos(x);>> figure,plot(x,sinx,'LineWidth',4)>> hold on,plot(x,cosx,'r:','LineWidth',4)>> hold on,plot(x(find(cosx==sinx)),cosx(find(cosx==sinx)),'r*','LineWidth',4)2. 绘制下列图像(1)sin y x x =,010x π<<(2)三维曲线:226621z x xy y x y =++++-,1010x -<<,1010y -<< (3)双曲抛物面:22164x y z =-,1616x -<<,44y -<< 参考答案:(1)>> x = 0:pi/10:10*pi;>> plot(x,sin(x))(2)>> [X,Y] = meshgrid(-10::10);>> Z = X.^2 + 6*X*Y + Y.^2 + 6*X + 2*Y -1;>> plot3(X,Y,Z)(3)>> [X,Y] = meshgrid(-16::16,-4::4);>> Z = X.^2/16 - Y.^2/4;>> plot3(X,Y,Z)3. 绘制下列图像(1)绘制电脑磁盘使用情况的饼状图(2)生成 100 个从 0 到 10 之间的随机整数,绘制其直方图(3)生成 10个从 0 到 10 之间的随机整数,绘制其阶跃图参考答案:(1) 利用 pie 函数(2)>> hist(round(rand(100,1)*10))(3)>> X = round(rand(10,1)*10);>> stairs(X)4. 分别通过界面交互方式和函数方式在第 1 题生成的图形中添加注释,至少应包括:标题,文本注释,图例。
1. 创建符号表达式()sin f x x x =+。
参考答案:>> f = sym('sin(x)+x');2. 计算习题 1 中表达式在/6x π=处的值,并将结果设置为以下 5 种精度:小数点之后 1 位、2 位、5 位、10位和20位有效数字。
参考答案:>> digits(1)>> vpa(subs(f,x,pi/6))ans =1.>> digits(2)>> vpa(subs(f,x,pi/6))ans =1.0>> digits(5)>> vpa(subs(f,x,pi/6))ans =1.0236>> digits(10)>> vpa(subs(f,x,pi/6))ans =1.0235987763.设x 为符号变量,()421f x x x =++,()32458g x x x x =+++,试进行如下运算:(1)()()f x g x +(2)()()f x g x ⨯(3)求()g x 的反函数(4)求g 以()f x 为自变量的复合函数参考答案:>> f = sym('x^4 + x^2 + 1');>> g = sym('x^3 + 4*x^2 + 5*x + 8');(1)>> f+gans =x^4+5*x^2+9+x^3+5*x(2)>> f*gans =(x^4+x^2+1)*(x^3+4*x^2+5*x+8)(3)>> finverse(g)Warning: finverse(x^3 + 4*x^2 + 5*x + 8) is not unique.>> In sym.finverse at 43ans =1/6*(-656+108*x+12*(2988-984*x+81*x^2)^(1/2))^(1/3)+2/3/(-656+108*x+12*(2988-984*x+81*x^2)^(1/2))^(1/3)-4/3(4)>> syms x>> compose(g,f,x)ans =(x^4+x^2+1)^3+4*(x^4+x^2+1)^2+5*x^4+5*x^2+134.合并同类项(1)22325325x x x x -++--(3)2222322521x xy y xy x xy y -+--+-+(对x 和y )参考答案:(1)>> f = sym('3*x - 2*x^2 + 5 + 3*x^2 - 2*x -5');>> collect(f)ans =x+x^2(2)>> f = sym('2*x^2 - 3*x*y + y^2 - 2*x*y - 2*x^2 + 5*x*y - 2*y + 1'); >> collect(f)ans =y^2-2*y+15.因式分解(1)将 7798666 进行因数分解,分解为素数乘积的形式(2)8-2m +512(3)23223a (x-y)-4b (y-x)参考答案:(1)>> factor(sym('779866'))ans =(2)*(149)*(2617)(2)>> factor(sym('-2*m^8 + 512'))ans =-2*(m-2)*(m+2)*(m^2+4)*(m^4+16)(3)>> factor(sym('3*a^2*(x-y)^3 - 4*b^2*(y-x)^2')) ans =(x-y)^2*(3*a^2*x-4*b^2-3*a^2*y)6.绘制下列函数的图像(1)()2sin f x x x =+,[]0,2π (2)()3221f x x x =++,[]2,2- 参考答案:(1)>> f = sym('sin(x) + x^2');>> ezplot(f,[0,2*pi]);(2)>> f = sym('x^3 + 2*x^2 + 1');>> ezplot(f,[-2 2]);7.计算下列各式(1)0tan sin lim 1cos 2x x x x→-- (2)322sin y x x x =-+,求y '(3)()ln y xy x y =+,求/f x ∂∂,/f y ∂∂,2/f x y ∂∂∂ (4)ln(1)y t dx =+⎰,270ln(1)y t dx =+⎰参考答案:(1) >> limit(sym('(tan(x) - sin(x))/(1-cos(2*x))')) ans =(2)>> y = sym('x^3 - 2*x^2 + sin(x)');>> diff(y)ans =3*x^2-4*x+cos(x)(3)>> f = x*y*log(x+y);>> fx = diff(f,x)fx =y*log(x+y)+x*y/(x+y)>> fy = diff(f,y)fy =x*log(x+y)+x*y/(x+y)>> f2xy = diff(fx,y)f2xy =log(x+y)+y/(x+y)+x/(x+y)-x*y/(x+y)^2(4)>> syms t>> y = log(1+t);>> int(y)ans =log(1+t)*(1+t)-t-1>> int(y,0,27)ans =56*log(2)+28*log(7)-278.计算下列各式(1)13nn n∞=⎛⎫ ⎪⎝⎭∑(2)12sin3 nnn π∞=∑(3)sin x在 0 附近的Taylor 展开参考答案:(1)>> symsum(sym('(3/n)^n'),1,inf)ans =sum((3/n)^n,n = 1 .. Inf)(2)>> symsum(sym('2^n*sin(pi/(3^n))'),1,inf) ans =3^(1/2)(3)>> taylor(sym('sin(x)'))ans =x-1/6*x^3+1/120*x^59.求解线性方程组231321x y x y +=⎧⎨+=-⎩参考答案:>> [x,y] = solve(sym('2*x+3*y=1'),sym('3*x+2*y=-1')) x =-1y =110.对符号表达式22x y z xe --=,进行如下变换(1)关于x 的傅立叶变换(2)关于y 的拉普拉斯变换(3)分别关于x 和y 的 Z 变换参考答案:(1)>> syms x y>> z = x*exp(-(x^2+y^2));>> syms u v>> fourier(z,x,u)ans =-1/2*i*pi^(1/2)*u*exp(-y^2-1/4*u^2)(2)>> laplace(z,y,v)ans =1/2*x*exp(-x^2)*pi^(1/2)*exp(1/4*v^2)*erfc(1/2*v)(3)>> ztrans(z,x,u)ans =-u*diff(ztrans(exp(-x^2-y^2),x,u),u)>> ztrans(z,y,v)ans =x*ztrans(exp(-x^2-y^2),y,v)11.绘制函数()()()221exp 2f x x y π=-+在33x -<<,33y -<<上的表面图 参考答案:>> syms x y>> z = 1/(2*pi)*exp(-(x^2+y^2)); >> ezsurf(x,y,z,[-3,3,-3,3]);。
第九章结构和其他数据机制第六和第七章分别介绍了数组和指针机制,本章将介绍C语言的其他数据定义与描述机制,包括结构(struct)、联合(union)、枚举(enum)等。
写处理复杂数据的程序往往需要定义复杂的数据类型和结构,这时常常需要使用这些机制。
在计算机领域后续的“数据结构”等课程中也要大量使用这些机制。
本章将对这些数据机制的概念、意义和用途,以及使用它们的基本技术做一些介绍,举一些程序实例。
后续课程中将会有更多应用这些机制的实例,读者也能在各种较深入的计算机书籍材料中看到大量的有关例子。
9.1 结构(struct)客观世界里需要用计算机处理的数据千变万化,它们常常不是互相独立的,而是集合成组,若干数据元素形成一个逻辑整体,元素间存在着紧密的联系。
这些情况使人不得不考虑复杂数据的处理问题。
当逻辑数据体的各部分具有共同性质时,可以用数组作为组合手段(元素“类型”相同)。
但情况未必如此,也存在许多组合体,其中各数据成分的类型并不统一,公民身份证的数据就是一个典型例子。
一个身份证的数据成分包括姓名、性别、民族、出生日期、住址、身份证号码、发证日期、有效期限和发证单位,还有一张照片等等。
显然,这样一组信息应看作一个逻辑整体,因为它们共同描述了一个居民的情况。
但是,这些信息中有字符串,有数值,可能还有图像信息(照片)等,因此不适合用数组表示。
这类情况在实际应用中非常普遍,这就要求程序语言提供相应的数据描述机制。
针对这类情况,许多高级语言提供了另一种数据机制,专门用于把多个类型可能不同的数据对象集合起来。
C语言将这种机制称为结构(structure)。
结构是由若干(可不同类型的)数据项组合而成的复合数据对象,这些数据项称为结构的成分或成员。
一个(或一类)结构中的每个成员都给定了一个名字,通过成员名实现对结构成员的访问。
9.1.1 结构说明与变量定义要说明一个结构,就需要描述它的各个成员的情况,包括每个成员的类型及名字。
CCCF专栏裘宗燕:计算机问题求解的三类方法问题和问题求解实际问题千变万化,我们考虑一种抽象的统一说法:一个问题就是从一个实例描述集合到解集合的映射,。
如果I是有穷集,T 就是有穷问题,否则 T是无穷问题。
或称为问题 T 的实例,o=T(i ) 称为问题T 对应i 的解。
计算机只会做一件事,就是自动执行程序。
用计算机解决一个问题,就要写出一个解决这个问题的有穷程序(无穷长的程序写不完)。
如果针对问题T 写了程序P,把T 的任意实例i作为P 的输入,P 的输出总是o=T(i ),我们就可以说P 解决了问题T。
针对问题写出程序是计算机领域最重要的工作。
要完成这种工作,首先要确定一种技术路线(一种方法),确定需要从问题中挖掘出什么信息(知识),怎样利用得到的知识构造程序。
参考几十年的研究和实践,本文总结出三类方法。
是否还有第四类?请读者考虑。
基于算法的系统(Algorithm-Based Systems, ABS)这个太显然。
但是,采用这一方法有什么前提条件?在什么情况下有可能得到解决问题的算法,并实际写出能解决问题的程序?我们可以提出下面一些条件。
首先,该问题必须是“可计算的”,这是理论要求。
证明问题是否可计算常常很不容易,但做出算法就是正面的证明。
其次,要做出算法,要求我们对问题及其求解完全理解,知道如何处理问题的任意实例,能处理求解过程中可能遇到的任何情况。
算法的优点是直接针对具体问题,是专用的,因此效率高。
另一方面,我们比较容易把算法转换为解决问题的程序,也比较容易判断一个程序是否确实解决了问题。
注意:任何有穷问题都有算法。
由于情况(输入)有穷,理论上总是可以对其做穷尽分析,分情况给出解。
求解程序如下(假定问题只有n 个实例,x 是输入):无穷问题也可能写出有穷算法,例如求最大公约数问题。
现在看看用计算机下围棋的问题。
围棋要求对弈双方在19×19的棋盘上交替落子,目标是占据最大的地盘。
第二章练习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 的整数。