17Q&A-Week2

三明二中高二(17)班。
(每天下午自习课后把各大未解之谜收集起来贴到后黑板神马的。。
唔……又抓到不少好题……

Q:求\(y=\sqrt{x^{2}-2x+2}+ \sqrt{x^{2}-4x+8}\)的最小值

A:\(y=\sqrt{(x-1)^{2}+1^{2}}+ \sqrt{(x-2)^{2}+2^{2}}\) 即X轴上的点到(1,1),(2,-2)的距离之和。

之后数形结合就不用说了吧

傲游截图20130914140208

Q:电容器串联会怎么样?

A:
\[q_{1}=q_{2}=Q\]
\[U=U_{1}+U_{2}=Q/C_{1}+Q/C_{2} \]
\[1/C=1/C_{1}+1/C_{2}\]

Q:手机充电器放在插座上会耗电吗?

A:有,很小,主要是变压器空载损耗和控制电路的功率。但就那么几mW的……电表测的出来吗?

开关电源只要不是太差,太偷工减料,功率因数不会太低的,一般从0.8-0.99之间,取平均值0.9来看的话,这只充电器在240V输入待机状态下消耗 P=0.9*240V*0.000832A=0.18W 那么插一年的话也就消耗1.576KW左右,1.5度电,按照峰电电价最贵0.8一度计算,才1块多,算上峰谷的话,一年1块钱内。

[http://www.guokr.com/question/457294/]

Q:镀锌的时候如何控制[H+]不放电?

A:利用氰氢酸的电离度极小,用氰化物镀锌。如果产生了气泡,高温除氢即可。

PS:

本来氢离子的标准电极电位比锌要正一些,应该优先于锌离子析出。但析出时还要考虑到氢离子在该析出的材料上的超电位,这就使得锌离子的实际电位比氢的还要正,故是锌的析出而不是氢的析出。[http://zhidao.baidu.com/question/257096764.html]

 

17Q&A-Week1

三明二中高二(17)班。
(每天下午自习课后把各大未解之谜收集起来贴到后黑板神马的。。
第一天就碰到了很多奇葩的问题。选几个来看看。

Q:求证1 + 1 = 2

A:(前几天刚背过,复习一下。居然真有人问23333

定义自然数:

  1. \(\mathbb{0}\)是自然数;
  2. 每一个确定的自然数a,都有一个确定的后继数a',a'也是自然数.
  3. 如果自然数b c的后继数都是自然数a,那么b = c,
  4. \(\mathbb{0}\)不是任何自然数的后继数;
  5. 任意关于自然数的命题,如果证明了它对自然数0是对的,又假定它对自然数 n为真时,可以证明它对n' 也真,那么,命题对所有自然数都真.

更正式的定义如下:
一个戴德金-皮亚诺结构为一满足下列条件的三元组(X, x, f):
X 是一集合,x 为 X 中一元素,f 是 X 到自身的映射。
x 不在 f 的值域内.(对应上面的公理4)
f 为一单射.(对应上面的公理3)
若 A 为 X 的子集并满足:
   x \(\in\) A, 且
   \(a \in A \rightarrow f(a) \in A\)
则 A = X。

定义加法:
我们定义,加法是满足以下两种规则的运算:
1. \(\forall m \in \mathbb{Z},0 + m = m\)
2. \(\forall m,n \in \mathbb{Z},n' + m = (n + m)'\);

以下证明1+1=2
1 + 1
  = 0’ + 1 (根据自然数的公理)
  = (0 + 1)’(根据加法定义 2)
  = 1’ (根据加法定义 1)
  = 2 (根据自然数的公理)

Q:已知x为男生,命题“若x是人,则x是男人”为真。可是该命题的逆否命题。。

A:也是真命题。
http://m.guokr.com/question/229866/
p→q
1若:p是真,q是真,则 p\(\rightarrow\)q是真;
2若:p是真,q是假,则 p\(\rightarrow\)q是假;
3若:p是假,q是真,则 p\(\rightarrow\)q是真;
4若:p是假,q是假,则 p\(\rightarrow\)q是真。
假命题是任何命题的充分条件。
所以说如果太阳从西边出来了,那么我就是超人。

Q:高尔基体、生长素和抗原分别是什么?

生长素参见人教版生物必修三p46
抗原参见必修三p37和http://zh.wikipedia.org/wiki/抗原
高尔基体参见http://zh.wikipedia.org/wiki/高尔基体
高尔基体的作用就相当于一个物流车间。好比给组装好的车子安上轮胎,打上标签和车牌,运到目的地就可以开了。
更形式化的说法是蛋白质翻译后修饰的场所。

按惯例翻了翻百度统计的数据,PV还是稳定在两位数。
搜索词稳定的每天一个Librazy。
等等访问来源有一个http://kurunie.duapp.com/
扫到duapp我的第一反应是brainpass,再一看不对啊
长按,访问网址,回车(opera mini确实不错。。
看了看他的博文。。我有那么值得膜拜吗。。
还有卡兜名片内个自我介绍很明显是抄袭我的风格啊。。
最大的怨念是为什么不用holodark主题了。。很明显他之前用过。。目测是这个主题的第一个使用者啊。
以上

C语言速成手册(四):指针、动态内存分配、标准输入

Via http://www.matrix67.com/blog/article.asp?id=271 by Matrix67

目录:
C语言速成手册(一):基本数据类型、标准输出、函数
C语言速成手册(二):布尔值、条件判断、循环
C语言速成手册(三):数组、字符串、结构
C语言速成手册(四):指针、动态内存分配、标准输入
C语言速成手册(五):其它运算符、文件操作、其它函数
C语言速成手册(六):其它问题、后记

指针的定义
    定义一个指针的方法如下:

    例如,下面的语句定义了一个指针:

    这样,pointer就是一个指针,它指向的是一个int类型的数据。

    一个指针可以是一个合法的内存地址,也可以为0(通常写成NULL)。
    你可以用printf语句输出一个指针,对应的标识为"%p"。下面的代码可以输出上面定义的指针指向的地址。

取地址与引用
    假如a是一个变量,p是一个指针,那么&a返回该变量的地址,*p返回该指针所指的内容(称做“引用”)。
    阅读下面的代码片段:


    程序输出如下。当执行了p=&a后,存取*p就相当于是存取变量a了。


动态内存分配
    首先介绍sizeof函数(准确地说是一个运算符),它的参数为一个变量名或类型名,返回的是它所占内存空间的大小。下面的代码输出1 8 800 4 1 。


    下面介绍四种动态内存分配函数,使用它们前需要在程序最前面包含头文件stdlib.h。四种函数的格式分别为:

    函数malloc将在内存里寻找一个大小为size的连续空间,把分配到的内存地址作为一个指向void类型的指针(默认的无类型指针)返回。如果空间分配失败,函数返回NULL。
    函数calloc将在内存里寻找一个大小为n * size的连续空间,并且把这段内存的数据全部清0,返回数据和malloc一样。如果空间分配失败,函数返回NULL。
    函数free用于释放内存空间,释放后的空间被回收,可以用于以后的malloc或calloc操作。
    函数realloc在保证已有数据不变的情况下改变已有指针的空间大小,返回重新分得的空间的内存地址(有可能和原来不同)。如果空间重新分配失败,函数返回NULL。
    Pascal中的new语句可以用前两个函数代替,free语句则相当于Pascal中的dispose。

    注意,malloc和calloc函数所返回的指针还没确定类型,理论上需要用类型转换。下面的程序合法地为p指针分配空间:

    事实上,由于赋值时C语言自动转换类型,因此那个类型转换是没有必要的(去掉(int *)没有影响)。

指针与结构
    一个指针可以指向一个结构,一个结构也可以包含一个指针。结构里包含一个指向结构的指针就构成了链表:

    这样,定义struct node *a,则(*a).next就是另一个指向node结构的指针。在C语言中,(*x).y的句型很常用,因此有一个专门的记号x->y来代替(*x).y这样繁杂的写法。
    你可以从下面的程序中看到链表的使用。


指针与函数
    前面说过,C语言中的函数参数和变量只能够供该函数使用。
    下面四个程序代码的输出分别是什么?

    代码一:

    代码二:

    代码三:

    代码四:

    答案:前两个程序输出520 1314,后两个程序输出1314 520。
    前两个程序中,待交换的两个数(即使是全局变量)作为参数传给了swap函数,该函数里的操作对函数外无影响。
    第三个程序中,swap函数对全局变量直接进行操作,其影响是全局的。
    最后一个程序巧妙地应用了指针来实现两数交换。函数的参数是指针类型,这个函数不能改变指针本身,但可以改变指针所指的内容。这是写此类函数通常所用的方法。
    为了强调函数void swap( int *a, int *b )中的指针本身不发生改变,很多地方喜欢写成void swap(const int *a, const int *b ) 。

指针与数组
    数组由内存的连续空间构成,因此可以用指针来访问。事实上,数组名本身就是一个指针。观察下列代码:


    看看输出结果(自己运行),你会发现,数组名其实就是一个指向数组起始位置的指针,其作用相当于&a[0]。而指针本身可以进行加减运算(表示内存地址的加减,具体加多少减多少取决于指针所指的类型),其本质是在数组中进行定位。因此,下面的两个代码是完全等价的:

    下面的程序输出0 1 2 3 4 0。函数init不能改变变量的值,但由于数组的实质是指针,因此它可以改变数组所储存的内容。


    你甚至可以用指针来创建数组。使用函数calloc可以方便地得到指定长度并已全部初始化为0的数组。再加上realloc函数后,你就可以实现真正意义上的动态数组(长度可变)。示例程序如下:

    上面的程序将输出012340123454321。

标准输入
    之所以现在才来说读入操作,是因为读入函数需要用到指针知识,否则解释不清楚。
    输入操作用scanf函数,和输出一样需要有stdio.h支持。
    和输出操作一样,scanf函数的第一个参数也是一个字符串,读入同样采用匹配标识符的方法进行。所不同的是,读入函数的参数是需要随函数变化的,因此变量作为scanf的参数时需要加上取地址符号,作为指针代入函数才行。除了读入%c类型之外,所有读入操作均自动跳过空格。
    看下面四个例子:

代码一:


输入:
8 2
则a为8,b为2。

===========性感的分割线===========

代码二:


输入:
8 2
则a为8,b为一个空格。

===========性感的分割线===========

代码三:


输入:
20:19:02
则h为20,m为19,s为2。

输入:
20:19-02
则h为20,m为19,s没有获得新的值(匹配失败)。

===========性感的分割线===========

代码四:


输入:
My favourite website is matrix67.com, I love it!
则st为"matrix67.com," 。

    注意最后这个例子,st是数组,本质上是一个指针,因此不需要加&符号。

C语言速成手册(三):数组、字符串、结构

Via http://www.matrix67.com/blog/archives/218 by Matrix67

目录:
C语言速成手册(一):基本数据类型、标准输出、函数
C语言速成手册(二):布尔值、条件判断、循环
C语言速成手册(三):数组、字符串、结构
C语言速成手册(四):指针、动态内存分配、标准输入
C语言速成手册(五):其它运算符、文件操作、其它函数
C语言速成手册(六):其它问题、后记

一维数组的定义、初始化和使用
    定义一个一维数组的格式如下:

    数组的下标范围总是从0开始(因此下标最大为数组大小减一)。下面一行语句定义了一个大小为10的长整型数组:

    这相当于下面的Pascal语句:


    C语言的数组范围左端点不能自定义,它的数组下标只能从0开始。

    下面几种方式可以在定义数组的同时进行初始化:

    上面两个语句是等价的。其中前一种方法依次对数组的前5个数进行初始赋值,后一种方法仅对数组的其中三个位置进行初始化。初始化中没有涉及到的下标所对应的数值自动被设为0。
    C语言允许数组的大小为一个变量,但这样的数组在定义时不能像上面一样进行初始化。
    这种初始化方法只在定义数组时用,不能用于程序中的赋值。数组之间也不能直接赋值,你不能把数组a整个赋值给数组b。

    程序中使用数组的方法和Pascal一样。下面的程序将输出1000以内的素数:


    当一维数组作为函数参数时,数组大小可以不写,以适应不同长度的数组。通常你还需要另一个参数告诉函数你的数组有多大。下面这个函数返回数组中的最大值:

    下面的代码合法地调用了上面的函数。
 

C语言中的字符串
    C语言也使用字符数组作为字符串。定义一个char a[20],就相当于定义了一个长度不超过20的字符串。Pascal中使用a[0]记录字符串的长度,字符串内容从a[1]开始;但C语言并不直接记录字符串长度,a[0]表示字符串的第一个字符,最后以ASCII码0(或写成字符'\0')标记字符串结尾。你可以直接将一个字符串赋给字符数组,也可以在printf中使用%s标识输出一个字符数组。记住,a[2]表示字符串中的第三个字符,因为C的数组下标是从0开始的。
    观察下列代码:

    程序的输出为:

    == 或 + 等运算符对字符串无效。

    下面的函数返回字符串的字符数:
 

    赋值时,如果字符串太长了,有两种方法可以让你分行写。一是在行末加一个反斜杠表示和下一行相连,二是每一行都用双引号注明(编译器会自动把它连接起来)。下面两个代码是等价的。注意第一个代码中的第二行必须顶格写,否则第二行前面的空格也要算进字符串里。
 

    和数组一样,对字符串的赋值只能在定义时使用,程序中不能这样做。

多维数组的定义、初始化和使用
    定义一个多维数组的格式如下:


    例如,下面这个语句定义了一个三维数组:

   同样地,每一维的大小都是从0开始算的。因此上面的语句相当于Pascal中的:
 

    多维数组的初始化和一维数组类似。例如,我们经常需要定义方向常量:


    这还可以直接写成:

    多维数组的初始化同样是未定义者自动填零,因此还可以写成:
 

    程序中使用多维数组时必须用多个方括号,即dir[2][1]不能写成dir[2,1]。

    当多维数组作为函数的参数时,只有第一维的大小可以不写。因此,下面的三个函数中前两个是合法的,第三个是不合法的。


    为了让参数仍然适用于各种大小的数组,C语言允许这样定义函数:


    例如,下面的函数递归地计算行列式:


    下面的代码片段正确地调用了上面的函数:
 

结构的定义、初始化和使用
    Pascal中的记录类型在C语言中叫做“结构”。定义一个结构的方式如下:

    注意花括号后面需要有一个分号。下面定义一个date结构:


    这样你就获得了一个名为struct date的类型名。和变量的定义一样,一个结构的定义只能供当前函数(的当前语句块)中后面的部分使用。因此通常把结构的定义放在所有函数的前面作为一个全局的定义。之后,你便可以写这样的语句:
 

    结构的使用方法同Pascal的记录类型一样。例如,下面的函数用于计算某一天是星期几(Zeller公式):
 

    给一个结构赋初始值和数组的初始化差不多。下面两个语句是等价的:


    这种方法也可以用于程序中的赋值操作,但需要加上一个类型转换(见这里的“名词动用”一节)。例如,下面三个代码片段都是等价的:


    下面的语句调用了zeller函数,输出自1583年来的每个13日都是星期几。和本文无关的问题:有人知道为什么我从1583年开始算么?