c进阶代码练习

本文总结了C语言中的比特位操作特性,指出奇数在最低比特位上为1,偶数为0。在二维数组传参时,强调列号不可或缺,而行号可省略。数组在函数传参中会降级为指针,导致无法通过sizeof()获取原数组大小。同时,提供了两个代码练习,包括调整数组使得奇数在偶数前和在杨氏矩阵中搜索目标数字。
摘要由CSDN通过智能技术生成

知识点总结:
1.奇数最低比特位上的数字是1,偶数最低比特位上的数字是0。
2.二维数组在传参时,列号不可省略,行号可以省略,但是传参时一定是二维数组的形式。
二维数组中,根据角落数字的比较可以较快的淘汰部分行或者部分列,提高效率。
3.所有的数组在传参时都会降级为指针,所以在函数内部使用sizeof()求取数组大小是不可取的。

代码练习

1.调整数组使奇数全部都位于偶数前面

#include<stdio.h>

void ex_num(int *a, int *b)
{
    *a ^= *b;
    *b ^= *a;
    *a ^= *b;
}
int main()
{
    int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, };
    int i = 0;
    int sz = sizeof(arr) / sizeof(arr[0]);
    int left = 0;
    int right = sz - 1;
    for (i = 0; i < sz; i++)
    {
        printf("%d ", arr[i]);
    }
    printf("\n");
    while (left < right)
    {
        if (!(arr[left] & 1) && (arr[right]&1))
        {
            ex_num(&arr[left], &arr[right]);
        }
        if ((arr[left] & 1))
        {
            left++;
        }
        if(!(arr[right] & 1 ))
        {
            right--;
        }
    }
    for (i = 0; i < sz; i++)
    {
        printf("%d ", arr[i]);
    }
    printf("\n");

    return 0;
}

这里写图片描述

2.在杨氏矩阵中查找目标数字是否存在

#include<stdio.h>

int find_data(int arr[][3], int row, int col, int data)
{
    int i = 0;
    int j = col - 1;
    if (data < arr[0][0])
    {
        return 0;
    }
    if (data>arr[row - 1][j])
    {
        return 0;
    }
    while (i < row && j >= 0)
    {
        if (data < arr[i][j])
        {
            j--;
        }
        else if (data>arr[i][j])
        {
            i++;
        }
        else
        {
            return 1;
        }
    }
    return 0;
}

int main()

{
    int arr[3][3] = {
        { 1, 2, 3 },
        { 2, 3, 4 },
        { 3, 4, 5 },
    };
    int data = 0;
    printf("please enter:  \n");
    scanf("%d", &data);
    int ret = find_data(arr, 3, 3, data);
    if (ret)
    {
        printf("找到了!!!\n");
    }
    else
    {
        printf("没找到 \n");
    }


    return 0;
}

这里写图片描述
这里写图片描述
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值