博文

MinGW编译问题(2008-09-27 17:28:00)

摘要:cmd.exe  set path=E:\MinGW\bin; %path%  g++ -o a example.cpp
的时候出现:g++: installation problem, cannot exec `cc1plus': No such file or directory
解决方法为:将E:\MinGW\libexec\gcc\mingw32\3.4.5下的cc1.exe cc1plus.exe复制到E:\MinGW\bin下面即可。


......

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

队列求 joseph 解(2007-11-13 12:49:00)

摘要:#include <iostream>
#include <iomanip>
#include <queue>
#include <ctime> void read_card(long n, long r); int main(void)
{
    long n,r;
    while(std::cin>>n>>r)
    {
        std::clock_t clock1=clock();
        read_card(n,r);
        std::clock_t clock2=clock()-clock1;
        std::cout<<std::endl<<std::setw(5)<<clock2<<std::endl;
    }
    return 0;
}
void read_card(long n,long r)
{
    std::queue<long> q;
    long i=1;
    for(; i<=n; ++i)
    {
        q.push(i);
    }
    while(!(q.empty()))
  &......

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

FTP命令(2007-07-23 18:42:00)

摘要:如果你想学习使用进行后台FTP下载,那么就必须学习FTP指令。 FTP的命令行格式为: ftp -v -d -i -n -g [主机名] , 其中 -v 显示远程服务器的所有响应信息; -n 限制ftp的自动登录,即不使用;.n etrc文件; -d 使用调试方式; -g 取消全局文件名。 FTP使用的内部命令如下(中括号表示可选项): 1.![cmd[args>:在本地机中执行交互shell,exit回到ftp环境,如:!ls*.zip 2.$ macro-ame[args]: 执行宏定义macro-name。 3.account[password]: 提供登录远程系统成功后访问系统资源所需的补充口令。 4.append local-file[remote-file]:将本地文件追加到远程系统主机,若未指定远程系统文件名,则使用本地文件名。 5.ascii:使用ascii类型传输方式。 6.bell:每个命令执行完毕后计算机响铃一次。 7.bin:使用二进制文件传输方式。 8.bye:退出ftp会话过程。 9.case:在使用mget时,将远程主机文件名中的大写转为小写字母。 10.cd remote-dir:进入远程主机目录。 11.cdup:进入远程主机目录的父目录。 12.chmod mode file-name:将远程主机文件file-name的存取方式设置为mode,如:chmod 777 a.out。 13.close:中断与远程服务器的ftp会话(与open对应)。 14.cr:使用asscii方式传输文件时,将回车换行转换为回行。 15.delete remote-file:删除远程主机文件。 16.debug[debug-value]:设置调试方式, 显示发送至远程主机的每条命令,如:deb up 3,若设为0,表示取消debug。 17.dir[remote-dir][local-file]:显示远程主机目录,并将结果存入本地文件 18.disconnection:同close。 19.form format:将文件传输方式设置为format,缺省为file方式。 20.get remote-file[local-file]: 将远程主......

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

<转>反转一个字节 和 判断32位整数二进制中1的个数 的算法 (2007-05-23 13:55:00)

摘要:unsigned char reverse8( unsigned char c )
{
    c = ( c & 0x55 ) << 1 | ( c & 0xAA ) >> 1;
    c = ( c & 0x33 ) << 2 | ( c & 0xCC ) >> 2;
    c = ( c & 0x0F ) << 4 | ( c & 0xF0 ) >> 4;
    return c;
}

unsigned long func(unsigned long x)
{
    x = (x & 0x55555555UL) + ((x >> 1) & 0x55555555UL);
    x = (x & 0x33333333UL) + ((x >> 2) & 0x33333333UL);
    x = (x & 0x0f0f0f0fUL) + ((x >> 4) & 0x0f0f0f0fUL);
    x = (x & 0x00ff00ffUL) + ((x >> 8) & 0x00ff00ffUL);
    x = (x & 0x0000ffffUL) + ((x >> 16) & 0x0000ffffUL);
    return x;
}
分析(由toyasimple): 这两个函数极很是巧妙,作了并行计算。

先看问题1: 反转一个字节。
它的算法是这样的: 首先是2位2位为一组,交换前一半和后一半。再4位4位为一组,交换前一半和后一半。再8位为一......

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

2007\05\22(2007-05-22 23:28:00)

摘要:1、C语言引入了"可修改的左值"这个术语。它表示左值允许出现在附值语句的左边。这个术语是为了与数组名区分,数组名也用于确定对象在内存中的位置,也是左值,但它不能作为赋值的对象。因此,数组名是个左值但不是可修改的左值。标准规定赋值符必须用可修改的左值作为它左边一侧的操作数。通俗的说,只能给可以修改的东西赋值!
2、编译器为每个变量分配一个地址(左值)。这个地址在编译时可知,而且该变量在运行时一直保存于这个地址。相反,存储于变量中的值(它的右值)只有在运行时才可知/如果需要用到变量中存储的值,编译器就发出指令从指定地址读如变量值并将它存于寄存器中。
3、  定义数组时,是从编译器符号表中取的数组名的地址然后加上数组下标(偏移量)来进行访问地址中的内容的。
     对于指针,编译器首先从符号列表中取的这个指针变量的地址,然后再取得该地址中存储的地址,再通过这个地址进行访问。
>>数组和指针的其他区别:
   指针:  保存数据的地址     间接访问数据,首先取得指针的内容,把它作为地址,然后从这个地址提取数据。如果 指针有一个下标[i],就把指针的内容加上i作为地址,从中提出数据。     通常用于动态数据结构     相关的函数为malloc(),free()   通常指向匿名数据    数组:  保存数据           直接访问数据,a[i]只是简单地以a+i为地址取得数据     通常用于存储固定的树木且数据类型相同的元素      隐式分配和删除      自身即为数据名    定义指针时,编译器并不为指针所指向的对象分配空间,它只是分配指针本身的空间,除非在定义时同时赋值给指针一个字符串常量进行初始化。(注......

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

2007\05\19(2007-05-19 23:21:00)

摘要:3.8  理解所有分析过程的代码段
    编写一个程序,把C语言的声明翻译成通俗的语言:
      主要的数据结构是一个stack,我们从左向右读取,把各个标记依次压入stack,直到读到标示符为止。然后我们继续向右读入一个标记,也就是标示符右边的那个标记。接着,观察标示符左边的那个标记(需要从stack中弹出)。
      数据结构大致如下:
          struct token{
                      char type;
                      char string[MAXTOKENLEN];}
      /* 保存第一个标示符之前的所有标记 */
       struct token stack[MAXTOKENS];
      /* 保存刚读入的那个标记 */
       struct token this;
     伪代码如下:
     实用程序---------
     classify_string(字符串分类)
 ......

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

2007\05\18(2007-05-19 00:43:00)

摘要:1、函数返回值不能是一个函数,所以箱foo()()这样是非法的。
2、函数的返回值不能是一个数组,所以想foo()[]这样是非法的。
3、数组里面不能有函数,所以像foo()[]这样是非法的。
但下面这样则是合法的:
1、函数的返回值允许是一个函数指针,如:int(*fun())();
2、函数的返回值允许是一个指向数组的指针,如:int(*foo())[];
3、数组里面允许有函数指针,如int (*foo[])();
4、数组里面允许有其他数组,所以你经常能看到 intfoo[][]; ~结构体中也可以存在位段、无名字段以及字对齐所需的填充字段。这些都是通过在字段的声明后面加一个冒号以及一个表示字段位长的整数来实现的。如:
      /* 处理ID信息 */
     
      struct pid_tag{
              unsigned int inactive : 1;
              unsigned int          : 1;   /* 1个位的填充 */                  
              unsigned int rescount : 6;
   ......

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

[ZJ]C语言中volatile关键字(2007-05-19 00:08:00)

摘要:一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子:
     1). 并行设备的硬件寄存器(如:状态寄存器)
     2). 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)
     3). 多线程应用中被几个任务共享的变量
     回答不出这个问题的人是不会被雇佣的。我认为这是区分C程序员和嵌入式系统程序员的最基本的问题。嵌入式系统程序员经常同硬件、中断、RTOS等等打交道,所用这些都要求volatile变量。不懂得volatile内容将会带来灾难。
     假设被面试者正确地回答了这是问题(嗯,怀疑这否会是这样),我将稍微深究一下,看一下这家伙是不是直正懂得volatile完全的重要性。
     1). 一个参数既可以是const还可以是volatile吗?解释为什么。
     2). 一个指针可以是volatile 吗?解释为什么。
     3). 下面的函数有什么错误:
          int square(volatile int *ptr)
          {
               return *ptr * *ptr;
   &nbs......

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

勒让得多项式(2007-03-16 03:25:00)

摘要:////////////////////////////////////////////////////////////////////////////////
/*勒让得多项式:                                                              */
/*                                                                            */
/*            &......

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

回文(2007-03-16 03:24:00)

摘要:#include <stdlib.h>
#include <stdio.h> #define MAXSIZE 100
typedef enum {false,true} bool; bool huiwen(char str[],int n)
{
    
     char st[MAXSIZE];
     int i,j,top;
    
     top = -1;
     i = -1;
    
     do
     {
         top++;
         i++;
         st[top] = str[i];
    
     }while(i+1<n/2);
    
     if( n%2!=0&&n>2 )
         i+=1;
        
     i++;   
     whil......

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