博文

钱能的《C++程序设计教程》序列三:chapter3(2005-07-21 12:40:00)

摘要:声明:为了大家的共同学习,特推出一些经典书籍的课后练习的答案,答案内容属原创,转载请注明出处,欢迎大家批评指正。 这一序列说明: 1.采用国内的教材:《C++程序设计教程》钱能主编 清华大学出版社 1999 2.在每一章练习解答前会有一个“疑难知识点”概述,这里只代表我自己的观点,也就是我自己现在还不能达到非常熟练,或者我初学时感觉比较模糊的知识。 3. 有一些答案来自网络,里面答案的选题编辑:张朝阳,责任编辑:徐培忠、林庆嘉。在这里表示感谢。 4.更多的学习和改进将在《The C++ programming language》答案序列中体现。 序列三:chapter3 一、疑难知识点: 1.理解左值和右值,特别是掌握哪些可以当左值。 2.求余%只能对整型进行操作,当然char和bool型也可以。 3.溢出    随着计算机的发展,特别是64位CPU和操作系统的推出,出现溢出的可能性越来越小。本书有一些这类的题目,主要是本书是基于16位机器,其实对于32位机器,基本上不会出现溢出现象了。    有关整型溢出:一个整型变量,用任何一个超过表示范围的整数初始化,得到的值为用该整数范围作模运算后得到的值。 4.真正弄懂前增量和后增量、前减量和后减量的区别,这个其实是很简单的(略),还有两个注意点: (1)、增量和减量其实是包含赋值操作的,故只能对左值才能施于++或-- (1)、后增量如i++是不能作为左值的,而前增量是可以的故++(i++)是错的,而++(++i)是正确的。对于减量也一样。 例子: #include<iostream> using namespace std; void main() {     int i=1;     //++(i++);//wrong     ++(++i);     (i=3)++;//赋值表达式是一个左值,故可以执行++ } 5.有关求值次序和副作用    因为本书是参考就标准,对于现在最新的标准,不知这些副作用是否消除,这个问题将在《The C++ prog......

阅读全文(3967) | 评论:0

钱能的《C++程序设计教程》序列二:chapter2第二部分(2005-07-21 12:21:00)

摘要:因为字数限制,进行分割。 二、课后练习答案:(不抄题目,没有课本的人可以到网上去下一本) 2.1. #include<iostream> using namespace std; void main() {     int a=42486;     cout<<"42486的8进制输出:"<<oct<<a         <<",42486的16进制输出:"<<hex<<a<<dec<<endl;//效果是持续的     unsigned b=42486;     cout<<signed int(b)<<endl;//result:42486,在我的机器上还没有超出范围 //本题原考虑在16位机器上实验,目前多为32位机器,故不会超过范围的 } 2.2. #include<iostream> #include<iomanip> using namespace std; void main() {     const double PI=3.1415926;//不提倡使用宏定义也就是#define来定义     double circle,radius;     cin>>radius;     circle=2*PI*radius;     cout<<"圆周率为:"<<setw(13)<<PI<<",The radius is:"<<setw(13)<<radius     ......

阅读全文(3823) | 评论:2

钱能的《C++程序设计教程》序列二:chapter2第三部分(2005-07-21 12:30:00)

摘要:二、课后练习答案:(不抄题目,没有课本的人可以到网上去下一本) 2.6. (1)自己运行一下就知道了 (2)这个程序的作用是已知三角形三边求三角形的面积 (3)转载 //#include <stdio.h> #include <iostream.h> #include <iomanip.h> #include <math.h> void main() {   float a,b,c,s,area;   //printf("please input 3 sides of one triangle:\n");   cout <<"please input 3 sides of one triangle:\n";   //scanf("%f,%f,%f",&a,&b,&c);  //输入时以逗号作为数据间隔   cin >>a >>b >>c;   //输入时以空格作为数据间隔   s=(a+b+c)/2;   area=sqrt(s*(s-a)*(s-b)*(s-c));   //printf("a=%7.2f,b=%7.2f,c=%7.2f\n",a,b,c);   cout <<setiosflags(ios::fixed) <<setprecision(2)        <<"a=" <<setw(7) <<a        <<",b=" <<setw(7) <<b        <&l......

阅读全文(3631) | 评论:0

钱能的《C++程序设计教程》序列二:chapter2第一部分(2005-07-21 12:14:00)

摘要:声明:为了大家的共同学习,特推出一些经典书籍的课后练习的答案,答案内容属原创,转载请注明出处,欢迎大家批评指正。 这一序列说明: 1.采用国内的教材:《C++程序设计教程》钱能主编 清华大学出版社 1999 2.在每一章练习解答前会有一个“疑难知识点”概述,这里只代表我自己的观点,也就是我自己现在还不能达到非常熟练,或者我初学时感觉比较模糊的知识。 3. 有一些答案来自网络,里面答案的选题编辑:张朝阳,责任编辑:徐培忠、林庆嘉。在这里表示感谢。 4.更多的学习和改进将在《The C++ programming language》答案序列中体现。 序列二:chapter2 一、疑难知识点 1.(p14,表2-2)float、double、long double的表示范围如何计算得到? 呵呵,以前好像有去计算出来,现在反而不知道怎么求解出来了,竟然可以表示这么大的数值。 2.实型常量采用指数形式表示的两点要求: (1).E或e前面必须要有数字 (2).E或e后面的指数必须要整数 3.反斜杠\可以和8进制或16进制数结合起来使用,以表示相应于该数的ACII码(P18) 4.有关枚举变量    不能把整数赋给枚举变量。但是枚举变量可以用整型的常量表达式进行初始化。 ,在《The C++ programming Language》(Special Editon)中文版,裘宗燕翻译第70页说,所赋的值不能超过该枚举的范围,这个范围是如何计算出来,我现在还不明白,谁懂的话可以介绍一下。但是在我机器上实验好像没有所谓的范围限制。 举例: #include<iostream> using namespace std; enum aa{a1=1,a2=2,a3=4,a4=8}; void main() {     //aa bb=3;//wrong 不能把整数赋给枚举变量     aa cc=(aa)3;//ok     aa cc1=aa(3);//ok,我就不理解为什么这样写还可以,其实这种不是很符合规则     aa dd=(aa)(a4/a2);//ok ,co......

阅读全文(3908) | 评论:0

钱能的《C++程序设计教程》序列一:chapter1(2005-07-21 12:13:00)

摘要:声明:为了大家的共同学习,特推出一些经典书籍的课后练习的答案,答案内容属原创,转载请注明出处,欢迎大家批评指正。 这一序列说明: 1.采用国内的教材:《C++程序设计教程》钱能主编 清华大学出版社 1999 2.在每一章练习解答前会有一个“疑难知识点”概述,这里只代表我自己的观点,也就是我自己现在还不能达到非常熟练,或者我初学时感觉比较模糊的知识。 3. 有一些答案来自网络,里面答案的选题编辑:张朝阳,责任编辑:徐培忠、林庆嘉。在这里表示感谢。 4.更多的学习和改进将在《The C++ programming language》答案序列中体现。 序列一:chapter1 疑难知识点: 1.有关本书的参考标准ANSI C++标准      本书讲述的内容是以ABNI C++为标准,其实那时(1999年)这个标准已经过时了,因为在1998年出现新的C++标准,也就是ISO C++标准,ANSi C++标准是美国国内的标准,而ISO C++标准(ISO/IEC)是国际标准,这个新的标准对C++进行了很大部分的统一,这在本书中有一些不是新的标准,我将把自己知道的尽量指出来,更多的内容可能要参考《The C++ programming language》答案序列。 2.本书里面的练习和例子都是基于16位机器的。 3.有关#include<iostream.h>    新的标准一般使用#include<iostream>的形式。当然,还需要配合命名空间,也就是: #include<iostream> using namespace std; 详细解释可以参考《The C++ programming Language》(Special Editon)中文版,裘宗燕翻译 第718页,B3.1节。 本章没有练习 ......

阅读全文(4104) | 评论:0

收集Eclipse插件网站(转,来自csdn)(2005-09-10 21:18:00)

摘要:收集Eclipse插件网站 摘自 CSDN(http://blog.csdn.net/blueball/archive/2004/07/26/51821.aspx) http://www.eclipse-workbench.com/jsp/ http://www.objectlearn.com/index.jsp http://www.crionics.com/products/opensource/eclipse/eclipse.jsp http://eclipse-plugins.2y.net/eclipse/index.jsp----------good ftp://202.113.29.2/pub/eclipse/plugins/   http://sourceforge.net/projects-------plugin project http://vssplugin.sourceforge.net/ http://www.azzurri.jp/en/software/clay/index.jsp---------database modeling plugin http://www.improve-technologies.com/alpha/struts-config-editor/--------plugin http://www.sysdeo.com/eclipse/tomcatPlugin.html--tomcat的plugin和jboss的plugin  Lombo  http://www.objectlearn.com/ TomcatPlugin  http://www.sysdeo.com/eclipse/tomcatPlugin.html EasyStruts  http://easystruts.sourceforge.net EclipseColorer plugin   http://colorer.sf.net  CVS-SSH2 Plug-in for Eclipse   http://www.jcraft.com/eclipse-cvsssh2/ JadClipse  http://jadclipse.sourceforge.net/ SWT Designer  http://www.swt-designer......

阅读全文(6456) | 评论:0

【经典推荐】每个JAVA初学者都应该搞懂的问题!(转帖)(2005-06-17 11:11:00)

摘要:对于这个系列里的问题,每个学Java的人都应该搞懂。当然,如果只是学Java玩玩就无所谓了。如果你认为自己已经超越初学者了,却不很懂这些问题,请将你自己重归初学者行列。内容均来自于CSDN的经典老贴。 问题一:我声明了什么! String s = "Hello world!"; 许多人都做过这样的事情,但是,我们到底声明了什么?回答通常是:一个String,内容是“Hello world!”。这样模糊的回答通常是概念不清的根源。如果要准确的回答,一半的人大概会回答错误。 这个语句声明的是一个指向对象的引用,名为“s”,可以指向类型为String的任何对象,目前指向"Hello world!"这个String类型的对象。这就是真正发生的事情。我们并没有声明一个String对象,我们只是声明了一个只能指向String对象的引用变量。所以,如果在刚才那句语句后面,如果再运行一句: String string = s; 我们是声明了另外一个只能指向String对象的引用,名为string,并没有第二个对象产生,string还是指向原来那个对象,也就是,和s指向同一个对象。 问题二:"=="和equals方法究竟有什么区别? ==操作符专门用来比较变量的值是否相等。比较好理解的一点是: int a=10; int b=10; 则a==b将是true。 但不好理解的地方是: String a=new String("foo"); String b=new String("foo"); 则a==b将返回false。 根据前一帖说过,对象变量其实是一个引用,它们的值是指向对象所在的内存地址,而不是对象本身。a和b都使用了new操作符,意味着将在内存中产生两个内容为"foo"的字符串,既然是“两个”,它们自然位于不同的内存地址。a和b的值其实是两个不同的内存地址的值,所以使用"=="操作符,结果会是false。诚然,a和b所指的对象,它们的内容都是"foo",应该是“相等”,但是==操作符并不涉及到对象内容的比较。 对象内容的比较,正是equals方法做的事。 看一下Object对象的equals方法是如何实现......

阅读全文(2658) | 评论:0

再论林杰杰的“JAVA真是强”(2005-06-17 10:27:00)

摘要:引自本blog,林杰杰的“JAVA真是强” 原文: class 人 {     private String 姓名;     private int 年龄;          public 人(String 名,int 岁)     {         姓名 = 名;         年龄 = 岁;     }          void 介绍()     {         System.out.println("我叫" + 姓名 + ",今年" + 年龄 + "岁。");     }          public static void main(String[] args)     {         人 林 = new 人("林杰杰",22);         林.介绍();     } } 居然这样写程序也能编译运行,JAVA真是……完美!! 再论: 1.为什么可以用中文来作为标志符?      其实标志符说简单的就是一字符串,同时JAVA默认unicode字符编码,而不是ASCL......

阅读全文(3692) | 评论:4

Together for Eclipse的使用(转载,来自J2ME开发网)(2005-06-15 15:22:00)

摘要:Together for Eclipse的使用        作者:CNN 文章来源:真情流露 点击数:2504 更新时间:2005-1-25             1、介绍                              UML对Java系统的设计是一个很有帮助的语言,该语言综合了面向对象的建模语言、方法以及过程,系统整体设计可以帮助我们认清整个软件的开发概貌和过程,相信学过软件工程的人都知道,优点就不多说了。                              Together就是Borland公司推出的一款将UML功能和IDE开发工具集成在一起的一套UML建模软件。在使用过程中可以同时看到UML图和Java源代码,修改UML图会使得源代码得到即时的同步修改,反过来,修改Java源代码也会使该代码同步地在UML图中反映出来。             2、版本             Together有专门的开发版本,就是standalone的,以前叫做TogetherControlCenter,这个在网上可以找到中文教程,这个版本是自身自带了Java的IDE和UML,现在演......

阅读全文(13554) | 评论:0

Effective Java读书笔记(转载,来自J2ME开发网)(2005-06-15 15:14:00)

摘要:终于翻开这本James都称赞的java经典书籍了,发现比一般的英语书籍要难懂一些。但是里面的Item都是非常实用的,是java程序员应该理解的。             Creating and Destroying Object             Item 1:考虑用静态工厂方法替代构造器             例如:public static Boolean valueOf(boolean b)                  {                       return (b?Boolean.TRUE:Boolean.FALSE);                  }             这样的好处是方法有名字,并且它可以复用对象,不像构造器每次调用都产生新的对象。其次它还可以返回返回类型的子类。不好的地方是如果没有public             or protected构造器的......

阅读全文(4431) | 评论:0