在本文中,我们将向您展示 C 程序如何在不使用临时变量的情况下交换两个数组。我们不使用第三个变量,而是使用算术运算符和位运算符。
C 程序在不使用临时变量的情况下交换两个数组
在此 C 程序中,我们不使用临时变量或第三个变量来交换两个数组,而是使用算术运算符。
#include<stdio.h>
int main()
{
int Size, i, a[10], b[10], Temp[10];
printf("\nPlease Enter the Size of the Array\n");
scanf("%d", &Size);
printf("\nPlease Enter the First Array Elements\n");
for(i = 0; i < Size; i++)
{
scanf("%d", &a[i]);
}
printf("\nPlease Enter the Second Array Elements\n");
for(i = 0; i < Size; i ++)
{
scanf("%d", &b[i]);
}
//Swapping two Arrays
for(i = 0; i < Size; i++)
{
a[i] = a[i] + b[i];
b[i] = a[i] - b[i];
a[i] = a[i] - b[i];
}
printf("\n a[%d] Array Elements After Swapping \n", Size);
for(i = 0; i < Size; i ++)
{
printf(" %d \t ",a[i]);
}
printf("\n\n b[%d] Array Elements After Swapping \n", Size);
for(i = 0; i < Size; i ++)
{
printf(" %d \t ",b[i]);
}
return 0;
}

在此 C 程序交换两个数组而不使用临时变量的示例中,我们声明了三个数组或一维数组 a、b 和 Temp
下面的 printf 语句要求用户输入数组 a、b 的大小(元素数量。例如 4 个元素 = a[4])
printf("\n Please Enter the Size of the Array\n");
下面的 scanf 语句将用户输入的数值分配给 Size 变量。
scanf("%d", &Size);
下面的 for 循环将有助于遍历 a[3] 数组中的每个单元格。for 循环中的条件 (i < Size)) 将确保编译器不会超出数组大小。否则,数组将溢出
for 循环内的 scanf 语句将把用户输入的数值存储在每个单独的数组元素中,例如 a[0]、a[1]、a[2]
for(i = 0; i < Size; i++)
{
scanf("%d", &a[i]);
}
下面的 for 循环将有助于遍历 b[2][3] 矩阵中的每个单元格。
for(i = 0; i < Size; i++)
{
scanf("%d", &b[i]);
}
用户为此 C 程序交换两个数组而不使用临时变量的示例输入的值是
a[3] = {20, 50, 80} 和
b[3] = {10, 35, 65}
第一次迭代
i 的值为 0,并且条件 (i < 3) 为真。因此,它将开始执行循环内的算术运算符语句,直到条件失败。
a[i] = a[i] + b[i];
a[0] = a[0] + b[0] = 20 + 10 = 30
b[i] = a[i] – b[i];
b[0] = a[0] – b[0] = 30 – 10 = 20
a[i] = a[i] – b[i];
a[0] = a[0] – b[0] = 30 – 20 = 10
第二次迭代
i 的值为 1,并且条件 (i < 3) 为真。
a[1] = a[1] + b[1] = 50 + 35 = 85
b[1] = a[1] – b[1] = 85 – 35 = 50
a[1] = a[1] – b[1] = 85 – 50 = 35
第三次迭代
i = 2,并且条件 (i < 3) 为真。
a[2] = a[2] + b[2] = 80 + 65 = 145
b[2] = a[2] – b[2] = 145 – 65 = 80
a[2] = a[2] – b[2] = 145 – 80 = 65
递增后,i 的值将为 3,并且条件 (i < 3) 将失败。因此,它将退出循环。
下一个 for 循环,
for(i = 0; i < Size; i ++)
{
printf(" %d \t ",a[i]);
}
将像我们上面解释的那样进行遍历,但不是交换两个数组的数字,而是使用 printf 语句数组显示 a[i] 数组中的值。
下一个 for 循环将遍历并显示 b[i] 数组中的值
for(i = 0; i < Size; i ++)
{
printf(" %d \t ",b[i]);
}
The final output of the a[i] Array is:
a[3] = {10, 35, 65}{20, 50, 80}
b[i] 数组的最终输出是
b[3] = {20, 50, 80}
注意:虽然我们可以使用乘除法方法交换两个数组。但是,当处理较大的整数值或任何整数值为 0 时,它们可能会产生奇怪的值。
C 程序使用位运算符交换两个数组
在此 C 程序中,我们不使用临时变量或第三个变量来交换两个数组,而是使用按位或运算符。
#include<stdio.h>
int main()
{
int Size, i, a[10], b[10], Temp[10];
printf("\nPlease Enter the Size of the Array\n");
scanf("%d", &Size);
printf("\nPlease Enter the First Array Elements\n");
for(i = 0; i < Size; i++)
{
scanf("%d", &a[i]);
}
printf("\nPlease Enter the Second Array Elements\n");
for(i = 0; i < Size; i ++)
{
scanf("%d", &b[i]);
}
//Swapping two Arrays
for(i = 0; i < Size; i++)
{
a[i] = a[i] ^ b[i];
b[i] = a[i] ^ b[i];
a[i] = a[i] ^ b[i];
}
printf("\n a[%d] Array Elements After Swapping \n", Size);
for(i = 0; i < Size; i ++)
{
printf(" %d \t ",a[i]);
}
printf("\n\n b[%d] Array Elements After Swapping \n", Size);
for(i = 0; i < Size; i ++)
{
printf(" %d \t ",b[i]);
}
return 0;
}
C 使用位运算符交换两个数组的输出
Please Enter the Size of the Array
4
Please Enter the First Array Elements
8 16 24 32
Please Enter the Second Array Elements
4 6 20 10
a[4] Array Elements After Swapping
4 6 20 10
b[4] Array Elements After Swapping
8 16 24 32
我们只针对第一个变量解释逻辑。请参考 C 中的位运算符以了解位运算符的工作原理。
用户为此 C 程序交换两个数组而不使用临时变量的示例输入的值是 a[0] = 8 和 b[0] = 4。8 的二进制值为 1000,4 的二进制值为 0010。
a[0] = a[0] ^ b[0] => 1000 ^ 0010
a[0] = 1010
b[0] = a[0] ^ b[0]
b[0] = 1010 ^ 0010 = 1000
a[0] = a[0] ^ b[0];
a[0] = 1010 ^ 1000 = 0010
交换两个数组后的最终值:a[0] = 4 和 b[0] = 8。
对剩余的 a[1]、a[2]、a[3] 和 b[1]、b[2]、b[3] 执行相同的操作。