C语言--好题

news2024/11/19 22:42:01

目录

题目一:二维数组传参

题目二: malloc开辟二维数组

题目三: 位段

题目四: 联合体

题目五:位段 

题目六:找单身狗2 


题目一:二维数组传参

下面代码中print_arr函数参数设计哪个是正确的?( )

int arr[3][5] = {1,2,3,4,5,6,7,8,9,10};
print_arr(arr, 3, 5);

A.void print_arr(int arr[][],int row, int col);

B.void print_arr(int* arr, int row, int col);

C.void print_arr(int (*arr)[5], int row, int col);

D.void print_arr(int (*arr)[3], int row, int col);

答案解析:二维数组相当于数组的数组,传到子函数变成数组的指针。int arr[3][5]相当于是3个元素的arr,每个元素是int [5],所以int [5]是类型说明不能省略。丢失的信息只有数组的元素个数,也就是3,存放一维数组,要使用指向数组的指针,这样才能存放一维数组的地址。A丢了类型中的5,B选项指针层级都错了,D选项5写成了3,故选C。

题目二: malloc开辟二维数组

#include<stdio.h>
#include <stdlib.h>

int main()
{
	//动态开辟的方式,模拟实现了二维数组
	int **arr = (int**)malloc(3*sizeof(int*));

	int i = 0;
	for (i = 0; i < 3; i++)
	{
		*(arr + i) = (int*)malloc(5*sizeof(int));
	}
	//初始化
	for (i = 0; i < 3; i++)
	{
		int j = 0;
		for (j = 0; j < 5; j++)
		{
			arr[i][j] = 1;
		}
	}
	//打印
	for (i = 0; i < 3; i++)
	{
		int j = 0;
		for (j = 0; j < 5; j++)
		{
			printf("%d ", arr[i][j]);
		}
		printf("\n");
	}

	//释放
	for (i = 0; i < 3; i++)
	{
		free(arr[i]);
	}
	free(arr);
	arr = NULL;

	return 0;
}

答案解析:这种方法每一行元素地址连续,但是不能保证上一行的尾和下一行的开头连续

题目三: 位段

有如下宏定义和结构定义

#define MAX_SIZE A+B
struct _Record_Struct
{
	unsigned char Env_Alarm_ID : 4;
	unsigned char Para1 : 2;
	unsigned char state;
	unsigned char avail : 1;
}*Env_Alarm_Record;
struct _Record_Struct* pointer = (struct _Record_Struct*)malloc(sizeof(struct _Record_Struct) * MAX_SIZE);

当A=2, B=3时,pointer分配( )个字节的空间。

A.20        B.15        C.11        D.9

答案解析:结构体向最长的char对齐,前两个位段元素一共4+2位,不足8位,合起来占1字节,最后一个单独1字节,一共3字节。另外,#define执行的是查找替换, sizeof(struct _Record_Struct) * MAX_SIZE这个语句其实是3*2+3,结果为9,故选D。

题目四: 联合体

在X86下,小端字节序存储,有下列程序

#include<stdio.h>
int main()
{
    union
    {
        short k;
        char i[2];
    }*s, a;
    s = &a;
    s->i[0] = 0x39;
    s->i[1] = 0x38;
    printf("%x\n", a.k);
    return 0;
}

输出结果是( )。

A.3839        B.3938        C.380039        D.不确定

答案解析:union只有2字节,2字节的十六进制只有4位,所以答案CD排除。而位顺序类似小端,低地址在低处,所以39是低地址,在低位,38在高位,所以是3839,故选A。

题目五:位段 

下面代码的结果是( )

int main()
{
    unsigned char puc[4];
    struct tagPIM
    {
        unsigned char ucPim1;
        unsigned char ucData0 : 1;
        unsigned char ucData1 : 2;
        unsigned char ucData2 : 3;
    }*pstPimData;
    pstPimData = (struct tagPIM*)puc;
    memset(puc, 0, 4);
    pstPimData->ucPim1 = 2;
    pstPimData->ucData0 = 3;
    pstPimData->ucData1 = 4;
    pstPimData->ucData2 = 5;
    printf("%02x %02x %02x %02x\n", puc[0], puc[1], puc[2], puc[3]);
    return 0;
}

A.02 03 04 05        B.02 29 00 00        C.02 25 00 00        D.02 29 04 00

答案解析:puc是一个char数组,每次跳转一个字节,结构体不是,它只有第一个元素单独享用一字节,其他三个元素一起共用一字节,所以puc被结构体填充后,本身只有两个字节会被写入,后两个字节肯定是0,至此AD排除,然后第一个字节是2就是2了,第二个字节比较麻烦,首先ucData0给了3其实是越界了,1位的数字只能是0或1,所以11截断后只有1,同理ucData1给的4也是越界的,100截断后是00,只有5的101是正常的。填充序列是类似小端的低地址在低位,所以排列顺序是00 101 00 1。也就是0010 1001,即0x29,故选B。

题目六:找单身狗2 

一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。

编写一个函数找出这两个只出现一次的数字。

例如:

有数组的元素是:1,2,3,4,5,1,2,3,4,6

只有5和6只出现1次,要找出5和6.

void findTwoNum(int arr[], int n, int* pnum1, int* pnum2)
{
	int i;
	int sum = 0;
	​
		for (i = 0; i < 9; i++)
		{
			sum ^= arr[i];
		} //先找到两个数互相异或的结果
	​
		int pos;
	for (i = 0; i < 32; i++)
	{
		if (sum & 1 << i)
		{
			pos = i;
			break;
		}
	} //再找到有分歧的一位。在这一位上,两个数一定是一个1一个0
	​
		* pnum1 = *pnum2 = 0;
	for (i = 0; i < 10; i++)
	{
		if (arr[i] & 1 << pos)
		{
			*pnum1 ^= arr[i]; //这一位是1的,放在数1里
		}
		else
		{
			*pnum2 ^= arr[i]; //这一位是0的,放在数2里
		}
	}
}

答案解析:找出一个只出现过一次的数字的问题处理方法就是找一个数字把里面所有的数字都异或一遍,利用异或两次等于没异或的特点来处理。那么如果有两个数字都只出现了一次,那么如此得到的应该是两个数异或的结果。首先这个结果肯定不是0(要不然就全都配对了),所以里面一定至少一位是一。找出值为1的一位,以这一位的值将结果分为两组。例如1 2 3 4 1 2,异或完的结果应该是3^4得到的111,那么随便找一位就行了。例如找最低位,那么这一位是1的有1 3 1,是0的有2 4 2,由于是利用异或结果为1的某一位分的组,所以两个待查询数字一定分别在两组中。所以再找两个变量,分别异或两组数,即可找到这两个数。 

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

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

相关文章

某985证书站挖掘记录

0x1.前言 ​ 本文章仅用于信息安全防御技术分享&#xff0c;因用于其他用途而产生不良后果&#xff0c;作者不承担任何法律责任&#xff0c;请严格遵循中华人民共和国相关法律法规&#xff0c;禁止做一切违法犯罪行为。文中涉及漏洞均以提交至教育漏洞平台&#xff0c;现已修复…

​ModbusTCP转Profibus-DP从站网关把modbus的数据传到300plc上的应用方法​​

远创智控YC-DPS-TCP&#xff0c;让Profibus和ModbusTcp总线之间的通讯协议转换更简单。 远创智控YC-DPS-TCP 是一种将Profibus和ModbusTcp总线连接的通讯协议转换设备。这个设备非常符合ModbusTcp协议的设备&#xff0c;比如各种仪表、传感器、交换机等&#xff0c;它们可以通过…

odoo笔记

后台运行项目 nohup python odoo-bin -c ./debian/odoo.conf & 查看当前odoo进程 &#xff08;更新项目模型类时&#xff0c;1.先重启项目&#xff0c;2.再去网页更新模块&#xff09; ps -fA | grep odoo kill 进程id 删库 /web/database/manager 查找文件夹 find …

linux centos7 环境下 no such file or directory

目录 1.问题描述2.主要原因2.1修改后代码2.2修改前代码 总结参考 1.问题描述 预览excel文件时无法找到对应的html文件 2.主要原因 异常原因&#xff1a;代码获取的是系统的tmp文件&#xff0c;但是linux环境环境中心tmp目录是没有权限的&#xff0c;所以不能获取系统的根目录…

Python如何获取动态加载的数据呢 ?

大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 如果有什么疑惑/资料需要的可以点击文章末尾名片领取源码 例子1&#xff1a;爬取dy电影中的电影详情数据 url:https://movie.douban.com/ 1.什么是动态加载的数据&#xff1a; 我们通过requests模块进行数据爬取无法每次都是可见…

vue使用高德地图轨迹活动效果demo(整理)

在html页面引入您自己的key <script language"javascript" src"https://webapi.amap.com/maps?v1.4.15&key6b26c2c58770d13a4ecf2b96615dbaee"></script><template><div class"index"><div id"amapContain…

什么是粘包和半包问题

什么是粘包和半包问题 粘包 发送的是 ABC和DEF 接收到的是 ABCDEF 半包 发送的是 ABCD 接收到的是 AB 和 CD 为什么会有粘包问题? 因为 TCP 是面向连接的传输协议&#xff0c;它是以“流”的形式传输数据的&#xff0c;而“流”数据是没有明确的开始和结尾边界的&#xff0…

MIT6.5830 Lab1-Go tutorial实验记录(一

MIT6.5830 Lab1-Go tutorial实验记录&#xff08;一&#xff09; – WhiteNights Site 标签&#xff1a;Golang, 数据库 编写一个简单的http server。 前言 MIT数据库系统实验 在网上看到了这么个实验&#xff0c;刚好对golang和数据库比较感兴趣&#xff0c;于是开始跟着做实…

五大亮点探索互联网医院源码的创新应用方式

作为互联网医疗行业的专家&#xff0c;我将为您揭示互联网医院源码的五大创新亮点。随着数字化技术的迅猛发展&#xff0c;互联网医院源码成为了提升医疗服务质量和提供便捷就医体验的重要工具。现在&#xff0c;让我们一起深入探索这五大亮点&#xff0c;了解互联网医院源码在…

什么是人事RPA?人事RPA解决什么问题?人事RPA实施难点在哪里?

每家公司人力资源部门每天需要筛选适合自己公司岗位要求的人才并与之沟通邀约面试、每月全公司员工的考勤状态核对、业绩考核核对、入离职手续办理、新员工培训等等&#xff0c;每项业务流程都由人手操作&#xff0c;效率极低、流程繁琐、费时费力。HR部门每天面对的业务数据量…

基于Java的驾校教练预约管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09; 代码参考数据库参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…

使用Linux远程连接OpenGauss数据库的步骤和方法

文章目录 前言1. Linux 安装 openGauss2. Linux 安装cpolar3. 创建openGauss主节点端口号公网地址4. 远程连接openGauss5. 固定连接TCP公网地址6. 固定地址连接测试 前言 openGauss是一款开源关系型数据库管理系统&#xff0c;采用木兰宽松许可证v2发行。openGauss内核深度融合…

COMMUTING CONDITIONAL GANS FOR MULTI-MODAL FUSION

方法 C f ^f f是分类器&#xff0c;P f ^f f(o i _i i​)是第i个物体出现的融合概率 作者未公布代码

Sectigo数字证书

安装SSL证书可以提供数据保护、确保身份真实性&#xff0c;并增强用户信任&#xff0c;从而提高网站的安全性和可信度。所以越来越多注重网络安全的技术人员在保障数据安全的手段上&#xff0c;选择直接安装SSL证书。 其中Sectigo的SSL证书是全球SSL证书市场占有率最高的CA公司…

电脑打开图片比例太大怎么调?这个方法又快又好用

别人给我们发送的图片&#xff0c;有许多打开之后提示图片太大&#xff0c;这种情况改怎么处理呢&#xff1f;其实可以使用图片改大小&#xff08;https://www.yasuotu.com/size&#xff09;功能来对图片尺寸大小修改就可以了&#xff0c;接下来就分享一个批量修改图片尺寸的方…

牛奶配送经营商城小程序的作用是什么

牛奶是老少皆爱喝的饮品&#xff0c;市场呈现大品牌多区域拓展形式&#xff0c;中小企业在经营中较为受限制&#xff0c;传统线下超市铺货占领的方式已经变得很低效&#xff0c;线下直营店和经销商在实际经营中面临难题。 线下经营受困&#xff0c;线上经营成为众商家扩大生意…

01_CookieWebStorage

1 Cookie Cookie的使用必须基于web服务器&#xff0c;因为Cookie的操作会跟随http请求进行。 Cookie&#xff0c;有时也用其复数形式 Cookies。类型为“小型文本文件”&#xff0c;是某些网站为了辨别用户身份&#xff0c;进行Session跟踪而储存在用户本地终端上的数据&#x…

水生物数据集

FishNet: A Large-scale Dataset and Benchmark for Fish Recognition, Detection, and Functional Traits Prediction FishNet 是一个大规模多样化的数据集&#xff0c;包含了来自 17357 种水生物的 94532 张精心整理的图像。这些图像根据水生物的生物分类学&#xff08;目、科…

数据挖掘之贝叶斯优化——前反馈特征的参数,估计特征的最佳数值

贝叶斯优化是一个全局优化方法&#xff0c;用于优化具有噪声的黑盒函数。这一方法在许多现实世界的问题中都有应用&#xff0c;特别是在那些评估目标函数的代价很高的场合&#xff0c;例如超参数调优。 背景&#xff1a; 为什么需要贝叶斯优化&#xff1f; 在数据挖掘、机器…

VBA窗体跟随活动单元格【简易版】

本篇博客与以往的风格不同&#xff0c;先上图再讲解。 这个效果是不是很酷&#xff0c;VBA窗体&#xff08;即UserForm&#xff0c;下文中简称为窗体&#xff09;可以实现很多功能&#xff0c;例如&#xff1a;用户输入数据&#xff0c;提供选项等等。如本博客标题标注&#…