编写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下查看运行结果。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)