编写c语言程序,实现交换两个变量值的 *** 作。

编写c语言程序,实现交换两个变量值的 *** 作。,第1张

/*

编写c语言程序,实现交换两个变量值的 *** 作。

要求:使用形参为指针的函数swap完成交换功能。

主函数中,使用整型指针从键盘输入两个整数,通过调用swap完成交换

输出交换前后的变量值进行比较。

输入输出示例:

Input two number:3 4

Before change:a=3,b=4

After change:a=4,b=3

*/

//File: swap.c

#include <stdio.h>

#include <stdlib.h>

void swap(int *a, int *b)

{

int tmp

tmp=*a

*a=*b

*b=tmp

}

int main()

{

int *a=NULL,*b=NULL

a=(int *)calloc(1,sizeof(int))

if(!a)

{

perror("calloc a err.")

}

b=(int *)calloc(1,sizeof(int))

if(!b)

{

perror("calloc b err.")

}

printf("Input two number:")

scanf("%d %d",a,b)

printf("Before change:a=%d,b=%d\n",*a,*b)

swap(a,b)

printf("After change:a=%d,b=%d\n",*a,*b)

return 0

}

C:\mypro>gcc -g -Wall swap.c -o swap

C:\mypro>swap

Input two number:3 4

Before change:a=3,b=4

After change:a=4,b=3

C:\mypro>

程序已调好,直接运行即可。

#include<stdio.h>

int main()

{

    int x,y,t

    printf("请输入二个整数:\n")

    scanf("%d%d",&x,&y)

    printf("输入的二个数为:x=%d,y=%d\n")

    t=x

    x=y

    y=t

    printf("交换后的二个数为:x=%d,y=%d\n")

    return 0

}

交换AX和BX的数据,用以下4种方法可以实现:

第一种:将中间变量存储于栈中:

SSEG SEGMENT STACK

DB 32 DUP (?)

SSEG ENDS

CSEG SEGMENT

assume CS:CSEG, SS:SSEG

Main: mov AX, SSEG

mov SS, AX

mov SP, 32h 初始化栈段及栈指针

mov AX, xxx

mov BX, yyy分别设置AX和BX的值

push AX

push BX

pop AX

pop BX

mov AH, 4ch 21h中断,返回DOS

int 21h

CSEG ENDS

END Main

第二种:使用中间变量存储

DSEG SEGMENT

Value DB 16 DUP (?)

DSEG ENDS

CSEG SEGMENT

assume CS:SCEG, DS:DSEG

Main: mov AX, DSEG

mov DS, AX

mov SI, OFFSET Value设置DS:SI指向中间变量

mov WORD PTR [SI], AX AX ->Value

mov AX, BX BX ->AX

mov BX, WORD PTR [SI] Value ->BX

mov AH, 4ch

int 21h

CSEG ENDS

END Main

第三种:直接使用xchg交换指令

CSEG SEGMENT

assume CS:CSEG

Main: mov AX, xxx

mov BX, yyy

xchg AX, BX

mov AH, 4ch

int 21h

CSEG ENDS

END Main

第四种,直接在通用寄存器中交换

CSEG SEGMENT

assume CS:CSEG

Main: mov AX, xxx

mov BX, yyy

mov CX, AX

mov AX, BX

mov CX, BX

mov AH, 4ch

int 21h

CSEG ENDS

END Main

注意:代码没有显示功能,而且在调用DOS中断时,AH的值已经更改。故编译连接后,只能在debug下查看运行结果。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11871875.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存