题目:【序列中删除指定数字】【变种水仙花数】【数组串联】【交换奇偶位】【offsetof宏的实现】

题目一:序列中删除指定数字

#include <stdio.h>

int main()
 {
    int a=0;
    int arr[50]={0};
    int c=0;
    scanf("%d",&a);
    for(int i=0;i<a;i++)
    {
        scanf("%d",&arr[i]);//输入a个值
    }

    scanf("%d",&c);//输入要删除的数据
    int i=0;
    int j=0;
    for(i=0;i<a;i++)
    {
        if(c!=arr[i])//如果条件不成立,if语句里面的j不再加一,此时的i比j大一
        {
            arr[j]=arr[i];//如果条件成立,就把i下标的值给j下标了
            j++;
        }
    }
    for(int k=0;k<j;k++)
    {
        printf("%d ",arr[k]);//此时数组里的元素的个数是j个,最后一位与前一位相同,不要输出它
    }

    return 0;
 }

题目二:变种水仙花数

这个题就比较简单了:

#include <stdio.h>

int main()
{
    for (int i = 10000; i <= 99999; i++)//逐个排查从10000到99999所有符合条件的数
    {
        int sum = 0;
        for (int j = 10; j <= 10000; j *= 10)
        {
            int a = (i % j) * (i / j);//比如12345第一步是5*1234,第二次循环是45*123,然后是345*12,最后是2345*1。
            sum = a + sum;//把所有结果加起来
        }
        if (sum == i)
        {
            printf("%d ", i);
        }
    }
    return 0;
}

题目三:数组串联

这个也不难,就是拼接一下就行了

#include <stdio.h>
#include <stdlib.h>
int* getConcatenation(int* nums, int numsSize, int* returnSize)
//注意,nums是原先就有的数组,需要我们自己赋值,numsSize是原先数组的长度,returnSize是后来的ans数组的长度
{
    int* ans = (int*)malloc(sizeof(int) * numsSize * 2);//malloc开辟两倍的numsSize的空间
    for (int i = 0; i < numsSize; i++)
    {
        ans[i] = nums[i];
        ans[i + numsSize] = nums[i];//这就是普通的赋值了
    }
    *returnSize = numsSize * 2;
    return ans;
}
int main()
{
    int arr[] = { 1,2,3 };
    int returnSize = 0;
    int* p = getConcatenation(arr, 3, &returnSize);
    for (int i = 0; i < returnSize; i++)
    {
        printf("%d ", *(p + i));
    }
    return 0;
}

题目四:交换奇偶位

写一个宏,可以将一个整数的二进制位的奇数位和偶数位交换。

这个就需要思考一下了。先看一下代码

#define SWAPBIT(n) ((( (n) & 0x55555555 ) << 1 )|(( (n) & 0xaaaaaaaa )>>1))
#include<stdio.h>
int main()
{
	printf("%d", SWAPBIT(13));
	return 0;
}

最后打印出来的结果是14.

如果想要把奇数位和偶数位互换,我们就必须要知道奇数位和偶数位分别都是什么数字。

比如13。0000 0000 0000 0000 0000 0000 0000 1101我们就需要把奇数位给提取出来,这里我们需要用到&操作符。

13&0x55555555就是0000 0000 0000 0000 0000 0000 0000 1101&

                                 0101 0101 0101 0101 0101 0101 0101  0101

得出来的结果就是 : 0000 0000 0000 0000 0000 0000 0000 0101

标记为1的就是奇数位 因为偶数位是0所以此时不会保留偶数位。

再让它左移1.得到      000 0000 0000 0000 0000 0000 0000 01010

此时的1就都到了偶数位处。

而13&0xaaaaaaaa就是0000 0000 0000 0000 0000 0000 0000 1101&

                                     1010 1010 1010 1010 1010 1010 1010 1010

得出来的结果就是 :    0000 0000 0000 0000 0000 0000 0000 1000

标记为1的就是偶数位 因为奇数位是0所以此时不会保留奇数位。

我们将它右移1.得到     00000 0000 0000 0000 0000 0000 0000 100

此时的1就都到了奇数位处。

然后再将它们按位或一下。

000 0000 0000 0000 0000 0000 0000 01010

00000 0000 0000 0000 0000 0000 0000 100

就是交换之后的结果了:

0000 0000 0000 0000 0000 0000 0000 1110

换成十进制就是14.

题目五:offsetof宏的实现

写一个宏,计算结构体中某变量相对于首地址的偏移,并给出说明。

想实现这个函数宏的实现,就要先知道这个函数是干什么的。

这个函数包含在头文件stddef.h里面,type应为结构或联合类型,而member是里面的成员。而它计算的就是这个成员的在整个自定义类型里的偏移量。

#include<stddef.h>
#include<stdio.h>
struct A
{
	int i;
	char c;
};
int main()
{
	int ret =offsetof(struct A, c);
	printf("%d", ret);
	return 0;
}

打印出的是4。

知道了它是怎么样的一个函数,我们就可以用宏来实现一下这个函数。

#include<stdio.h>
#define My_offsetof(s,m) ((size_t)&(((s*)0)->m))
struct A
{
	int i;
	char c;
};
int main()
{
	int ret =My_offsetof(struct A, c);
	printf("%d", ret);
	return 0;
}

这个就是我们自己实现的offsetof函数。

(s*)0的意思就是把0强制转换成结构体类型,相当于就是当前结构体的首地址,就是0号地址。

而(s*)0)->m的意思就是相较于0号地址的位置,m在哪里。

&(((s*)0)->m)),我们知道&的作用是拿地址,拿到的是相较于0号地址->m的地址(m的地址号其实就是偏移量,所以我们下面就需要一个强转的东西)。

(size_t)的意思就是把地址强制转换成size_t类型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/523514.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【科东软件】鸿道Intewell-Win_V2.1.1_release版本正式发布

Intewell-Win_V2.1.1_release版本 版本号&#xff1a;V2.1.1 版本发布类型&#xff1a;release正式版本 版本特点 修复此前版本中的问题 运行环境推荐 Intewell developer可以运行在windows7及windows10 64位 支持硬件列表

【40分钟速成智能风控2】互联网金融信用风险

目录 ​编辑 信用风险 白名单准入 贷前识别 贷中管理 贷后催收 信用风险 白名单准入 白名单是信用风险管理的第一道门槛&#xff0c;与整个平台贷款产品的设计和定位有紧密的联系。白名单设立的初衷是圈定目标客户&#xff0c;有了目标客群之后才能更好地进行精准营销&…

非关系型数据库——三万字Redis数据库详解

目录 前言 一、Redis概述 1.主要特点 2.Redis优缺点 3.Redis为什么这么快 4.Redis那么快&#xff0c;为什么不用它做主数据库&#xff0c;只用它做缓存 5.线程模型 5.1单线程架构 5.2多线程IO处理&#xff08;Redis 6及以上&#xff09; 5.3线程模型的优化 6.作用 …

基于SpringBoot+微信小程序的点餐系统

一、项目背景介绍&#xff1a; 小程序外卖扫码点餐为客户提供的是最方便的饮食方式,以快速、便捷的点餐业务送货上门为 -客户服务,这省去了客户很多不必要的时间和麻烦,给商家带来更多利益。同时,小程序外卖扫码点餐可以辅助餐饮企业营销,通过信息管理,可以记录餐饮企业方方面面…

Linux--进程(2)

目录 前言 1. 进程的状态 1.1 进程排队 1.2 运行&#xff0c;阻塞&#xff0c;挂起 2.Linux下具体的进程状态 2.1僵尸和孤儿 3.进程的优先级 4.Linux的调度与切换 前言 这篇继续来学习进程的其它知识 上篇文章&#xff1a;Linux--进程&#xff08;1&#xff09;-CS…

挑战30天C++基本入门(DAY8--树)[part 3](速通哦~)

#上一章我们把搜索二叉树的知识给传授完毕&#xff0c;如果认真的看下去并且手打了几遍&#xff0c;基本上内部的逻辑还是可以理解的&#xff0c;那我们现在就截至继续学习树的一些重要知识啦~~ 树高怎么求呀&#xff1f;如果用上一次学的层次遍历来求树高&#xff0c;有点小题…

笔记 | 软件工程:需求分析

1 需求分析 #需求分析 1.1 需求分析概述 初步软件需求存在的问题&#xff1a;不具体&#xff0c;不清晰&#xff0c;关系不明朗&#xff0c;存在潜在缺陷&#xff0c;没有区分不同软件需求&#xff08;有必要鉴别不同软件需求项的重要性差别&#xff0c;区分不同软件需求的开…

图数据库技术:知识图谱的存储与查询

图数据库技术&#xff1a;知识图谱的存储与查询 一、引言 在探索知识的宇宙中&#xff0c;知识图谱是组织和理解海量信息的星系图。在这张图中&#xff0c;每一个概念、实体与事物不再是孤立的点&#xff0c;而是通过关系与边相互连接&#xff0c;形成一个复杂而有机的网络。图…

Kubesphere在创建服务的添加容器步骤搜索镜像步骤找不到镜像

Kubesphere在创建服务的添加容器步骤搜索镜像步骤找不到镜像 {"status": "failed","message": "invalid character p after top-level value" }添加了标签也没用&#xff08;如&#xff1a;mysql:5.7&#xff09; 可以看到 dockerhu…

再聊一聊AUC指标

关于模型评估的指标&#xff0c;之前已经写过不少这方面的文章&#xff0c;最近在实践中又有了一点新的思考&#xff0c;本文对模型评估中的AUC指标再进行一些简单的探讨。 情况一&#xff0c;以下图中的数据为例&#xff0c;1代表用户发生逾期&#xff0c;标记为坏样本&#x…

定时器测试:用定时器监控定时器

using System; using System.Timers;namespace TestTimer {internal class Program{private static int usingResource 0;static int m 0;static Timer timerTask new Timer();static Timer timerMonitor new Timer();static void Main(string[] args){//任务 定时器timerT…

金三银四面试题(十六):MySQL面试都问什么(1)

在开发岗位面试中&#xff0c;MySQL基本是必考环节。所以接下来我们就进入MySQL八股文环节&#xff0c;看看都有哪些高频考题。 MySQL 中有哪些不同的表格&#xff1f; 在MySQL中&#xff0c;可以创建多种不同类型的表格&#xff0c;其中一些常见的类型包括&#xff1a; InnoD…

js笔记(学习存档)

JS的调用方式与执行顺序 使用方式 HTML页面中的任意位置加上<script type"module"></script>标签即可。 常见使用方式有以下几种&#xff1a; 直接在<script type"module"></script>标签内写JS代码。直接引入文件&#xff1a;…

GPT-5将在6月发布前进行「红队进攻测试」

“GPT-5将在6月发布”的消息刷屏了AI朋友圈。这则消息之所以被无数人相信并转发&#xff0c;是因为已经有不少技术人员在社交平台上晒出了「红队进攻测试」邀请。 基于 GPT系列庞大的用户体量和影响力&#xff0c;OpenAI 将更加重视GPT-5 的安全性&#xff0c;作为GPT-5上市前的…

2024年C语言最新经典面试题汇总(21-30)

C语言文章更新目录 C语言学习资源汇总&#xff0c;史上最全面总结&#xff0c;没有之一 C/C学习资源&#xff08;百度云盘链接&#xff09; 计算机二级资料&#xff08;过级专用&#xff09; C语言学习路线&#xff08;从入门到实战&#xff09; 编写C语言程序的7个步骤和编程…

OpenAI 推出新网络爬虫GPTBot,为GPT-5做准备

目录 一、GPTBot是什么&#xff1f;它是如何工作的&#xff1f;二、GPTBot 与 Google Bot 等搜索引擎网络爬虫有何不同&#xff1f;三、GPTBot 与 Perplexity AI 的网络爬虫有何不同&#xff1f;四、允许 GPTBot 爬取有哪些风险和好处&#xff1f;4.1 允许 GPTBot 的好处4.2 允…

PostgreSQL:所有支持的数据类型及建表语句实例

哈喽&#xff0c;大家好&#xff0c;我是木头左&#xff01; 一、引言 在当今这个数据驱动的时代&#xff0c;数据库已经成为了企业和个人不可或缺的工具。而在众多数据库产品中&#xff0c;PostgreSQL以其强大的功能和高度的可扩展性&#xff0c;受到了越来越多开发者的青睐。…

移除元素 -- 力扣第27题 -- 暴力、双指针解法

题目 https://leetcode.cn/problems/remove-element/description/ 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并原地修改输…

智能变电站协议系列-5、IEC 104协议细化解读(IEC 60870以及如何获取对应国标和行标)

一、前言 通过之前整体性的协议分析&#xff0c;目前确定先基于IEC104做深入分析&#xff0c;来结合分析电网常见的业务&#xff0c;以此从协议侧关联深入到业务侧。在国内该标准也应用比较稳定和广泛了&#xff0c;所以研究104协议相关资料也会更全一些。 二、资料及标准收集…

Spring Security——09,解决跨域

解决跨域 一、SpringBoot配置二、配置SpringSecurity三、修改端口四、修改vue项目4.1 拿到token4.2 前端存储token4.3 前端请求头携带token 五、测试5.1 认证测试5.2 授权测试 一键三连有没有捏~~ 浏览器出于安全的考虑&#xff0c;使用 XMLHttpRequest对象发起 HTTP请求时必须…