转:C语言的几个谜题

这几天,本站推出了几篇关于C语言的很多文章如下所示:



我们可以看到很多C语言相关的一些东西。比如《语言的歧义》主要告诉了大家C语言中你意想不到的错误以及一些歧义上的东西。而《谁说C语言很简单》则通过一些看似你从来不可能写出的代码来告诉大家C语言并不是一件容易事情。《6个变态的hello world》和《如何弄乱C的源代码》则以一种极端的方式告诉大家,不要以为咱们自己写不出混乱的代码,每个程序员其实都有把代码搞得一团乱的潜质。通过这些文章,相信你对编程或是你觉得很简单的C语言有了一些了解。是的,很不容易吧,以前是不是低估了编程和C语言?今天是否我们又在低估C++和Java呢?

本篇文章《C语言的谜题》展示了14个C语言的迷题以及答案,代码应该是足够清楚的,而且我也相信有相当的一些例子可能是我们日常工作可能会见得到的。通过这些迷题,希望你能更了解C语言。如果你不看答案,不知道是否有把握回答各个谜题?让我们来试试。

阅读剩余部分...

php中几个文件读取函数的贴心功能

1、用file_get_contents或者fopen、file、readfile等函数读取url的时候,会创建一个名为$http_response_header的变量来保存http响应的报头,使用fopen等函数打开的数据流信息可以用 stream_get_meta_data来获取。
2、php5中新增的参数context使这些函数更加灵活,通过它我们可以定制http请求,甚至post数据。


示例代码1:

<?php
$html = file_get_contents('http://www.example.com/');
print_r($http_response_header);
$fp = fopen('http://www.example.com/', 'r');
print_r(stream_get_meta_data($fp));
fclose($fp);
?>

示例代码2:

<?php
$data = array ('foo' => 'bar');
$data = http_build_query($data);
$opts = array (
'method' => 'POST',
'header'=> "Content-type: application/x-www-form-urlencoded\r\n" .
 "Content-Length: " . strlen($data) . "\r\n",
 'content' => $data
),
);

$context = stream_context_create($opts);
$html = file_get_contents('http://www.example.com', false, $context);
echo $html;
?>
http://cn.php.net/manual/zh/function.file-get-contents.php
http://cn.php.net/manual/en/function.stream-context-create.php
http://cn.php.net/manual/zh/wrappers.http.php

一些被忽视的 PHP 函数(整理)

重点推荐下,顺便我自己也做个整理。


sys_getloadavg()


这个函数返回当前系统的负载均值信息(当然 Windows 下不适用),详细文档可以翻阅 PHP 的相关文档。文档中有段示例代码,基本上也就能看出它的用途了。

阅读剩余部分...

i++循环与i--循环的执行效率

昨天同事问了我一个问题,有两个循环语句:

for(i = n; i > 0; i--)
{

}

for(i = 0; i < n; i++)
{

}

为什么前者比后者快?

我当时的解释是:

i--操作本身会影响CPSR(当前程序状态寄存器),CPSR常见的标志有N(结果为负), Z(结果为0),C(有进位),O(有溢出)。i > 0,可以直接通过Z标志判断出来。

i++操作也会影响CPSR(当前程序状态寄存器),但只影响O(有溢出)标志,这对于i < n的判断没有任何帮助。所以还需要一条额外的比较指令,也就是说每个循环要多执行一条指令。

(这是五年前tjww告诉我的,当时他在AVR上写一个LCD驱动程序,使用后者LCD会闪烁,使用前者则没有问题。)

阅读剩余部分...

正则匹配函数体

以PHP为例,其他语言类似

<?php
$data = php_strip_whitespace('test.php'); //去掉注释,空格,换行(不包括字符串中的)
echo $data;
$data = preg_match_all("
    /
        function\s+     #匹配function和后面的空格
        [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*      #匹配函数名
        \(([^)]*?)\)\s+    #匹配函数参数,并且作为子模式捕获
        \{
        (.*?)
        \}(?=(?:\s*function|\s*?$)) #匹配大括号,仅当后面紧跟着function或者处于字符串结束位置时
    /xi
"
, $data, $matches);
 
print_r($matches);


算法之约瑟夫环

题目:
一群猴子排成一圈,按1,2,...,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去...,如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n, 输出最后那个大王的编号。

来源:
http://topic.csdn.net/u/20090327/15/eb87c0f9-75e1-4977-b1ee-fdb9a7a34b7e...

分析:
此题是约瑟夫环问题,实际上如果去网上搜有经典的解决方法和解释。这种算法的特点是复杂度低。

代码:非原创,这我是以看懂为目标的.

function kickMonkey ($n,$m) {
    $s = 0;
    for ($i=2; $i<=$n; $i++) {
        $s = ($s+$m)%$i;
    }
    $win = $s+1;
    return $win;
}
    Page :
  1. 1
  2. 2
  3. 3
  4. 4