C 程序在不使用临时变量的情况下交换两个数组

在本文中,我们将向您展示 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 Program to Swap Two Arrays Without Using Temp Variable

在此 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] 执行相同的操作。