本文目录一览:
- 1、KTR POLY联轴器|POLY弹性联轴器的价格|货期哪里可以查?
- 2、用“vc”或“c++”编写的一个小游戏代码,源代码是什么?
- 3、哈希查找的解决冲突
- 4、求助C课程设计
- 5、[译] ARMv8-A架构基础之寄存器
KTR POLY联轴器|POLY弹性联轴器的价格|货期哪里可以查?
济南埃姆依机电设备有限责任公司是一家多年从事机电一体化设备销售的专业性公司
公司成立伊始,就把“为客户提供一流的传动机械设备”作为经营理念;把“客户是上帝,一切为用户着想”作为服务理念。全心全意为广大用户服务,经过全体员工的不懈努力,公司业绩蒸蒸日上。现在我公司已成为多个国内外知名品牌在山东的核心代理商,我们代理的主要产品是:汉森减速机系列、、电机系列以及KTR联轴器系列,各个产品的价格优势都非常明显。
主要经营产品:
KTR联轴器,德国EK2联轴器,EKL联轴器
纽卡特(Neugart)行星减速机
伦茨伺服系统
R+W联轴器
汉森减速机
三木联轴器
等
电话:
0531-88014512
传真:
0531-88014557
邮箱:
jn_me@126.com
地址:山东省济南市花园路45号
网址:
24小时服务:
(0)13465310635
用“vc”或“c++”编写的一个小游戏代码,源代码是什么?
#include\x0d\x0a#include\x0d\x0a#include\x0d\x0a#define LEFT 0x4b00\x0d\x0a#define RIGHT 0x4d00\x0d\x0a#define DOWN 0x5000\x0d\x0a#define UP 0x4800\x0d\x0a#define ESC 0x011b\x0d\x0aint i,key;\x0d\x0aint score=0;\x0d\x0aint gamespeed=32000;\x0d\x0astruct Food /*食物的结构体*/\x0d\x0a{\x0d\x0aint x; /*食物的横坐标*/\x0d\x0aint y; /*食物的纵坐标*/\x0d\x0aint yes; /*食物是否出现的变量*/\x0d\x0a}food;\x0d\x0astruct Snack /*蛇的结构体*/\x0d\x0a{\x0d\x0aint x[N];\x0d\x0aint y[N];\x0d\x0aint node; /*蛇的节数*/\x0d\x0aint direction; /*蛇的方向*/\x0d\x0aint life; /*蛇的生命,0活着,1死亡*/\x0d\x0a}snake;\x0d\x0avoid Init(void); /*图形驱动*/\x0d\x0avoid Close(void); /*关闭游戏函数*/\x0d\x0avoid DrawK(void); /*画图函数*/\x0d\x0avoid GameOver(void);/*输出失败函数*/\x0d\x0avoid GamePlay(); /*游戏控制函数 主要程序*/\x0d\x0avoid PrScore(void); /*分数输出函数*/\x0d\x0a\x0d\x0aDELAY(char ch)/*调节游戏速度*/\x0d\x0a{\x0d\x0aif(ch=='3')\x0d\x0a{\x0d\x0adelay(gamespeed); /*delay是延迟函数*/\x0d\x0adelay(gamespeed);\x0d\x0a}\x0d\x0aelse if(ch=='2')\x0d\x0a{\x0d\x0adelay(gamespeed);\x0d\x0a}\x0d\x0a}\x0d\x0a\x0d\x0aMenu()/*游戏开始菜单*/\x0d\x0a{\x0d\x0achar ch;\x0d\x0aprintf("Please choose the gamespeed:\n");\x0d\x0aprintf("1-Fast 2-Normal 3-Slow\n");\x0d\x0aprintf("\nPlease Press The numbers..\n");\x0d\x0ado\x0d\x0a{ch=getch();}\x0d\x0awhile(ch!='1'ch!='2'ch!='3');\x0d\x0aclrscr();\x0d\x0areturn(ch);\x0d\x0a}\x0d\x0a\x0d\x0a/*主函数*/\x0d\x0avoid main(void)\x0d\x0a{\x0d\x0aint ch;\x0d\x0ach=Menu();\x0d\x0aInit();\x0d\x0aDrawK();\x0d\x0aGamePlay(ch);\x0d\x0aClose();\x0d\x0a}\x0d\x0a\x0d\x0avoid Init(void)\x0d\x0a{\x0d\x0aint gd=DETECT,gm;\x0d\x0ainitgraph(gd,gm,"c:\\tc");\x0d\x0acleardevice();\x0d\x0a}\x0d\x0a\x0d\x0avoid DrawK(void)\x0d\x0a{\x0d\x0asetcolor(11);\x0d\x0asetlinestyle(SOLID_LINE,0,THICK_WIDTH);\x0d\x0afor(i=50;i0;i--) /*贪吃蛇的移动算法*/\x0d\x0a{\x0d\x0asnake.x[i]=snake.x[i-1];\x0d\x0asnake.y[i]=snake.y[i-1]; /*贪吃蛇的身体移动算法*/\x0d\x0a}\x0d\x0a\x0d\x0aswitch(snake.direction) /*贪吃蛇的头部移动算法,以此来控制移动*/\x0d\x0a{\x0d\x0acase 1:snake.x[0]+=10;break;\x0d\x0acase 2:snake.x[0]-=10;break;\x0d\x0acase 3:snake.y[0]-=10;break;\x0d\x0acase 4:snake.y[0]+=10;break;\x0d\x0a}\x0d\x0afor(i=3;i595||snake.y[0]455)\x0d\x0a{\x0d\x0aGameOver();\x0d\x0asnake.life=1;\x0d\x0a}\x0d\x0aif(snake.life==1) /*如果死亡就退出循环*/\x0d\x0abreak;\x0d\x0aif(snake.x[0]==food.xsnake.y[0]==food.y) /*判断蛇是否吃到食物*/\x0d\x0a{\x0d\x0asetcolor(0);\x0d\x0arectangle(food.x,food.y,food.x+10,food.y-10); /*吃的食物后用黑色将食物擦去*/\x0d\x0asnake.x[snake.node]=-20;snake.y[snake.node]=-20; /*现把增加的一节放到看不到的地方去*/\x0d\x0a\x0d\x0asnake.node++;\x0d\x0afood.yes=1;\x0d\x0ascore+=10;\x0d\x0aPrScore();\x0d\x0a}\x0d\x0asetcolor(4); /*每次移动后将后面的身体擦去*/\x0d\x0afor(i=0;i
回答于 2022-11-16
哈希查找的解决冲突
影响哈希查找效率的一个重要因素是哈希函数本身。当两个不同的数据元素的哈希值相同时,就会发生冲突。为减少发生冲突的可能性,哈希函数应该将数据尽可能分散地映射到哈希表的每一个表项中。解决冲突的方法有以下两种:
(1) 开放地址法
如果两个数据元素的哈希值相同,则在哈希表中为后插入的数据元素另外选择一个表项。
当程序查找哈希表时,如果没有在第一个对应的哈希表项中找到符合查找要求的数据元素,程序就会继续往后查找,直到找到一个符合查找要求的数据元素,或者遇到一个空的表项。
(2) 链地址法
将哈希值相同的数据元素存放在一个链表中,在查找哈希表的过程中,当查找到这个链表时,必须采用线性查找方法。
例3. 6是一个简单的哈希查找算法程序,你可以将它和本章结尾的有关代码一起编译连接成一个可执行程序。
例3.6一个简单的哈希查找算法程序
1: #includestdlib.h
2: #includestring.h
3: #include list.h
4: #include hash.h
5:
6: #define HASH_SIZE 1024
7:
8: static listnode_t *hashTable[HASH_SIZE];
9:
10: void insert(const char * s)
11: {
12: listnode_t *ele = newNode((void * ) s)
13: unsigned int h = hash(s) % HASH_SIZE;
14:
15: ele-next = hashTable[h]
16: hashTable[h] = ele;
17: }
18:
19: void print (void)
20: {
21: int h;
22:
23: for (h = 0; h HASH_SIZE; h++)
24: {
25: listnode_t * lp = hashTalbe[h];
26:
27: if(lp == NULL)
28: continue;
29: printf([%d] , h);
30: while (lp)
31: {
32: printf(\t'%s' , lp-u.str)
33: lp = ip-next;
34: }
35: putchar ('\n');
36: }
37: }
38:
39: const char *search(const char *s)
40: {
39: unsigned int h = hash(s) % HASH_SIZE;
42: listnode_t * lp = hashTable[h];
43:
44: while (lp)
45: {
46: if (! strcmp (s, lp-u.str))
47: return lp-u.str;
48: lp = lp-next;
49: }
50: return NULL;
51: }
请参见:
3. 4 哪一种查找方法最方便?
3.5 哪一种查找方法最快?
3.8 怎样查找链表中的数据?
_____________________________________________
以下是一个简单示例:
#includeiostream
#includestring
using namespace std;
#define m 5 //人数
#define n 10 //哈希表长度
#define q 7 //随机数
struct name{
char *py;
int k;
};
name namelist[n];
struct hash{
char *py;
int k;
int s;
};
hash hashlist[n];
void listname()
{
char *f;
int s0,r,i;
namelist[0].py=as;
namelist[1].py=sa;
namelist[2].py=d;
namelist[3].py=f;
namelist[4].py=g;
for(i=0;im;i++)
{
s0=0;
f=namelist[i].py;
for(r=0;*(f+r)!='\0';r++)
s0+=*(f+r);
namelist[i].k=s0;
}
}
void creathash()
{
int i;
for(i=0;in;i++)
{
hashlist[i].py=;
hashlist[i].k=0;
hashlist[i].s=0;
}
for(i=0;im;i++)
{
int sum=0;
int adr=(namelist[i].k)%q;
int d=adr;
if(hashlist[adr].s==0)
{
hashlist[adr].py=namelist[i].py;
hashlist[adr].k=namelist[i].k;
hashlist[adr].s=1;
}
else
{
while(hashlist[d].k!=0)
{
d=(d+namelist[i].k%5+1)%q;
sum+=1;
}
hashlist[d].py=namelist[i].py;
hashlist[d].k=namelist[i].k;
hashlist[d].s=sum+1;
}
}
}
void find()
{
string nam;
int s0=0,r,sum=1,adr,d;
cout请输入姓名的拼音:endl;
cinnam;;
for(r=0;r20;r++)
s0+=nam[r];
adr=s0%q;
d=adr;
if(hashlist[adr].k==s0)
cout姓名:hashlist[d].py 关键字:s0 查找长度为: 1endl;
else if(hashlist[adr].k==0)
cout无此记录!endl;
else
{
int g=0;
while(g==0)
{
d=(d+s0%5+1)%q;
sum+=1;
if(hashlist[d].k==0)
{
cout无此记录!endl;
g=1;
}
if(hashlist[d].k==s0)
{
cout姓名:hashlist[d].py 关键字:s0 查找长度为: 1endl;
g=1;
}
}
}
}
void display()
{
int i;
float av=0;
for(i=0;in;i++)
{
cout姓名:hashlist[i].py 关键字:hashlist[i].k搜索长度:hashlist[i].sendl;
}
for(i=0;i7;i++)
{
av+=hashlist[i].s;
}
av/=m;
cout平均查找长度:=avendl;
}
int main()
{
char x;
listname();
creathash();
coutd. 显示哈希表 f. 查找 任意键退出 请选择:endl;
while(cinx){
if(x=='d'){display(); coutendl;}
else if(x=='f'){find();coutendl;}
else break;
}
return 0;
}
求助C课程设计
下面是一个比较完善的学生管理系统了,有简单界面。
已经在实际环境上编译并运行通过。
==============================================================
#includeiostream.h
#includeiomanip.h
#includewindows.h
#include conio.h
void back();//返回开始菜单
void out();//输出信息
int w=1; //用于记录学生人数,全局变量
class Data//日期类
{public:
double Year,Month,Day;
Data()
{ Year=0;Month=0;Day=0; }
};
class student //学生类
{
public:
char name[10]; //姓名
char sex[5]; //性别
char jiguan[10]; //籍贯
int num,age;//学号,年龄
char adr[30];//住址
Data year;
friend class Data;//date作为student的友元 //定义一个日期类
void operator=(student s); //=重载
int operator == (student s);//==重载
}stu[100];
void main()
{
system("cls");//清屏 DOC调用
system("color f4"); //颜色 同样是调用doc
int i;
void comp();
void input();
void find();
void alt() ;
void del();
void exit();
void show();
coutsetw(53)"欢迎进入学生管理系统!"endl;
coutsetw(55)"1 添加学生信息 2 查询学生信息"endlendl;
coutsetw(55)"3 删除学生信息 4 修改学生信息"endlendl;
coutsetw(55)"5 比较学生信息 6 显示学生信息"endlendl;
coutsetw(45)"0 推出系统"endl;
cout"请选择:";
cini;
if(i6||i0)
{
cout"输入有误!"endl;
back();
}
switch(i)
{
case 1:input();break;
case 2:find();break;
case 3:del();break;
case 4:alt();break;
case 5:comp();break;
case 6:show();break;
case 0:exit();break;
default:cout"你的输入有误!\n";
}
}
void input() //添加学生
{
system("color 84"); //颜色 同样是调用doc
system("cls");//清屏
int n;
cout"请输入要添加的学生个数:\n";
cinn;
if(n=100||n=0)
{cout"输入有误!endl";
main(); }
else
{
for(;n0;w++,n--)
{
cout"请输入姓名、性别、籍贯,年龄,学号,住址:"endl;
cinstu[w].namestu[w].sexstu[w].jiguanstu[w].age stu[w].numstu[w].adr ;
cout"请输入该生生日(年 月 日)"endl;
cinstu[w].year.Year;
cinstu[w].year.Month;
cinstu[w].year.Day;
}
out();
}
cout"添加完毕2秒后返回"endl;
Sleep(2000); //延时2秒
main();
}
void find() //按学号查找学生
{
system("color f4"); //颜色 同样是调用doc
system("cls");
int i,id,j=0;//j是用以记录是否有信息被找到
cout"请输入你要查找学生的学号:";
cinid;
for(i=1;iw;i++)
if(stu[i].num ==id)
{
couti" "stu[i].name" "stu[i].sex" "stu[i].jiguan" "stu[i].age" "stu[i].num" "stu[i].year.Year" "stu[i].year.Month" "stu[i].year.Daystu[i].adrendl;
j++;
}
if(j==0)
cout"没有你要查找的信息";
back();
}
void del()//删除指定学号学生信息
{
system("color f4"); //颜色 同样是调用doc
int i,a,y=0;
char x;
cout"请输入要删除的学生学号";
cina;
for(i=1;iw;i++)
if(stu[i].num==a)
{
cout"该生情况:"endl;
couti" "stu[i].name" "stu[i].sex" "stu[i].jiguan" "stu[i].age" "stu[i].num" "stu[i].year.Year" "stu[i].year.Month" "stu[i].year.Day" "stu[i].adrendl;
cout"是否确认删除?(Y/N)"endl;
cinx;
if(x=='Y'||x=='y')
{
y++;
for(;iw-1;i++)
stu[i]=stu[i+1];
w--;//每删除一个对总是减少一个
}
}
if(y==0)
{
cout"该学生不存在!"endl;
back();
}
else
{
cout"删除后的信息为:"endl;
out();
back();
}
}
void alt()//修改指定学号学生
{
system("color f4"); //颜色 同样是调用doc
int id,y=0;
char x;
cout"请输入要修改学生的学号:";
cinid;
for(int i=1;iw;i++)
if(stu[i].num ==id)
{
cout"该生情况:"endl;
couti" "stu[i].name" "stu[i].sex" "stu[i].jiguan" "stu[i].age" "stu[i].num" "stu[i].year.Year" "stu[i].year.Month" "stu[i].year.Day" "stu[i].adrendl;
cout"是否确认修改?(Y/N)"endl;
cinx;
if(x=='Y'||x=='y')
{
y++;
cout"请输入姓名、性别、籍贯,年龄,学号,住址:"endl;
cinstu[i].namestu[i].sexstu[i].jiguanstu[i].age stu[i].numstu[i].adr ;
cout"请输入该生生日(年 月 日)"endl;
cinstu[i].year.Year;
cinstu[i].year.Month;
cinstu[i].year.Day;
}
else
{
cout"2秒后返回"endl;
Sleep(2000);
main();
}
}
if(y==0)
{
cout" 该学生不存在!";
back();
}
else
{
cout"修改后的信息为:"endl;
out();
back();
}
}
void student::operator =(student stu)//对=运算符重载函数的实现
{
num=stu.num;
for(int i=0;i9;i++)
name[i]=stu.name[i];
for(i=0;i4;i++)
sex[i]=stu.sex[i];
age=stu.age;
for(i=0;i9;i++)
jiguan[i]=stu.jiguan[i] ;
for(i=0;i29;i++)
adr[i]=stu.adr[i] ;
year.Year=stu.year.Year ;
year.Month =stu.year.Month ;
year.Day =stu.year.Day ;
}
int student::operator == (student stu)//对==运算符重载函数的实现
{
if(*name==*stu.name *sex==*stu.sex age==stu.age *jiguan==*stu.jiguan *adr==*stu.adryear.Year ==stu.year.Yearyear.Month ==stu.year.Monthyear.Day ==stu.year.Day )
return 1;
else
return 0;
}
void comp()//学生信息对比
{
system("color f4"); //颜色 同样是调用doc
system("cls");
int i;
int num1,num2;
cout"请输入要比较的两个同学的学号"endl;
cinnum1num2;
for(i=1;iw;i++)
if(stu[i].num ==num1)
num1=i;
for(i=1;iw;i++)
if(stu[i].num==num2)
num2=i;
if(stu[num1]==stu[num2])
cout"这两个学生是相同的"endl;
else
cout" 这两个学生不同"endl;
back();
}
void show()//显示
{
out();
back();
}
void exit()//退出
{
exit(0);
}
void back()//返回
{
cout" 按任意键返回!"endl;
getch();
main();
}
void out()//输出
{
int i;
cout" 姓名 性别 籍贯 年龄 学号 生日 住址"endl;
for(i=1;iw;i++)
couti" "stu[i].name" "stu[i].sex" "stu[i].jiguan" "stu[i].age" "stu[i].num" "stu[i].year.Year" "stu[i].year.Month" "stu[i].year.Day" "stu[i].adrendl;
}
[译] ARMv8-A架构基础之寄存器
ARMv8-A提供了31个64位的通用寄存器,始终可以访问,并且可以在所有异常级别访问。 在AArch64执行状态下,每个寄存器(X0-X30)都是64位宽度。 宽度增加有助于减少大部分应用程序中的寄存器压力。
每个64位通用寄存器(X0 - X30)也有一个32位的格式(W0 - W30)。
32位W寄存器构成相应的64位X寄存器的下半部分。 即W0形成X0的低位字,W1形成X1的低位字。
从W寄存器中读取时,忽略对应的X寄存器的高32位并且保持他们不变。 写入W寄存器将X寄存器的高32位设置为零。 因此,将0xFFFFFFFF写入W0会将X0设置为0x00000000FFFFFFFF。
特殊寄存器
除了31个(X0到X30)个ARMv8-A核心寄存器之外,还有几个特殊的寄存器。
在AArch64中执行时,对于每个异常级别,异常返回状态将保存在以下专用寄存器中:
下表按异常级别标识特殊寄存器:
异常级别的特殊寄存器
程序调用标准(PCS)还定义了一个专用的帧指针(FP),通过可靠地展开堆栈,它使调试和调用关系图分析变得更加容易。
零寄存器
零寄存器的名字暗示着什么。
零寄存器忽略所有对它的写操作,并且所有对它的读操作都返回0.您可以在大多数(但不是全部)指令中使用零寄存器。
堆栈指针
堆栈指针(SP)是一个指向堆栈顶部的寄存器。 选择使用的堆栈指针在某种程度上与“异常”级别是分开的。 默认情况下,发生异常时会为目标异常级别选择堆栈指针(SP_ELn)。 例如,发生EL1异常时选择SP_EL1。 每个异常级别都有自己的堆栈指针。
但是,当在AArch64中,异常级别的不是E0时,处理器可以使用下面中的任何一种:
SP不能被大多数指令引用。 但是,一些算术指令,例如ADD指令,可以读写当前的堆栈指针来调整函数中的堆栈指针。 例如:
程序计数器
程序计数器(PC)保存当前的程序地址。 它不能被数字引用(就像通用寄存器文件的一部分一样),因此不能用作算术指令的源或目的地,或作为加载和存储指令的基址,索引或转移寄存器。
那些可以读取PC的指令是那些具有计算PC相对地址功能的指令(ADR,ADRP,字面加载和直接分支),以及在链接寄存器中存储返回地址的“分支并链接”指令(BL和BLR)。 修改程序计数器的唯一方法是使用分支,异常生成和异常返回指令。
使用计算PC相对地址的指令读取PC时,读取的PC值是该指令的地址。 与ARMv7-A不同,不存在4或8字节的隐含偏移量。
异常链接寄存器(ELR)
异常链接寄存器保存要在异常后返回的地址。