unsigned int Fibonacci(int n)
int main(void) {
int n
while (scanf ("%d", &n), n > 0) {
printf("%u\n",Fibonacci(n))
}
return 0
}
unsigned int Fibonacci(int n) {
if (n <= 0) return 0
if (n == 1 || n == 2) return 1
else {
int a[2] = {1, 1}, i = 3
while (i <= n) {
a[i % 2] = a[i % 2] + a[(i - 1) % 2]
i++
}
return a[(i - 1) % 2]
}
}
其实这不需要递归,稍微变一下算法就行了。另外,你的printf里的格式字符串错了,应该是"%u"而不是"%d"。
通过以下代码获取文件大小,然后分配相应大小的内存,一次性读取文件到此内存就可以加快读取速度了。具体代码如下:#include <stdio.h>
#include <stdlib.h>
int main ()
{
FILE * pFile
long lSize
char * buffer
size_t result
/* 若要一个byte不漏地读入整个文件,只能采用二进制方式打开 */
pFile = fopen ("test.txt", "rb" )
if (pFile==NULL)
{
fputs ("File error",stderr)
exit (1)
}
/* 获取文件大小 */
fseek (pFile , 0 , SEEK_END)
lSize = ftell (pFile)
rewind (pFile)
/* 分配内存存储整个文件 */
buffer = (char*) malloc (sizeof(char)*lSize)
if (buffer == NULL)
{
fputs ("Memory error",stderr)
exit (2)
}
/* 将文件拷贝到buffer中 */
result = fread (buffer,1,lSize,pFile)
if (result != lSize)
{
fputs ("Reading error",stderr)
exit (3)
}
/* 现在整个文件已经在buffer中,可由标准输出打印内容 */
printf("%s", buffer)
/* 结束演示,关闭文件并释放内存 */
fclose (pFile)
free (buffer)
return 0
}
42步进电机是一个两相电机,一般控制可以分为全步或半步控制,全步控制,每一切换相序,步进电机走1.8度,半步控制则走0.9度。全步控制相序分配为:A,/A,B,/B
半步控制相序分配为:A,AB,B,B/A,/A,/A/B,/B,/BA
加速的话,就使相序切换快一点就可以;当然减速就是相序切换慢点就行。举例如下:
#include<reg51.h>
#define uchar unsigned char
uchar stepd[]={0x01,0x03,0x02,0x06,0x04,0xc0,0x08,0x09}
uchar num=0,fx=0
sbit keyup=P3^0
sbit keydn=P3^1
sbit keyfx=P3^2
int speed=10000
void t0isr() interrupt 1
{
TH0=(65536-speed)/256
TL0=(65536-speed)%256
P2=stepd[num]
if(fx==0){num++num%=8}
if(fx==1)
{
if(num==0)num=7
else num--
}
}
main()
{
TMOD=0x01
TH0=(65536-10000)/256
TL0=(65536-10000)%256
TR0=1
ET0=1
EA=1
while(1)
{
if(keyup==0)
{
while(key1==0)
speed-=10
}
if(keydn==0)
{
while(keydn==0)
speed+=10
}
if(key3==0)
{
while(key3==0)
fx=~fx
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)