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

news2024/11/25 10:36:31

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

#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.coloradmin.cn/o/1575502.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

简历模板100+套 (免费下载)

01、计算机02、大数据开发工程师03、测试工程师04、Java工程师05、行政专员06、人力资源主管07、市场专员08、人事专员09、银行、金融10、活动策划、人力资源11、医院、疾控、卫生12、外语翻译13、财务会计师14、产品开发15、服装设计师16、营销策划17、贸易外贸18、经济师19、…

端到端单倍型参考基因组揭示了三倍体香芽蕉型香蕉亚基因组的分歧和疾病抵抗力-文献精读-5

T2T基因组文献分享Telomere-to-telomere haplotype-resolved reference genome reveals subgenome divergence and disease resistance in triploid Cavendish banana 三倍体植物基因组的文献&#xff0c;各位同仁还有什么有特色的基因组评论区留言~ 摘要 香蕉是世界上最重要…

[图像处理] MFC载入图片并绘制ROI矩形

上一篇&#xff1a; [图像处理] MFC载入图片并进行二值化处理和灰度处理及其效果显示 文章目录 前言完整代码重要代码效果 前言 上一篇实现了MFC通过Picture控件载入图片。 这一篇实现ROI功能的第一部分&#xff0c;在Picture控件中&#xff0c;通过鼠标拖拽画出一个矩形。 完…

JavaScript高级应用

学习作用域、变量提升、闭包等语言特征&#xff0c;加深对 JavaScript 的理解&#xff0c;掌握变量赋值、函数声明的简洁语法&#xff0c;降低代码的冗余度。 理解作用域对程序执行的影响 能够分析程序执行的作用域范围 理解闭包本质&#xff0c;利用闭包创建隔离作用域 了解…

OpenFOAM学习笔记

OpenFOAM 计算流体力学&#xff1a;用计算机求解流体控制方程&#xff0c;来模拟真实情况下&#xff0c;流体的流动状态OpenFOAM的离散方法&#xff1a;有限体积法&#xff0c;将整个空间划分成若干个控制体OpenFOAM使用的网格系统&#xff1a;同位网格&#xff08;Collocated…

博客部署002-centos安装nginx

1、centos 如何安装nginx? 在CentOS系统上安装Nginx的过程相对直接&#xff0c;通常可以通过系统自带的Yum包管理器来安装。以下是安装Nginx的最新稳定版的步骤&#xff1a; 1.1 更新系统软件包 在安装Nginx之前&#xff0c;首先确保系统软件包是最新的&#xff0c;运行…

ES学习笔记01

1.ES安装 下载地址&#xff1a; es官网下载 这里使用的是7.8.0的版本信息 下载完成后解压即可完成安装 2.启动运行 点击bin目录下的elasticsearch.bat文件即可启动 在浏览器中输入localhost:9200显示如下&#xff1a; 在路径中加入对应访问后缀即可访问对应信息 如&#…

【Go】二十、反射

文章目录 1、反射2、对基本数据类型反射3、对结构体进行反射4、获取变量的类别5、通过反射修改基本类型变量的值6、通过反射操作结构体的属性和方法 1、反射 //核心包 import ("reflect")通过反射&#xff1a; 可以在运行时动态获取变量的类型、获取结构体的信息&a…

用苹果CMS一小时搭建自己的私人影院(仅供学习与参考,请勿用于商业用途)

用苹果CMS一小时搭建自己的私人影院&#xff08;仅供学习与参考&#xff0c;请勿用于商业用途&#xff09; 一、购买域名和服务器空间或虚拟主机空间。 二、下载苹果CMS影视安装程序到本地。 三、上传苹果CMS安装程序至你的空间并安装。 四、后台设置完善你的电影网站。 五、…

缓存击穿以及解决方案

1.定义 缓存击穿问题也叫热点Key问题&#xff0c;就是一个被高并发访问并且缓存重建业务较复杂的key突然失效了&#xff0c;无数的请求访问会在瞬间给数据库带来巨大的冲击。 问题描述&#xff1a;假设线程1在查询缓存之后&#xff0c;本来应该去查询数据库&#xff0c;然后把…

信息收集之内网渗透(二)

★★免责声明★★ 文章中涉及的程序(方法)可能带有攻击性&#xff0c;仅供安全研究与学习之用&#xff0c;读者将信息做其他用途&#xff0c;由Ta承担全部法律及连带责任&#xff0c;文章作者不承担任何法律及连带责任。 0、前言 本文主要是一些命令的集合&#xff0c;会比较枯…

鸿蒙南向开发实战:【智能扫地机】

样例简介 ​ 此Demo采用润和的智能小车套件为硬件模型&#xff0c;通过修改代码具备了扫地机器人简易的避障功能及防跌落功能&#xff0c;并且能通过wifi接入数字管家应用场景。智能扫地机不仅能接收数字管家应用下发的指令启动或停止扫地机器人&#xff0c;而且还可以加入到数…

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

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…

大模型系列——解读RAG

上篇大概说了几个优化方向&#xff0c;包括提示词&#xff0c;RAG等。那么RAG到底是什么呢&#xff1f;RAG 是2023年最流行的基于 LLM 的应用系统架构。有许多产品几乎完全建立在 RAG 之上&#xff0c;覆盖了结合网络搜索引擎和 LLM 的问答服务&#xff0c;到成千上万个数据聊天…

JSP课设:学校招生系统(附源码+调试)

Java web学校招生系统 Java web学校招生系统功能概述 &#xff08;1&#xff09;登录模块&#xff1a;学校招生系统提供管理员和考生两者登录角色&#xff0c;分别对应不同的功能&#xff0c;登录信息存储在数据库中。 &#xff08;2&#xff09;前台浏览&#xff1a;学校招生…

让智能体像Excel易用还要多久?

2023年&#xff0c;国内AI产业迎来狂飙时代。大模型热潮推动AI智能体&#xff08;AI Agent&#xff09;发展&#xff0c;继ChatGPT成功后&#xff0c;OpenAI目标直指AI Agents。上半年&#xff0c;行业竞相扩大模型规模、提升参数和计算能力&#xff0c;抢占AI浪潮先机。然而&a…

【Easy云盘 | 第二篇】后端统一设计思想

文章目录 4.1后端统一设计思想4.1.1后端统一返回格式对象4.1.2后端统一响应状态码4.1.3后端统一异常处理类4.1.4StringUtils类4.1.5 RedisUtils类 4.1后端统一设计思想 4.1.1后端统一返回格式对象 com.easypan.entity.vo.ResponseVO Data public class ResponseVO<T> …

AFCI 应用笔记三、使用 mlflow 管理模型

1. 简介 由于 AI 神经网络涉及多种参数&#xff0c;需要频繁修改各种超参数&#xff0c;比如&#xff1a;learning rate&#xff0c;batchsize&#xff0c;filter numbers&#xff0c;alpha 等等&#xff0c;每个参数都有可能影响到模型最终的准确率&#xff0c;所以比较这些参…

C语言——顺序表

文章目录 一、线性表二、顺序表顺序表和数组的区别顺序表的分类1.静态顺序表2.动态顺序表 三、动态顺序表的实现1.动态顺序表头文件2.动态顺序表源文件3.测试源文件 一、线性表 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列。线性表是⼀种…

软考——数据库系统工程师

时间周期 流水线 IO功能 基本出现的选项中是必考而且基本都是全选 系统总线 后缀表达式 必考2分 答案&#xff1a;B 、 A 用栈来进行计算的。 第一个题先进行36-34的运算&#xff0c;所以是数字后面的第一个符号是减号呀&#xff01;&#xff01;&#xff01; 很重要的知识点…