- 注册时间
- 2005-12-29
- 最后登录
- 1970-1-1
|
怎样得到long型范围内的随机数?
用 (rand()<<15)+rand()
如何让Lava写文件而不改变文件大小?
把fopen函数中的后一个参数设为"r+"就可以了。
怎样获取文件长度?
length = fseek(fp,0,SEEK_END) ;
LAVA最多能同时打开几个文件?
最多3个
返回的fp值依次为128,129,130 ,再打开就是0了。
PAC格式的文件头?
offset0~3 "PAC "文件类型标示
offset4~F 0 作用未知,应该是保留位
offset10~11 int 文件数目
offset12~15 long 第一文件长度
offset16~41 44Byte 第一文件绝对路径
offser42~n 第一文件数据
然后又是第二文件 长度、路径、数据一直到文件结束。
为什么有时在WQX上使用Delay(n) 会死机,在虚拟机上却没有异样?
Delay(n) n 不能小于4。
怎样用TextOut显示变量&怎样实现GVB中 STR$ 的功能?
用sprintf 函数。
原型: void sprintf(int str,int format,...);
功能: 把一个格式字符串输出str所指内存区域
说明: 与printf不同的是,输出到字符串而不是屏幕
示例:
void main()
{
char str[30];
int x,y;
x=100;
y=123;
sprintf(str,"x=%d,y=%d",x,y);
TextOut(10,10,str,0x41);
getchar();
}
为什么无论在GVMIde(GGV) 还是 LAVA1.0编译器(Lee)中编译 int s[2]={-1,0}; 均显示“语法错误” ;在LAVA3.2Ide 和星端LAVA编译器(YAN)中编译却能通过?
早期的编译器对于初始化数据不允许以减号打头,用新的LavaXIde就没有问题了。
解决办法: int s[2] = { 0xffff , 0 };
LAVA1.0 不支持浮点,没有开方函数。怎样求一整数的平方根?
下面给出一个求整数根的经典算法。也是在WQX上运行最快,较为实用的开方函数。
- int sqrt(long M)
- {
- int N, i;
- long tmp,ttp;
- if(M==0) return 0;
- N=0;
- tmp =(M>>30);
- M=M<<2;
- if(tmp > 1)
- {
- N++;
- tmp=tmp-N;
- }
- for(i=15;i>0;i--)
- {
- N=N<<1;
- tmp=(tmp<<2)-(M<0)*2+((M&0x7fffffff)>>30);
- ttp=(N<<1)+1;
- M=M<<2;
- if(tmp>=ttp)
- {
- tmp=tmp-ttp;
- N++;
- }
- }
- return N;
- }
- void main()
- {
- int t;
- printf("10000的平方根为%d",sqrt(10000));
- getchar();
- }
复制代码
未完待续...
===================================
以下附上求n位圆周率和用厄拉多塞筛法求10000以内素数的源码- //求n位圆周率
- #define ENTER_KEY 0x0d
- #define ESC_KEY 0x1b
- int f[2801];
- char numberc[]="bnmghjtyu";
- char to_number(char c)
- {
- int i;
- for (i=0;i<9;i++)
- if (c==numberc[ i ]) {
- c=i+'1';
- break;
- }
- return c;
- }
- int get_num(int bits)
- {
- int i,t,d;
-
- t=0;
- i=0;
- for (;;) {
- d=to_number(getchar());
- if (d>='0' && d<='9' && i<bits) {
- putchar(d);
- t=t*10+(d&0xf);
- i++;
- } else if (d==ENTER_KEY && i)
- break;
- }
- return t;
- }
- void main()
- {
- int t;
- long b,c,d,e,g;
- printf("请输入位数:");
- c=((get_num(3)+3)&0xfffc)*14/4;
- if (c>2800) c=2800;
- putchar('\n');
- for(;b-c;) f[b++]=10000/5;
- for(;;) {
- d=0;
- if (!(g=c<<1)) break;
- b=c;
- for (;;) {
- d=d+f[ b ]*10000;
- f[ b ]=d%--g;
- d=d/g--;
- if (--b==0) break;
- d=d*b;
- }
- c=c-14;
- t=e+d/10000;
- if (t<10) printf("000%d",t);
- else if (t<100) printf("00%d",t);
- else if (t<1000) printf("0%d",t);
- else printf("%d",t);
- e=d%10000;
- if (Inkey()==ESC_KEY) exit(0);
- }
- getchar();
- }
复制代码- // 求10000以内素数
- void main()
- {
- char num[10001];
- int i,j;
- memset(num,0,10000);
- for(i=2;i<10000;i++)
- {
- if(!num[ i ])
- {
- printf("%d ",i);
- for(j=2;j<=10000/i;j++) num[i*j]=1;
- }
- }
- }
复制代码 |
|