c语言经典测试题10

1.题1

int fun( int x)
{
	int n = 0;
	while (x + 1)
	{
		n++;
		x = x | (x + 1);
	}
	return n;
}
int main()
{
	int ret = fun(2014);
	printf("%d", ret);
	return 0;
}

上述代码运行结果是什么呢?

我们来分析一下:这里的fun函数有一个while循环,其判断条件为x+1会使每次的x加1,我们的if中x=x|(x+1),这里的按位或操作符,计算规则为只要有1就为1,同时为0才为0,这里的n是用来记录总共循环的次数。第一次循环:

    x的补码为:0000 0000 000 0000 0000 0111 1101 1110 

 x+1的补码为:0000 0000 000 0000 0000 0111 1101 1111

经过按位或运算后的补码为:0000 0000 000 0000 0000 0111 1101 1111

第二次循环:

    x的补码为:0000 0000 000 0000 0000 0111 1101 1111

 x+1的补码为:0000 0000 000 0000 0000 0111 1110 0000

经过按位或运算后的补码为:0000 0000 000 0000 0000 0111 1111 1111

我们发现每循环一次,补码中就会少一个0,所以这个fun函数其实是计算x的补码中0的个数,while循环的判断条件是x+1=0,当x的补码全部为1是值为-1,此时停止循环,n记录了循环的次数,也是该补码中0的个数。

我们运行看看:

2.题2

以下选项中,对基本类型相同的两个指针变量不能进行运算的运算符是( )

A: +  B: -  C: =  D: ==

我们来分析一下:"两个指针的基本类型相同"是指两个指针变量的存储地址的数据类型相同。例如,如果两个指针变量都是整型指针(int*),则它们的基本类型相同。这意味着这两个指针变量都可以指向相同类型的内存地址,并且可以在需要时进行赋值、比较或者进行其他操作。所以A是错的,因为两个地址相加无意义也可能越界,所以规定不允许指针相加。B选项,可以求出两个数据元素储存位置之间的相隔同数据类型的元素个数,C选项,赋值,没问题,D选项,判断两指针是否相同。

3.题3

int fun(char *s)
{
char *t = s;
while(*t++);
return(t-s);
}

有以下函数,该函数的功能是( )

A: 比较两个字符的大小 B: 计算s所指字符串占用内存字节的个数

C: 计算s所指字符串的长度 D: 将s所指字符串复制到字符串t中

我们来分析一下:fun函数中while循环的条件为*t++,所以这个*t为\0时循环停止,并返回首元素地址减去尾元素地址,我们知道首减尾指针结果为其中元素的个数,所以这个函数可以计算s指针指向的字符串的元素个数,所以B正确,但是C选项不包括\0.

4.题4

int main()
{
	float a[3] = { 1.5,2.5,3.5 };
	float *pa = a;
	*(pa++) *= 3;
	printf("%.1f", *pa);
	return 0;
}

上述代码的运行结果是什么呢? 

A: 1.5 B: 2.5 C: 3.5 D: 4.5

我们来分析一下:一开始pa保存的是a[0]的地址,*(pa++)*=3,将a[0]放大三倍,此时的*pa大小为4.5,但是由于还有后置++的存在此时的pa就指向a[1]所以*pa为2.5

5.题5

单词倒排

 void upendprint(char*s)
{
	if (*s != '\0')
	{
		upendprint(s + 1);
		printf("%c", *s);
	}
}
int main()
{
	char arr[1000] = { 0 };
	gets(arr);
	upendprint(arr);
	return 0;
}

我们来测试一下:

 大家也可以试试。

谢谢

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

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

相关文章

改造小技巧:如何将客厅与阳台完美连通?福州中宅装饰,福州装修

问1:什么户型结构更适合客厅打通阳台? 一般来说,现代、简约或者开放式的户型结构更适合将客厅与阳台打通。这样可以通过移除非承重墙来增加室内采光和空间感。需要注意的是,在打通之前,需要考虑房屋的结构和承重墙的位…

Qt下使用modbus-c库实现PLC线圈/保持寄存器的读写

系列文章目录 提示:这里是该系列文章的所有文章的目录 第一章:Qt下使用ModbusTcp通信协议进行PLC线圈/保持寄存器的读写(32位有符号数) 第二章:Qt下使用modbus-c库实现PLC线圈/保持寄存器的读写 文章目录 系列文章目录…

【活动】前端世界的“祖传代码”探秘:从古老魔法到现代重构

作为一名前端工程师,我时常在项目中邂逅那些被岁月打磨过的“祖传代码”。它们就像古老的魔法书页,用HTML标签堆砌起的城堡、CSS样式表中的炼金术,以及JavaScript早期版本中舞动的符咒。这些代码承载着先驱们的探索精神和独特智慧&#xff0c…

内网信息搜集

目录 内网基础知识 基本流程图 怎么判断是否在域内 常规信息类收集-应用&服务&权限等 cs信息搜集 bloodhound安装及使用 内网基础知识 工作组:将不同的计算机按照功能分别列入不同的组,想要访问某个部门的资源,只要在【网络】里…

种地,成了“糊咖”最好的医美

在《种地吧,少年》(后简称《种地吧》)第二季上线后,这部综艺开启了在骨朵、猫眼、灯塔、艺恩各大综艺榜单的持续霸榜。上线至今,有一半的时间占据在日榜单热度TOP1的位置。 根据灯塔专业版数据显示,《种地…

《TCP/IP详解 卷一》第8章 ICMPv4 和 ICMPv6

目录 8.1 引言 8.1.1 在IPv4和IPv6中的封装 8.2 ICMP 报文 8.2.1 ICMPv4 报文 8.2.2 ICMPv6 报文 8.2.3 处理ICMP报文 8.3 ICMP差错报文 8.3.1 扩展的ICMP和多部报文 8.3.2 目的不可达和数据包太大 8.3.3 重定向 8.3.4 ICMP 超时 8.3.5 参数问题 8.4 ICMP查询/信息…

selenium爬虫

方法选择和安装包 在动态网页并且登陆过程中不需要进行过于复杂的密码验证的时候使用selenium会非常的方便 安装准备过程也相对简单: 下载对应版本的chromedriver并且通过如下代码找到路径下载到python所在的目录: import sysprint(sys.executable) …

Bert-as-service 学习

pip3 install --user --upgrade tensorflow 安装遇到的问题如下: pip3 install --user --upgrade tensorflow 1052 pip uninstall protobuf 1053 pip3 uninstall protobuf 1054 pip3 install protobuf3.20.* 1055 pip3 install open-clip-torch2.8.2 1…

C++/数据结构:AVL树

目录 一、AVL树的概念 二、AVL树的实现 2.1节点定义 2.2节点插入 三、AVL树的旋转 3.1新节点插入较高左子树的左侧:右单旋 3.2新节点插入较高右子树的右侧:左单旋 3.3新节点插入较高左子树的右侧---左右:先左单旋再右单旋 3.4新节点插…

数据结构篇十:红黑树

文章目录 前言1. 红黑树的概念2. 红黑树的性质3. 红黑树节点的定义4. 红黑树的插入4.1 情况一: cur为红,p为红,g为黑,u存在且为红4.2 情况二: cur为红,p为红,g为黑,u不存在/u存在且为黑。4.2.1 …

C++:内存管理|new和delete

创作不易,感谢三连支持! 一、内存分布 为什么需要内存管理呢??因为我们在程序的运行过程中会需要各种各样的数据,而我们根据数据的不同存储在不同的区域里面,是为了更高效地处理数据。而C语言相比Java来说…

Docker与虚拟机比较

在对比Docker和虚拟机前,先简单了解下虚拟化,明确Docker和虚拟机分别对应的虚拟化级别,然后对Docker和虚拟机进行比较。需要注意的是,Docker和虚拟机并没有什么可比性,而是Docker使用的容器技术和虚拟机使用的虚拟化技…

Linux 基础之 sar 工具详解

文章目录 一、前言二、配置说明三、使用说明(一)sar语法(二)sar选项(三)示例示例1示例2示例3示例4示例5示例6示例7示例8示例9示例10其他示例11其他示例12用于排查性能常用的命令 一、前言 sar(System Acti…

【无标题】TMGM官网平台切尔西足球俱乐部合作

TMGM作为一家在三大洲均设有办事处的行业领导者,TMGM 被视为可靠的差价合约交易提供商,其重点是监管合规、技术创新与他联系➕🛰️TMGM818卓越的客户服务。 切尔西足球俱乐部在亚太地区拥有庞大的球迷群体,并在该地区建立了多种亚…

Java中==与equals()的区别

关于“对比”类型的面试题,建议回答时包括: 多个对比项有什么相同/相似之处 多个对比项的区别 在应用中应该如何选取 可能的话,加入一些扩展。 变量与对象是2个不同的概念 Object a = new Object(); 以上代码中的a就是变量,在内存中实际存在的数据就是对象。 所有引…

五大跨平台桌面应用开发框架:Electron、Tauri、Flutter等

hello,我是贝格前端工场,本次介绍跨平台开发的框架,欢迎大家评论、点赞。 一、什么是跨平台桌面应用开发框架 跨平台桌面应用开发框架是一种工具或框架,它允许开发者使用一种统一的代码库或语言来创建能够在多个操作系统上运行的…

使用 frp 实现 windows 远程

前提条件: 拥有一台公网 ip 的服务器; 被远程控制的 windows 系统为专业版(家庭版的其它方式没有尝试过); frp 下载包及使用说明 frp release 包的下载网址:https://github.com/fatedier/frp/releases 中…

人工智能基础——模型部分:模型介绍、模型训练和模型微调 !!

文章目录 前言 一、什么是模型 二、什么是模型训练 三、什么是模型微调 前言 本文将从什么是模型?什么是模型训练?什么是模型微调?三个问题,来展开介绍人工智能基础的模型部分。 模型族谱 一、什么是模型 模型是一个函数&#x…

set和multiset

1. set基本概念 简介: 所有元素都会在插入时自动被排序 本质: set/multiset属于关联式容器,底层结构是用二叉树实现。 set和multiset区别: set不允许容器中有重复的元素 multiset允许容器中有重复的元素 2. set构造和赋值 功能描述…

MySql安全加固:配置不同用户不同账号禁止使用旧密码禁止MySql进程管理员权限

MySql安全加固:配置不同用户不同账号&禁止使用旧密码&禁止MySql进程管理员权限 1.1 检查是否配置不同用户不同账号1.2 检查是否禁止使用旧密码1.3 禁止MySql进程管理员权限 💖The Begin💖点点关注,收藏不迷路&#x1f496…