C 说说折半查找(二分法)
学校的一道上机题:
编写程序,在整数数组中设置10个值(例如学生年龄),然后从键盘输入一个要查找的年龄,并输出查找结果。
[提示]可以利用标志变量表示查找的结果。
因为无聊,所以就用了折半查找,上次说【两分法】被鄙视了,所以这真的是二分法啦。
首先二分法需要先排序,排序可以用各种函数,也可以用冒泡排序,以前我写过关于冒泡排序(PHP实现冒泡排序),因此这里对冒泡排序是什么不多做解释,直接上代码。
学校的一道上机题:
编写程序,在整数数组中设置10个值(例如学生年龄),然后从键盘输入一个要查找的年龄,并输出查找结果。
[提示]可以利用标志变量表示查找的结果。
因为无聊,所以就用了折半查找,上次说【两分法】被鄙视了,所以这真的是二分法啦。
首先二分法需要先排序,排序可以用各种函数,也可以用冒泡排序,以前我写过关于冒泡排序(PHP实现冒泡排序),因此这里对冒泡排序是什么不多做解释,直接上代码。
题目:
函数power()的功能是返回一个double类型数的某个正整数次幂。现在改进该函数,使其能正确地计算负幂。同时,用该函数实现0的任何次幂为0,并且任何数值的0次幂为1。使用循环的方法编写该函数并在一个程序中测试它。
递归在C 关于递归中讲过了一些知识,但是在写的时候我还是遇到了一些麻烦,而普通的循环却比较好想。
今天又做到一道题,在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;
这个是最简单的方法,对于开了透明代理之类的是没有办法的,如果内网访问也不能读取正确的外网IP,不过很省力就是了:$ip = $_SERVER["REMOTE_ADDR"];
搞定~
这里我们以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);
这次顺便做了一个install.php
才发现难度其实并不大,还是文件写入操作而已,安装其实主要操作的还是数据库里的内容,先来看看文件里怎么写:(还是用的Codeigiter,对于使用其他框架或者手写而言,仅思路可参考,用了挺多CI自带的helper
或者是library
的)
$content = "<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');\n";
$content .= '$active_group'. "= 'default';\n";
$content .= '$active_record'." = TRUE;\n";
$content .= '$db'."['default']['hostname'] = '".$this->input->post('hostname')."';\n";
$content .= '$db'."['default']['username'] = '".$this->input->post('rootname')."';\n";
$content .= '$db'."['default']['password'] = '".$this->input->post('pass')."';\n";
$content .= '$db'."['default']['database'] = '".$this->input->post('book')."';\n";
$content .= '$db'."['default']['dbdriver'] = 'mysql';\n";
$content .= '$db'."['default']['dbprefix'] = '';\n";
$content .= '$db'."['default']['pconnect'] = TRUE;\n";
$content .= '$db'."['default']['db_debug'] = TRUE;\n";
$content .= '$db'."['default']['cache_on'] = FALSE;\n";
$content .= '$db'."['default']['cachedir'] = '';\n";
$content .= '$db'."['default']['char_set'] = 'utf8';\n";
$content .= '$db'."['default']['dbcollat'] = 'utf8_general_ci';\n";
$content .= '$db'."['default']['swap_pre'] = '';\n";
$content .= '$db'."['default']['autoinit'] = TRUE;\n";
$content .= '$db'."['default']['stricton'] = FALSE;";
在文件里用\n
来换行,因为里面包括了PHP的代码,这导致了我们只能用双引号避免冲突(否则的话就得用\
了,感觉工作量更大),针对$db
,直接显示必须要用单引号,于是就出现了这个。
其实就是把书上的内容自己理解一番,做个连贯的笔记罢了。
#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;
}
以前我们曾经在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,相当于一个人站在中间,左右手拉手,两个人自然是没有感觉的,其实中间一个人起到了连结的左右,他的左手连通着一个人的右手,右手连通着一个人的左手,建立了关联,于是乎因此我们选择一个与两个表都有共同项的表作为中间人,差不多就是这个意思。
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