
给题主一个简单的通讯录程序吧
#include <stdioh>#include <stringh>
#define ARRAY_LEN 30
/联系人结构体/
/注:本程序忽略重名现象。若重名则查找时以最后输入的联系人为准。/
typedef struct{
char name[10];
int age;
char sex[10];
char mp[13];
char tel[13];
} friend_list;
/打印所有联系人信息/
void printAll (friend_list friList[], int friNum) {
int i;
if (friNum) {
printf ("姓名\t\t年龄\t\t性别\t\t手机\t\t家庭\n");
for (i=0; i<friNum; i++)
printf ("%s\t\t%d\t\t%s\t\t%s\t\t%s\n",friList[i]name,friList[i]age,friList[i]sex,friList[i]mp,friList[i]tel);
printf ("\n");
}
else {
printf ("无任何联系人信息!\n");
printf ("\n");
}
}
/打印联系人信息/
void printFri (friend_list friList[], int index) {
if (index==-1) {
printf ("查无此人!\n");
printf ("\n");
}
else {
printf ("姓名\t\t年龄\t\t性别\t\t手机\t\t家庭\n");
printf ("%s\t\t%d\t\t%s\t\t%s\t\t%s\n",friList[index]name,friList[index]age,friList[index]sex,friList[index]mp,friList[index]tel);
printf ("\n");
}
}
/按姓名定位联系人所在数组位置/
int findIndex (friend_list friList[], int friNum, char tarName) {
int i,index;
index =-1;
for (i=0; i<friNum; i++)
if (strcmp(tarName, friList[i]name) == 0) /两字符串相等strcmp函数返回0/
index = i; /定位联系人在结构体数组中的下标/
return index;
}
/录入联系人信息/
void addFri (friend_list friList[], int friNum) {
int i = friNum;
printf ("请输入联系人信息:\n");
printf ("姓名:");
scanf ("%s",&friList[i]name);
printf ("年龄:");
scanf ("%d",&friList[i]age);
printf ("性别:");
scanf ("%s",&friList[i]sex);
printf ("手机:");
scanf ("%s",&friList[i]mp);
printf ("家庭:");
scanf ("%s",&friList[i]tel);
friNum +=1; /联系人数加1/
printf ("\n");
}
/按姓名查找联系人信息/
void findFri (friend_list friList[], int friNum) {
int i,index;
char tarName[10];
printf ("请输入欲查找的联系人姓名:");
scanf ("%s",&tarName);
printf ("\n");
index = findIndex (friList, friNum, tarName);
printFri (friList, index); /打印联系人信息/
}
/删除联系人信息/
void delFri (friend_list friList[], int friNum) {
int i,index;
char tarName[10];
printf ("请输入欲删除的联系人姓名:");
scanf ("%s",&tarName);
printf ("\n");
index = findIndex (friList, friNum, tarName);
if (index == -1) {
printf ("查无此人!\n");
printf ("\n");
}
else {
for (i=index; i<friNum; i++)
friList[i] = friList[i+1];
friNum-=1;
printf ("联系人%s已删除!\n",tarName);
printf ("\n");
}
}
/修改联系人信息/
void altFri (friend_list friList[], int friNum) {
int index;
char tarName[10];
printf ("请输入欲修改的联系人姓名:");
scanf ("%s",&tarName);
printf ("\n");
index = findIndex (friList, friNum, tarName);
if (index == -1) {
printf ("查无此人!\n");
printf ("\n");
}
else {
printf ("请重新输入联系人信息:\n");
printf ("姓名:%s\n",friList[index]name);
printf ("年龄:");
scanf ("%d",&friList[index]age);
printf ("性别:");
scanf ("%s",&friList[index]sex);
printf ("手机:");
scanf ("%s",&friList[index]mp);
printf ("家庭:");
scanf ("%s",&friList[index]tel);
printf ("联系人%s信息已修改!\n",tarName);
printf ("\n");
}
}
/打印菜单/
void printMenu (void) {
printf ("======================================================\n\n");
printf ("序号\t功能详情\n");
printf ("1\t新增联系人\n");
printf ("2\t按姓名查找联系人\n");
printf ("3\t按姓名删除联系人\n");
printf ("4\t按姓名修改联系人\n");
printf ("5\t列出所有联系人信息\n");
printf ("6\t退出\n");
printf ("\n");
printf ("======================================================\n\n");
}
/输入命令/
int instructions (void) {
int key;
printf ("请输入功能序号以开启 *** 作:");
scanf ("%d",&key);
printf ("\n");
printf ("======================================================\n\n");
return key;
}
int main(void) {
int key;
int friNum = 0; /联系人数量/
friend_list friList[ARRAY_LEN]; /联系人结构体数组/
do {
printMenu ();
key = instructions ();
switch (key){
case 1: addFri (friList, &friNum); break;
case 2: findFri (friList, &friNum); break;
case 3: delFri (friList, &friNum); break;
case 4: altFri (friList, &friNum); break;
case 5: printAll (friList, &friNum); break;
case 6: printf("程序结束!\n\n"); break;
default: printf("输入错误,请重新输入!\n\n");break;
}
if (key!=6) {
printf("按回车键继续\n");getchar ();getchar ();
}
} while(key!=6);
return 0;
}
运行结果
主界面
新增联系人
查找联系人
删除联系人
修改联系人
列出所有联系人
MOVE 指令就是数据传送,把一个数据创送给一个变量或者把一个变量的数值传送给另外一个变量,但是源 *** 作数和目的 *** 作数的数据类型要一致。否则可能会出现数据传送错误,比如把0传送给一个浮点类型变量,如果源 *** 作数是0是不会出现编译错误的,但是数据传送是错误。传送给浮点变量应该是00,若不是0
西门子有完善的的帮助信息,如果不知道某个指令的使用,可以在程序编辑页面插入这个指令,然后选中这个指令,接着按下F1按键就会出现帮助信息。西门子step7中的MOVE指令按照字节、字、双字的方式MOVE。MB0代表0这个字节,从m07排到m00,置位的是m00和m03,那么就是MB0=00001001,把这个数MOVE给MB0就可以了。
置位/复位指令根据RLO的值,来决定被寻址位的信号状态是否需要改变。被寻址位的信号状态被置1或清0;若RLO是0,则被寻址位的信号保持原状态不变。
对于置位 *** 作,一旦RLO为1,则被寻址信号(输出信号)状态置1,即使RLO又变为0,输出仍保持为1;对于复位 *** 作,一旦RLO为1,则被寻址信号(输出信号)状态置0,即使RLO又变为0,输出保持为0。
语句表STL表示的置位/复位指令
R Reset 复位指令S Set 置位指令
梯形图LAD表示的置位/复位指令( S ) Set Coil 线圈置位指令
( R ) Reset Coil 线圈复位指令
SR Set-Reset Flip Flop 复位优先型SR双稳态触发器指令
RS Reset-Set Flip Flop 置位优先型RS双稳态触发器指令
扩展资料:
SIMATIC S7-300 PLC S7-300是模块化小型PLC系统,能满足中等性能要求的应用。
各种单独西门子PLC之S7家族的模块之间可进行广泛组合构成不同要求的系统。
与S7-200 PLC比较,S7-300 PLC采用模块化结构,具备高速(06~01μs)的指令运算速度。
用浮点数运算比较有效地实现了更为复杂的算术运算。
一个带标准用户接口的软件工具方便用户给所有模块进行参数赋值。
方便的人机界面服务已经集成在S7-300 *** 作系统内,人机对话的编程要求大大减少。
SIMATIC人机界面(HMI)从S7-300中取得数据,S7-300按用户指定的刷新速度传送这些数据。
S7-300 *** 作系统自动地处理数据
move对应的是copy,copy顾名思义就是复制。比如把一个vector copy给另外一个vector,另一个vector需要申请自己的空间,然后把前者的内容复制到自己的空间。而move则是前面那个vector把自己的空间交给后面的vector,移动之后前面那个vector就空了。
move语义的意义就在于程序里经常会有移动的需求,在move语义出现前往往会搞成先复制再释放。
注意:函数move(int n,int x,int y,int z)中,n为盘子的数目,x为源柱,y为备用柱,z为目的柱。
程序应该是要求将x柱上的n个盘子移到z上,y作为备用柱,可分解为以下几步:
1、忽略最底下的那个盘子,解决n-1个盘子的问题,但稍加修改,即y作为目的柱,将n-1个盘子移到y上,此时z作为备用柱,所以调用函数move(n-1,x,z,y),然后将x上的那个盘子移到z上;
2、完成第1步后,n-1个盘子都在y上,而最大的盘子在z上,此时问题可改为“将y柱上的盘子移到z上,x作为备用柱”,然后调用函数move(n-1,y,x,z),递归调用函数move()
以上为本人原创,引用请注明出处,谢谢!
/ 第一部分 /
#include <stdioh>
/ 函数声明 /
void move (int[], int, int );
/ 程序入口 /
int main (void )
{
int a[100],
n,
m,
i;
printf ("本程序用于把数组中的前n位元素循环右移m个单位,并打印结果。\n");
printf ("请输入n的值:\n");
scanf ("%d", &n);
printf ("请依次设置数组前%d个元素:\n", n);
for (i = 0; i < n; i++)
{
scanf ("%d", &a[i]);
}
printf ("请设置要循环右移的位数m:\n");
scanf ("%d", &m);
/ 打印循环右移前的数组前n个元素 /
printf ("原数组:\n");
for (i = 0; i < n; i++)
{
printf ("%d", a[i]);
}
/ 循环右移 /
move (a, n, m);
printf("\n循环右移%d位:\n", m);
/ 打印循环右移后的数组前n个元素 /
for (i = 0; i < n; i++)
{
printf ("%d", a[i]);
}
return 0;
}
1运动指令
指令包括GO、MOVE、MOVEI、MOVES、DRAW、APPRO、APPROS、DEPART、DRIVE、READY、OPEN、OPENI、CLOSE、CLOSEI、RELAX、GRASP及DELAY等。这些指令大部分具有使机器人按照特定的方式从一个位姿运动到另一个位姿的功能,部分指令表示机器人手爪的开合。例如:MOVE #PICK!表示机器人由关节插值运动到精确PICK所定义的位置。"!"表示位置变量已有自己的值。
2机器人位姿控制指令
这些指令包括RIGHTY、LEFTY、ABOVE、BELOW、FLIP及NOFLIP等。
3赋值指令
赋值指令有SETI、TYPEI、HERE、SET、SHIFT、TOOL、INVERSE及FRAME。
4控制指令
控制指令有GOTO、GOSUB、RETURN、IF、IFSIG、REACT、REACTI、IGNORE、SIGNAL、WAIT、PAUSE及STOP。其中GOTO、GOSUB实现程序的无条件转移,而IF指令执行有条件转移。IF指令的格式为IF <整型变量1> <关系式> <整型变量2> <关系式> THEN <标识符>该指令比较两个整型变量的值,如果关系状态为真,程序转到标识符指定的行去执行,否则接着下一行执行。关系表达式有EQ(等于)、NE(不等于)、LT(小于)、GT(大于)、LE(小于或等于)及GE(大于或等于)。
5开关量赋值指令
指令包括SPEED、COARSE、FINE、NONULL、NULL、INTOFF及INTON。
6其他指令
其他指令包括REMARK及TYPE。
一、机器人编程
机器人编程为使机器人完成某种任务而设置的动作顺序描述。机器人运动和作业的指令都是由程序进行控制,常见的编制方法有两种,示教编程方法和离线编程方法。其中示教编程方法包括示教、编辑和轨迹再现,可以通过示教盒示教和导引式示教两种途径实现。由于示教方式实用性强, *** 作简便,因此大部分机器人都采用这种方式。离线编程方法是利用计算机图形学成果,借助图形处理工具建立几何模型,通过一些规划算法来获取作业规划轨迹。与示教编程不同,离线编程不与机器人发生关系,在编程过程中机器人可以照常工作。工业上离线工具只作为一种辅助手段,未得到广泛的应用。
二、编辑
用EDIT指令进入编辑状态后,可以用C、D、E、I、L、P、R、S、T等命令来进一步编辑。如:
C命令:改变编辑的程序,用一个新的程序代替。
D命令:删除从当前行算起的n行程序,n缺省时为删除当前行。
E命令:退出编辑返回监控模式。
I命令:将当前指令下移一行,以便插入一条指令。
P命令:显示从当前行往下n行的程序文本内容。
T命令:初始化关节插值程序示教模式,在该模式下,按一次示教盒上的"RECODE"按钮就将MOVE指令插到程序中。
三、列表指令
DIRECTORY指令:此指令的功能是显示存储器中的全部用户程序名。
LISTL指令:功能是显示任意个位置变量值。
LISTP指令:功能是显示任意个用户的全部程序。
四、控制程序指令
ABORT指令:执行此指令后紧急停止(急停)。
DO指令:执行单步指令。
EXECUTE指令:此指令执行用户指定的程序n次,n可以从–32 768到 32 767,当n被省略时,程序执行一次。
NEXT指令:此命令控制程序在单步方式下执行。
PROCEED指令:此指令实现在某一步暂停、急停或运行错误后,自下一步起继续执行程序。
RETRY指令:指令的功能是在某一步出现运行错误后,仍自那一步重新运行程序。
SPEED指令:指令的功能是指定程序控制下机器人的运动速度,其值从001到32767,一般正常速度为100
五、系统控制指令
CALIB指令:此指令校准关节位置传感器。
STATUS指令:用来显示用户程序的状态。
FREE指令:用来显示当前未使用的存储容量。
ENABL指令:用于开、关系统硬件。
ZERO指令:此指令的功能是清除全部用户程序和定义的位置,重新初始化。
DONE:此指令停止监控程序,进入硬件调试状态。
以上就是关于急求C语言中编程move语句的组成全部的内容,包括:急求C语言中编程move语句的组成、西门子300MOVE指令怎么用啊 求高手指点、怎样理解 C++ 11中的move语义等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)