发布时间:2023-12-01 02:39来源:www.sf1369.com作者:宇宇
1、p=l->next 是使Node类型的指针p指向l的下一个节点,这个说明l应该是有头结点的吧
2、while循中袭环中 p!=NULL 是判断循环是否结束
3、dispaly(p) 这是函数是对p的操作,其实也就是对l链表中的数据进行相应的操作
4、p=p->猛培李next 这个应该不用多解枝迟释吧
这个应州段指该是个共享链表的例子吧,就是Node是一个指针域,存放指向下一个或上一个结构体的指针,然后册配遍历输出链燃仔表的内容,display应该就是输出函数了。
函洞粗扒数功能:顺序纳昌显示链表中所有节点的元素。
link l:链表。包凳凳含链表长度、头节点地址。
node *p:节点指针。每个节点包含数据元素、后一个节点的地址。
data segment ;定义数据段
string1 db 'Move the cursor backward' ;比较字符串1
string2 db 'Move the cursor backward' ;比较字符串2
mess1 db 'Match.',13,10,'$' ;比较结果1
mess2 db 'No Match!',13,10,'$' ;比较结果2
data ends ;数据段结束
code segment ;定义代码段
main proc far ;定义一个过程(类似C的函数)
assume cs:code,ds:data,es:data ;设定各段与段寄存器关联
start: ;程序入口处(类似C的main函数)
push ds ;压入ds
sub ax,ax ;ax = 0
push ax ;压入ax
mov ax,data ;ax = 数据段基址
mov ds,ax ; ds = ax
mov es,ax ;ds = ax
lea si,string1 ;si = string1的偏移地址
lea di,string2 ;di = string2的偏移地址
cld ;DF=0
mov cx,25 ;比较次数
repz cmpsb ;比较锋数轿绝指令
jz match ;如果相同ZF=1
lea dx,mess2 ;dx = mess2 的银帆首偏移地址
jmp short disp ;跳到disp
match:
lea dx,mess1 ; dx = mess1 的偏移地址
disp:
mov ah,9 ;9号中断,显示一个一'$'结尾的字符串
int 21h
ret ;返回
main endp
code ends ;代码段结束
end start ;程序结束
另注:
MASM汇编程序设计的基本框架是:
data segment
;数据
data ends
stack segment
;堆栈
stack ends
code segment
assume cs:code,ds:data
start:
;代码
end start
这是一个三数排序,是通过俩俩比较,然后按照从小到大输出,下面来读一下这个程序:
main()
{int x,y,z,t;
scanf(%d,%d,%d,&x,&y,&z);
if(x>y){t=x;x=y;y=t;} /*如果x>y,就将两者交换;如:当x=4且y=1时,则执行){t=x;x=y;y=t;}语句;执行后的结果是x=1;y=4;*/
if(x>z){t=z;z=x;x=t;}/*如果x>z,就将两者交换,执行过程同上*/
if(y>z){t=y;y=z;z=t;}/*如果y>z,就将两者交换,执行过程同上*/
printf(%d %d %d,x,y,z); /*最终按照从小到大输出x,y,z*/
}
希望这样的讲解你能明白,同时希望你举一些例子来分析一下其执行的结果,然后再上机运行认证一下,如果正确的话,就说明你成功了;若不正确的话,你可以再分析一下,看你是不是哪里分析错了,也可以设置一些断点,慢慢看陆敬程序铅蚂的执行流程,观早激慎察变量值的变化,这样子可能会使你更容易明白些,据我所知,Microsoft Visual C++ 6.0中可以设置断点,你可以试试看
main()
{int x,y,z,t;
scanf(%d,%d,%d,&x,&y,&z);
if(x>y){t=x;x=y;y=t;}
if(x>z){t=z;z=x;x=t;}//比较大小,如果x>z则可以把乱咐如x排在最后
if(y>z){t=y;y=z;z=t;}//如果简桥y第哗启二大,则排在第二位
printf(%d %d %d,x,y,z);
}
最后这个程序的运行结果如下
任意输入三个数字
则按 从小到大排列
这是C里面简单的3个数排序,相信楼主也知道,只不过不明白
if(x>y){t=x;x=y;y=t;}
if(x>z){t=z;z=x;x=t;}
if(y>z){t=y;y=z;z=t;}
我也是个C语言初学祥春者,当初见这个的时候也被它弄蒙了,其实仔细分析一下租磨就会明白,因为你输出的时候是按X,Y,Z的顺序输出的,所以if(x>y){t=x;x=y;y=t;} 如果X>Y就交换X和Y的数值,当你输入3个数时打比方就 2,1,3吧,这时电脑就会把X=2,Y=1,Z=3,而此题输出时要求从小到大输出。如果X>Y,t=x,这个时候t=1。x=y,这时x=2。y=t,弊宴斗这时y=1,通过if(x>y){t=x;x=y;y=t;} 变成X=1;Y=2。以次类推,实现最后输出时由小到大的输出。
C语言程序解释
悬赏分:30 - 离问题结束还有 14 天 23 小时
main()
{int x,y,z,t;
scanf(%d,%d,%d,&x,&y,&z);
if(x>y){t=x;x=y;y=t;} *如果x>y,就将两者交换*
if(x>z){t=z;z=x;x=t;}*如果x>z,就晌迅含将两者交换*
if(y>z){t=y;y=z;z=t;}*如果y>z,就将两者交换*
printf(%d %d %d,x,y,z);
}
结果就是昌粗输入三个数。然后从小到大输出。
如:输宴笑入4 2 6
输出:2 4 6
如果X比Y大,就把X和Y的值交换,下面同理。整个程序就是输入三个数槐敬,然后让它们按从小侍明搏到大的顺序输出。老祥