题目:【序列中删除指定数字】【变种水仙花数】【数组串联】【交换奇偶位】【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类型。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Entity Framework】EF配置文件设置详解

【Entity Framework】EF配置文件设置详解 文章目录 【Entity Framework】EF配置文件设置详解一、概述二、实体框架配置部分三、连接字符串四、EF数据库提供程序五、EF侦听器六、将数据库操作记录到文件中七、Code First默认连接工厂八、数据库初始值设定项 一、概述 EF实体框架…

力扣热题100_链表_138_随机链表的复制

文章目录 题目链接解题思路解题代码 题目链接 138. 随机链表的复制 给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random &#xff0c;该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成&a…

《追风者》中爷叔必读的三大创业金句!2024最受欢迎的创业项目,2024新兴创业项目

作为爱奇艺2024首部破万的长剧《追风者》&#xff0c;正是因为其中蕴含了无数的人生哲理&#xff0c;处世之道可以供观众细细品味。尤其是其中爷叔的创业金句&#xff0c;更是给了每个初次创业的受挫者鼓励和指引。 1、不输&#xff0c;就是赢了。不比谁赚得多&#xff0c;不比…

元宇宙虚拟空间的角色初始化(六)

前言 该文章主要讲元宇宙虚拟空间的角色初始化&#xff0c;基本核心技术点&#xff0c;不多说&#xff0c;直接引入正题。 角色初始化 在调用渲染前&#xff0c;打印一下更新的列表 console.log(this.updatables); this.render(this);; 这里看到有很多要更新的 这…

java流式计算Stream

java流式计算Stream 流(Stream)到底是什么呢? 是数据渠道&#xff0c;用于操作数据源&#xff08;集合、数组等&#xff09;所生成的元素序列。 “集合讲的是数据&#xff0c;流讲的是计算! ” 特点&#xff1a; Stream自己不会存储元素。 Stream不会改变源对象。相反&#x…

职场必修经验:一位测试大神的软件测试工作经验总结

这篇文章&#xff0c;整理下测试工作经验分享 最近&#xff0c;部门刚毕业入职的小伙伴跟大家提议&#xff0c;让大家把自己的软件测试工作经验分享一下&#xff0c;我整理了一下&#xff0c;可能不全。 测试阶段划分 1、 单个模块功能测试时间相对较长&#xff0c;但每一个…

带头双向循环链表实现

1.结构及特性 前面我们实现了无头单向非循环链表&#xff0c;它的结构是这样的&#xff1a; 在这里的head只是一个指向头结点的指针&#xff0c;而不是带头链表的头节点。 而带头双向循环链表的逻辑结构则是这样的 这就是链表的结构&#xff0c;链表的每一个节点都有两个指针…

ROS 2边学边练(15)-- 写一个简单的服务(C++)

前言 此篇我们即将编写一个简单的服务&#xff08;service&#xff09;通信例子&#xff0c;客户端节点向服务端节点发出请求&#xff08;.srv文件中规定了通信的数据结构格式&#xff09;&#xff0c;服务端节点收到请求后将结果回复给客户端节点&#xff0c;一问一答&#xf…

修电机所需要的基本工具

等距式 模具 同心式模具 电机划线刀 压脚 千分尺 -----测量线径 钳形电流表------- 测量 空载 满载下的电流值 摇表&#xff0c; 测量线圈是否碰到外壳 指针式万用表 胶锤 整理线圈 绝缘纸和青稞纸&#xf…

[StartingPoint][Tier1]Funnel

Task 1 How many TCP ports are open? (打开了多少个 TCP 端口&#xff1f;) # nmap -sS -T4 10.129.224.226 --min-rate 1000 2 Task 2 What is the name of the directory that is available on the FTP server? (FTP 服务器上可用的目录名称是什么&#xff1f;) $ n…

什么是商家转账到零钱

商家转账到零钱是什么&#xff1f; 通过商家转账到零钱这个功能&#xff0c;如果我们系统需要对用户支付费用&#xff0c;比如发放佣金、提成、退款之类的&#xff0c;可以直接转账到用户的微信零钱。 【商家转账到零钱】是【企业付款到零钱】的升级版&#xff0c;2022年5月1…

Java 面试宝典:Redis 的线程模型是怎么样的?

大家好&#xff0c;我是大明哥&#xff0c;一个专注「死磕 Java」系列创作的硬核程序员。 本文已收录到我的技术网站&#xff1a;https://www.skjava.com。有全网最优质的系列文章、Java 全栈技术文档以及大厂完整面经 Redis 的线程模型其实是分两块的&#xff1a; Redis 6.0 …