c语言程序设计第二版是什么垃圾

c语言程序设计第二版是什么垃圾,第1张

c语言程序设计第二版是什么垃圾

谭浩强《C语言程序设计(第二版)》的前50页中的错误分析

谭书也算是一本奇书了,据说已经发行了300多万册。这本书真的那么好吗?师长早有教诲,因此本人从来没有好好读过谭书。近日遇周围人盛赞谭书,非辩论不可。虽本人不愿应战,但也不得已将谭书找来翻翻。随便翻了一段,就发现错误百出,在此将其中最前面的一些整理出来,提出与国内广大

行家和新入道者讨论,望行家们提出批评,供新入道者参考。

书中程序的不规范性、不良的格式和低劣的编程都不在这里深究了。实在是太多,要深究、分析和改

正起来,必须写一本数倍于谭书的大作,本人实在没这个时间和精力。水平高的人有的是,欢迎写几

个续篇。欢迎转载到其他BBS,以期引起讨论。对本人所言的不实之处欢迎批评。

注:下面将作者尊称为“谭先生”。负的行号表示一页里倒数的行数。

--------------------------------------------------------------

先看目录,是不是有个地放有:

"淡函数………………………………",什么东西,这算是排版错误,不理会!

P1行1:…,它适于作为系统描述语言,…

这开宗明义的第一句话就说明谭先生对于计算机科

学的术语不甚了了。什么叫“系统描述”,什么叫“系统程序设计”?人们都都说C是一种“系统程

序设计语言”,而“系统描述语言”则完全是另一种东西。想必谭先生对它们之间的差异和关系都不

清楚。在这种情况下就来下断言,一上马就露了怯。

P2表格:if (e) S;

这个错误说明谭先生对C语句基本结构也不清楚。在C语言里,分号是普通语句的结束符号,是语句

的一部分。如果谭先生的S表示语句,那么后随的分号是必需的吗?如果谭先生的S表示语句中分号

前面的一部分,那么又如何理解可以放在这里的{ } 顺序结构呢?它算语句吗?可以放在这里

吗?要加分号吗?无论怎么看,谭先生都难以自圆其说!

P3行4:C语言是理想的结构化语言,…

不知谭先生的这个论断由何而来。C的创造者肯定不会说这句话,即使是C语言最狂热的崇拜者恐怕

也不敢这样说。幸亏谭先生生在中国,其书只在中国出版,否则恐怕他就不会好过了,不知有多少人

要找谭先生理论个究竟。

P3行7-8:例如整型量与字符型数据以及逻辑型数据可以通用。

此句子表现出的语文水平就不深究了。要问谭先生的简单问题是,“量”与“数据”是什么关系?再

一个问题是,C语言什么时候增加了“逻辑型数据”?

P3行14:C语言允许直接访问物理地址。

不知这个论断从何而来。至少无法从C语言参考手册中找到根据,看来是谭先生为C语言增加的特殊功能。

P4程序:This is a c program

通观世界上所有有关C语言的重要著作,C语言的名字“C”都是用大写表示。这里好象谭先生表示了

对C的不肖,与前面大相径庭,不知何故。P5行9:注释可以出现在程序中的任何位置。

这里又修改了C语言的规则。这里给谭先生提个小问题:“请找出在C程序里不能出现注释的位置(

或说,加了注释就会改变程序意义的位置)。”请10秒钟内回答。

P5行12:“%d”表示“十进制整数类型”。

写程序有问题呀!怎么一遇到具体问题,写出的解释到处都是毛病。“%d”根本就不表示任何类型,

它只是对函数printf提出一个转换要求。如果一个初学者产生这种理解偏差还有情可言,像谭先生这

样的“大师”级人物也犯此等低级错误,实在是不可原谅。

P5行-8:scanf和printf都是C语言提供的标准输入输出函数…

按本人理解,C语言本身不提供任何有关输入输出的功能,也不提供任何标准函数。只是ANSI C建议

了一个标准函数库。至少C参考手册上是这么说的,在谭书中其他部分也这么说。概念不太清楚就容

易漏马脚。

P6行13:可以说C是函数式的语言。

太荒唐了,完全是望文生义。谭先生的计算机科学技术知识水平可见一斑。函数式语言是计算机科学

领域中有明确意义的术语。再者说,即使不理解,也应该尽量回避一下大家都知道的东西,这下不就

漏了底。说C是函数式语言,就像说谭先生是“错话大师”一样(毕竟他也说了许多对的话嘛!)。

看来谭先生需要补一补计算机科学的基础知识,听说谭先生是清华大学毕业,那里的计算机系也还不

错嘛。

1Object

2final

3Object

4this,super

一、读程序写结果

1100

 

2

数组a:123456,200,300

数组b:123456,200,300

数组b的长度: 3

 

3

a=10

b=30

c=60

Java是一种面向对象的程序开发语言,准确的理解java的面向对象才能更好更快地掌握JAVA的编程思想和方法,本文昌平北大青鸟java培训专家为大家介绍java面向对象,帮助大家更好的理解java。

1、什么是对象?

首先要说明一点,对象不是java的,事实上他只是一种概念,一种用于解决问题的程序设计的思想方法。要理解对象就必须得要和面向对象结合起来。在面向对象中把某一类事物所共有的属性和行为抽象出来之后就形成了一个类。而类的一个实际的例子就叫做对象。所以从上可以看出类和对象之间存在着这样一种关系:类是具有共同的属性名称和行为的一组对象的抽象,而对象则是一个类的真实的例子。

类是现实世界或思维世界中的实体在计算机中的反映,它将数据以及这些数据上的 *** 作封装在一起。

类描述了具有相同特性(数据元素、状态变量)和行为(对数据元素、状态变量的 *** 作)的对象集合,如果我需要某个具有一定功能的工具,那么我可自定义这个类,里面有我需要的数据,还有让这个类提供的功能。

对象是具有类类型的变量。类和对象是面向对象编程技术中的最基本的概念。类是对象的抽象,而对象是类的具体实例。类是抽象的,不占用内存,而对象是具体的,占用存储空间。类是用于创建对象的蓝图,它是一个定义包括在特定类型的对象中的方法和变量的软件模板。

JAVA是一种面向对象的程序设计语言,对象是由类抽象出来的,所有的问题都是通过对象来处理,对象可以 *** 作类的属性和方法来解决问题,所以了解对象的产生、 *** 作和消亡是十分必要的。对象可以认为是在一类事物中抽象出某一个特例,通过这个特例来处理这类事物出现的问题,在Java语言中通过new *** 作符来创建对象。

2、对象和对象引用

如下表达式:Aa1=newA;它代表A是类,a1是引用,a1不是对象,newA才是对象,a1引用指向newA这个对象。

在JAVA里,“=”不能被看成是一个赋值语句,它不是在把一个对象赋给另外一个对象,它的执行过程实质上是将右边对象的地址传给了左边的引用,使得左边的引用指向了右边的对象。JAVA表面上看起来没有指针,但它的引用其实质就是一个指针,引用里面存放的并不是对象,而是该对象的地址,使得该引用指向了对象。在JAVA里,“=”语句不应该被翻译成赋值语句,因为它所执行的确实不是一个赋值的过程,而是一个传地址的过程,被译成赋值语句会造成很多误解,译得不准确。

再如:Aa2;它代表A是类,a2是引用,a2不是对象,a2所指向的对象为空null;

再如:a2=a1;它代表,a2是引用,a1也是引用,a1所指向的对象的地址传给了a2(传址),使得a2和a1指向了同一对象。

综上所述,可以简单的记为,在初始化时,“=”语句左边的是引用,右边new出来的是对象。

在后面的左右都是引用的“=”语句时,左右的引用同时指向了右边引用所指向的对象。再所谓实例,其实就是对象的同义词。

3、Java继承性分析

继承是面向对象最显著的一个特性。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。Java继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。这种技术使得复用以前的代码非常容易,能够大大缩短开发周期,降低开发费用。

继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。继承可以理解为一个对象从另一个对象获取属性的过程。如果类A是类B的父类,而类B是类C的父类,我们也称C是A的子类,类C是从类A继承而来的。在Java中,类的继承是单一继承,也就是说,一个子类只能拥有一个父类。继承中最常使用的两个关键字是extends(IS-A,是一个什么东西)和implements(Has-A,有一个什么功能)。这两个关键字的使用决定了一个对象和另一个对象是否是IS-A(是一个)关系。

昌平北大青鸟java培训专家提醒大家,通过使用这两个关键字,我们能实现一个对象获取另一个对象的属性。所有Java的类均是由javalangObject类继承而来的,所以Object是所有类的祖先类,而除了Object外,所有类必须有一个父类。通过extends关键字可以申明一个类是继承另外一个类而来的,通过使用关键字extends,子类可以继承父类所有的方法和属性,但是无法使用private(私有)的方法和属性。我们通过使用instanceof *** 作符,能够确定子类IS-A父类。

一前言

其实不管是java还是net都是属于面向对象程序设计语言,归根结底,它们都离不开面向对象,所以什么是面向对象呢,意思就是object-oriented将对数据和对数据的 *** 作作为一个相互依赖的关系、不可分割的整体,才用信息隐蔽技术和数据抽象,更简单地解决现实当中的问题!

上面的概念比较抽象,这里涉及到一个类的问题,通俗地说,就是把一个事物抽象出来成为类,而这个类的实例就是对象,类跟对象的关系其实就相当于设计图纸跟实物之间的关系,面向对象其实就是面向于类的!

面向对象的三大特性:封装、继承、多态!

二基本概念

1封装

封装的意思其实很简单:就像你使用优盘一样,优盘被封装在一个盒子里面,你根本不需要知道它是怎么工作的,你只要知道怎么用它就行了,当然用的时候是使用USB接口,对封装的类进行调用的时候也是用特定的接口进行调用的!

2继承

继承是指一个对象从另一个对象中获得属性的过程是面向对象程序设计的三大原则之二,它支持按层次分类的概念例如,波斯猫是猫的一种,猫又是哺乳动物的一种,哺乳动物又是动物的一种如果不使用层次的概念,每个对象需要明确定义各自的全部特征通过层次分类方式,一个对象只需要在它的类中定义是它成为唯一的各个属性,然后从父类中继承它的通用属性因此,正是由于继承机制,才使得一个对象可以成为一个通用类的一个特定实例一个深度继承的子类将继承它在类层次中的每个祖先的所有属性

继承与封装可以互相作用如果一个给定的类封装了某些属性,它的任何子类将会含有同样得属性,另加各个子类所有得属性这是面向对象程序在复杂性上呈线性而非几何增长的一个重要概念新的子类继承其所有祖先的所有属性子类和系统中的其他代码不会产生无法预料的交互作用

3多态

多态是指一个方法只能有一个名称,但可以有许多形态,也就是程序中可以定义多个同名的方法,用"一个接口,多个方法"来描述可以通过方法的参数和类型引用

三封装、继承、多态之间的关系

下面我给你讲一个封装、继承、多态组合起来的例子:

在由封装,继承,多态所组成的环境中,程序员可以编写出比面向过程模型更健壮,更具扩展性的程序经过仔细设计的类层次结构是重用代码的基础封装能让程序员不必修改公有接口的代码即可实现程序的移植多态能使程序员开发出简洁,易懂,易修改的代码例如:汽车

从继承的角度看,驾驶员都依靠继承性来驾驶不同类型(子类)的汽车,无论这辆车是轿车还是卡车,是奔驰牌还是菲亚特牌,驾驶员都能找到方向盘,手刹,换档器经过一段时间驾驶后,都能知道手动档与自动档之间的差别,因为他们实际上都知道这两者的共同超类:传动装置

从封装的角度看,驾驶员总是看到封装好的特性刹车隐藏了许多复杂性,其外观如此简单,用脚就能 *** 作它发动机,手刹,轮胎大小的实现对与刹车类的定义没有影响

从多态的角度看,刹车系统有正锁反锁之分,驾驶员只用脚踩刹车停车,同样的接口可以用来控制若干种不同的实现(正锁或反锁)

这样各个独立的构件才被转换为汽车这个对象的同样,电脑培训>

Java培训一般会教下面四种内容:1、掌握Java语言的使用:语言语法、程序逻辑,OOP(面向对象)思想,封装、继承、多态,集合框架、泛型、File I\O技术,多线程技术、socket网络编程,XML技术。编程有关的 *** 作系统基本使用,HTML5规范、HTML5文档结构、HTML5元素、Web语义化;CSS3规范、CSS3选择器、层叠与继承、盒模型与视觉格式化模型、现代CSS布局、CSS3基本属性千锋教育就有线上免费Java线上公开课。 2、掌握Java Web开发技术:Java开发中使用到的Web前端技术,HTML5+CSS3,JavaScript *** 作BOM和DOM,JQuery的选择器、事件处理、动画效果,MySQL数据库技术,JDBC技术、JSP、Servlet、EL和JSTL、过滤器和监听器、AJax异步请求等,Linux技术、SVN、Linux环境下项目发布部署等。3、掌握使用流行框架SSM\SSH技术实现企业级项目开发:重点学习MyBatis、Spring、Spring MVC框架的应用,Git、Java设计模式等,重点学习Struts2 、Spring、Hibernate框架的应用,Maven、Oracle数据库应用技术,了解大数据生态体系,Hadoop基础入门。4、JavaWeb框架:Spring体系结构、Spring IOC、AOP、FactoryBean与BeanFactory、声明性事务处理、Spring 5新特性。Maven与Gradle的使用。Spring Boot自动配置、Spring Boot CLI与Initializr、Spring Boot Starter、Actuator。SpringMVC工作原理和工作流程;拦截器、数据绑定转换和格式化、全局异常处理、转发与重定向、AJAX请求处理如果想了解更多相关知识,建议到千锋教育了解一下。千锋教育目前在18个城市拥有22个校区,年培养优质人才20000余人,与国内20000余家企业建立人才输送合作关系,院校合作超600所。

类和对象static关键字修饰的方法/变量属于该类,没有用static修饰的,属于该类的实例即对象。

类和对象

static关键字修饰的方法/变量属于该类,没有用static修饰的,属于该类的实例即对象。

类方法/变量由类调用,成员方法/变量由实例调用。

this 总是指向调用该方法的对象(不是类)。

方法详解

方法所属性(static决定)

形参,实参的传递(值传递,注意引用变量传递的区别)

形参个数可变(放在形参类型后)

方法的重载(返回值不同或者形参个数不同)

递归方法

成员变量和局部变量

package程序第一行,只能一个

import导入指定包层次下某个类或全部类

importstatic静态导入用于导入指定类的某个静态成员变量、方法或全部的静态成员变量、方法。

构造器

构造器最大的用处就是在创建对象时执行初始化

构造器重载(形参列表不同)

构造器调用另一个构造器需使用this关键字,而且必须作为构造器执行体的第一条语句。

类的继承

Java子类不能获得父类的构造器

重写父类的方法要遵循“两同两小一大”的规则。两同:方法名、形参列表相同;两小:返回值类型,抛出异常类;一大:访问权限。(重写方法,覆盖方法和被覆盖方法要同时为实例方法,或者类方法)

super在子类中调用父类被覆盖方法;在子类中调用父类构造器。

多态

相同类型的变量、调用同一个方法时呈现出多种不同的行为特征,就是多态。

java允许将子类对象直接赋给父类引用变量。(向上转型upcasting)

编译时类型转换成运行时类型,需要强制类型转换,要借助于类型转换运算符。

instanceof:前一个 *** 作数通常是一个引用类型变量,后一个通常是一个类或者接口。昌平北大青鸟发现用于判断前一个对象是否是后面的类或者其子类、实现类的实例。

instanceof前面 *** 作数的编译时类型要么与后面类相同或者与后面类具有父子继承关系,否则会编译错误。

以上就是关于c语言程序设计第二版是什么垃圾全部的内容,包括:c语言程序设计第二版是什么垃圾、Java面向对象程序设计题、如何理解Java面向对象等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/zz/9309014.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存