C语言假期作业 DAY 15

一、选择题

1、有如下代码,则 *(p[0]+1) 所代表的数组元素是( )

int a[3][2] = {1, 2, 3, 4, 5, 6}, *p[3];
p[0] = a[1];

A: a[0][1]

B: a[1][0]

C: a[1][1]

D: a[1][2]

答案解析

正确答案: C
p 是一个指针数组, p[0] = a[1]; 此处 a[1] 是二维数组的第二行的数组名,数组名表示首元素的地址, a[1] 是 a[1][0] 的地址,所以p[0] 中存储的是第 2 行第 1 个元素的地址, p[0]+1 就是第二行第 2 个元素的地址, *(p[0]+1) 就是第二行第二个元素了。所以C 正确。

2、关于指针下列说法正确的是【多选】( )

A: 任何指针都可以转化为void *

B: void *可以转化为任何指针

C: 指针的大小为8个字节

D: 指针虽然高效、灵活但可能不安全

答案解析

正确答案: ABD

C 选项,指针占几个字节要看平台, 64 位环境下 8 个字节, 32 位环境下 4 个字节

3、以下 scanf 函数调用选项中, 错误的是( ) 

struct T
{
char name[20];
int age;
int sex;
} a[5], *pa=a;

A: scanf("%s",a[0].name);

B: scanf("%d", &pa[0].age);

C: scanf("%d",&(pa->age));

D: scanf("%d", pa->age);

答案解析

正确答案: D
该题考察的是通过 scanf 函数的调用对结构体数据类型进行初始化。 scanf(" 输入控制符 ", 输入参数 ); 功能:将从键盘输入的字符转化为“ 输入控制符 ” 所规定格式的数据,然后存入以输入参数的值为地址的变量中。 scanf 输入时要通过地址找空间,B、 C 用了 & 是正确的。 name 属于字符数组的数组名,相当于数组的首地址, A 正确。单独的 pa->age 可用于输出语句获取值的
形式,用在 scanf 中的时候需要 & 操作符, D 错误

4、如下函数 fun 计算 prod=1*2*3*…*n ,并返回计算结果值。但当 n>12 时,返回值不正确。要找出该程序的错误,正确的调试方法是( )

int fun(int n)
{
int prod = 1 , i = 0;
for(i = 1;i <= n;i++)
{
prod *= i;
} r
eturn prod;
}

A: 监视变量prod的值,在prod *= i;行处设置断点,然后单步运行,直到发现错误原因

B: 监视变量prod的值,在return prod;行处设置断点,程序中断后,即可发现错误原因

C: 在prod=1;处设置断点,然后在函数调用堆栈中即可发现错误原因

D: 监视变量i的值,在for (i=1; i<=n; i++)行处设置断点,然后单步运行,直到发现错误原因

答案解析

正确答案: A
依题目已知情况,当 n<=12 时结果是正确的,说明是随着参数的变大计算过程中哪里出了问题,故而要在 prod *= i; 处设断点,查看原因。错误原因是数据过大时整型溢出

 5、下列给定程序中,函数 fun 的功能是:把形参a所指数组中的奇数按原顺序依次存放到 a[0]、a[1]、a[2]… 中, 把偶数从数组中删除,奇数个数通过函数值返回。 例如,若a所指数组中的数据最初排列为: 9,1,4,2,3,6,5,8,7 ,删除偶数后,a所指数组中的数据为: 9,1,3,5,7 ,返回值为5。请在程序的下画线处填入正 确的内容并将下画线删除,使程序得出正确的结果( )

int fun(int a[], int n)
{
int i, j;
j=0;
for (i=0; i<n; i++)
if (a[i]%2== _________ )
{
a[j]=a[i];
_________;
} r
eturn _________;
}

A: 0  j++  j

B: 1  j++  j+1

C: 0  j++  j+1

D: 1  j++  j

答案解析

 

正确答案: D
代码实现的思路应该是 arr[i] 是奇数的时候要存储起来,所以第一个空是 1 ,最开始 j 是 0 ,每次找到一个奇数就存储到arr[j]的位置,那接下里 j 需要 +1 ,所以得第二个空是 j++ ,当循环停止的时候, j 其实就是奇数的个数。所以最后返回 j ,第三个空是j 。所以选 D 。

二、编程题

1:KS33 寻找奇数

寻找奇数_牛客题霸_牛客网 (nowcoder.com)

描述

现在有一个长度为 n 的正整数序列,其中只有一种数值出现了奇数次,其他数值均出现偶数次,请你找出那个出现奇数次的数值。

数据范围:1 \le n \le 2 \times 10^6 \1≤n≤2×106 

输入描述

第一行:一个整数n,表示序列的长度。第二行:n个正整数ai,两个数中间以空格隔开。

输出描述

一个数,即在序列中唯一出现奇数次的数值。

示例1

输入:

5
2 1 2 3 1
输出:3

示例2

输入:

1
1

输出:

1

【答案解析】

异或:二进制比特位相同则 0 , 不同则 1.
两个相同的数字异或得到的是 0 , 基于这个思路,这道题对数组中的所有数据进行逐一异或就可以解决得到奇数次的 数字,因为偶数次的数字都被异或成为 0 了,最后单独保留了奇数次的数字。

#include <stdio.h>
int main()
{int n;while (~scanf("%d", &n)) {int num = 0, tmp = 0;//对每个数字进行异或,出现偶数次的就会异或为0了,而奇数次刚好剩下的就是对应数字for (int i = 0; i < n; i++) {scanf("%d", &tmp);num ^= tmp;}printf("%d\n", num);}return 0;
}

2:NC107 寻找峰值

寻找峰值_牛客题霸_牛客网 (nowcoder.com)

描述

给定一个长度为n的数组nums,请你找到峰值并返回其索引。数组可能包含多个峰值,在这种情况下,返回任何一个所在位置即可。

1.峰值元素是指其值严格大于左右相邻值的元素。严格大于即不能有等于

2.假设 nums[-1] = nums[n] = -\infty−∞

3.对于所有有效的 i 都有 nums[i] != nums[i + 1]

4.你可以使用O(logN)的时间复杂度实现此问题吗?

数据范围

1 \le nums.length \le 2\times 10^5 \1≤nums.length≤2×105 

-2^{31}<= nums[i] <= 2^{31} - 1−231<=nums[i]<=231−1

如输入[2,4,1,2,7,8,4]时,会形成两个山峰,一个是索引为1,峰值为4的山峰,另一个是索引为5,峰值为8的山峰,如下图所示:

示例1

输入:

[2,4,1,2,7,8,4]
返回值:1

说明:4和8都是峰值元素,返回4的索引1或者8的索引5都可以

示例2

输入:[1,2,3,1]

返回值:2

说明:3 是峰值元素,返回其索引 2

【答案解析】

暴力破解: 遍历数组,从 [1 , n - 1] 号位置开始,哪个位置的数据大于上一个数据和下一个数据即可。
更优思想:二分思想,
中间比右边大,认为从右往左半边递增,则把 right 不断向左靠拢 right=mid ,注意不能是 mid - 1 ,因为这个位置有可能就是峰值点。
直到遇到中间比右边小了,意味着数据开始递降了,则 left 向右偏移, left=mid+1 ; 而一旦 mid+1 位置大于了right ,意味着刚好这个 mid+1 位置,是一个左半边 - 右往左递降,右半边 - 右往左递增的点,就是一个峰值点。
示例:

int findPeakElement(int* nums, int numsLen) 
{//边界情况处理,1个元素前后都是负无穷 以及 0号位置大于1号位置,-1位置负无穷的情况if (numsLen == 1 || nums[0] > nums[1]) return 0;//末尾位置数据大于上一个位置数据,而nums[numsLen]负无穷的情况if (nums[numsLen - 1] > nums[numsLen - 2]) return numsLen - 1;int left = 0, right = numsLen - 1, mid;while (left < right){mid = left + (right - left) / 2;if (nums[mid] < nums[mid + 1])//中间比右边小,意味着右边肯定有个峰值left = mid + 1;else //否则在左边包括当前位置肯定有个峰值right = mid;}return left;
}

 

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

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

相关文章

备忘录模式(C++)

定义 在不破坏封装性的前提下&#xff0c;捕获一-个对象的内部状态&#xff0c;并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。 应用场景 ➢在软件构建过程中&#xff0c;某些对象的状态在转换过程中&#xff0c;可能由于某种需要&#xff0c;要…

【Java设计模式】建造者模式 注解@Builder

概念 将一个复杂对象的构造与它的表示分离&#xff0c;使同样的构建过程可以创建不同的表示。它使将一个复杂的对象分解成多个简单的对象&#xff0c;然后一步步构建而成。 每一个具体建造者都相对独立&#xff0c;而与其它的具体建造者无关&#xff0c;因此可以很方便地替换具…

JavaWeb 手写Tomcat底层机制

目录 一、Tomcat底层整体架构 1.简介 : 2.分析图 : 3.基于Socket开发服务端的流程 : 4.打通服务器端和客户端的数据通道 : 二、多线程模型的实现 1.思路分析 : 2.处理HTTP请求 : 3.自定义Tomcat : 三、自定义Servlet规范 1. HTTP请求和响应 : 1 CyanServletRequest …

布隆过滤器,Guava实现布隆过滤器(本地内存),Redis实现布隆过滤器(分布式)

一、前言 利用布隆过滤器可以快速地解决项目中一些比较棘手的问题。如网页 URL 去重、垃圾邮件识别、大集合中重复元素的判断和缓存穿透等问题。不知道从什么时候开始&#xff0c;本来默默无闻的布隆过滤器一下子名声大噪&#xff0c;在面试中面试官问到怎么避免缓存穿透&#…

Multimodal Learning with Transformer: A Survey

Transformer多模态学习 Abstract1 INTRODUCTION2 BACKGROUND2.1 Multimodal Learning (MML)2.2 Transformers: a Brief History and Milestones2.3 Multimodal Big Data 3 TRANSFORMERS: A GEOMETRICALLY TOPOLOGICAL PERSPECTIVE3.1 Vanilla Transformer3.1.1 Input Tokenizat…

如何免费申请SSL证书

如何免费申请SSL证书 文章目录 如何免费申请SSL证书前言1. 向域名平台申请SSL证书1.1 购买“免费证书” 2. 进一步进行创建证书设置2.1 对证书的关联域名进行补充 3. 云解析DNS3.1 进行验证信息 前言 我们可以成功地将自己购买的域名&#xff0c;绑定到连接本地群晖NAS的数据隧…

【LeetCode每日一题】——85.最大矩形

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时间频度】九【代码实现】十【提交结果】 一【题目类别】 矩阵 二【题目难度】 困难 三【题目编号】 85.最大矩形 四【题目描述】 给定一个仅包含 0 …

Yolov8-pose关键点检测:模型轻量化设计 | 引入Ghostnet、G_ghost、Ghostnetv2、repghost,进行性能对比

💡💡💡本文解决什么问题:Yolov8-pose关键点评估不同轻量级网络的性能,引入Ghostnet、G_ghost、Ghostnetv2、repghost等网络进行可行性分析 Yolov8-Pose关键点检测专栏介绍:https://blog.csdn.net/m0_63774211/category_12398833.html ✨✨✨手把手教你从数据标记到生…

Python(Web时代)——请求钩子

简介 有时在处理请求之前或之后需要执行一部分代码&#xff0c;比如&#xff1a;创建数据库链接或进行登陆权限认证等&#xff0c;在请求结束时指定数据的交互格式等。 为了避免在每个视图函数中编写重复的代码&#xff0c;flask提供了注册通用函数的功能&#xff08;请求钩子…

windows永久暂停更新

目录 1.winr,输入regedit打开注册表 2.打开注册表的这个路径: 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings 右键空白地方新建QWORD值命名为:FlightSettingsMaxPauseDays 3.双击FlightSettingsMaxPauseDays,修改里面的值为100000,右边基数设置…

17款奔驰S400升级原厂前排座椅通风系统,夏天必备的功能

通风座椅的主动通风功能可以迅速将座椅表面温度降至适宜程度&#xff0c;从而确保最佳座椅舒适性。该功能启用后&#xff0c;车内空气透过打孔皮饰座套被吸入座椅内部&#xff0c;持续时间为 8 分钟。然后&#xff0c;风扇会自动改变旋转方向&#xff0c;将更凉爽的环境空气从座…

Total Variation loss

Total Variation loss 适合任务 图像复原、去噪等 处理的问题 图像上的一点点噪声可能就会对复原的结果产生非常大的影响&#xff0c;很多复原算法都会放大噪声。因此需要在最优化问题的模型中添加一些正则项来保持图像的光滑性&#xff0c;图片中相邻像素值的差异可以通过…

python编写ocr识别图片汉字

当你需要构建一个简单的图形用户界面&#xff08;GUI&#xff09;应用程序&#xff0c;并在其中实现光学字符识别&#xff08;OCR&#xff09;功能时&#xff0c;wxPython是一个强大而灵活的选择。wxPython是一个基于Python的跨平台GUI开发框架&#xff0c;结合了wxWidgets C库…

微信提示操作太频繁怎么办?

微信使用过程中&#xff0c;遇到“操作太频繁”的提示该怎么办&#xff1f; 而提示频繁最常见的两种情况&#xff1a;加好友频繁和发消息频繁。 微信为什么提示频繁&#xff1f;频繁是因为微信故意这样设置的&#xff0c;压根就不想你群发&#xff01;&#xff01;&#xff0…

黑马程序员SpringMVC练手项目

目录 1、需求 2、项目准备 pom.xml SQL jdbc.properties log4j.properties applicationContext.xml spring-mvc.xml web.xml 3、工作流程 4、难点 项目已经上传到gitee&#xff1a;https://gitee.com/xzl-it/my-projects 1、需求 SpringMVC项目练习&#xff1a;数…

bagging集成与boosting集成的区别是什么?

bagging集成与boosting集成的区别 区别一:数据方面 Bagging&#xff1a;对数据进行采样训练; Boosting&#xff1a;根据前一轮学习结果调整数据的重要性。 区别二:投票方面 Bagging&#xff1a;所有学习器平权投票; Boosting&#xff1a;对学习器进行加权投票。 区别三:…

全志D1-H (MQ-Pro)驱动 OV5640 摄像头

内核配置 运行 m kernel_menuconfig 勾选下列驱动 Device Drivers ---><*> Multimedia support --->[*] V4L platform devices ---><*> Video Multiplexer[*] SUNXI platform devices ---><*> sunxi video input (camera csi/mipi…

Android:自己写一个简单记事本

一、前言&#xff1a;我的app是点击加号跳转到另一个界面 那么我遇到的问题的是点击加号是一个从一个Fragment跳转到另一个Fragment跳转失败。 二、解决方案&#xff1a; //相应控件的监听里面实现跳转FragmentManager fragmentManagergetFragmentManager();fragmentManager.b…

react ant icon的简单使用

refer: 快速上手 - Ant Design 1.引入ant npm install antd --save 2.在页面引用&#xff1a; import { StarOutlined } from ant-design/icons; 如果想要引入多个icon&#xff0c;可以这样书写&#xff1a; import { UserOutlined, MailOutlined, PieChartOutlined } fr…

GG修改美食大战老鼠宝石等级以及修改其他资料的方法

这期主要是讲一些&#xff0c;大家修改遇到的问题以及修改其他参数。 宝石、武器如何修改以及软件的安装与配置&#xff0c;请看我gg分栏的前两章 第一点&#xff1a;先讲一下自己武器上宝石等级的问题 宝石的代码&#xff1a; 0级升星宝石的代码1480e010 0级火力宝石的代码1…