一、终端输入行数,打印倒金字塔
#include <stdio.h>
int main()
{
int rows;
printf("请输入倒金字塔的行数: ");
scanf("%d", &rows);
for (int i = rows; i > 0; i--)
{
// 打印空格
for (int j = 0; j < rows - i; j++)
{
printf(" ");
}
// 打印星号
for (int k = 0; k < (2 * i - 1); k++)
{
printf("*");
}
// 换行
printf("\n");
}
return 0;
}
代码解析
-
包含头文件
#include <stdio.h>这行代码包含了标准输入输出库
stdio.h,它提供了输入输出函数如printf和scanf。 -
主函数
int main() {这是程序的入口点,从这里开始执行。
-
变量声明
int rows;声明一个整型变量
rows,用于存储用户输入的倒金字塔的行数。 -
提示用户输入
printf("请输入倒金字塔的行数: ");使用
printf函数在控制台输出提示信息,要求用户输入倒金字塔的行数。 -
读取用户输入
scanf("%d", &rows);使用
scanf函数从控制台读取用户输入的整数,并将其存储到变量rows中。 -
外层循环
for (int i = rows; i > 0; i--) {这是一个递减的
for循环,从rows开始,每次循环减一,直到i大于零为止。这个循环控制倒金字塔的行数。 -
打印空格
for (int j = 0; j < rows - i; j++) { printf(" "); }内层循环用于打印每行前面的空格。空格的数量是
rows - i,随着i的减小而增加。 -
打印星号
for (int k = 0; k < (2 * i - 1); k++) { printf("*"); }另一个内层循环用于打印星号。星号的数量是
2 * i - 1,随着i的减小而减少。 -
换行
printf("\n");每行结束后,使用
printf函数输出一个换行符,使光标移动到下一行。 -
返回值
return 0;main函数返回0,表示程序正常结束。
二、使用异或和算术求和交换两个数
#include <stdio.h>
int main()
{
int x = 10;
int y = 20;
printf("Before swap: x = %d, y = %d\n", x, y);
// 使用异或运算交换值
x = x ^ y;
y = x ^ y;
x = x ^ y;
printf("After swap: x = %d, y = %d\n", x, y);
return 0;
}
步骤解释
-
Step 1:
x = x ^ y;- 初始值:
x = 10(二进制表示为1010),y = 20(二进制表示为10100) - 计算
x ^ y:1010 ^ 10100 = 11110(二进制) - 结果:
x = 30(十进制表示为11110)
- 初始值:
-
Step 2:
y = x ^ y;- 当前值:
x = 30(二进制表示为11110),y = 20(二进制表示为10100) - 计算
x ^ y:11110 ^ 10100 = 1010(二进制) - 结果:
y = 10(十进制表示为1010)
- 当前值:
-
Step 3:
x = x ^ y;- 当前值:
x = 30(二进制表示为11110),y = 10(二进制表示为1010) - 计算
x ^ y:11110 ^ 1010 = 10100(二进制) - 结果:
x = 20(十进制表示为10100)
- 当前值:
最终结果
在执行完这三个步骤之后,x 和 y 的值被成功交换。因此,输出将会是:
Before swap: x = 10, y = 20 After swap: x = 20, y = 10
总结
通过使用异或运算符,我们可以在不引入第三个临时变量的情况下交换两个整数的值。这种方法利用了异或运算的性质:一个数与另一个数异或两次会还原原来的数。