C基础寒假练习(6)

一、终端输入行数,打印倒金字塔

复制代码
#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;
}

代码解析

  1. 包含头文件

    复制代码
    #include <stdio.h>

    这行代码包含了标准输入输出库 stdio.h,它提供了输入输出函数如 printf 和 scanf。

  2. 主函数

    复制代码
    int main() 
    {

    这是程序的入口点,从这里开始执行。

  3. 变量声明

    复制代码
    int rows;

    声明一个整型变量 rows,用于存储用户输入的倒金字塔的行数。

  4. 提示用户输入

    复制代码
    printf("请输入倒金字塔的行数: ");

    使用 printf 函数在控制台输出提示信息,要求用户输入倒金字塔的行数。

  5. 读取用户输入

    复制代码
    scanf("%d", &rows);

    使用 scanf 函数从控制台读取用户输入的整数,并将其存储到变量 rows 中。

  6. 外层循环

    复制代码
    for (int i = rows; i > 0; i--) 
    {

    这是一个递减的 for 循环,从 rows 开始,每次循环减一,直到 i 大于零为止。这个循环控制倒金字塔的行数。

  7. 打印空格

    复制代码
    for (int j = 0; j < rows - i; j++) 
    {
        printf(" ");
    }

    内层循环用于打印每行前面的空格。空格的数量是 rows - i,随着 i 的减小而增加。

  8. 打印星号

    复制代码
    for (int k = 0; k < (2 * i - 1); k++)
    {
        printf("*");
    }

    另一个内层循环用于打印星号。星号的数量是 2 * i - 1,随着 i 的减小而减少。

  9. 换行

    复制代码
    printf("\n");

    每行结束后,使用 printf 函数输出一个换行符,使光标移动到下一行。

  10. 返回值

    复制代码
    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;
}

步骤解释

  1. Step 1: x = x ^ y;

    • 初始值:x = 10 (二进制表示为 1010), y = 20 (二进制表示为 10100)
    • 计算 x ^ y:1010 ^ 10100 = 11110 (二进制)
    • 结果:x = 30 (十进制表示为 11110)
  2. Step 2: y = x ^ y;

    • 当前值:x = 30 (二进制表示为 11110), y = 20 (二进制表示为 10100)
    • 计算 x ^ y:11110 ^ 10100 = 1010 (二进制)
    • 结果:y = 10 (十进制表示为 1010)
  3. 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

总结

通过使用异或运算符,我们可以在不引入第三个临时变量的情况下交换两个整数的值。这种方法利用了异或运算的性质:一个数与另一个数异或两次会还原原来的数。

相关推荐
Joe_Wang53 小时前
【从0到1学习JVM · 21】既不浪费空间又没有碎片,标记整理算法到底慢在哪
jvm·学习·算法·垃圾回收·标记整理算法
让学习成为一种生活方式3 小时前
PlantCellChat--单细胞与空间转录组数据预测植物细胞间通讯的R包--The Plant Journal
算法
C++ 老炮儿的技术栈3 小时前
有符号变量与无符号变量的区别
服务器·开发语言·前端·数据结构·c++·算法·c
梦帮科技4 小时前
多任务权重流形融合:SLERP 球形线性插值、DARE 稀疏剪枝与多专家模型融合落地
人工智能·深度学习·算法·机器学习·tensorflow·聚类·剪枝
Tisfy4 小时前
LeetCode 0020.有效的括号:栈匹配
算法·leetcode·字符串·题解·括号匹配
测试学习test4 小时前
SPI读取W25Q64硬件驱动(HAL库)
数据库·stm32·嵌入式硬件·算法
迅猛龙办公室4 小时前
Python实现斐波那契数列
算法
淡海水4 小时前
02-01-原理篇-Mark-Sweep与变种算法
算法·unity·c#·游戏引擎·.net·gc
Navigator_Z4 小时前
LeetCode //C - 1276. Number of Burgers with No Waste of Ingredients
c语言·算法·leetcode
keyipatience4 小时前
跳表详细解析
开发语言·数据结构·c++·算法·跳表