X(1一5%)=155一X+l怎么解?

评:long long complex,bool根本是子虚乌有的。数据类型都整不明白,还谈什么语言、算法呢?
C99并没有要求main函数的类型一律指定为int型
main函数的类型一律指定为int型其实是C89要求的

“位运算”是C语言区别于其他高级语言的一个重要特点。

实际上“真”、“假”这些概念根本不属于C语言
总是借助多余的概念来理解C所表明的是并不真正理解C

在C语言中,>是一种运算符
就这么简单。根本不需要那些画蛇添足的“真”、“假”

用关系运算符将两个数值或数值表达式连接起来的式子,称关系表达式。
评:“称关系表达式”,这语文水平就不评说了
试问“3&4”、“5|6”算不算数值表达式
用关系运算符连接起来——“ 3&4<5|6 ”,是关系表达式吗?
4.4 逻辑运算符和逻辑表达式
4.4 逻辑运算符和逻辑表达式
有时要求判断的条件不是一个简单的条件,而是由几个给定简单条件组成的复合条件。如:“如果星期六不下雨,我去公园玩”。这就是由两个简单条件组成的复合条件,需要判定两个条件:(1)是否星期六;(2)是否下雨。只有这两个条件都满足,才去公园玩。又如“参加少年运动会的年龄限制为13~17岁”,这就需要检查两个条件:(1)年龄age≥13(2)年龄age≤17。这个组合条件条件是不能够用一个关系表达式来表示的,要用两个表达式的组合来表示,即:age≥13 AND age≤17。用一个逻辑运算符AND连接age≥13和age≤17。两个关系表达式组成一个复合条件,“AND”的含义是“与”,即“二者同时满足”。age≥13 AND age≤17表示age≥13和age≤17同时满足。这个复合的关系表达式“age≥13 AND age≤17”就是一个逻辑表达式。其他逻辑表达式可以有:
上面第1个逻辑表达式的含义是:只有x>0和y>0都为真时,逻辑表达式x>0 AND y>0 才为真。上面第2个逻辑表达式的含义是:age<12 或 age>65至少有一个为真时,逻辑表达式age<12 OR age>65为真。OR是“或”的意思,即“有一即可”,在两个条件中有一个满足即可。AND和OR是逻辑运算符。
用逻辑运算符将关系表达式或其他逻辑量连接起来的式子就是逻辑表达式。
评:云山雾罩,不知所云
任何合格的C程序员都不可能认为这是在讲C语言
尤其是“AND和OR是逻辑运算符”这句,属于根本性的概念错误
在C语言中AND和OR是标识符不是运算符(在C语言中唯一可以做运算符的标识符是sizeof)
连“标识符”、“运算符”这样最最的基本概念都拎不清,居然写教材?C语言界没人啦

"用逻辑运算符将关系表达式或其他逻辑量连接起来的式子就是逻辑表达式"的错误性质见1180楼
有3种逻辑运算符:与(AND),或(OR),非(NOT)。在BASIC和Pascal等语言中可以在程序中直接用AND,OR,NOT作为逻辑运算符。
评:逻辑运算有很多种,至少还有个XOR,怎么可能只有3种逻辑运算符呢?
BASIC也不是直接用AND,OR,NOT作为逻辑运算符,而是用的And,Or,Not,只不过BASIC不区分大小写罢了
再则,BASIC的逻辑运算符的运算含义也绝对不同于C的逻辑运算符的运算意义,根本不能当作同一种东西一概而论

在C语言中不能在程序中直接用AND,OR,NOT作为逻辑运算符,而是用其他符号代替。见表4 .1。
评:这圈子绕的!从上海到苏州,却非要舍近求远地先到欧洲兜一圈再到苏州
讲了一火车废话错话,有意义的内容用几个字就能概括——C有三个逻辑运算符:&&,||、!。

表4.1 C逻辑运算符及其含义
运算符 含义 举例 说明
|| 逻辑或 a || b 如果a和b有一个以上为真,则结果为真,二者都为假时,结果为假
! 逻辑非 !a 如果a为假时,则!a为真,如果a为真,否则!a为假
评:1.C语言没有“真”“假”这种东西
2.对&& ||运算的解释是错误的,是一种似是而非的歪曲
3.只介绍了优先级,对结合性只字未提。

总之,学习者不可能从中真正理解这3个运算

&&和||运算涉及到sequence point,不懂得这个概念,就不能说是真正懂得了这两种运算

表达式自左至右扫描处理求解。首先处理“5>3”(因为关系运算符优先于逻辑运算符&&)。在关系运算符>两侧的5和3作为数值参加关系运算,“5>3”的值为1(代表真),再进行“1&&8<4-!0”的运算,8的左侧为“&&”,右侧为“<”,根据优先规则,应先进行“<”的运算,即先进行“8<4-!0”的运算。现在4的左侧为“<”,右侧为“-”运算符,而“-”优先于“<”,因此应先进行“4-!0”的运算,由于“!”的级别最高,因此先进行“!0”的运算,得到结果1.然后进行“4-1”的运算,得到结果3,再进行“8<3”的运算,得0,最后进行“1&&0”的运算,得0.
一会说“自左至右扫描处理求解”
一会又根据优先级确定运算的先后
"8的左侧为“&&”,右侧为“<”,根据优先规则,应先进行“<”的运算"更荒唐,大概老谭忘记了还有优先级更高的“!”

这两种说法都是站不住脚的,也都是错误的

C语言编译系统在表示逻辑运算结果时,以数值1代表“真”,以0代表“假”
编译系统怎么表示运算结果?运算是在编译时进行的吗?如果不是,编译系统怎么可能表示运算结果呢

(1)若a=4,则!a的值为0.……
(3)a和b值分别为4和5,a||b的值为1.
评:这就和他的代码中,哪怕是常量也一定要赋值给一个变量再运算,不管有没有必要,是一致的

(1)无非说的是 !4的值为0
(3)无非说的是 4||5的值为1
搞不清楚他画蛇添足地弄出来a、b作甚

在逻辑表达式的求解中,并不是所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。举例如下。
评:“执行”“运算符”
听着比日本话还别扭:运算符执行地有

(1)a&&b&&c。只有a为真(非0)时,才需要判别b的值。只有当a和b都为真的情况下才需要判别c的值。如果a为假,就不必判别b和c(此时整个表达式已确定为假)。如果a为真,b为假,不判别c,见图4.7。
评:原来这就是所谓的“并不是所有的逻辑运算符都被执行”啊
这里的例子说明的恰恰是两个“&&”运算都执行了
任何一个没执行都不可能得到最后的结果
没被执行的是求b和c的值

既然关系表达式和逻辑表达式的值是0和1,而且在判断一个量是否为“真”时,以0代表“假”,以非0代表“真”。那么就可以理解为什么在if语句中表达式可以是任何数值表达式。
评:不存在这种因果关系。把“关系表达式和逻辑表达式的值是0和1”扯进来更是思路不清的表现
试想,关系表达式和逻辑表达式的值是0和1和if语句的表达式有什么必然的联系呢
所以这是一段似是而非的论述

此外“if语句中表达式可以是任何数值表达式”是错误的
这个表达式只能是标量(scalar)类型
如果读者使用的C++的编译器(如Visual C++),则可以使用逻辑型变量。但要把文件名后缀改为.cpp,作为C++程序,
评:搞不清楚这是想做什么
C、C++分不清楚在谭书中是一贯的
著名的把赋值表达式当作左值的笑话就是这种情况

4.5 逻辑运算符和逻辑表达式

C提供条件运算符和条件表达式来处理这类问题。
C语言的条件运算符并非是为这类问题而存在的
这种说法是误导,会限制学习者正确地应用条件运算符

评:有人不主张挑这种鸡毛蒜皮的小错误
但这种小错误如此之多又说明什么呢

为了使逻辑关系清晰,避免出错,一般把内嵌的if语句放在外层的else子句中(如程序1那样),这样由于有外层的else相隔,内嵌的else不会被误认为和外层的if配对,而只能与内嵌的if配对,这样就不会搞混。
评:这是因噎废食而想到的削足适履性质的差劲办法
代码的结构应该服从思想,应该是思想的自然展开和表达
先把思想装进形式上的套子里写不出优质的代码
4.7用switch语句实现多分支选择结构
4.7 用switch语句实现多分支选择结构
switch语句的一般形式如下:
switch语句下面的花括号内是一个复合语句。
评:switch语句的一般形式并非是

switch后面括号内的“表达式”,其值的类型应为整数类型(包括字符型)
评:1 整数类型本来就包括字符类型
2 谭书43页数据类型总表中根本没有“整数类型”,不清楚谭书中的“整数类型”究竟是指的什么

case 后面跟一个常量(或常量表达式)
评:不对!只能是整数常量表达式

每个case标号出现的次序不影响执行结果

在case子句中虽然包含了一个以上执行语句,但可以不必用花括号括起来,会自动顺序执行本case标号后面所有的语句。当然加上花括号也可以。

1.根本就不是完整的代码
2.用到了根本没介绍的知识(函数定义等)
3.风格拙劣,写出的代码中也有很多错误,例如 intx
问题本身就描述的不完整,讲解部分完全是空对空的纸上谈兵
4.8 选择结构程序综合举例
4.8 选择结构程序综合举例
评:居然一口气把判断闰年的问题写了四遍,不可思议
完全看不出那样做有什么意义
没有分析各种写法的利弊得失
尤其是第四个,简直是为赋新词强说愁——仅仅是为了用一下C99的_Bool类型,其余的都和第一个写法完全一样。写完之后无法编译,又建议读者把.c改成.cpp,简直是笑话。C++和C根本就是两回事,披着羊皮的狼不还是狼吗

评:这段代码没有错误,但风格很差,而且啰嗦

1.leap=1; leap=0; 是很差劲的写法,可读性差且容易出错。应该使用符号常量

2.第7~20行,啰嗦累赘。若在此之前给leap赋值,代码和逻辑则都要简洁得多。

但这也不是最好的写法,实际上还有更好的写法。

例4.10 运输公司对用户计算费用。路程(skm)越远。每吨·千米运费越低。标准如下
评:此题目根本就不应该用swtitch语句解决
(3)变量名尽量采用“见名知意”的原则,……,在本书的例题程序,由于是练习程序,并且考虑到多数读者的习惯和方便,尽量不采用较长的变量名,而用单词的首字母或缩写作为变量名。在读者今后编程时,可根据实际情况决定。
评:实际是在用垃圾风格熏陶读者,使读者耳濡目染地养成坏习惯
口口声声“考虑到多数读者的习惯和方便”是文过饰非,为自己的垃圾风格辩解
良好的风格习惯不是一下子就能养成的
相反,养成了坏习惯就很难改掉

(4)第6行“printf(“please enter price,weight,discount:”);”的作用是向用户提示应输入什么数据,以方便用户使用,避免出错,形成友好界面。建议读者在编程序(尤其是供别人使用的应用程序)也这样做,在scanf函数语句输入数据前,用printf函数语句输出必要的“提示信息”。
评:1.身教胜于言教,除了这个例题,老谭自己做到没有?赤裸裸的scanf到处都是,教别人去做,有点不给力吧?

3.“ scanf函数语句”,“printf函数语句”,估计是C99的新概念

第5章 循环结构程序设计
循环体如果包含一个以上的语句,应该用花括号括起来,作为复合语句出现。如果不加花括号,则while语句的范围只到while后面第一个分号处。

其中的“语句”就是循环体。它的执行过程可以用图5.4表示。
评:图5.4的流程图居然没有入口

评:这个题目用do…while语句来解决属于头脑不清醒,思维呈发散性混乱状态

我也同意应该用for语句。
编程应该用恰当的语句描述算法,而不是扭曲思想去适应语句。编程不是数学上的一题多解,不是花样越多越好,这方面软件史上有过深刻的教训

对同一个问题可以用while语句处理,也可以用do…while语句处理。do…while语句结构可以转换成while结构。
结构换来换去只说明思路上模糊不清

在一般情况下,用while语句和用do…while语句处理同一问题时,若二者的循环体部分是一样的,那么结果也一样。
评:这是瞪着眼睛说胡话
完全不具备起码的逻辑思维能力
而且for语句更为灵活,不仅可以用于循环次数已经确定的情况,还可以用于循环次数不确定而只给出循环结束条件的情况。它完全可以代替while语句。
老谭的意思是K&R发明C时既然设置了for语句再设置while语句实在是多余

for(表达式1;表达式2;表达式3)语句
可以改写为while循环的形式:
2.老谭大概忘记C语言还有个continue语句吧

(3)"表达式2"也可以省略……
评:阉割for语句的“大师”
整个121,122,123页都是在做这种无聊的阉割
可见for语句比while语句功能强,
这表明老谭根本不懂得各种循环语句究竟应该怎么应用

(9)表达式2一般是关系表达式(如i<=100)或逻辑表达式(如a<b&&x<y),但也可以是数值表达式或字符表达式,
仿谭体造句:一般是土豆或洋葱,但也可以是植物或辣椒
for语句中只有表达式2,而无表达式1和表达式3.其作用是每读入一个字符后立即输出该字符,直到输入一个“换行”字符。
评:1.实现那个for语句的功能,应该

C语言的for语句比其他语言(如FORTRAN,Pascal)中的for语句功能强得多。
搞不清想要传递给读者什么信息
C的for语句比C++的for语句功能也强得多?

5.6 几种循环的比较
3种循环都可以用来处理同一问题,一般情况下它们可以互相替代。

for循环可以在表达式3中包含使循环趋于结束的操作,甚至可以将循环体中的操作全部放到表达式3中。因此for语句的功能更强,凡用while循环能完成的,用for循环都能完成。
5.7 改变循环执行的状态
例5.4 在全系1000学生中,征集慈善募捐,当总数达到10万元时就结束,统计此时捐款的人数,以及平均每人捐款的数目。
从题目中根本看不出来若是总数达不到怎么办
收钱的事,完不成怎么可以?!

评:好在学生中有几个大款
哪怕小学生也不会算出平均每人捐款的数目是14669.71吧?

break语句的一般形式为
评:还真是从没见过这种语句

在129页愚蠢代码的基础上又毫无意义地分别加上了continue和break
使得愚蠢毫无意义地复杂化,然后让读者分析
复杂的愚蠢代码是最难分析的
例5.7 用π/4≈1-1/3+1/5-1/7…公式求的近似值,直到发现某一项的绝对值小于10^6为止(该项不累加)。
评:任何一项都小于10^6

在C库函数中,有两个求绝对值的函数
这再次表明老谭这本书“按C语言的新标准C99进行介绍”是骗人的

经过对程序的补充和运行,可以知道在while(fabs(t)>=1e- 6 )时,执行50万次,当while(fabs(t)>=1e- 8 )时,执行循环体5000万次、两者相差100倍,在分别运行以上两种情况下得程序时,可以明显地感觉到后者运行的时间长很多。

最后一项<1e-6要执行多少次,小学生心算都能算出来,可老谭居然要“经过对程序的补充和运行”才知道
fabs(t):哪冒出来的“t”?
运行时间的估计居然靠实际“感觉”,不知道老谭怎么感觉出相差100倍的

评:for语句中的 “38”非常蹩脚

例5.9 输入一个大于3的整数n,判定它是否为素数(prime,又称质数)
评:居然有这样的程序,只能判断大于3的整数是不是素数
这东西交给客户时怎么说呢?
我这个程序能判断3以上的素数
3以下的还得您自己亲自判断

评:k=sqrt(n);试图求出n的平方根的整数部分
题目要求“输入一个大于3的整数n”
但无论输入的整数是否大于3
输入一个负数的话还会亲眼目睹程序崩溃的壮烈景观

(1) 根据常识,偶数不是素数,所以不必对偶数进行判断,只对奇数进行检查。故循环变量n从101开始,每次增值2。
评:这里至少有三个问题
1.200也是偶数,为什么要n<=200,和这段解释自相矛盾。
2.这种代码根本没有通用性,如果是求另一个范围内的素数,代码需要改动的地方很多。
3.“根据常识,偶数不是素数”,这是常识性的错误。小学生都知道错在哪里

(2)从附录F可以看到:sqrt是求平方根的函数,它要求参数为双精度数。在执行时会自动将整数n转换为双精度数。求出的函数值也是双精度数,再把它赋值给整型变量k,系统会自动小数部分舍弃,只把整数部分赋给k。在进行编译时,系统给出警告,提醒用户有可能出现误差。只要用户确认没有问题,可以不理会它。
评:1.用整数类型做对应原型中类型为double的实参,不规矩(当然不是不可以)
2.“系统会自动小数部分舍弃”,语文问题
3.用户不可能确认没有问题
4.教人不理会警告,是一种教唆行为。优秀的程序员不会容许任何警告,哪怕是无害的情况。更何况这里的警告是一个让人放心不下的警告。
例5.11 译密码……
将字母A变成字母E,a变成e,即变成其后的第4个字母,W变成A,X变成B,Y变成C,Z变成D,
//如果是26个字母中最后4个字母之一就使c-22

第6章 利用数组处理批量数据
6.1 怎样定义和引用一维数组
由于计算机键盘只能输入有限的单个字符而无法表示上下标,C语言就规定用方括号中的数字来表示下标,
如果在被调用的函数(不包括主函数)中定义数组,其长度可以是变量或非常量表达式。如:

如“int a[n];”是不合法的。也就是说,C语言不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值。
评:可笑的是这段文字与1403楼引用的文字出现在同一页上
还没翻页就开始自己打自己耳光

它表示定义了一个整型数组,数组名为a,此数组有10个整型元素。
评:根据该书43页对数据类型的划分
整型数据至少包括6种以上的数据类型
所以,所谓的“数组有10个整型元素”中的整型元素属于指代不明

定义一维数组的一般形式为
类型符 数组名[常量表达式];
评:无论从C90还是C99标准来说都是错误的

从C90来说,“常量表达式”是不准确的,不是任何常量表达式都可以
从C99来说,并没有要求一定是“常量表达式”

常量表达式中可以包括常量和符号常量
评:标准的谭氏废话句型
这话放小学生作文里是要得红叉叉的

不能包括变量,如“int a[n];”是不合法的。也就是说,C语言不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值。例如下面这样定义数组是不行的:
评:已经说了是“常量表达式”,“不能包括变量”是废话
此外,老谭号称他这本书依据C99写的,如“int a[n];”是不合法的 。这句是完全错误的。

这段代码在支持C99的编译器下没有问题。
自相矛盾的是,在同一页,老谭又写到

如果在被调用的函数(不包括主函数)中定义数组,其长度可以是变量或非常量表达式。如:
评:刚说完[]内只能是“常量表达式”,一转眼又说int a[2n]; //合法
这种自相矛盾带给初学者的不止是错误还有混乱和无所适从
如果按C90这段论说是绝对错误的
如果按C99来说这段说法依然是错误的,因为main()与其他函数相比除了是程序开始执行的位置之外没有什么特殊的,“不包括主函数”的说法完全是不懂装懂的信口开河,没有任何根据

在调用func函数时,形参n从实参得到值。这种情况称为“可变长数组”,允许在每次调用func函数时,n有不同的值。
“可变长数组”根本不是像他说的那样

但是在执行函数时,n的值是不变的
评:n是变量,怎么就不变了呢

6.1.2 怎样引用一维数组
在定义数组并对其中的各元素赋值后,就可以引用数组中的元素。

例如下面的赋值表达式包含了对数组元素的引用:
每一个数组元素都代表一个数值。

每一个数组元素都代表一个数值:错!这个表达式中的数组元素并非都代表数值

例6.3 有10个地区的面积,要求对它们按由小到大的顺序排列。
条件本身就不全,怎么可能完成呢?
在题目条件不充分的条件下给出代码
是在鼓励程序员胡乱猜测程序功能并示范如何进行胡猜
而程序员擅自胡乱猜测程序功能是与软件工程的思想和基本原则背道而驰格格不入的
所以就不能理解老谭这书究竟是在教别人写程序
还是在诱导教唆学习者违背并践踏写程序的基本原则
6.2 怎样定义和引用二维数组
二维数组常称为矩阵(matrix)。
一个是程序设计语言中的概念

二维数组定义的一般形式为
类型说明符 数组名[常量表达式][常量表达式];
评:两个“常量表达式”给人貌似相同的错觉
另外“常量表达式”这个描述也不准确,不是所有的常量表达式都可以

二维数组元素的表示形式为
数组名[下标][下标]
评:两个“下标”没有区别,不妥

更好的写法是用sizeof运算求出数组的尺寸

前已介绍:字符型数据是以字符的ASCII代码存储在存储单元中的,一般占一个字节。由于ASCII代码也属于整数形式,因此在C99标准中,把字符类型归纳为整型类型中的一种。评:短短一段话有多处错误
1.“字符型数据是以字符的ASCII代码存储在存储单元中的”,未必
2.“一般占一个字节”,没什么一般特殊而言,char类型就是占一个字节
3.“由于ASCII代码也属于整数形式,因此在C99标准中,把字符类型归纳为整型类型中的一种。”,压根就没有这种因为所以。
此外C89中字符数据就属于整数类型
4.“整型”,这个概念和书里出现的其他“整型”概念不一致。

字符串是存放在字符型数组中的。
这样的字符串存放在哪个数组中?

用来存放字符数据的数组是字符数组。
也可以用整型数组它存放字符数据,例如
评:1.自相矛盾。按照第一句的说法, c也是字符数组
例 6.6 输出一个已知的字符串。
例 6.7 输出一个菱形图。
评:谭书的很多例题都是这样没头没脑
你根本不知道他这题目究竟想做什么

例 6.6 输出一个已知的字符串。
解题思路:先定义一个字符数组,并用“初始化列表”对其赋以初值。然后逐个输出此字符数组中的字符。
评:“解题思路”倒是更像一个具有具体要求的题目
而“输出一个已知的字符串”根本不成其为题目
矛盾的是“解题思路”和输出字符串根本扯不上边
根本用不着舍近求远地去定义字符数组
况且解题思路中没有丝毫字符串的影子
就会发现代码和题目之间驴唇不对马嘴

例 6.7 输出一个菱形图。
解题思路:先画出一个如图6.12所示的平面菱形图案。

图6.12所画的也不是菱形图案

为了测定字符串的实际长度,C语言规定了一个“字符串结束标志”。
评:C语言确实规定了一个“字符串结束标志”,但并不是“为了测定字符串的实际长度”。所谓“为了测定字符串的实际长度”,属于老谭自己的臆测

ASCII码为0的字符不是一个可以显示的字符,而是一个“空操作符”
评:“字符”怎么成了“操作符”?

在执行此语句时系统怎么知道应该输出到哪里为止呢?实际上,在向内存中存储时,系统自动在最后一个字符’\n’的后面加了一个’\0’,……
“系统”是老谭最得心应手的挡箭牌
说不清楚的事情统统都推给含混不清的“系统”
相信老谭自己也解释不清这两个系统究竟是什么,是不是同一个意思

这里不像例6.6 那样用单个字符作为字符数组的初值,而是用一个字符串(注意字符串的两端是用双撇号而不是单撇号括起来的)作为初值。
评:1.单个字符不可能作为字符数组的初值
2.“用单个字符作为字符数组的初值”与同页上“例6.6就是用一个一维的字符数组来存放字符串"I am a student."的”自相矛盾
3.用字符串作为数组的初值同样说不通

如果输入以下12个字符:
由于系统把空格作为输入的字符串之间的分隔符,因此只将空格前得字符“How”送到str中。由于把“How”作为一个字符串处理,故在其后加’\0’。str数组的状态为
评:不能因为新手无知就这样糊弄他们吧

可以用下面的输出语句得到数组的起始地址。
评:老谭在前面反复强调“C语言本身不提供输入输出语句”(例如第12页)
然后又反复地自己打自己耳光(例如第59页:最常用的语句是:赋值语句和输入输出语句)
这里居然又出现了“输出语句”

其次,用%o格式输出c是错误的

2、即使是在C语言中,事实上也容许非C风格字符串(的存储实现),虽然并非C语言标准定义的——例如BSTR。
评:如果是这样,前提是必须给出“字符串”的一般性定义
但老谭的书中并没有给出“字符串”的一般定义
倒是说过“字符串(以’\0’结束的字符序列)”这样的话(161页)
所以可见谭书所说的字符串并非一般意义上的、非C标准定义的字符串

1.puts函数——输出字符串的函数
评:把puts的参数说成“字符数组”是不对的
(考虑到这里还没有学习指针,把gets的参数说成是字符数组还马马虎虎)

由于可以用printf函数输出字符串,因此puts函数用得不多。
也表明谭不懂得在何种场合如何恰当地使用puts()函数

用puts函数输出的字符串中可以包含转义字符。例如:
字符串中的字符可以用转义字符的形式写出
跟puts()函数有什么关系

那个例子中的str是多余的
看来老谭真的以为puts()函数的参数只能是“字符数组”

3.strcat函数——字符串连接函数
评:实际上这两个参数都必须是字符串
第二个参数不必是保存在字符数组中的字符串

7.strlwr函数——转换为小写的函数
strlwr是STRing LoWeRcase(字符串小写)的缩写。函数的作用是将字符串中的大写字母换成小写字母。
评:不知道老谭哪儿搞来的这东西
这个函数根本就不是标准函数

这个函数的参数也不可能是“字符串”,只能是存放在数组中的字符串

7.strlwr函数——转换为小写的函数
strlwr是STRing LoWeRcase(字符串小写)的缩写。函数的作用是将字符串中的大写字母换成小写字母。
评:不知道老谭哪儿搞来的这东西
这个函数根本就不是标准函数

这个函数的参数也不可能是“字符串”,只能是存放在数组中的字符串

库函数并非C语言本身的组成部分,而是C语言编译系统为方便用户使用而提供的公共函数。
评:看来C标准完全可以把库函数部分删除了

C语言把赋值运算作为表达式

解题思路:……然后经过3次两两比较……
评:代码中并没有经过3次两两比较

第7章 用函数实现模块化程序设计
7.1 为什么要用函数

7.1 为什么要用函数
评:讲老实话,我不清楚什么叫“模块化程序设计”
老谭也没讲清楚究竟什么叫“模块化程序设计”

看来以其昏昏使人昭昭是不行的

评:这是个很滑稽的解释
把英汉词典上的两个义项硬说成是一个

图7.1是一个程序中函数调用的示意图。
评:只是一个三叉树而已
函数调用可能比这复杂得多



评:把函数原型写在main()之内

此外函数原型写的要么可以说是错误的,要么就是毫无意义

在定义这两个函数时指定函数的类型为void,意为函数无类型。
评:函数无类型的说法极其荒谬
C语言中不存在无类型的函数

指定函数的类型为void
应为指定函数返回值的类型为void

一个源程序文件可以为多个C程序共用
评:令人啼笑皆非的说法
C程序的执行是从main函数开始的,如果在main函数中调用其他函数,在调用后流程返回到main函数,在main函数中结束整个程序的运行。
评:这段文字有些莫名其妙,即使从汉语语法的角度来说也有些成问题。成问题的地方在于“在调用后流程返回到main函数”不清楚是前面“如果”的一个结果还是对前面“如果”的一个补充。
抛开这种语文方面的缺点不谈,这段文字给人的印象就是“C程序从main函数开始执行,在main函数结束”。然而事实真的如此吗?
所谓独立环境是指程序并非借助操作系统来运行的,宿主环境则是指程序是在操作系统的控制下执行的。
在这两种环境下,程序开始运行(Program startup)的标志是程序的某个指定的函数开始被调用。
在独立环境中,首先被调用的函数的名字并不一定是main,而是由编译器自行确定的,这叫做由实现定义(Implementation-defined)。甚至这个首先被调用的函数的类型也同样是由实现定义的。
只有在宿主环境下,C程序的运行才是从main()开始的。
因此,“C程序的执行是从main函数开始的”这句话仅仅是在一定的条件下才成立,是片面的。
至于程序在哪个函数结束,C语言从来没有任何规定。程序可能在main()中结束,也可能在其他函数中结束。C语言标准库中有很多函数都与结束程序有关,这些函数的函数原型在stdlib.h中描述,例如

它是在fun()函数中结束的。

无参函数可以带回也可以不带回函数值,但一般以不带回函数值得居多。

所有的函数都有函数值,只是有的函数的返回值是void类型

②有参函数。在调用函数时,主调函数在调用被调用函数时,通过参数向被调用函数传递数据,一般情况下,执行被调用函数时会得到一个函数值,供主调函数使用。
居然从有参函数扯到了函数返回值

评:函数 为 int型
完全不理解数据类型的含义

7.2.1为什么要定义函数
C语言要求,在程序中用到的所有函数,必须“先定义,后使用”。例如想用max函数求两个数中的大者,必须事先按规范对它进行定义,指定它的名字、函数返回值类型、函数实现的功能以及参数的个数与类型,将这些信息通知编译系统。这样,在程序执行max时,编译系统就会按照定义时所指定的功能执行。如果事先不定义,编译系统怎么能知道max是什么、要实现什么功能呢!
评:什么叫“先”、什么叫“后”?
如果是指编辑时的时间顺序,毫无疑问这种说法是错误的。因为先写调用,最后完成再函数定义的情况比比皆是
如果是指源代码的空间次序,这种说法也是错误的。因为在多个源文件情况下,根本就谈不上先后
所以,所谓“先定义,后使用”是一句似是而非的废话

“想用max函数求两个数中的大者”,这也是模棱两可的话,什么叫“两个数中的大者”,“两个数”也是含糊不清的概念

“指定它的名字、函数返回值类型、函数实现的功能以及参数的个数与类型,将这些信息通知编译系统”:搞不清这是在说函数定义还是在说函数声明

“在程序执行max时,编译系统就会按照定义时所指定的功能执行”,“编译系统”居然也能“执行”程序了,不管你们信不信,反正我就这么写了

“如果事先不定义,编译系统怎么能知道max是什么、要实现什么功能呢!”:编译系统可以通过函数原型知道max是什么,编译系统并不需要max要实现什么功能

对于C编译系统提供的库函数,是由于编译系统事先定义好的,库文件中包括了对各种函数的定义。
评:编译系统居然还能“定义”函数
库文件中居然包括函数定义

究竟什么叫“定义函数”?
在p172页谭是这样写的

定义函数应包括以下几个内容:
(1)指定函数的名字,……
(4)指定函数应当完成什么样的操作
评:编译系统如何指定函数的名字的呢?
又是如何指定函数完成的操作的呢?

哪个库文件中写着函数的定义?

……定义无参函数的一般形式为
评:1.这是早就过时的写法,应该避免使用
2.函数体包括{}部分

2.分类不当,结构混乱,造成误导

7.2.2 定义函数的方法
评:给读者造成函数有无参函数、有参函数、空函数三类函数的错觉

7.3.1 函数调用的形式
按函数调用在程序中出现的形式和位置,可以有以下3种函数调用方式。
评:完全看不出有必要这样划分
三种形式中的函数调用没有任何本质区别
除非对语句、表达式或实参的概念缺乏准确的理解,否则不可能想到这样划分
因为在三种方式中函数调用都是表达式

调用函数并不一定要求包括分号(如print_star();),只有作为函数调用语句才需要有分号
评:前面说“不一定要求包括分号”,可“如”的却是有分号,混乱不清自相矛盾,即使作为小学生作文也是不合格的
“只有作为函数调用语句才需要有分号”更是胡扯

实际上函数调用和分号扯不上半点关系
老谭把他们放在一起说纯属概念混乱纠缠不清

实际参数可以是常量、变量或表达式。
应该多吃青菜、白菜和蔬菜
可以看出老谭连什么是表达式都不清楚

在调用函数过程中发生的实参与形参间的数据传递,常称为“虚实结合”
评:这回没用BASIC冒充C
为此还特意捏造了一个“虚拟参数”的概念

实际参数可以是常量、变量或表达式。
应该多吃青菜、白菜和蔬菜
可以看出老谭连什么是表达式都不清楚)

如果说不懂指针就不完全懂得C的话
那么不懂表达式就完全不懂得C语言

如果实参为int型而形参x为float型,或者相反,则按不同类型数值的赋值规则进行转换
按照老谭写函数声明的风格就不会

字符型与int可以互相通用
不同的字符类型都不能通用
遑论字符类型与int类型

调用结束,形参单元被释放。注意,实参单元仍保留并维持原值,没有改变。
实参和形参在内存中占有不同的存储单元
评:压根就不存在实参单元这种东西

赋值语句把这个函数值赋给变量。
评:然而在该书的第12页、第67页
老谭煞有介事地铁口直断

C语言本身不提供输入输出语句。

例7.3 将例7.2稍作改动,将在max函数中定义的变量z改为float型。函数返回值的类型与指定的函数类型不同,分析其处理方法。
评:例7.2 的要求是“输入两个整数,要求输出其中的大者。要求用函数找到大者。”
相应的max()函数定义是

怎么可以胡乱“将max函数中定义的变量z改为float型”呢?
仅仅为了要说明一下“函数返回值与指定的函数类型不同,按照赋值规则处理”(注“函数类型”也是个错误的术语)

这是一种很奇怪的无病呻吟
而是为了挠一下故意装得有点痒
更何况return 的表达式与函数返回值的类型不一致本来就是一种很差劲的代码风格

(4)对于不带回值的函数,应当用定义函数为“void”类型(或称“空类型”)。……此时在函数体中不得出现return语句。
评:应当用定义函数为“void”类型 : 这不是话

此时在函数体中不得出现return语句:胡扯

评:“实型”是个含义不清的概念

7.4 对被调用函数的声明和函数原型
如果不包含“stdio.h”文件中的信息,就无法使用输入输出库中的函数。同样,使用数学库中的函数。应该用#include <math.h>。
以为编译器提供的库有多个

如果使用用户自己定义的函数,而该函数的位置在调用它的函数(即主调函数)的后面(在同一个文件中),应该在主调函数中对被调用的函数作声明(declaration)。
评:把函数类型声明放在函数体内是一种拙劣的风格
会造成函数体内代码的污染
并且可能需要多次进行不必要的函数类型声明
“函数的位置”是含混不清的说法

如果没有对函数add的声明,当编译到程序第7行时,编译系统无法确定add是不是函数名,
评:编译器可以根据运算符()来确定add是一个函数
尽管应该写函数声明,但不是因为不写编译系统就无法确定add是不是函数名

如果不作检查,在运行时才发现实参与形参的类型或个数不一致,出现运行错误。大体上可猜出这是一个输出学号,性别和成绩的函数。
评:运行时可以产生运行错误
但不可能发现实参与形参的类型或个数不一致

使用函数原型作声明是C的一个重要特点。
评:这个又是在信口开河了
C语言最初并没函数原型这个概念
这方面无论在理论还是实践方面目前都有些混乱
老谭自己不就是把函数声明写得乱七八糟吗
甚至把许多过时的东西写在书里吗

用函数原型来声明函数,能减少编写程序时可能出现的错误。由于函数声明的位置与函数调用语句的位置比较近,因此在写程序时便于就近参照函数原型来书写函数调用,不易出错。

函数原型是给谁看的?难道是给程序员吗

对函数的“定义”和“声明”不是一回事。函数的定义是指对函数功能的确立,包括指定函数名,函数值类型、形参及其类型以及函数体等,它是一个完整的、独立的函数单位。而函数的声明的作用则是把函数的名字,函数类型以及形参的类型、个数和顺序通知编译系统,以便在调用该函数时进行对照检查(例如,函数名是否正确,实参与形参的类型和个数是否一致),它不包括函数体。
评:显著的错误是检查“函数名是否正确”,函数声明不检查这个

对函数的“定义”和“声明”不是一回事:实际上函数定义也具有函数声明的作用。因此就说明函数名性质这个角度来说,函数的定义也是函数声明的一种
如果从狭义的角度来理解的话,即“定义”和“声明”不是一回事,那么后面的叙述——“函数的声明的作用则是把函数的名字,函数类型以及形参的类型、个数和顺序通知编译系统”就是错误的
这里混淆了函数声明与函数原型的概念

此外,“函数值类型”这个说法是可接受的,但后面又说“函数类型”则是错误的。“函数类型”和“函数值类型”根本就不是一回事

用了有意义的参数名有利于理解程序,如:
大体上可猜出这是一个输出学号,性别和成绩的函数。
评:这种猜测不但是危险的、盲目的
也是违背软件工程基本原则的

而且函数原型的目的并不是让人照着写函数调用
其意义主要在于给编译器看

7.5 函数的嵌套调用
7.5 函数的嵌套调用
(5)执行b函数,如果再无其他嵌套的函数,则完成b函数的全部操作;
(6)返回到a函数中调用b函数的位置;
(7)继续执行a函数中尚未执行的部分,直到a函数结束;
评:实际上应该是遇到return返回或直到函数结束返回

程序分析:可以清楚地看到,在主函数中要调用max4函数,因此在主函数的开头要对max4函数作声明。……
评:的确“可以清楚地看到”
然而可以更清楚看到的是这种写法把各个函数污染得乱七八糟

通过此例,可以知道,不仅要写出正确的程序,还要学习怎样使程序更加精炼、专业和易读。
评:通过此例,只能看到如何使程序更繁复、业余和晦涩

7.6 函数的递归调用

C语言的特点之一就在于允许函数的递归调用。
很多语言都“允许函数的递归调用”
这怎么成了“C语言的特点”了呢

可能有人觉得是为了单一出口

评:n<0的判断本来应该是main()的任务
却硬塞到了fac()内
得到的是一个毫无意义的怪胎

除了可以让人们观瞻一下代码可以丑陋到何种程度
这个fac()没有任何价值
更可笑的是老谭居然宣称他用这个代码计算出了31!

7.7 数组作为函数参数

实参可以是常量、变量或表达式。

凡是变量可以出现的地方,都可以用数组元素代替
这个 i 变量出现的地方呢?

数组名也可以作实参和形参
评:数组名根本不能作形参

数组元素可以用作函数实参,不能用作形参
问题在于下面的“因为”

因为形参是在函数被调用时临时分配存储单元的,不可能为一个数组元素单独分配存储单元
1.auto 变量都是临时的,不仅仅是形参
2.什么时候也不可能为数组元素单独分配存储单元,这跟“形参是在函数被调用时临时分配存储单元的”有个屁关系

在用数组元素作函数实参时,把实参的值传给形参,是“值传递”方式
今天是中秋,早上太阳是从东边出来的
实际上C语言只有值传递
和用什么作实参没有关系

例 7.9 输入10个数,要求输出其中值最大的元素和该数是第几个数,
“输入10个数”,但没明确什么样的数
“元素”是代码层面的术语,却和问题的描述混为一谈

当然,本题可以不用max函数求两个数中的最大数,而在主函数中直接用if(m>a[ i])来判断和处理。本题的目的是介绍如何用数组元素作为函数实参

评:用愚蠢的数据结构和愚蠢的算法介绍数组元素作为函数实参
读者最多只能学会怎样愚蠢地用数组元素作实参

用数组元素作实参时,向形参变量传递的是数组元素的值,而用数组名作函数实参时,向形参(数组名或指针变量)传递的是数组首元素的地址。

不管什么作实参,传的都是“值”,数组名作实参也不例外
此外形参不可能是数组名

用数组名作函数参数,应该在主调函数和被调函数分别定义数组,例中array是形参数组名,score是实参数组名,分别在其所在函数中定义,不能只在一方定义。

评:没弄清什么叫定义数组

在定义average函数时,声明数组的大小为10,但在实际上,指定其大小是不起任何作用的,
评:不起作用为什么要写?

形参数组可以不指定大小,在定义数组时在数组名后面跟一个空的方括号,如:

但不指定数组的尺寸则是误导
写出的函数是半身不遂的函数

例7.11 有两个班级,分别有35名和30名学生,调用一个average函数,分别求这两个班的学生的平均成绩。
评:调用一个average函数,分别求这两个班的学生的平均成绩:病句

拙劣的题目可以伤害正常的逻辑思维能力

用数组名作函数实参,不是把数组元素的值传递给形参,而是把实参数组的首元素的地址传递给形参数组,这样两个数组就共占同一段内存单元。
评:“两个数组”,是一种捏造

用数组名作函数实参,不是把数组元素的值传递给形参,而是把实参数组的首元素的地址传递给形参数组,这样两个数组就共占同一段内存单元。
评:“两个数组”,是一种捏造

可以用多维数组名作为函数的实参和形参,在被调用函数中对形参数组定义时可以指定每一维的大小,也可以省略第一维的大小说明。例如:
评:写那个3是误导,因为根本没必要
此外,形参声明是根本不可能带那个“;”的,除非是古代的C语言

由于形参数组与实参数组类型相同
它们的类型压根就不一样

在第2维大小相同的前提下,形参数组的第1维可以与实参数组不同。例如,实参数组定义为
评:这是把无聊当知识卖弄

这时形参数组和实参数组都是由相同类型和大小的一维数组组成的
评:形参根本就不可能是数组(即使形式上是,但那叫不完整类型)
更不可能由一维数组组成

评:这是在教人写半身不遂的函数
这种函数没有价值和适应性
因为它本身依赖于一个莫名其妙的Magic number
7.8 局部变量和全局变量
定义变量可能有3种情况:
(1)在函数开头定义;
(2)在函数内的复合语句内定义;
(3)在函数的外部定义。
这表明老谭所号称的这本书是“按照C语言的新标准C99进行介绍”是蒙人的
老谭连C99门都没摸到

实际上只有两种可能:函数内和函数外

(4)在一个函数内部,可以在复合语句中定义变量,这些变量只在本复合语句中有效。这种复合语句也称为“分程序”或“程序块”。
在函数内定义的变量是局部变量,在函数之外定义的变量是全局变量。
评:“分程序”或“程序块”是老谭捏造g的新概念
第一不必要,因为有复合语句的概念,没必要再给它两个别名
第二不合理,因为源程序的下一层是函数定义,再下一层才是复合语句的层次,所以说“复合语句”是分程序非常荒谬
这种复合语句也称为“分程序”或“程序块”。:语文问题。既然是“这种”,就意味着还有“那种”,实际上根本没有。

设置全局变量的作用是增加了函数间数据联系的渠道。
评:这个说法违背结构化程序设计原则,是误导

如果在一个函数中改变了全局变量的值,就能影响到其他函数中全局变量的值。
评:“其他函数中全局变量”,这叫什么话?

由于函数的调用只能带回一个函数返回值,因此有时可以利用全局变量来对增加函数间的联系渠道,通过函数调用能得到一个以上的值。
评:这个外行,竟然用这种垃圾理论来蒙学生
完全不顾结构化程序设计最基本的原则

在C程序设计人员中有一个习惯(但非规定),将全局变量名的第个字母用大写表示。
老谭捏造也不是第一次了

例7.14 有一个一维数组,内放10个学生成绩,写一个函数,当主函数调用此函数后,能求出平均分、最高分和最低分。

那两个外部变量要多恶心有多恶心

由于Max和Min是全局变量
评:C语言只有外部变量,没有全局变量这个概念

建议不在必要时不要使用全局变量,原因如下:
①全局变量在程序的全部执行过程中都占用存储单元,而不是仅在需要时才开辟单元。
全局变量为外部变量之误
在程序的全部执行过程中都占用存储单元,并非不应该使用外部变量的原因

在某些语言里,全局变量的意思是只要定义了,其他模块就可见

在C语言中没有这样的东西

前一种其他模块可以用,但在使用前应该声明(这个应该是和全局变量的一个最主要的区别)
后一种其他模块不可以用

使用外部变量,最主要的问题是破坏了良好的程序结构,使程序的各个部分联系更紧密了

如果全部执行过程都占有单元也算一个缺陷的话,那static 局部变量怎么说,也不应该?有些变量确实需要一直占用内存

②它使函数的通用性降低了
评:应该是这样的函数没有通用性

评:对全局变量(外部变量)b的作用范围的标示是错误的
7.9 变量的存储方式和生存期
变量可以分为全局变量和局部变量。
评:全局变量是个既不正确也很糟糕的概念
全局变量的意思是只要定义,就全局可见
但C语言中外部变量并没有这样的性质
首先,外部变量的作用域只是定义点到所在源文件(或编译单元结束)
其他源文件使用前必须声明而不是可以直接拿过来使用
而且有的外部变量(static)其他源文件根本不能使用
即使在所在文件,外部变量也可能需要声明才能使用(定义在使用点后面的情形)
“全局”这两个字含糊掩盖了以上所提到的外部变量的精确含义
对于初学者来说尤其如此

有的变量则是在调用其所在的函数时才临时分配内存单元,而在函数调用结束后该存储单元就马上释放了,变量不存在了。
局部非static变量不是在调用其所在函数后存在的
应该是程序执行到其所在块声明点之后才存在的

变量的存储有两种不同的方式:静态存储方式和动态存储方式
变量的存储方式没什么静态动态之分

静态存储方式是指在程序运行期间由系统分配的存储空间的方式,而动态存储方式则是在程序运行期间根据需要进行动态的分配空间的方式
评:“静态存储方式是指在程序运行期间由系统分配的存储空间的方式”
这里所谓的“由系统分配”是在打马虎眼,搞不清这是什么系统
如果是编译系统,那么后者也是由系统分配

先看一下内存中供用户使用的存储空间的情况。这个存储空间可以分为3部分:
评:这个说法没有任何根据,更荒谬的是

在动态存储区存放以下数据:
(1)函数形式参数。在调用函数时给形参分配空间。
(2)函数中定义的没有用关键字static声明的变量,即自动变量。
(3)函数调用时的现场保护和返回值等。
评:(1)、(2)都是错误的,因为还有register
(3)是一种没有根据的猜测或根据个别实现的情况作出的不完全归纳

根据变量的存储类别,可以知道变量的作用域和生存期。
评:变量的存储类别与变量的作用域没有半毛钱关系

函数中的局部变量,如果不专门声明为static(静态)存储类别,都是动态地分配存储空间的,数据存储在动态存储区中。
“动态存储区”是老谭捏造的一块“内存”区域
而非static的局部变量,未必放在内存之中

函数中的形参和在函数中定义的局部变量(包括在复合语句中定义的局部变量)……在函数调用结束时就自动释放这些存储空间。
评:块作用域的auto局部变量不是在函数结束时释放,而是在块结束时释放

关键字“auto”可以省略,不写auto则隐含指定为“自动存储类别”
应该是没声明存储类别的局部变量为自动存储类别

评:老谭号称是按照C99写的
但这种写法在C99是禁止的

对应的运行结果也是货不对板

评:最后“-”莫名其妙
什么情况下需要用局部静态变量呢?……例如可以用下面的方法求n!。
例7.17 输出1到5的阶乘值。
这不是正确使用static 局部变量的方法
因为这个fac()函数和那啥一样
如果题目要求求 1、3、5的阶乘
立刻就会发现fac()的残疾
如果函数中的变量只被引用而不改变值,则定义为静态局部变量(同时初始化)比较方便,以免每次调用时重新赋值。
评:既然不改变,为什么不用常量?外部变量等技术手段?
究竟何时使用局部静态变量以及如何使用,看来老谭根本不清楚
所以无论给出的例子还是讲解都是错误的

用静态存储要多占内存(长期占用不释放,而不是像动态存储那样一个单元可以先后为多个变量使用,节约内存)……而且降低了程序的可读性……
评:降低程序可读性是无稽之谈
动态存储节约内存也是无稽之谈

评:注意这里的静态存储与外部还是局部变量无关
局部变量也可以是静态生命期
可笑的是你把静态存储理解为非局部变量

寄存器存储在CPU中的寄存器中

全局变量都是存放在静态存储区中的。因此它们的生存期是固定的,存在于程序的整个运行过程。
评:1.全局变量是外部变量之误
2.外部变量存放在哪里跟程序员无关,这是编译器作者的事情
3.外部变量的生存期和它存放在哪里没有因果关系
实际上只要一句话就足够了:外部变量具有静态存储持续期(static storage duration),在程序运行过程中一直存在。

一般来说,外部变量是在函数外部定义的全局变量。
如果“外部变量是在函数外部定义的全局变量”
那么老谭能否说说什么是在函数内部定义的全局变量

一般来说,外部变量是在函数外部定义的全局变量。它的作用域是从变量的定义处开始,到本程序文件的末尾。
评:变量的作用域并不是从变量的定义处开始
而是从变量的声明处开始

但有时设计人员希望能扩展外部变量的作用域。
评:不存在所谓作用域扩展

  1. 在一个文件内扩展外部变量的作用域
    在C里根本就不存在扩展变量作用域
    变量的作用域决定于声明的位置

如果外部变量不在文件的开头定义,其有效的作用范围只限于定义处到文件结束。
评:1.外部变量的作用域取决于声明的位置
2.那个“如果”莫名其妙,外部变量的作用域无论你“如果”还是不“如果”都是从声明处到文件的结束

评:所谓“把外部变量A,B,C的作用域扩展到从此处开始”是误导,实际上是在main()中声明这三个变量,以便在该函数内使用
代码风格拙劣,思想垃圾,简直是教唆别人如何写垃圾代码
由于A,B,C是外部变量,所以在调用max函数时用不到参数传递。在max函数中可直接使用外部变量A,B,C的值。
评:这是在教读者如何用最荒唐的方法使用外部变量

用extern声明外部变量时,类型名可以写也可以不写。例如,“extern int A,B,C;”也可以写成“extern A,B,C;”。因为它不是定义变量,可以不指定类型,只须写出外部变量名即可。
评:这是在信口开河,胡说八道

例7.19 给定b的值,输入a和m,求a*b和a^m的值。

实际上,在编译时遇到extern 时,先在本文件中找外部变量的定义,如果找到,就在本文件扩展作用域;如果找不到,就在连接时从其他文件中找外部变量的定义。如果从其他文件中找到了,就将作用域扩展到本文件;如果再找不到就按出错处理。
评:“先后理解成在限定一个翻译单元内的代码顺序解析能说得通。当然先定义后使用的说法是错的,应该是先声明后使用。”
这个完全同意。只能在同一个翻译单元内谈先后
而且应该是先声明后使用而不是先定义后使用
不止如此,至少还是有遗漏的。
这里的“类型”是都能写在函数名左边的“类型名”吗?

对一个数据的定义,需要指定两种属性:数据类型和存储类别,分别使用两个关键字。
常量即不存在定义的问题
存储类别也不一定通过关键字指定
"分别使用两个关键字"更是胡扯
至少还有两种情况:一个关键字不足以说明类型,仅用关键字不足以说明类型

可以用extern声明已定义的外部变量,例如:
评:这个错误已经出现至少十几次了

自动变量,即动态局部变量(离开函数,值就消失)
寄存器变量(离开函数,值就消失)
1.不是值消失,而是对象消失
2.“离开函数”这个说法是错误的,应该是离开语句块

从作用域角度分,有局部变量和全局变量。它们采用的存储类别如下:
评:1.全局变量是个错误的概念
2.存储类别是个含糊不清的概念

寄存器变量(离开函数,值就消失)
评:“函数”、“离开”和“值”这三个概念都有错误
分别应该是“语句块”、“结束”和“数据对象”

评:首先“全局变量”是无中生有
其次把全局变量分为静态外部变量和外部变量很错乱
第三和200页老谭给出的定义自相矛盾

静态外部变量(本文件内有效)

外部变量(用extern声明后,其他文件可引用)
评:明显的词不达意,该回去重修小学语文

图7.20是生存期的示意图
评:图7.20中,把f2()函数中的局部静态变量c的生存期从f2()被调用开始算起,是错误的

如果一个变量在某个文件或函数范围内是有效的,就称该范围为该变量的作用域,在此作用域内可以引用该变量,在专业书中称变量在此作用域内“可见”
评:这个是似是而非、不求甚解的蒙人的说法
作用域和可见性是两回事

表7.2表示各种类型变量的作用域和存在性的情况。
评:表7.2是非常荒谬的一张表格
认为外部变量的作用域涵盖函数内与函数外
实际上函数内与函数外都可能不是外部变量的作用域
因为外部变量的作用域从声明处开始到源文件结束或到所在块的结束处
因为外部变量的作用域从定义处开始到源文件结束
定义前面的部分可能不属于其作用域
以函数内外来描述变量的存在性也很荒谬
7.10 关于变量的声明和定义
在第2章介绍了如何定义一个变量。
评:第2章并没有介绍如何定义变量

从第2章已经知道,一个函数一般由两部分组成:声明部分和执行语句。
第2章并没有介绍函数由声明部分和执行语句两部分组成
函数也并不是由声明部分和执行语句两部分组成

函数的声明是函数的原型
函数的原型是函数的声明(的一种)

对被调用函数的声明是放在主调函数的声明部分中的
不仅可能不必要地多次声明
而且污染主调函数的代码

对“int a;” 而言,它既是声明,又是定义;而对“extern a;”而言,它是声明而不是定义。
的位置在{}之内,可以说“它既是声明,又是定义”
如果在{}之外,它可能不是定义
在C89中只有int类型可以这样写
在C99中不容许省略int

int A; //是定义,定义A为整型外部变量
评:extern A; //是声明,不是定义,声明将已定义的外部变量A的作用域扩展到此:
这个确实是声明,不是定义。但并不是“将已定义的外部变量A的作用域扩展到此”,这个标识符A本身有自己的作用域,即声明点到}。这个声明同时说明了A的定义在别处。此外,这个声明应该写明A的类型

在同一文件中,可以有多次对同一外部变量的声明,它的位置可以在函数之内(哪个函数要用就在哪个函数中声明),也可以在函数之外(在外部变量的定义点之前)。
尤其是“哪个函数要用就在哪个函数中声明”
7.10 内部函数和外部函数
在定义内部函数时,在函数名和函数类型的前面加static,即:

而且这样很难保证函数类型声明的一致性

一般都省写extern,例如例8.20程序中main函数的第一个函数声明可写成
评:“一般都省写extern”是误导,C语言鼓励程序员明确
此处是第7章,居然扯出个“例8.20”

将地址形象化地称为“指针”
多数人指针学得稀里糊涂不是因为别的
就是因为他们把指针和地址混为一谈

评:关于地址,老谭是这样说的“内存区的每一个字节有一个编号,这就是‘地址’”

然而,变量单元所占的可能不只一个字节
所以地址指向变量单元的说法是荒谬的
由于通过地址能找到所需的变量单元,因此说,地址指向该变量单元。
此外通过地址并不能找到所需的变量单元
一个变量的地址称为该变量的“指针”
评:这是自己扇自己耳光
前面老谭说“内存区的每一个字节有一个编号,这就是‘地址’”
变量可能占几个字节,哪来的地址?

如果有一个变量专门用来存放另一个变量的地址(即指针),则它称为“指针变量”
再次混淆指针与地址这两个概念
“专门用来存放另一个变量的地址”,井蛙之见
如果算,它存放了哪个变量的地址啦?

评:C语言中压根就没有“地址变量”这种东西

指针变量的值是地址(即指针)
评:再次混淆指针与地址这两个概念
评:“”表示“指向”是胡扯
定义指针变量的一般形式为
这个不知道老谭如何解释

  技术是真的。但是,骗子把收购价格提高了成千上万倍,说什么种植2平方米,年收十几万。还搞个什么回收合同,其实都是幌子。

  技术还不成熟,目前成功的只是北虫草(一种类似冬虫夏草的东西)。就连现在最权威的科学家还在实验阶段,别说大面积推广了。而骗子却声称南北适宜,人人可做,不管什么土质,似乎只要你种了,就能致富,简直一派胡言。

  3、月月结果的草莓

  不用管理,只要种到土里,你就等着每月采摘果子。这种草莓品种是有,但是完全达不到所说的,纯属炒种行为。

  骗子为了骗钱,把一些不常见的或者很贵重的药材,说得天花乱坠,什么签订合同啊,保价回收等,其实你收到的种子要么不发芽,要么成活率低得惊人,这就是个大骗局。

  确实具有较高的营养价值和药用价值,但是真正能够回收的单位少得可怜,目前大量使用芦荟的单位大都有自己的种植基地。骗子就是为了销售他们的种苗。

  项目假,"中华黑豚"的名字完全是那些有预谋者杜撰的。其实就是豚鼠类,骗子把那些不值钱的动物冠一个新的名称,然后称为珍稀动物,误导经营者,从而大发不义之财。他们进行种苗销售,赚的就是种苗钱。

  骗子声称一窝10多万只,养十窝可以收入上万元。全是骗术。

  项目真,市场前景也不错。但是在中国市场上,很难有真正的美国青蛙种苗。那些所谓的种苗,几乎全是自己培养的。

  是中国东北之宝,可以提取林蛙油,可是并不是每个地方都能养殖的。千万不要上当。

  蜘蛛毒确实珍贵,不过,普通老百姓取的毒可没有人要。而且也不是所有的蜘蛛毒都有用。说白子,还是卖种苗或者技术。

  白玉蜗牛确实好养,而且营养价值极高。骗子声称投资少,周期短,获利巨大。但是目前在中国的市场还很小。

  12、米糠提取植酸钙

  从技术上讲是真的,但是请千万不要搞,因为所谓有高价回收是假的。

  13、猪血提取血红素

  大多都是骗取加盟费或保证金。如广告上说组装电子笔,免费提供散件,包运费,一支加工费1.5元。其实,这种笔市场价0.8元/支。你找上门,他会向你要高额的加盟费或保证金、其实这些散件和运费都包含在里面了.他们赚的就是加盟费,他们会做赔本的生意吗?

  15、废玻璃生产涤纶丝

  技术不成熟,他们以高科技为幌子,提出千元投入万元回报。其实这种产品的生产技术要求非常高。家庭生产的玻璃涤纶丝、质量根本无法保证,产品也就不可能有市场,他们赚取的是生产设备。

  16、塑料提炼柴油

  虽然是成功的技术,但是只是停留在国外的科研院所,中国目前没有相应的标准,何况生产设备昂贵,小规模生产不划算

  17、鸡蛋提取溶菌酶

  技术是真的。但是生产出的产品根本就不可能被厂家收购。

  18、文化月饼及配套生产设备开发

  取个斯文的名字罢了,还不是常见的月饼?只不过想高价销售设备。再说月饼,也就是每年的八月才需要的一种特殊食品,市场销量有限。

  技术是真的,但是目前我国主要是炒种阶段,商业利用时机还没有成熟。而且购种极贵,少则上万元,多则几万元。

  从技术上讲是真实的,而且技术早已刊登在《中国科技致富大全》上了。不过,目前真正收购癞蛤蟆皮的很少,你所看到的收购信息大都是引诱你去学习技术的。

  技术是真的。然而这种含银的废水很难找(很多人以为就是-般的废水)。建议谨慎投资,最好不搞。

  称与种植户签订包销合同,往往采用"公司+农户"的订单农业模式吸引了广大种植户的参与。其实仙人掌种植还没有达到商业应用的阶段。

  23、防真花代加工

  产品是真的,而且也确实有许多工厂需要请人加工。许多骗子公司往往看到这点骗你没商量。其实,这种加工都是工厂委托当地的人加工的,不可能委托异地特别是边远地区加工。

  24、几千元拥有自己的公司

  这是一种新骗术,主要是要你交纳几千元加盟费,成为骗子公司的网上分公司,然后由你去发展下线,从而达到推销一些陈旧设备、种苗或者骗取保证金的目的。

  销路小、饲养技术要求高。

  26、北京的公司要小心

  许多出售所谓技术、机械、开网络分站、加盟连锁的北京公司把求富的人骗渗了!当然不是说所有的北京公司都这样。

  27、厂价直销玩具

  那牡看似神奇的玩具一般价格高。质量差,根本就卖不出去。

  28、遥控飞机租玩加盟项目

  骗取加盟费。而且此飞机的电池极不耐用。

  并不是什么稀罕的品种,而是从市场上购进一些最大的鳝,冒充珍贵的品种。

  这个技术完全是最原始的工艺,在技术上没有任何科技含量

  酿出来的啤酒口感与真正的啤酒相差太远。而且价格、成本特高。

  32、厕所卫生保护神

  号称能使马桶五年不用清洗。效果令人怀疑。

  33、武医点穴按摩培训

  按摩作为理疗项目是可行的,但是有人把它披上神秘的点穴外衣,夸大功效,已经有很多人上了当。

  农业公司和种养户签订包销合同,并以高额回报方式,诱使农民上当受骗。

  35、组装玩具飞机

  无论名字多新潮。它还是普通的玩具飞机,对儿童来说一点吸引力也没有。主要是骗取原料押金。

  农业公司和种养户签订包销合同,并以高额回报方式,诱使农民上当受骗。

  37、能使人增高的产品

  如xx增高药等多是没多大效果的药品,xx增高鞋就是在鞋帮下面胶上5-8厘米的鞋底。

  利用宽带技术进行通话的新型通信方式。政策尚未开放,普及需要时间。

  每台两千元。实际上只值几百元的丝网印刷机。

  这些机器看起来很神奇,其实它只是将家里能用的一些工具集中到一起罢了。但皮蛋(变蛋)怎样才能在极少的时间制作成功呢?这是化学原 料。皮蛋过去添加的碱是石灰,用量少,味道正。但皮蛋机加工时用的是有强烈腐蚀作用的烧碱,用量大,对人体有害,味道可以说难以下口。

  41、魔术印(转印)

  就是过去的转移画,改了一个名称而已,没有实用价值。

  42、xx烤鱼,xx鱼

  将一些特色菜打出加盟的旗号圈钱。

  技术是真的。只要打着回收旗号的请谨慎对待。

  44、收购古钱,硬币、像章

  假的。只不过是骗子们想推销他们的资料罢了。

  45、"联合创办清洁球生产厂"

  凡是联营办厂之类的,往往是骗人,你投资他出技术,钱-旦到手,卷铺盖走人。

  46、神奇木偶跳舞人、听口令小木人(还有其它)

  虽然是真实的产品,但是由于属于魔术产品,具有蒙蔽性,买回后大都有上当的感觉。

  47、手工卡通(笔)

  繁琐又低产,质量粗劣,建议谨慎。

  这些机器看起来很神奇,其实它只是将-些普通材料,用具集中一起罢了。

  49、小本速富或暴富绝招

  就是一些无法实现的资料,再就是引诱你将连锁之类的信件发出几十封,然后就坐在家里等钱。 

  50,一到二折低价批发图书

  有两种情况,一、所售的图书并非宣传上所列出的图书,而是一些旧书或冒牌书。二、收款不发货。

  一种低级的玩具,远没有宣传说得那么神奇。

  产品称用水可以直接点灯。这是无数人的梦想。现在还没有找到把梦变现实的途径。

  说白了是利用人们想一夜暴富的心理,卖一些东拼西凑的没用的资料。

  54、百元钱万里行致富法

  可能就是让你在路途中为其推销产品。想法是不错,但这并不适合人人去做。

  实际就是香艳梨,味道比番茄还不如,如果有人喜欢吃才是世界奇迹。

  56、数码影像加盟

  类似于xx加盟多数不真实,为的是销售他们的产品。这种情况以北京、武汉、长沙等地最为常见。

  57、微型卫星接收机

  目前国内类似的产品都是假的。什么小耳朵,收视宝等,全部是骗子,收了钱不会发货的。

  也叫藏红花,有的改名叫泊夫兰等,药店到处都是,价格也不如宣传的那么贵,建议不要种植。

  59、木屑能变黄金

  其实就是一种普通工艺品,却造成人们以为是木屑制作的假相。

  说什么能动会变,成本2角,售价1元。其实就是光栅画片,到处都有售。现在又出现了"魔幻动画书皮",意思一样。

  61、合成无铅柴油、汽油

  62、大蒜素加工回收

  骗局,已有无数人上当。

  63、让人聪明的口腔喷剂

  称只需几秒马上,思维敏捷。效果不好,没有什么推广价值。

  植发本身是真实的,但是全国的加盟店,盈利的大约只有20%,其余的大多处于亏本状态。

  是几年前炒作的虚假技术。

  夜视镜就是在头上戴上一个小型探照电灯,别以为是电影间谍特务使用的东西。

  67、麦秸制作棉花

  只能制作出白色纤维,但是与棉花无法相比。

  68、形形色色的致富机械

  无论他们承诺什么,比如:生产工艺、人员培训、提供市场营销方案、设立分厂使用商标的手续等,你也不能全相信,要多方考察,调查市场,产品销路,谨慎行事。

  号称德国德x薯业国内总代理。其实完全是国内一家小企业杜撰出来的神话。这是一家毫无信誉的公司,不做市场,只为圈经销商的钱。已有多人上当受骗。

  70、合成有壳鸡蛋

  没有营养,做成了无人要。

  71、贷款绝技、信息

  其实就是要你将几百元中介费打在他的卡上,你打他电话就关机了。

  72、电表倒走器、磅秤解码器

  73、儿童学习机(或学生宝)

  原来的名字叫学生宝,已经在市场上臭名昭着。现在又换了个更好的名字,其实对学生没有多少作用

  74、老虎机、游戏机干扰器

  75、土法提取胆红素、血红素、肝钠素、尿液酶

  技术是真实的,但是目前没有一家培训此技术的单位能够真正回收产品。主要是为了骗取技术培训费、资料费,有的是骗取防伪的设备费,药品费。"

  76、微型沼气设备(罐)

  技术暂时没有成熟,基本上炒作,为了收取加盟费。

  77、可擦圆珠笔、万能遥控开关组装加工

  打出东亚某某公司、美国某某公司的招牌,建立办事处,其实就是收取加盟费,为他推销设备和产品。

  放风筝完全是为了休闲、健身,我不知道夜晚放风筝有什么可以值得称道的。

  机器、技术都是可靠的。但是市面上打着"xx型榨油机",很多是伪造产品,榨出的油质量低劣,还严重跑渣。他们往往挂着某某农业推广站的旗号,消除你的疑心,请谨慎选购。

  8l、打长途1分钱/分钟

  全国招商。收管理服务费后就不管了,要不就找借口推托。

  招商广告吹嘘说生产主要原料是秸杆。其实主要原料是氧化镁和氯化镁,玻纤布和活性剂,秸杆只是占了10%左右。此类公司往往打着xx大学的牌子和科技报国的旗号,招摇撞骗,欺骗广大迫切想致富的人。

  技术待提高,成本待下降。

  84、潲水提炼生物柴油回收

  难上规模,实用性不强。

  85、手机加香机项目加盟

  手机消毒、加香是可靠项目,直接购买设备就行,不用加盟。

  86、2元钱的热水器、水龙头热水器。

  可以将水加热,但是稍不留神就触电,投资请谨慎。

  探宝器是真的,可是现在哪有那么多的宝物轮到你来探测?

  88、700元办信息小报月收入5000元

  自己办个信息小报推广一些产品和技术,只要经营得当,是可以赚钱的。但是说700元办信息小报有点夸张。他们大多是要你按照他们的模式印刷那种简易的小报,帮他们出售资料。这种资料可信度低,不仅不会有收入,反而有可能亏本。

  89、自动粉墙抹灰机

  是真实项目,不过确实有很多单位打着粉墙机的招牌骗人,请小心。

  珍珠磨粉比较简单,购买简单的设备就可以了。建议先调查一下市场,谨慎进行。别相信加盟。

  隐形笔现在在市场上有大量销售,只不过是打着纳米旗号迷惑人,都是同一类产品的。

  92、珍珠领带的手工加工

  骗取材料费、押金等,一旦你上门交送产品他们以各种理由拒收或者对你高额罚款,说你的产品不合格,七扣八扣,那些押金还不够抵偿,反而还倒欠他们的。

  93、加工编织带、加工小玩具:

  其实就是钵仔糕,比较有市场。

  工艺品有一定的市场,但是现在有很多单位假借能回收产品为名,许诺使用"驰名商标",骗人参加培训。

  营养价值低,市场销路小。

  97、水性瓷光涂料

  不能玩,不能吃,不能用。根本没价值。

  99、小型电焊条生产

  主要目的是卖技术资料。国内大厂生产出来的产品都要经过竞争才能销售出去,小作坊生产出来的产品会有人要吗?

  100、"不入网,照看电视"

  一是出售一份没有任何作用的资料,二是叫你买他们的卫星接收器。请记住:几十元的接收器是不真实。

  每玩一次都要充气。小孩必须随身携带充气筒。试想哪个小孩子愿意背着打气筒跑来跑去?

  102、批发数码手机150元(有的是200元)。

  103、提取糖苷水解酶。

  技术不成熟,产品质量低,千万别信广告吹嘘。

  104、微型扫描摄像机

  其实是一台普通的摄像头,价格才几十元,与电视机配合才能使用。

  105、液化气式蜂窝煤

  与煤有关的广告太多太吸引入,但名称千变万化,性能夸得再高,还是一块蜂窝煤。不用助燃剂无法点火,不用木屑降不下成本。与高能燃料同属于一个类型的骗局。

  106、"燃煤王"、"超级倍化蜂窝煤"

  都有一个诱人的名字。可以说全是虚假的。技术远远没有达到广告上所吹嘘那么神奇。

  107、加工回收常见招数

  一、打出高科技幌子设陷阱。

  二、用高额回报作诱饵。

  三、让产品永远不合格。

  另外,不明言如何运作的小本速富或暴富绝招,十之八九是在骗取资料费。

  108、新奇特商品邮购信息

  有的厂家只收钱,不给邮寄产品,有些厂家收钱后寄来的却是值不了几个钱的劣质产品。

  骗局,骗取押金。声明在一定时间里完成多少产量,逾期不退押金。这是加工骗局常用的招数。就算你请一百个人来做也不可能完成他们所定下的量(要合格的)。因为在骗子眼里的产品永远是不合格的

  谨慎加盟,多数是骗取加盟费、材料费。

  111、燃气节能王

  虚假项目。产品有两个机关骗取许多人信任。一是利用散热片散热,让人们误以为是节能。二是,将原本细小的气孔换成粗几倍的出气孔,加大火力。

  说是可以将劣质煤变成优质煤,就是为了骗取资料费。

  类似的还有组装合同等,绝大部分是骗人的。

  114、回收鼠须、鼠筋

  多是虚假信息,广告称提供捕捉工具,就是想你买他们的工具,回收是根本不可能。

  116、电话省钱机

  彻头彻尾的虚假项目。打着"清华大学"的幌子行骗。凡是吹嘘在某某名牌大学或研究院支持下的项目,越要谨慎。骗子往往为自己戴高帽,迷惑人们。越是这样的,越不要相信他们。

  117、强力纳米焊割气

  借"纳米"吹嘘,不要相信上当。

  118、加盟饮食连锁

  骗子借加盟热,纷纷打出"xx粥吧""xx食王"等加盟项目。他们一系列让人心动的规划,如承诺对各加盟分店的经营管理人员进行系统培训,使加盟者具备经营管理分店的全部知识与技能,包括开店预算、选址、操作技能、店面控制等等。再加之连锁计划、配送计划、管理支持等,整个规划看上去滴水不漏,完美无缺。其实都是空壳公司,圈加盟者的钱后就跑,或换名字冉骗。他们往往说是香港的子公司。当然也有不少饮食连锁是真实可靠的,对此行业有兴趣者谨慎考察。

  119、用秸杆做门,没有价值。

  果实味道差,产量虽高,但是在长江流域就无法正常过冬。

  121、哈蟆皮回收

  经过大量调查,关于哈蟆皮收回信息大多是假的,请谨慎小心。

  电瓶修复技术是一项实在的致富技术。电瓶修复需要注意几点。一是对电瓶专业知识的了解。二是掌握好修复液的制作技术。三是对修复设备进行调查,不要轻信广告。许多厂家往往夸大电瓶修复行业的前景,无非是想卖他们的机器。

  123、台湾爆x鸟,正宗烤xx

  其实就是取一个火爆的名字高价销售他们的机器。

  124、防盗报警卡

  防盗报警卡技术是真实的,但是由于其声音太小,而且已经过时,建议小心。

  称将美国进口的隐形眼镜放入几种进口的药水中浸泡,可直接看透扑 克、麻将、牌九等。但是广告者往往就是收钱不发货。

  126、充值省钱卡

  一个骗局,千万别上当!

  127、纳米纤维丝回收

  128、水晶石加工

  市场有限,很多单位就是骗取技术费或销售设备的。

  骗取加盟费,玩具质量差,价格高,很难获利。

  130、镍氢电池租赁加盟

  加盟时描述的理想盈利状态很难实现。

  木糖技术属于高新技术项目,以玉米芯、甘蔗渣为原料。规模投资建厂需几百元万元甚至上千万元,中小投资者已经很难介入。一些技术公司号称几万元即可加盟投入生产,实在是在吹嘘,即便进入也难以盈利。他们无非是想卖一些低劣设备和没什么技术含量的技术。

  说什么手工制作,可以付高额加工费。其实都是骗人的。

  133、水晶花加工:同上。

  135、花艺组装、花卉加工、花艺技术、花艺培训、花艺加盟:同上。

  136、几百元加工磁疗保健品

  根本不可能!国家对医疗器械领域设置门槛非常高(资金、设备、技术,产品等等)。

  137、加盟韩流的陷阱

  箱包、女性饰品、服装等领域盛行韩流。许多骗子也打着加盟韩流旗号招摇撞骗。鉴别真假主要看产品的产地,还有不能相信口头承诺。事先请律师对合同进行分析,要求盟主凡是承诺都要写入合同里。

  近几年国画价格一路攀升,许多骗子打着字画技术转让的旗号行骗。说什么高新字画技术,数日速成,年入多少万。字画技术可以卖大钱。但不是一朝一夕可以学会的,更没有什么速成法。都是骗子圈钱的手法罢了。

  139,废机油免蒸馏合成柴油

  140、多功能超强高效炉

  3分钟可烧开水,10分钟可蒸熟馒头。每天只需要2块普通蜂窝煤。这都是骗人的鬼话。

  141、五折供应网络游戏点卡

  类似于二折批发图书,虚假的项目。

  骗取押金,资料费。

  143、魔幻变形娃娃

  产品销量实在有限,千万别经营。

  魔术产品,销量有限,千万别轻易经营。

  145、手巾跳舞、空中来钱、穿钞神笔魔术产品,销量有限,千万别轻易经营。

  多数为骗局,请谨慎。

  147,石粉变钢材

  变木材,石材还可以,变钢材的技术还无法实现。

  虚假项目。骗取设备费、技术费。千万别上当。

  149、钞票检测卡

  150、手机充卡值

  100元只要36元或打3折等,类似信息大多是要你往银行汇款,收钱不发货!

  151、橡胶粉加工

  技术是真的,但是骗子是为了销售劣质机械,骗取保证金。

  152、饰品加盟陷阱

  90%以上的公司设在北京注册大牌商标,什么香港、韩国等。他们多数没有自己的工厂,都是在浙江义乌组织的低价或残次过时的商品,翻倍加价供给加盟商。生意并不是他们宣传的那么好。

  153、"致富新技术"

  所谓新技术,一般不能只是改个名称,换汤不换药,有的只是故意改变工艺,改变流程。为的就是赚你的资料费。

  15-20元看一百部清晰完整电影的纳米光盘。根本就是一个骗局。光盘披上纳米外表,其实和-般的光盘没什么两样。

  155,加工电子调压器。骗局!

  156、印地安人参回收(又名黄金参,铂金参)

  经调查了解,此乃大骗局!纯属卖种子。

  纯属炒作,农民朋友不要受骗。

  159、猪身上采砂

  朱砂是一种矿物质。猪身上根本没有"砂",纯属虚假信息。

  160、直投好项目,一般声称是大财团,可以提供大量资金等。

  就是为了骗取中介费。

  161、鸭子炼金术

  目前市场上热炒过此类产品,不久就发现是虚假产品。

  163、新型水晶固体燃料

  其实就是固体酒精。是个实在的产品。无良商家把它的功效、价格过分吹嘘,迷惑人们。

  164、废玻璃生产纱布

  技术真实,但不像一些资料所说的,设备,技术简易。

  真实产品。目前市场上有不少次品电子火柴,质量、使用期均和广告宣传差一大截。请大家细心咨询考察。

  为了销售他们的劣质机械。

  要你买他们的劣质设备。

  168、鸡蛋加工卵清素

  吹嘘高价回收,骗人的。

  169,稻壳提取纳米Si02

  Si02就是二氧化硅,稻壳提取Si02,成本高,市场不好。

  170、废旧轮胎制粉

  技术是真实可靠的。但许多打着国外技术、高价回收、高额利润等幌子行骗。其实骗子公司提供的都是假冒或过时机器。

  171、4.5万一年变10万

  广告吹嘘百分之二百的收益,其实是为了引诱你销售劣质产品。

  174、养殖淡水龙虾

  是真实可靠的养殖技术。但是目前许多公司打养殖龙虾的主意。吹嘘养殖是如何简单、提供的种苗是如何的高产。这些都是不切实际的空话,一切是为了炒他们的虾苗。

  175、柴草制气燃烧炉

  真实项目。但是目前的广告者完全是为了骗取加盟费,高价销售散件。

  176、急寻合作加工分厂

  广告往往称刚接到一笔加急订单或是技术转让、合资联营等。这类信息绝大多数是骗人的。

  177、提供名优新奇物产品3万种

  此类信息95%以上是假的,提供的地址或电话根本联系不上。一句话,骗你资料费。

  178、遥感预测仪

  夸大功能的假产品。

  179、玉米提炼蛋白质粉

  技术成熟的可靠项目。有些资料称提供机械、原料,加工产品回收。这类情况请谨慎,小心受骗

  用报纸、草纸、废纸为原料做成一次性环保筷子,技术、市场尚未成熟。对此项目感兴趣的朋友请谨慎小心。再说一想到废草纸做筷子,放进嘴里,是不是食欲全无?

  181、特效微型电子灭害器

  方圆几百米内捕鼠成功率99%,还可以驱灭蚊蝇。能产生这些效果的产品在市场上是有的。如果售价只有三四十元/台,那就值得谨慎。许多冠以高科技名衔的产品,充其量就是一些稍为改变包装的过时产品。

  182、捕捉野兔、野鸡器

  效果差,不要上当。

  183、人工合成鸡蛋设备

  人造蛋本身就没有市场,机器加工的人造蛋还是没有市场。请谨慎!

  要你种植果树,在果树下养杂交鸡、果园除草鸡(其实就是普通散养鸡),再用鸡粪繁殖苍蝇、蚯蚓,这样循环利用,达到养鸡不用饲料。骗子往往称提供种苗,产品回收,无非是引诱高价出售种苗。

  185、废旧轮胎炼油

  技术是真实的。目前许多小工厂或公司转让的技术都是落后土法炼油。污染严重,生产设备存在安全隐患。生产出来的轮胎油是多种油体的混合物,油质极差。

  186、x创富工程

  多是民间或某某公司提出来的新名词,但改不了其骗取钱财的核心。纯粹是一种新的通过发送信件收取下线钱财的诈骗形式。在此提醒广大朋友,当接到类似的小报资料时,千万别按照骗子的设计汇款。

  如电话防盗器、节能灯、书写收音两用笔等广告,广告称只要交保证金,就可免费领料组装,回收产品,让你获得丰厚的组装费。但当你交了保证金、领料组装完产品送交时,他们常以组装不合格为由拒收,目的是骗你几千元的保证金。

  188、高价回收药材

  往往打着xx药材研究所、xx药材场的招牌,销售种子种苗,将一些价格下滑的品种在广告中肆意吹嘘。有的将一些对环境及栽培技术有较严格要求的品种,一律说成南北皆宜,易于管理,还有的打着"联营"、"回收"等幌子骗人。

  189、出售"超高产"、"新特优"良种

  利用农民求高产的心理,出售一些未经审(认)定的农作物品种。还有的将众所周知的一般品种改换一个全新的名字,迷惑引种者。

  190、现在有很多所谓的创业项目网站,上面的项目绝大多数广告云

  月赚十万只要你来拿、本年度最赚钱的项目、免费铺货x万、投资5万=回报60万x亿 元的市场等你加入......当然,这其中也有少数项目还是不错的,但可以肯定的说,这其中绝大多数项目是需要大家小心谨慎的。就算看起来很简单的真实项 目,实际上当你真正去做了,才会发现不是想象中的那么回事,更何况虚假的项目。

  191、快速瘦身汤

  类似的产品还有"xx排油带","x抹瘦"等等,都达不到宣传的效果。有的根本就是骗取你的加盟费。

  192、无漫游费手机卡

  193,安全彩光鞭炮

  此项目已经迷惑了不少人,让很多人上了当。

  如出租酿酒设备等。一般租限为一年,一年后才退还押金,其实骗子公司为销售设备而变换的伎俩。

  195、洗衣粉设备

  骗局!为了销售他们的劣质设备,现在洗衣粉太多,个人生产出来的洗衣粉,在市场上根本没有优势可言。全国各地已有无数人上当受骗。

  196、纳米无磷杀菌洗衣粉

  虚假的项目。时下许多公司,为了诱惑消费者,把一些不相关的产品及技术扣上"纳米"的帽子,招摇撞骗。

  197、小型塑料方便袋机

  建议谨慎。依据成本和市场价计算,生产出的产品根本无利可图,甚至亏本。更何况用这类型设备生产的产品多是劣质产品。

  先别说此产品违法与否,就其效果来说远没有资料上说的那么神奇,二三十块钱的产品其有效范围就是十几米。

  199、仿真的手枪

  如果是仿真的,有什么用?如果是真实的,那不是违法吗?

  产品质量需要提高。几千元的简易设备很难生产出合格的产品。

  201、太阳能热水器

  收取加盟费的,产品不可靠

  剪纸是民间艺术,多用手工制作。所谓的剪纸机就是刻字机,换了个名称而已。换个名称每台小刻字机就能骗取买家上千元。

在学习要做到以下几个环节:制定计划、课前自学、专心上课、及时复习、独立作业、解决疑难、系统小结和课外学习,每一个环节都有较深刻的内容,带有较强的目的性、针对性,要落实到位。小编给大家整理的有用必考知识点归纳,希望能帮助到你!

高一数学有用必考知识点归纳1

一般地,自变量x和因变量y之间存在如下关系:

(a,b,c为常数,a≠0,且a决定函数的开口方向,a>0时,开口方向向上,a<0时,开口方向向下,IaI还可以决定开口大小,IaI越大开口就越小,IaI越小开口就越大.)

则称y为x的二次函数。

二次函数表达式的右边通常为二次三项式。

II.二次函数的三种表达式

注:在3种形式的互相转化中,有如下关系:

III.二次函数的图像

在平面直角坐标系中作出二次函数y=x^2的图像,

可以看出,二次函数的图像是一条抛物线。

1.抛物线是轴对称图形。对称轴为直线

对称轴与抛物线的交点为抛物线的顶点P。

特别地,当b=0时,抛物线的对称轴是y轴(即直线x=0)

2.抛物线有一个顶点P,坐标为

3.二次项系数a决定抛物线的开口方向和大小。

当a>0时,抛物线向上开口;当a<0时,抛物线向下开口。

|a|越大,则抛物线的开口越小。

4.一次项系数b和二次项系数a共同决定对称轴的位置。

当a与b异号时(即ab<0),对称轴在y轴右。

5.常数项c决定抛物线与y轴交点。

抛物线与y轴交于(0,c)

6.抛物线与x轴交点个数

Δ=b^2-4ac<0时,抛物线与x轴没有交点。X的取值是虚数(x=-b±√b^2-4ac的值的相反数,乘上虚数i,整个式子除以2a)

高一数学有用必考知识点归纳2

1、集合的含义:某些指定的对象集在一起就成为一个集合,其中每一个对象叫元素.

2、集合的中元素的三个特性:

1.元素的确定性;2.元素的互异性;3.元素的无序性

说明:(1)对于一个给定的集合,集合中的元素是确定的,任何一个对象或者是或者不是这个给定的集合的元素.

(2)任何一个给定的集合中,任何两个元素都是不同的对象,相同的对象归入一个集合时,仅算一个元素.

(3)集合中的元素是平等的,没有先后顺序,因此判定两个集合是否一样,仅需比较它们的元素是否一样,不需考查排列顺序是否一样.

(4)集合元素的三个特性使集合本身具有了确定性和整体性.

3、集合的表示:{}如{我校的队员},{太平洋,大西洋,印度洋,北冰洋}

2.集合的表示:列举法与描述法.

注意啊:常用数集及其记法:

非负整数集(即自然数集)记作:N

正整数集N_或N+整数集Z有理数集Q实数集R

集合的元素通常用小写的拉丁字母表示,如:a是集合A的元素,就说a属于集合A记作aA,相反,a不属于集合A记作a?A

列举法:把集合中的元素一一列举出来,然后用一个大括号括上.

描述法:将集合中的元素的公共属性描述出来,写在大括号内表示集合的方法.用确定的条件表示某些对象是否属于这个集合的方法.

①语言描述法:例:{不是直角三角形的三角形}

1.有限集含有有限个元素的集合

2.无限集含有无限个元素的集合

3.空集不含任何元素的集合例:{x|x2=-5}

注意:有两种可能(1)A是B的一部分,;(2)A与B是同一集合.

反之:集合A不包含于集合B,或集合B不包含集合A,记作AB或BA

结论:对于两个集合A与B,如果集合A的任何一个元素都是集合B的元素,同时,集合B的任何一个元素都是集合A的元素,我们就说集合A等于集合B,即:A=B

①任何一个集合是它本身的子集.AA

②真子集:如果AB,且A1B那就说集合A是集合B的真子集,记作AB(或BA)

3.不含任何元素的集合叫做空集,记为

规定:空集是任何集合的子集,空集是任何非空集合的真子集.

1.交集的定义:一般地,由所有属于A且属于B的元素所组成的集合,叫做A,B的交集.

2、并集的定义:一般地,由所有属于集合A或属于集合B的元素所组成的集合,叫做A,B的并集.记作:AB(读作A并B),即AB={x|xA,或xB}.

(1)补集:设S是一个集合,A是S的一个子集(即),由S中所有不属于A的元素组成的集合,叫做S中子集A的补集(或余集)

(2)全集:如果集合S含有我们所要研究的各个集合的全部元素,这个集合就可以看作一个全集.通常用U来表示.

高一数学有用必考知识点归纳3

从平面解析几何的角度来看,平面上的直线就是由平面直角坐标系中的一个二元一次方程所表示的图形。求两条直线的交点,只需把这两个二元一次方程联立求解,当这个联立方程组无解时,两直线平行;有无穷多解时,两直线重合;只有一解时,两直线相交于一点。常用直线向上方向与X轴正向的夹角(叫直线的倾斜角)或该角的正切(称直线的斜率)来表示平面上直线(对于X轴)的倾斜程度。可以通过斜率来判断两条直线是否互相平行或互相垂直,也可计算它们的交角。直线与某个坐标轴的交点在该坐标轴上的坐标,称为直线在该坐标轴上的截距。直线在平面上的位置,由它的斜率和一个截距完全确定。在空间,两个平交时,交线为一条直线。因此,在空间直角坐标系中,用两个表示平面的三元一次方程联立,作为它们相交所得直线的方程。

补充一下:最基本的标准方程不要忘了,AX+BY+C=0,

因为,上面的四种直线方程不包含斜率K不存在的情况,如x=3,这条直线就不能用上面的四种形式表示,解题过程中尤其要注意,K不存在的情况。

A.直线经过点(2,-1),斜率为-1

B.直线经过点(-2,-1),斜率为1

D.直线经过点(1,-2),斜率为-1

2.直线3x+2y+6=0的斜率为k,在y轴上的截距为b,则有()

3.已知直线l的方程为y+1=2(x+),且l的斜率为a,在y轴上的截距为b,则logab的值为()

【解析】选B.因为倾斜角为135°,所以k=-1,

5.经过点(-1,1),斜率是直线y=x-2的斜率的2倍的直线是()

【解析】选C.由已知得所求直线的斜率k=2×=.

高一数学有用必考知识点归纳相关:

我要回帖

更多关于 费城0比2西蒙斯 的文章

 

随机推荐