C语言经典例题-5

1.交换数组

将数组A中的内容和数组B中的内容进行交换。(数组大小一样)

c 复制代码
#include <stdio.h>

void swap(int arr1[],int arr2[], int sz)
{
    int tmp = 0;
    for (int i = 0;i < sz;i++)
    {
        tmp = arr1[i];
        arr1[i] = arr2[i];
        arr2[i] = tmp;
    }
}

void print(int arr1[], int arr2[], int sz)
{
    for (int i = 0;i < sz;i++)
    {
        printf("%d ", arr1[i]);
    }
    printf("\n");
    for (int i = 0;i < sz;i++)
    {
        printf("%d ", arr2[i]);
    }
}

int main()
{
    int arr1[] = { 3,13,23,33,43,53,63,73,83,93 };
    int arr2[] = { 2,12,22,32,42,52,62,72,82,92 };
    int sz = sizeof(arr1) / sizeof(arr1[0]);
    swap(arr1, arr2, sz);
    print(arr1, arr2, sz);
    return 0;
}
2.统计二进制中1的个数

写一个函数返回参数二进制中1的个数。

如:15 0000 1111 4个1

c 复制代码
#include <stdio.h>

//int Number(int b)
//{
//    int count = 0;
//    while (b)
//    {
//        if (b % 2 == 1)
//        {
//            count++;
//        }
//        b = b / 2;
//    }
//    return count;
//}

int Number(int b)
{
    int count = 0;
    int i = 0;
    for (i = 0;i < 32;i++)
    {
        if(((b >> i) & 1 )== 1)
    {
        count++;
    }
    }
    return count;
}

int main()
{
    int a = -1;
    //10000000 00000000 00000000 00000001   原码
    //11111111 11111111 11111111 11111110   反码
    //11111111 11111111 11111111 11111111   补码
    int ret = Number(a);
    printf("%d\n", ret);
    return 0;
}
3.交换两个变量(不创建临时变量)

不允许创建临时变量,交换两个整数的内容

c 复制代码
#include <stdio.h>

int main()
{
    int a = 10;
    int b = 20;
    printf("%d %d\n", a, b);

    a = a ^ b;
    b = a ^ b;
    a = a ^ b;

    printf("%d %d\n",a, b);
    return 0;
}
4.打印菱形
c 复制代码
#include <stdio.h>

int main()
{
    int i = 0;
    int line = 0;
    scanf("%d", &line);
    for (i = 0; i < line; i++)
    {
        int j = 0;
        for (j = 0; j<line -1 - i; j++)
        {
            printf(" ");
        }
        for (j = 0; j < 2 * i + 1; j++)
        {
            printf("*");
        }
        printf("\n");
    }
    for (i = 0; i < line - 1; i++)
    {
        int j = 0;
        for (j = 0; j <= i; j++)
        {
            printf(" ");
        }
        for (j = 0; j < 2 * (line - 1 - i) - 1; j++)
        {
            printf("*");
        }
        printf("\n");
    }
    return 0;
}
5.字符串左旋

题目内容:实现一个函数,可以左旋字符串中的k个字符。

例:

ABCD左旋一个字符得到BCDA

ABCD左旋两个字符得到CDAB

c 复制代码
#include <stdio.h>

void string_left_rotate(char* str, int k)
{
    int i = 0;
    int len = strlen(str);
    for (i = 0; i < k; i++)
    {
        char tmp = *str;
        int j = 0;
        for (j = 0; j < len - 1; j++)
        {
            *(str + j) = *(str + j + 1);
        }
        *(str + len - 1) = tmp;
    }
}

int main()
{
    char arr[] = "ABCD";
    int k = 1;

    string_left_rotate(arr, k);
    printf("%s\n", arr);
    return 0;
}
相关推荐
阿巴~阿巴~9 分钟前
冒泡排序算法
c语言·开发语言·算法·排序算法
散11221 分钟前
01数据结构-交换排序
数据结构·算法
yzx99101342 分钟前
Yolov模型的演变
人工智能·算法·yolo
weixin_307779131 小时前
VS Code配置MinGW64编译SQLite3库
开发语言·数据库·c++·vscode·算法
无聊的小坏坏2 小时前
拓扑排序详解:从力扣 207 题看有向图环检测
算法·leetcode·图论·拓扑学
wwww.bo2 小时前
机器学习(决策树)
算法·决策树·机器学习
辞--忧2 小时前
深入浅出决策树
算法·决策树·机器学习
Y200309162 小时前
决策树总结
算法·决策树·机器学习
lynn8570_blog2 小时前
低端设备加载webp ANR
前端·算法
图灵学术计算机论文辅导3 小时前
论文推荐|迁移学习+多模态特征融合
论文阅读·人工智能·深度学习·计算机网络·算法·计算机视觉·目标跟踪