Archive for ‘边走编程’ Category

May 12, 2009

全局对象

在程序进入main()之前自动调用它们的相应构造函数来初始化,但是各个对象初始化的顺序不确定。直到main()函数结束后才会调用析构函数。

类的静态数据成员对象

等同于全局对象。

对象引用

其初始化和销毁均不会调用构造函数和析构函数,这使得引用传递比值传递更加地高效。

动态创建对象

调用new运算符时调用对象的构造函数。调用delete运算符时调用相应析构函数。

Tags: . 15 views

描述:

本程序可以将一个3000位的二进制串转化成十进制串

Tags: . 71 views

我的理解:

在main函数中由于定义了一个局部变量a,因此全局变量a被隐藏。int a = a;定义a(为a分配内存),然后用a(右侧的a)给a(左侧的a)赋值。所以这段代码是可以通过编译的,但是链接时候就会出错。因为,使用了一个未初始化的变量来给一个变量赋值。有可能在某些编译器上面是可以链接并运行的,说明它对变量的初始化不太严格。

Tags: ,. 16 views
May 11, 2009

Const in Header

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//file header.h
static int global_count;
const int global_const_count = 7;
 
//file source1.cpp
#include "header.h"
 
int main()
{
    return 0;
}
 
//file source2.cpp
#include "header.h"

As we can see, both source1.cpp and source2.cpp include the definition of global_const_count, a const in C++ must default to internal linkage. That is, it is visible only within the file where it is defined and cannot be seen at link time by other translation units. But there won’t be two instances of the const. Normally, the C++ compiler avoids creating storage for a const, but instead holds the definition in its symbol table.

Tags: ,. 16 views
May 10, 2009

题目描述:

算出n!的完整结果,其中n!=1*2*3*…*n

输入:

多组测试数据,一行一组,每行仅一个数n
其中0<=n<=10000

输出:

输出相应的n!的结果,必须精确到个位

样例输入:

10
20
100

样例输出:

3628800
2432902008176640000
93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000

Tags: . 36 views

问题描述:

所谓子序列,就是在原序列里删掉若干个元素后剩下的序列,以字符串”abcdefg”为例子,去掉bde得到子序列”acfg”
现在的问题是,给你一个数字序列,你要求出它最长的单调递增子序列。

输入:

多组测试数据,每组测试数据第一行是n(1<=n<=10000),下一行是n个比1e9小的非负整数

输出:

对于每组测试数据输出一行,每行内容是最长的单调递增子序列的长度

样例输入:

5
1 2 4 8 16
5
1 10 4 9 7
9
0 0 0 1 1 1 5 5 5

样例输出:

5
3
3

Tags: . 49 views

题目描述:

给你一个数字,你要判断它是不是回文数字。例如134431或者242这种左右对称的数就叫做回文数。现在你需要编写一个Rev函数,其声明为int Rev(int n);
你需要判断输入的n是不是回文数字,如果是,请返回1,否则请返回0

样例输入:

123
12321

样例输出:

0
1

Tags: . 86 views
May 6, 2009
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
;#################################################################
;              这是一个键盘扫描程序 
;将得到的健值(01H-10H)在右边两位数码管显示 (data= XX) 
;程序采用中断结构,硬件连接上将INT_KEY信号与P3.2(INT0) 连接;
;普通的I2C通讯程序可以直接利用,为读数据子程序需要加延时
;这是ZLG7290芯片在读数据时有延时,在RDBYT中添加一个20US延时
;#################################################################
SDA		BIT	P1.0
SCL		BIT	P1.1  
WSLA		EQU	070H
RSLA		EQU	071H
DISDA		EQU	20H		;源数据块首地址
DISCON		EQU	08H		;写入数据个数		
DATA_1		EQU	30H		;变量区首地址
;********************************************************
	ORG	8000H 
	LJMP	8100H  
;********************************************************
Tags: ,. 75 views
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
 
	dat 	bit p3.2	;定义端口号
	clk	bit p3.3	
	cs	bit p3.4
 
	org	8000h		;程序定位及跳转指令的设置
	ljmp	8100h
	org	8100h
 
start:
	mov	sp, #60h	;定义堆栈底位置
stable:
	mov	r3, #00h	;循环体执行次数:256
	mov	r6, #00h	;寄存器清零
	mov	r7, #00h	;寄存器清零
loop:
				;取平均值主要是为了减小
				;高速模数转换干扰产生的误差
	lcall	tlc549_adc	;调用模数转换子程序
	add	a, r6		;向R7-R6累加a的值256次
	mov	r6, a
	mov 	a, #00h
	addc	a, r7
	mov	r7, a	
	lcall	delay
	djnz	r3, loop
	mov	a, r7		;将R7中的平均值送到a
	cpl	a		;a取反
	mov	p1, a		;输出a的值
	sjmp	stable
 
tlc549_adc:			;模数转换的驱动子程序
	push	07h
	clr	a		;清零
	clr	clk		;清零
	mov	r7, #08h	;由于是串行输入,每字节需要8次读入
	clr	cs		;片选信号置低位,选中模数转换器
loop1:
	setb	clk		;开始读取数据
	mov	c, dat
	rlc	a		;诸位读取,送到a
	clr	clk
	djnz	r7, loop1
	setb	cs
	setb	clk
	pop	07h
ret
 
delay:				;微小的延时,用来同步和协调单片机
				;与模数转换器的工作步调
	push	00h
	mov	r0, #00h
	djnz	r0, $
	pop	00h
ret
 
 
end
Tags: ,. 53 views
May 1, 2009

算法:

1
2
3
4
5
for i = 2:n,
    for (k = i; k > 1 and a[k] < a[k-1]; k--) 
        swap a[k,k-1]
    → invariant: a[1..i] is sorted
end

算法性质:

  • 稳定
  • 需要O(1)的额外空间开销
  • 需要O(n2)复杂度的比较和交换。
  • 具有自适应性:当待排序序列接近有序时,复杂度为O(n)。
  • 开销较低

讨论:

虽然在最坏情况下,插入法排序的复杂度为O(n2),但当序列已经接近有序(算法具有自适应性)或者问题规模比较小(空间开销很小)时,插入法排序还是一种比较好的选择。所以,插入法排序,通常可以作为其他诸如归并排序、快速排序等递归递归排序的基础。

Tags: ,. 114 views