《中文专业论文写作概论》笔记
本人原创笔记,共15页,次数约1万字。该书籍为PDF格式。售价3元。款到以电子邮件附件的形式交付PDF格式的电子版本。购买者请按以下格式给我电子邮件。我的邮箱:wangzengcai@126.com
购买书籍名称:《中文专业论文写作概论》笔记
购买数量:(必填)
电子邮箱:(必填)
手机:(可选,若填写了,我发货后会以手机短信息通知您)
我收到邮件后将会将我的银行帐号发送给你。
posted @ 2008-07-17 11:52 911 阅读(87) | 评论 (0)编辑
void strcpy(char *s,char *t)
{
while(*s++=*t++)
;
}
这段代码跟字符串复制有什么关系?为什么在判断条件里用赋值呢?循环体怎么是空语句啊?
下面911来解释一下上述代码吧。
其执行步骤如下:
1)*s=*t,复制字符
2)判断*s是否为真。若为假,则退出循环;否则执行第3)步。因为c语言里字符串是以字符数组的形式存储的,并且其结尾是"\0"(NULL)。在ASCII编码里,NULL=0,遇到NULL时,也就是*s为假。
3)s和t自增1,指向下一个地址,执行第一步。
上面的代码在语义上等于下面的代码:
while((*t)   !=   0){  
          *s   =   *t;  
          s++;  
          t++;  
  }   
   
posted @ 2008-05-21 15:54 911 阅读(86) | 评论 (0)编辑

作者:911
说明:本文参考了http://www2.tsu.edu.cn/www/cjc/online/cyuyan/,算是对其的修正,在此将本文列为原创,实有抄袭之嫌疑。甚是惭愧!


位运算是指按二进制进行的运算。在系统软件中,常常需要处理二进制位的问题。C语言提供了6个位操作

运算符。这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型。
C语言提供的位运算符列表:
运算符 含义 描述
& 按位与 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0
| 按位或 两个相应的二进制位中只要有一个为1,该位的结果值为1
^ 按位异或 若参加运算的两个二进制位值相同则为0,否则为1
~ 取反 ~是一元运算符,用来对一个二进制数按位取反,即将0变1,将1变0
<< 左移 用来将一个数的各二进制位全部左移N位,右补0
>> 右移 将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数,高位补0

1、“按位与”运算符(&)

    按位与是指:参加运算的两个数据,按二进制位进行“与”运算。如果两个相应的二进制位都为1,

则该位的结果值为1;否则为0。这里的1可以理解为逻辑中的true,0可以理解为逻辑中的false。按位与其

实与逻辑上“与”的运算规则一致。逻辑上的“与”,要求运算数全真,结果才为真。若,

A=true,B=true,则A∩B=true 例如:3&5 3的二进制编码是11(2)。(为了区分十进制和其他进制,本文规

定,凡是非十进制的数据均在数据后面加上括号,括号中注明其进制,二进制则标记为2)内存储存数据

的基本单位是字节(Byte),一个字节由8个位(bit)所组成。位是用以描述电脑数据量的最小单位。二

进制系统中,每个0或1就是一个位。将11(2)补足成一个字节,则是00000011(2)。5的二进制编码是

101(2),将其补足成一个字节,则是00000101(2)
按位与运算:
 00000011(2)
&00000101(2)
 00000001(2)
由此可知3&5=1
c语言代码:
#include <stdio.h>
main()
{
 int a=3;
 int b = 5;
 printf("%d",a&b);
}
按位与的用途:
(1)清零
若想对一个存储单元清零,即使其全部二进制位为0,只要找一个二进制数,其中各个位符合一下条件:

原来的数中为1的位,新数中相应位为0。然后使二者进行&运算,即可达到清零目的。
例:原数为43,即00101011(2),另找一个数,设它为148,即10010100(2),将两者按位与运算:
 00101011(2)
&10010100(2)
 00000000(2)
c语言源代码:
#include <stdio.h>
main()
{
 int a=43;
 int b = 148;
 printf("%d",a&b);
}
(2)取一个数中某些指定位
若有一个整数a(2byte),想要取其中的低字节,只需要将a与8个1按位与即可。
a 00101100 10101100
b 00000000 11111111
c 00000000 10101100
(3)保留指定位:
与一个数进行“按位与”运算,此数在该位取1.
例如:有一数84,即01010100(2),想把其中从左边算起的第3,4,5,7,8位保留下来,运算如下:
 01010100(2)
&00111011(2)
 00010000(2)
即:a=84,b=59
    c=a&b=16
c语言源代码:
#include <stdio.h>
main()
{
 int a=84;
 int b = 59;
 printf("%d",a&b);
}

2、“按位或”运算符(|)
两个相应的二进制位中只要有一个为1,该位的结果值为1。借用逻辑学中或运算的话来说就是,一真为真


例如:60(8)|17(8),将八进制60与八进制17进行按位或运算。
 00110000
|00001111
 00111111
c语言源代码:
#include <stdio.h>
main()
{
 int a=060;
 int b = 017;
 printf("%d",a|b);
}
应用:按位或运算常用来对一个数据的某些位定值为1。例如:如果想使一个数a的低4位改为1,则只需要

将a与17(8)进行按位或运算即可。

3、“异或”运算符(^)
他的规则是:若参加运算的两个二进制位值相同则为0,否则为1
即0∧0=0,0∧1=1,1∧0=1, 1∧1=0
    例:   00111001
        ∧ 00101010
           00010011
c语言源代码:
#include <stdio.h>
main()
{
 int a=071;
 int b = 052;
 printf("%d",a^b);
}
应用:
(1)使特定位翻转
设有数01111010(2),想使其低4位翻转,即1变0,0变1.可以将其与00001111(2)进行“异或”运算,

即:
 01111010
^00001111
 01110101
运算结果的低4位正好是原数低4位的翻转。可见,要使哪几位翻转就将与其进行∧运算的该几位置为1

即可。
(2)与0相“异或”,保留原值
例如:012^00=012
        00001010
       ^00000000
        00001010
因为原数中的1与0进行异或运算得1,0^0得0,故保留原数。
(3) 交换两个值,不用临时变量
例如:a=3,即11(2);b=4,即100(2)。
想将a和b的值互换,可以用以下赋值语句实现:
    a=a∧b;
    b=b∧a;
    a=a∧b;
a=011(2)
    (∧)b=100(2)
a=111(2)(a∧b的结果,a已变成7)
    (∧)b=100(2)
b=011(2)(b∧a的结果,b已变成3)
    (∧)a=111(2)


a=100(2)(a∧b的结果,a已变成4)
等效于以下两步:
    ① 执行前两个赋值语句:“a=a∧b;”和“b=b∧a;”相当于b=b∧(a∧b)。
    ② 再执行第三个赋值语句: a=a∧b。由于a的值等于(a∧b),b的值等于(b∧a∧b),

因此,相当于a=a∧b∧b∧a∧b,即a的值等于a∧a∧b∧b∧b,等于b。
很神奇吧!
c语言源代码:
#include <stdio.h>
main()
{
 int a=3;
 int b = 4;
 a=a^b;
 b=b^a;
 a=a^b;
 printf("a=%d b=%d",a,b);
}

4、“取反”运算符(~)
他是一元运算符,用于求整数的二进制反码,即分别将操作数各二进制位上的1变为0,0变为1。
例如:~77(8)
源代码:
#include <stdio.h>
main()
{
 int a=077;
 printf("%d",~a);
}

5、左移运算符(<<)
左移运算符是用来将一个数的各二进制位左移若干位,移动的位数由右操作数指定(右操作数必须是非负

值),其右边空出的位用0填补,高位左移溢出则舍弃该高位。
例如:将a的二进制数左移2位,右边空出的位补0,左边溢出的位舍弃。若a=15,即00001111(2),左移2

位得00111100(2)。
源代码:
#include <stdio.h>
main()
{
 int a=15;
 printf("%d",a<<2);
}
左移1位相当于该数乘以2,左移2位相当于该数乘以2*2=4,15<<2=60,即乘了4。但此结论只适用于该

数左移时被溢出舍弃的高位中不包含1的情况。
    假设以一个字节(8位)存一个整数,若a为无符号整型变量,则a=64时,左移一位时溢出的是0

,而左移2位时,溢出的高位中包含1。

6、右移运算符(>>)
右移运算符是用来将一个数的各二进制位右移若干位,移动的位数由右操作数指定(右操作数必须是非负

值),移到右端的低位被舍弃,对于无符号数,高位补0。对于有符号数,某些机器将对左边空出的部分

用符号位填补(即“算术移位”),而另一些机器则对左边空出的部分用0填补(即“逻辑移位”)。注

意:对无符号数,右移时左边高位移入0;对于有符号的值,如果原来符号位为0(该数为正),则左边也是移

入0。如果符号位原来为1(即负数),则左边移入0还是1,要取决于所用的计算机系统。有的系统移入0,有的

系统移入1。移入0的称为“逻辑移位”,即简单移位;移入1的称为“算术移位”。
例: a的值是八进制数113755:
   a:1001011111101101 (用二进制形式表示)
   a>>1: 0100101111110110 (逻辑右移时)
   a>>1: 1100101111110110 (算术右移时)
   在有些系统中,a>>1得八进制数045766,而在另一些系统上可能得到的是145766。Turbo C和其他一些C

编译采用的是算术右移,即对有符号数右移时,如果符号位原来为1,左面移入高位的是1。
源代码:
#include <stdio.h>
main()
{
 int a=0113755;
 printf("%d",a>>1);
}

7、位运算赋值运算符

位运算符与赋值运算符可以组成复合赋值运算符。
   例如: &=, |=, >>=, <<=, ∧=
   例:  a & = b相当于 a = a & b
         a << =2相当于a = a << 2

posted @ 2008-05-20 16:44 911 阅读(644) | 评论 (0)编辑

SpiderForm.cs
一、单击开始按钮
 启动线程spider,其调用方法为SpiderThread()
二、SpiderThread()方法
如果按钮begin的Text值等于“取消”,则
 m_spider.Quit=true(m_spider是Spider类的一个实例)
 按钮begin的Enabled值为“false”
否则
 按钮begin的Text值为“取消”
 文本框targetURL的Enabled值为“false”
 文本框threadCount的Enabled值为“false”
 文本框outputDir的Enabled值为“false”
 创建一个Spider类的实例,其引用为m_spider
 m_spider.ReportTo = this;
 m_spider.Report的值为m_spider实例
(在类的构造函数中出现的this作为一个值类型,它表示对正在构造的对象本身的引用
在类的方法中出现的this作为一个值类型,表示对调用该方法的对象的引用
在结构的构造函数中出现的this作为一个变量类型,表示对正在构造的结构的引用
在结构的方法中出现this作为一个变量类型,表示对调用该方法的结构的引用 )
 将outputDir.Text赋值给实例m_spider的属性OutputPath
 将threadCount.Text转换成整数赋值给threads
 如果threads<1,则threads=1
 将threads赋值给threadCount.Text
 尝试启动m_spider.Start(new Uri(this.targetURL.Text),threads),其输入参数为URL,threads
 捕捉到错误,显示错误并返回
 恢复系统环境
 begin.Text = "Begin";
 targetURL.Enabled = true;
 threadCount.Enabled = true;
 outputDir.Enabled = true;
 begin.Enabled = true;
三、SetLastURL(string str)方法 
 当前的URL
 currentURL.Text = str
四、 SetElapsedTime(string str)方法
 用时
 elapsed.Text = str
五、SetProcessedCount(string str)方法
 已经处理的URL数量
 processedURLs.Text = str
六、SpiderForm_Close(object sender, CancelEventArgs e)方法
     退出程序
 Application.Exit()
源代码:
public class SpiderForm : System.Windows.Forms.Form
 {
  private System.Windows.Forms.Label label1;
  private System.Windows.Forms.Label label2;
  private System.Windows.Forms.TextBox targetURL;
  private System.Windows.Forms.TextBox threadCount;
  private System.Windows.Forms.Button begin;
  private System.Windows.Forms.Label label3;
  private System.Windows.Forms.Panel panel1;
  private System.Windows.Forms.Label currentURL;
  private System.Windows.Forms.Label label5;
  private System.Windows.Forms.Label label6;
  private System.Windows.Forms.Label processedURLs;
  private System.Windows.Forms.Label elapsed;
  private System.Windows.Forms.Label label4;
  private System.Windows.Forms.TextBox outputDir;

  private Spider m_spider;
  ...
  private void begin_Click(object sender, System.EventArgs e)
  {
   //启动一个线程
   ThreadStart starter = new ThreadStart(this.SpiderThread);
   Thread spider = new Thread(starter);
   spider.Start();
  }

  public void SpiderThread()
  {
   if( begin.Text.Equals("Cancel") )
   {
    m_spider.Quit = true;
    begin.Enabled = false;
   }
   else
   {
    begin.Text = "Cancel";
    targetURL.Enabled = false;
    threadCount.Enabled = false;
    outputDir.Enabled = false;
    //开始一个Spider
    m_spider = new Spider();
    m_spider.ReportTo = this;
    m_spider.OutputPath = outputDir.Text;
    int threads = int.Parse( threadCount.Text);
    if(threads<1)
     threads = 1;
    threadCount.Text = ""+threads;
    try
    {
     m_spider.Start(new Uri(this.targetURL.Text),threads);
    }
    catch( UriFormatException ex)
    {
     System.Windows.Forms.MessageBox.Show( ex.Message );
     return;
    }

    begin.Text = "Begin";
    targetURL.Enabled = true;
    threadCount.Enabled = true;
    outputDir.Enabled = true;
    begin.Enabled = true;
   }

  }

  public void SetLastURL(string str)
  {
   currentURL.Text = str;
  }

  public void SetElapsedTime(string str)
  {
   elapsed.Text = str;
  }

  public void SetProcessedCount(string str)
  {
   processedURLs.Text = str;
  }

  private void SpiderForm_Close(object sender, CancelEventArgs e)
  {
   Application.Exit();
  }

 }

 
 
 
 

 

 

posted @ 2008-04-18 15:36 911 阅读(155) | 评论 (0)编辑
数据库中如果要使用其他国家的语言建议使用nchar,nvarchar,ntext
posted @ 2008-04-07 16:59 911 阅读(221) | 评论 (0)编辑
Connection对象
Connection对象提供连接数据源的方式。我们为对象提供一个连接字符串,指定连接的本质。连接字符串中最常用的参数如下所示。注意,如果给参数提供了一个默认值,该参数就不需要被包含在字符串中。
Connection Timeout(或 Connect Timeout):
表示在返回一个错误之前,等待成功连接的时间长度,默认值为15秒。
Data Source(或 Server,Address,Addr,Network Address):
数据库服务器的名称或网络地址,或数据文件的路径。
Initial Catalog(或Database):
数据库的名称。
Integrated Security(或 Trusted_Connection):
如果设置为true 或者SSPI(用于Security Support Provider Interface),就使用Windows身份验证确保连接的安全,SQL Server会验证试图进行连接的进程的Windows身份。其默认值是false.
User ID:
如果不使用Integrated Security,这就是用户的登录名。
Password(或 PWD):
如果不使用Integrated Security,这就是与User ID一起使用的口令。
posted @ 2008-03-10 17:23 911 阅读(36) | 评论 (0)编辑

今日,一女同学发短信告诉我说:“我们大学的班长H现在在搞传销。他差一点就把S姐给骗了过去”(注,S姐是我的大学同学)我很是奇怪,H在大学里绝对是那种积极分子,对同学又热心,他怎么会搞传销?他怎么狠得下心来欺骗自己的老同学?做人咋能这样呢?天下熙熙皆为利来,天下攘攘皆为利往。这本无可厚非,但君子爱财,但应取之有道。

女同学的短信让我知道了H为什么频繁地打电话给老同学叙旧了。他几乎每个月都有打电话给我室友B(我大学同班同学,现在我们是合租的关系。)H也有问起我的手机号码,可B君告诉他后,他却没有打电话给我。B君要我打电话给H,可我打过去后,H君的手机已经停机。现在,真的庆幸当时没有打通。我这个人对熟人警惕性很差的,套用我姐姐的话来说,就是把我卖了,我还会傻乎乎的替人家数钱!B君知道真相后说了一句:“我就奇怪了,我们和他不熟,怎么就突然热情了 ,还问了一大堆老同学的号码。”俗话说得好,君子之交淡如水。我们应当牢记此话!

posted @ 2008-03-10 14:24 911 阅读(37) | 评论 (1)编辑

早上来上班,同事问我:“今天做好事了没有?”我诧异道:“好事?又没有撞到MM.”“3月是学雷锋月啊!”我笑了:“雷锋是圣人,我们不是,所以我们完全没有必要学他。”他也笑了。
提起雷锋,我想起了一些在网上看到的帖子:
冻手冻脚:好人做不得,我是某部司机,有次执行任务结束我一人驾车回来,看到路中央有一摩托车连人带车摔倒,骨头都翘出来了。经验告诉我不能轻易搬动他。于是我就打电话报警处理。在等待的过程中我询问了他的家住哪里及电话号码,并安慰他警察很快会到,让他挺住。那位摩托车司机很感激,拿出钱来感谢被我谢绝了。没想到的是警察来到后发生的情况。两位警察来到后没有马上处理伤员,也没有讯问情况,而是先要扣人扣车扣证。任我怎么解释都不听。最后还是那为摩托车司机说:“他是帮助我的,我是自己摔倒的。”警察听明白后就嘟嘟囔囔的走开了:”不是你撞的多什么事,净给我们找麻烦。”然后躲进车内吹空调去了。此时我的后背直冒冷汗,万一摩托车司机恩将仇报怎么办?万一摩托车司机伤亡或者昏迷了说不清经过怎么办?万一再遇到需要帮助的人怎么办?我一阵阵后怕。做人难,做好人更难!
阿飞:现在在公交车上不是特别老的老人我基本上不让座.有时候他们的身体也特强壮点了,抢座位的时候比年轻人的力气还要大.而且他觉得你让座位给他们是应该的。
社会的悲哀:那天看到说,一个人为了救人,喊了十几个人做证,然后才救人的!都是彭宇案害的。雷锋啊,我们怀念你啊!
从以上留言我们可以看出来,社会风气败坏到何种程度!你救了人,人家要么怀疑你是嫌疑犯,要么骂你是多管闲事。你为了救人,竟然要拉上一堆人来证明你是在做好事!学雷锋者有了种种顾虑,被帮助者没有了感恩的心,这是谁的错?你的错?我的错?他的错?也许都没有错!只能说是制度的错!制度高高在上,打出一个横幅:“白猫黑猫,抓到老鼠就是好猫”。结果呢,大家为了老鼠,反而丢失了自己本性。
有时在想,要是雷锋生在现在,他还敢那样放肆地做好事嘛?也许他早就官事缠身了!
我并不是鼓吹不要做好事,也许做好事的人多了,社会风气也会因之改变。做好事,不是为了得到什么?而只是忠于自己的良心。但我们做好事之前,一定要善于保护自己。可谓“救人之心不可无,防人之心也不可无!”

posted @ 2008-03-06 17:03 911 阅读(12) | 评论 (0)编辑

书名:ASP.NET服务器控件开发技术自学教程 

911新书写作进行中,实时更新见

http://www.17xie.com/book.php?bid=11708058

计划,半年完成此书,初稿规划共有8章内容。

posted @ 2008-02-25 12:28 911 阅读(73) | 评论 (0)编辑
.net框架源代码批量下载器
众所周知,微软公开了.net框架的源代码。这对于广大的程序员来说是个好消息!但有个小小的问题,就是我们只能在调试的时候查看代码中用到的类的源代码。而现在Kerem Kusmezer, John Robbins帮我们解决了这个问题。他们两人做了一个小程序,以方便我们批量下载.net框架的源代码!这是不是很酷?
下面来谈谈怎样用.net框架源代码批量下载器:
1)将下载器的压缩包解压缩到一个文件夹,如c:\1。在c盘根目录下新建一个文件夹2,以保存下载的源代码。
2)在dos命令提示符(DOS系统)下,将当前目录设置为下载器所在的文件夹。(你不要说你不用常用的dos命令哦?不会就去百度搜索一下使用方法吧。)
3)输入命令“netmassdownloader -d C:\Windows\Microsoft.NET\Framework\v2.0.50727 -output c:\2”,以下载.net2.0框架的源代码。(笔者下载.net2.0的源代码,程序提示说,没有在服务器上找到文件。)
注:若.net2.0框架的源代码不可下载,可以用命令“netmassdownloader -d "C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5”操作第三步。
下载器下载地址:
http://www.codeplex.com/NetMassDownloader/Release/ProjectReleases.aspx?ReleaseId=10592
posted @ 2008-02-21 10:13 911 阅读(3801) | 评论 (31)编辑