C语言假期作业 DAY 15

news2024/12/25 0:00:29

一、选择题

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

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

相关文章

【Github】Uptime Kuma:自托管监控工具的完美选择

简介&#xff1a; Uptime Kuma 是一款强大的自托管监控工具&#xff0c;通过简单的部署和配置&#xff0c;可以帮助你监控服务器、VPS 和其他网络服务的在线状态。相比于其他类似工具&#xff0c;Uptime Kuma 提供更多的灵活性和自由度。本文将介绍 Uptime Kuma 的功能、如何使…

Leetcode周赛 | 2023-8-6

2023-8-6 题1体会我的代码 题2我的超时代码题目体会我的代码 题3体会我的代码 题1 体会 这道题完全就是唬人&#xff0c;只要想明白了&#xff0c;只要有两个连续的数的和&#xff0c;大于target&#xff0c;那么一定可以&#xff0c;两边一次切一个就好了。 我的代码 题2 我…

JavaScript |(七)BOM及JSON简介 | 轮播图 | 尚硅谷JavaScript基础实战

学习来源&#xff1a;尚硅谷JavaScript基础&实战丨JS入门到精通全套完整版 系列笔记&#xff1a; JavaScript |&#xff08;一&#xff09;JavaScript简介及基本语法JavaScript |&#xff08;二&#xff09;JavaScript自定义对象及函数JavaScript |&#xff08;三&#xff…

【JavaEE】Spring Boot - 日志文件

【JavaEE】Spring Boot 开发要点总结&#xff08;3&#xff09; 文章目录 【JavaEE】Spring Boot 开发要点总结&#xff08;3&#xff09;1. 日志有什么作用2. 日志格式2.1 日志框架原理 3. 日志的打印3.1 System.out.println3.2 使用日志框架3.3 日志级别3.3.1 设置默认日志显…

论文阅读---《Unsupervised T ransformer-Based Anomaly Detection in ECG Signals》

题目&#xff1a;基于Transformer的无监督心电图&#xff08;ECG&#xff09;信号异常检测 摘要 异常检测是数据处理中的一个基本问题&#xff0c;它涉及到医疗感知数据中的不同问题。技术的进步使得收集大规模和高度变异的时间序列数据变得更加容易&#xff0c;然而&#xff…

Unity 中检测射线穿过的所有的物体

在开发中 有个需求&#xff0c;射线要检测所有穿过的物体。 代码如下&#xff1a; using UnityEngine;public class HitCollider : MonoBehaviour {public float raycastDistance Mathf.Infinity;// Update is called once per framevoid Update(){Ray ray Camera.main.Scre…

GIT-HUB上传大文件.docx

下载git Github上传大文件&#xff08;&#xff1e;25MB&#xff09;教程_UestcXiye的博客-CSDN博客 上传流程 https://blog.csdn.net/weixin_35770067/article/details/116564429?spm1001.2101.3001.6661.1&utm_mediumdistribute.pc_relevant_t0.none-task-blog-2%7Ed…

WebRTC | 音视频直播客户端框架

端到端通信互动技术可分解为以下几个技术难点&#xff1a;客户端技术、服务器技术、全球设备网络适配技术和通信互动质量监控与展示技术。 一、音视频直播 音视频直播可分成两条技术路线&#xff1a;一条是以音视频会议为代表的实时互动直播&#xff1b;另一条是以娱乐直播为代…

Fabric

Fabric Fabric.js是一个非常好用的Javascript HTML5 canvas库&#xff0c;封装了canvas原生较为复杂的api&#xff0c;在canvas元素的顶部提供交互式对象模型&#xff0c;用于实现图片的变形旋转拖拉拽等功能。 在线demo: 官网链接 下载 npm install fabric --save或 yarn …

实力认证 | 百分点科技蝉联中国大数据企业50强

近日&#xff0c;第八届中国大数据产业生态大会在京召开 &#xff0c;本届大会以“数实共融 生态共建”为主题&#xff0c;由赛迪传媒、大数据产业生态联盟、《软件和集成电路 》杂志社联合主办。会上颁布多个奖项&#xff0c;百分点科技斩获2023中国大数据企业50强、金沙奖“…

由于找不到vcruntime140_1.dll,无法继续执行代码重新安装程序,怎么解决

vcruntime140_1.dll是Microsoft Visual C Redistributable for Visual Studio 2015中的一个动态链接库文件。它是用于支持在Windows操作系统上运行使用Visual C编写的应用程序或游戏所必需的文件之一。当出现vcruntime140_1.dll丢失的错误时&#xff0c;通常是由于缺少或损坏了…

作者推荐 | 【深入了解系统性能优化】「实战技术专题」全方面带你透彻探索服务优化技术方案(系统服务调优)

全方面带你透彻探索服务优化技术方案&#xff08;服务器系统性能调优&#xff09; 调优意义计划分析 流程相关分析优化分析Nginx请求服务日志将请求热度最高的接口进行优化异步调用优化方式注意要点 分析调用链路追踪体系建立切面操作分析性能和数据统计存储相关的调用以及耗时…

拓展知识 启望未来 | 记内蒙古移动《AntDB ACA初级认证培训》活动

炎炎六月&#xff0c;迎来了备受期待的“亚信科技AntDB数据库初级认证培训”活动。通过培训&#xff0c;希望内蒙古移动及项目组的伙伴们能够系统学习到国产数据库的核心知识&#xff0c;提升专业技能&#xff0c;为服务感知提升、运维团队培育注入新的活力。 26号上午&#xf…

Pytest测试框架3

目录&#xff1a; pytest结合数据驱动-yamlpytest结合数据驱动-excelpytest结合数据驱动-csvpytest结合数据驱动-jsonpytest测试用例生命周期管理&#xff08;一&#xff09;pytest测试用例生命周期管理&#xff08;二&#xff09;pytest测试用例生命周期管理&#xff08;三&a…

rust-异步学习

rust获取future中的结果 两种主要的方法使用 async: async fn 和 async 块 async 体以及其他 future 类型是惰性的&#xff1a;除非它们运行起来&#xff0c;否则它们什么都不做。 运行 Future 最常见的方法是 .await 它。 当 .await 在 Future 上调用时&#xff0c;它会尝试把…

vue2.29-Vue3跟vue2的区别

1、vue3介绍 更新&#xff08;和重写&#xff09;Vue的主要版本时&#xff0c;主要考虑两点因素&#xff1a;首先是新的JavaScript语言特性在主流浏览器中的受支持水平&#xff1b;其次是当前代码库中随时间推移而逐渐暴露出来的一些设计和架构问题。 相较于vue2&#xff0c;vu…

从零开始打造你的书店小程序商城

随着互联网的发展&#xff0c;线上商城成为了书店经营的重要方式之一。如何快速搭建一个符合书店特点的小程序商城呢&#xff1f;下面将为您详细介绍利用乔拓云平台搭建一个符合书店特点的小程序商城的步骤。 首先&#xff0c;登录乔拓云平台&#xff0c;进入商城后台管理页面。…

uniapp两个单页面之间进行传参

1.单页面传参&#xff1a;A --> B url: .....?code JSON.stringify(param), 2.单页面传参B–>Auni.$emit() uni.$on()

Aspose.Imaging for Python via .NET Crack

Aspose.Imaging for Python via .NET Crack Aspose.Imaging for Python via.NET是一个提供高级图像处理功能的库。您可以使用此API轻松创建、加载、操作、转换或压缩图像。另外&#xff0c;Aspose.Imaging for Python通过.NET支持绘图和使用图形基元。图像导出和转换-API的核心…

使用XMLHttpRequest实现文件异步下载

1、问题描述 我想通过异步的方式实现下载文化&#xff0c;请求为post请求。一开始我打算用ajax。 $.ajax({type:post,contentType:application/json,url:http://xxx/downloadExcel,data:{data:JSON.stringify(<%oJsonResponse.JSONoutput()%>)},}).success(function(dat…