(一)两个等大数组内容的交换
//将数组A中的内容和数组B中的内容进行交换。(数组一样大)
方法一:建立临时变量tmp,利用for循环交换,提取,存储数组中元素。
代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int main()
{
int arr1[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int arr2[10] = { 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 };
int i = 0;
for (i = 0; i < 10; i++)
{
int tmp = 0;
tmp = arr1[i];
arr1[i] = arr2[i];
arr2[i] = tmp;
}
for (i = 0; i < 10; i++)
{
printf("%3d",arr1[i]);
}
printf("\n");
for (i = 0; i < 10; i++)
{
printf("%3d",arr2[i]);
}
system("pause");
return 0;
}
方法二: 采用二进制异或的办法来交换数组
- 异或运算符“^”规则:同号为假,异号为真;
运算 | 说明 |
---|---|
0^ 0=0 , 0^1=1 | 0异或任何数,其结果等于任何数 |
1^ 0=1 , 1 ^ 1= 0 | 1 异或任何数,其结果等于任何数取反 |
a ^ a=0 | 任何数异或自己,其结果为0 |
- 实现两个数的交换(不用创建临时变量)
举例如下交换两个整数 a=1,b=2 ,则通过下列语句即可实现:
a = a ^ b;
b = a ^ b;
a = a ^ b;
解释如下:
0 0 0 1 --->a
0 0 1 0 --->b
-------------------
0 0 1 1 --->a
0 0 1 0 --->b
---------------------
0 0 0 1 ---->b()
0 0 1 1 --->a
------------------------
0 0 1 0 ---->a
同理数组也一样,则代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int main()
{
int arr1[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int arr2[10] = { 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 };
int i = 0;
for (i = 0; i < 10; i++)
{
arr1[i] = arr1[i]^arr2[i];
arr2[i] = arr1[i]^arr2[i];
arr1[i] = arr1[i]^arr2[i];
}
for (i = 0; i < 10; i++)
{
printf("%3d", arr1[i]);
}
printf("\n");
for (i = 0; i < 10; i++)
{
printf("%3d", arr2[i]);
}
system("pause");
return 0;
}
(二)特殊求和
// 计算1/1-1/2+1/3-1/4+1/5…+1/99-1/100的值;
- 和sum应为double型,注意运算时的精度;
- 设置flag变量在循环中体现出正负的形式;
代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i = 0;
double sum = 0;
int flag = 1;
for (i = 1; i < 101; i++)
{
sum = sum + (flag*1.0) / i;
flag = -flag;
}
printf("%1f",sum);
system("pause");
return 0;
}
//求 Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字
例如:2+22+222+2222+22222;
- 设置a,n两个变量作为其各数字及相同的前 n项;
- 建立临时变量 tmp 以及建立变量sum 将后续数连接起来求和;
代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i, a;
int n;
int sum = 0;
int tmp = 0;
printf("请输入数字a及它的前n项:\n");
scanf("%d%d", &a, &n);
for (i = 0; i < n; i++)
{
tmp = tmp * 10 + a;
sum += tmp;
}
printf("%d", sum);
system("pause");
return 0;
}