所在位置:主页 > 程序语言 > C语言程序解读问题

C语言程序解读问题

发布时间:2023-12-01 02:39来源:www.sf1369.com作者:宇宇

一、C语言程序解读问题

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

三、C语言程序解释

这是一个三数排序,是通过俩俩比较,然后按照从小到大输出,下面来读一下这个程序:

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的值交换,下面同理。整个程序就是输入三个数槐敬,然后让它们按从小侍明搏到大的顺序输出。老祥