标签 知识 下的文章

C 输入输出double值得处理

今天又做到一道题,在scanf()printf()时对double的处理再度纠结。

    double a, b;

    printf("Please input two numbers(use space to divide): ");
    scanf("%lf%lf", &a, &b);
    printf("1/(1/a+1/b)/2= %f\n", harmmean(a, b));
    return 0;

- 阅读剩余部分 -

PHP 获取访问者IP

这个是最简单的方法,对于开了透明代理之类的是没有办法的,如果内网访问也不能读取正确的外网IP,不过很省力就是了:
$ip = $_SERVER["REMOTE_ADDR"];搞定~

CodeIgniter 分页类的一点总结

这里我们以get与分页的结合为例,因为这点当时我纠结了很久,当然是在M-SHOW时候纠结完的,这次拿来主义了一次,记录一下。

        $this->load->library('pagination');
        $id = $this->input->get('id');

        /**
         *  pagination
         */
        $config['base_url'] = base_url().'poster_admin/works/search';
        $config['per_page'] = 5;
        $config['num_links'] = 7;
        $config['uri_segment'] = '4';
        $config['use_page_numbers'] = TRUE;
        $config['full_tag_open'] = '<ul class="pagination">';
        $config['full_tag_close'] = '</ul>';
        $config['cur_tag_open'] = '<li class="active"><a href="#">';
        $config['cur_tag_close'] = '</a></li>';
        $config['num_tag_open'] = '<li>';
        $config['num_tag_close'] = '</li>';
        $config['prev_tag_open'] = '<li>';
        $config['prev_tag_close'] = '</li>';
        $config['next_tag_open'] = '<li>';
        $config['next_tag_close'] = '</li>';
        $config['first_link'] = FALSE;
        $config['last_link'] = FALSE;
        $config['total_rows'] = $this->works_model->searchNum($id);

        $config['suffix'] = '?id='.$this->input->get('id');
        $config['first_url'] = base_url().'poster_admin/works/search'.'?id='.$this->input->get('id');

        $this->pagination->initialize($config);

- 阅读剩余部分 -

C 保护数组内容,说说const

因为有的时候我们会手贱在函数中传参导致修改数组值,所以就产生了这个东西,特点其实是让编译器报错,告诉你这里不应该被改变。
如:int sum(const int ar[], int n)

如果const int days[MONTHS] = {31, 28, 31},则数组内容就不能改变了。

如果:

double rates[5] = {88.9, 100.12, 59.45, 183.11, 340.5};
const double * pd = rates;

则不能用pc来修改他所指向的数值,可是我们还是能通过rates[0]来修改,因为rates并不是常量。

如果我们换个写法double * const pc = rates那么就可以修改数据,却不能移动指针。

如果将上面两者结合使用,就相当于用了强力胶,怎么都动不了了:const double * const pc = rates

C 函数与多维数组

书上讲到函数正确的定义方法:void sum_cols(int ar[][COLS], int rows)void sum_cols(int ar[][], int rows)则是不正确的,看了半天没明白,后来终于结合着看看懂了,编译器会把数组富豪转换为指针符号,如果是ar[1],则会变成ar+1,可是对于多维数组而言,下一个元素地址在何处不仅取决于类型,还取决于有多少个具体的元素,比如
oid sum_cols(int ar[][4], int rows),那么编译器就知道了,哦,int值4个字节,有4个int的元素,那么我跳到另一个就要走过16个字节,否则的话,就无法正确处理了。

于是诞生了变长数组……(形如:int sum2d(int rows, int cols, int ar[rows][cols]),并非是可以任意改变长度,而是你的函数不用写死了,通过传入前两个参数来决定指针的情况)
rows,cols与指针位置不可颠倒。

C 几个程序,我们来聊聊数组,函数和指针

其实就是把书上的内容自己理解一番,做个连贯的笔记罢了。

#include <stdio.h>
#define SIZE 4

int main(void)
{
    short dates[SIZE];
    short * pti;
    short index;
    double bills[SIZE];
    double * ptf;

    pti = dates;
    ptf = bills;
    printf("%23s %10s\n", "short", "double");
    for (index = 0; index < SIZE; index++)
        printf("pointers + %d: %10p %10p\n", index, pti + index, ptf + index);
    return 0;
}

- 阅读剩余部分 -

C 指针*p++与*++p

关于++i与i++,我们这里纠结了不止一次,到了指针,还得接着纠结:

#include <stdio.h>

int data[2] = {100, 200};
int moredata[2] = {300, 400};
int main(void)
{
    int * p1, * p2, * p3;

    p1 = p2 = data;
    p3 = moredata;
    printf("  *p1 = %d,  *p2 = %d,  *p3 = %d\n", *p1, *p2, *p3);
    printf("  *p1++ = %d,  *++p2 = %d,  (*p3)++ = %d\n", *p1++, *++p2, (*p3)++);
    printf("  *p1 = %d,  *p2 = %d,  *p3 = %d\n", *p1, *p2, *p3);
    return 0;
}

- 阅读剩余部分 -

MYSQL 再谈JOIN

以前我们曾经在SQL 关联查找中说过JOIN,现在再次用到又学到了点新的东西。

首先还是这段代码(还是的理由是因为上一篇文章):

SELECT pr_rates.pid,count(pr_rates.ip),pr_works.title,pr_works.realname,pr_college.name FROM pr_works RIGHT JOIN pr_rates ON pr_rates.pid=pr_works.pid LEFT JOIN pr_college ON pr_works.college=pr_college.id GROUP BY pid ORDER BY count(pr_rates.ip) DESC

为什么会有Left Join Right Join,相当于一个人站在中间,左右手拉手,两个人自然是没有感觉的,其实中间一个人起到了连结的左右,他的左手连通着一个人的右手,右手连通着一个人的左手,建立了关联,于是乎因此我们选择一个与两个表都有共同项的表作为中间人,差不多就是这个意思。

MYSQL GROUP BY

GROUP BY有种合并同类项的感觉,其实也就是那个效果,我在这次的POSTER里写了一串:

SELECT pr_rates.pid,count(pr_rates.ip),pr_works.title,pr_works.realname,pr_college.name FROM pr_works RIGHT JOIN pr_rates ON pr_rates.pid=pr_works.pid LEFT JOIN pr_college ON pr_works.college=pr_college.id GROUP BY pid ORDER BY count(pr_rates.ip) DESC

其中就用到了GROUP BY pid 相当于把相同的pid合并。
然后用count()来统计就得出了得票数。

扩展阅读:
GROUP BY:http://www.w3school.com.cn/sql/sql_groupby.asp
count():http://www.w3school.com.cn/sql/sql_func_count.asp

C 猜数字讲讲输入输出

题目:

用两分搜索策略来猜数字(1-100),比如程序最初猜50,让其询问用户该猜测是大还是小,如果猜测值小,那么下一次猜测值为50-100的中值。

两分法查找的思路+练习输入输出,为了作为一个游戏增强一下卖萌性所以……还是先来看看源码吧

- 阅读剩余部分 -