从问题到程序--裘宗燕--课后习题部分答案
- 格式: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. 指出下面的哪些字符序列不是合法的标识符:_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 的整数。