【暑期每日一练】 Epilogue

news2025/1/19 17:23:10

目录

  • 选择题
    • (1)
      • 解析:
    • (2)
      • 解析:
    • (3)
      • 解析:
    • (4)
      • 解析:
    • (5)
      • 解析:
  • 编程题
    • 题一
      • 描述
        • 输入描述:
        • 输出描述:
      • 示例:
      • 解析:
      • 代码实现
    • 题二
      • 描述
        • 输入描述:
        • 输出描述:
      • 示例:
      • 解析:
      • 代码实现
  • 总结

选择题

(1)

1、指出下列代码的缺陷【多选】( )

float f[10];
// 假设这里有对f进行初始化的代码
for(int i = 0; i < 10;)
{
	if(f[++i] == 0)
	break;
}

A: for(int i = 0; i < 10;)这一行写错了
B: f是float型数据直接做相等判断有风险
C: f[++i]应该是f[i++]
D: 没有缺陷
答案:C

解析:

一般float型只能精确到小数后六位(即1e-6),将float型数据的绝对值与1e-6比较,来判断是否相等(为零)。float的精度误差在1e-6;double精度误差在1e-15;所以要判断一个float型数:if(fabs(f)<1e-6);要判断一个double型数:if(fabs(f)<1e-15);若满足,则为零。考虑B选项是对的。若要判断float a,b是否相等,要看if(fabs(a-b)<1e-6)是否为真。C选项,考虑的是数组越界问题

(2)

2、请指出以下程序的错误【多选】( )

void GetMemory(char **p, int num)
{
	if(NULL == p && num <= 0)//1
		return;
	*p = (char*)malloc(num);
	return;
} 
int main()
{
	char *str = NULL;
	GetMemory(&str, 80); //2
	if(NULL != str)
	{
		strcpy(&str, "hello"); //3
		printf(str); //4
	}
	return 0;
}

A: 1 B: 2 C: 3 D: 4
答案:A、C

解析:

第1处两种情况之一成立都是要返回的,应该用或,此处用与错误。在语句GetMemory(&str,100);中传入str的地址,在语句
char*str=NULL;中str初始化为空指针,但是str指针变量也有地址,所以参数char**p里面的p保存的是指针变量str的地址,
所以调用GetMemory函数之后,动态开辟的空间的地址存放在了str中,在函数返回之后没有释放内存,但是这不会导致程序错误,只会导致内存泄漏。第3处用&str是错的,应该直接用str,是刚申请下来的空间首地址,可以用来接收字符串的copy

(3)

3、请问下列代码的输出结果有可能是哪些【多选】( )

#include <stdio.h>
typedef union
{
	int a;
	struct
	{
		short b;
		short c;
	};
}X;
int main()
{
	X x;
	x.a = 0x20150810;
	printf("%x,%x\n", x.b, x.c);
	return 0;
}

A: 2015,810 B: 50810,201
C: 810,2015 D:`20150,810
答案:A、C

解析:

对于0x20150810
如果按照大端模式存储:从低地址到高地址:20 15 08 10 输出从低地址到高地址:20 15 08 10
如果按照小端模式存储:从低地址到高地址:10 08 15 20 输出从高地址到低地址:08 10 20 15
此数以int类型赋值给联合体x.a,而以结构成员b和c分开访问,分别拿到低地址的2个字节和高地址的2个字节,大端下是2015和810,小端下是810和2015

(4)

4、下面这个程序执行后会有什么错误或者效果【多选】( )

#define MAX 255
int main()
{
	unsigned char A[MAX], i;
	for(i = 0; i <= MAX; i++)
		A[i] = i;
	return 0;
}

A: 数组越界 B: 死循环 C: 栈溢出 D: 内存泄露
答案:A、B

解析:

数组下标越界:数组大小255,但是当a[255]就是256个元素,导致越界了。死循环:这个是因为无符号字符型的变量大小在0-255之间,所以说i永远不可能大于255的,是个死循环。内存泄漏:创建的临时变量,在栈中,应该会由系统自动释放,所以应该是不存在内存泄漏的问题。栈溢出:属于缓冲区溢出的一种。栈溢出是由于C语言系列没有

(5)

5、请问下列程序的输出是多少( )

#include<stdio.h>
int main()
{
	unsigned char i = 7;
	int j = 0;
	for(;i > 0;i -= 3)
	{
		++j;
	}
	printf("%d\n", j);
	return 0;
}

A: 2 B: 死循环 C: 173 D: 172
答案:C

解析:

本题就是找规律,计算什么时候能遇到0
unsigned char 8位数据位,范围在0-255,所以-2(11111110)时,变成254;同理-1(11111111)时,变成255;最后减到0时,不满足循环条件,for停止。刚好173次。 7 4 1 ==> 共(7-1)/3+1=3次(1-3=-2,即254,继续循环)
254 251 … 5 2 ==> 共(254-2)/3+1=85次(2-3=-1,即255,继续循环)
255 252 … 6 3 ==> 共(255-5)/3+1=85次(3-3=0,退出循环) 所以总共173次

编程题

题一

描述

牛牛以前在老师那里得到了一个正整数数对(x, y), 牛牛忘记他们具体是多少了。

但是牛牛记得老师告诉过他x和y均不大于n, 并且x除以y的余数大于等于k。
牛牛希望你能帮他计算一共有多少个可能的数对。

输入描述:

输入包括两个正整数n,k(1 <= n <= 10^5, 0 <= k <= n - 1)。

输出描述:

对于每个测试用例, 输出一个正整数表示可能的数对数量。

示例:

在这里插入图片描述

解析:

暴力破解:将 x 和 y 分别遍历 [1, n] ,进行判断当 x % y > k 时统计计数 count++ 即可,但是这样的话当 n 的值非常大的时候循环次数将非常恐怖,需要循环 n^2 次。

更优解法: 假设输入 n=10 , k=3

当 y <=k 时,意味着任何数字取模y的结果都在 [0, k-1]之间,都是不符合条件的。
当 y = k+1=4 时,x符合条件的数字有 3,7
当 y = k+2=5 时,x符合条件的数字有 3,4,8,9
当 y = k+3=6 时,x符合条件的数字有 3,4,5,9,10
当 y = k+n时,

  • x小于y当前值,且符合条件的数字数量是:y-k个,
  • x大于y当前值,小于2*y的数据中,且符合条件的数字数量是:y-k个
  • 从上一步能看出来,在y的整数倍区间内,x符合条件的数量就是 (n / y) * (y - k)个
  • n / y 表示有多少个完整的 0 ~ y区间, y - k 表示有每个区间内有多少个符合条件的数字
  • 最后还要考虑的是6…往后这种超出倍数区间超过n的部分的统计
  • n % y 就是多出完整区间部分的数字个数,其中k以下的不用考虑,则符合条件的是 n % y - (k-1) 个
  • 这里需要注意的是类似于9这种超出完整区间的数字个数 本就小于k的情况,则为0

最终公式:(n / y) * (y - k) + ((n % y < k) ? 0, (n % y - k + 1));

代码实现

#include <stdio.h>
int main()
{
	long n, k;
	while(~scanf("%ld %ld", &n, &k))
	{
		if (k == 0) 
		{
			printf("%ld\n", n * n);//任意数对的取模结果都是大于等于0的
			continue;
		} 
		long count = 0;
		for(long y = k + 1; y <= n; y++) 
		{
			count += ((n / y) * (y - k)) + ((n % y < k) ? 0 : (n % y - k + 1));
		}
		printf("%ld\n", count);
	} 
	return 0;
}

题二

描述

输入一个字符串和一个整数 k ,截取字符串的前k个字符并输出

数据范围:字符串长度满足
1≤n≤1000 , 1≤k≤n

输入描述:

1.输入待截取的字符串

2.输入一个正整数k,代表截取的长度

输出描述:

截取后的字符串

示例:

在这里插入图片描述

解析:

截取字符串前 n 个字符,只需要将数组 n 下标位置的数据替换为字符串结尾标志即可

代码实现

#include <stdio.h>
int main()
{
	char str[101];
	while(scanf("%s", str) > 0) 
	{
		int n;
		scanf("%d", &n);
		str[n] = '\0';
		printf("%s\n", str);
	} 
	return 0;
}

总结

关于今日练习讲解到这儿,暑期每日一练系列也就结束了,欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下。也可以订阅该专栏!祝大家暑期快乐。

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

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

相关文章

科幻高大上的人脸识别接口

一、人脸登录系统特征识别&#x1f349; 采用人脸识别进行登陆验证&#xff0c;之后可选择步态识别数据录入或者在已经录入步态数据的情况下进行步态特征识别。这样的双重验证使得门禁系统更安全。 用户进入人脸识别区域后&#xff0c;系统将进行目标人物的人脸特征数据识别。…

前端js--剪刀石头布

效果图 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><linkrel"stylesheet"href"ht…

智橙全力打造智慧云端,云PDM和BOM系统强强结合

领略现代制造业的无限魅力&#xff0c;云PDM&#xff08;产品数据管理&#xff09;与BOM系统&#xff08;物料清单&#xff09;于智慧云端融汇贯通&#xff0c;一路飞跃&#xff0c;将信息快速传递达至极致。智橙带您深入了解平台功能&#xff0c;以及智橙是如何如何运用云PDM与…

扒一扒smardaten那些让人欲罢不能的服务~

最近常有新粉问睿睿&#xff0c;除了产品&#xff0c;还提供哪些服务呀&#xff1f; 官网上社区版、专业版、企业版、专有版的服务支持到底区别在哪&#xff1f; 别急&#xff0c;睿睿这就给你一一道来&#xff01; smardaten不同版本的服务内容 上上周&#xff0c;睿睿在给新…

在钡铼技术ARM嵌入式控制器上安装Node-RED的详细步骤

嵌入式ARM控制器BL301/BL302系列是工业级坚固型工业控制器&#xff0c;采用NXP的高性能处理器I.MX6ULL&#xff0c;搭配先进的ARM Cortex-A7构架&#xff0c;运行速度高达800MHz&#xff0c;具有高度的稳定性。本产品最高可提供4路RS485/RS232&#xff0c;1路CAN口&#xff0c;…

SpringBoot+Vue实现物流物流中心信息化管理系统

博主主页&#xff1a;一季春秋博主简介&#xff1a;专注Java技术领域和毕业设计项目实战、Java、微信小程序、安卓等技术开发&#xff0c;远程调试部署、代码讲解、文档指导、ppt制作等技术指导。主要内容&#xff1a;毕业设计(Java项目、小程序等)、简历模板、学习资料、面试题…

Linux系统编程(线程同步 互斥锁)

文章目录 前言一、什么是线程同步二、不使用线程同步访问共享资源可能出现的问题三、互斥锁概念四、互斥锁使用1.初始化线程锁的方式2.使用代码 五、死锁的产生和解决方法1.什么是死锁2.为什么会产生死锁3.怎么解决死锁问题 总结 前言 本篇文章带大家学习线程的同步。 一、什…

【JavaSE】String类中常用的字符串方法(超全)

目录 1.求字符串的长度 2.判断字符串是否为空 3.String对象的比较 3.1 判断字符串是否相同 3.2 比较字符串大小 3.3 忽略大小写比较 4.字符串查找 5.转化 5.1 数值和字符串转化 5.1.1 数字转字符串 valueof 5.1.2 valueOf的其他用法 5.1.3 字符串转数字 5.2 大小写转…

innodb存储引擎探究(一)

mysql 体系结构和存储引擎 数据库&#xff1a;物理操作系统文件或者其他形式的文件 实例&#xff1a;mysql数据库由一个共享内存区和后台进程组成 启动mysql实例时&#xff0c;会读取配置文件&#xff0c;安装以下顺序 mysql体系结构 mysql插件式的一个存储引擎可以根据业务…

如何设置 Eclipse Git 插件中的默认作者和提交者

1、git提交代码时默认带出Windows的系统用户 2、Window->Preferences->Team->Configuration->Add Entry 3、输入键值对&#xff08;user.name要设置的值&#xff09;&#xff08;user.email要设置的值&#xff09;->应用保存 4、应用后&#xff0c;再次提交代码…

【AI赋能】人工智能在自动驾驶时代的应用

自我介绍 我是秋说&#xff0c;研究 人工智能、大数据 等前沿技术&#xff0c;传递 Java、Python 等语言知识。 &#x1f4ac;主页链接&#xff1a;秋说的博客 &#x1f4c6; 学习专栏推荐&#xff1a; 人工智能&#xff1a;创新无限&#x1f4ab; MySQL进阶之路&#x1f3c6…

大数据Flink(五十八):Flink on Yarn的三种部署方式介绍

文章目录 Flink on Yarn的三种部署方式介绍 一、​​​​​​​Session模式

Elasticsearch 摄取管道 — 检测到管道的死循环

在数据处理和摄取领域&#xff0c;管道在组织和自动化数据从源到目的地的流动方面发挥着至关重要的作用。 管道是数据按顺序通过的一系列处理阶段&#xff0c;每个阶段负责特定任务。 然而&#xff0c;有时&#xff0c;管道可能会遇到一个重大挑战&#xff0c;称为 “Cycle det…

年薪54840美元|中医学应届博士受聘美国宾大博士后职位

E博士的个人规划是博士毕业即出国做博后工作&#xff0c;当其明确毕业时间后&#xff0c;我们就依照计划提前9个月开始了申请操作。最终落实了宾夕法尼亚大学医学院的博后职位&#xff0c;年薪为54840美元&#xff0c;我们为其实现了毕业即出国的愿望。 E博士背景&#xff1a; …

状态模式(C++)

定义 允许一个对象在其内部状态改变时改变它的行为。从而使对象看起来似乎修改了其行为。 应用场景 在软件构建过程中&#xff0c;某些对象的状态如果改变&#xff0c;其行为也会随之&#xff0c;而发生变化&#xff0c;比如文档处于只读状态&#xff0c;其支持的行为和读写…

【Spring】Bean的作用域和生命周期

目录 一、引入案例来探讨Bean的作用域 二、Bean的作用域 2.1、Bean的6种作用域 2.2、设置Bean的作用域 三、Spring的执行流程 四、Bean的声明周期 1、生命周期演示 一、引入案例来探讨Bean的作用域 首先我们创建一个User类&#xff0c;定义一个用户信息&#xff0c;在定义…

线程池监控

如何监控线程池 文章目录 如何监控线程池线程池两个点需要监控第一点:线程的变化情况第二点:任务的变化 用来监控线程变化的方法自定义一个带监控的线程池,然后继承ThreadPoolExecutor,重载构造方法 自定义线程池中线程的名称的4种方式Spring 框架提供的 CustomizableThreadFac…

uniapp 微信小程序 上下滚动的公告通知(只取前3条)

效果图&#xff1a; <template><view class"notice" click"policyInformation"><view class"notice-icon"><image mode"aspectFit" class"img" src"/static/img/megaphone.png"></i…

行业追踪,2023-08-07

自动复盘 2023-08-07 凡所有相&#xff0c;皆是虚妄。若见诸相非相&#xff0c;即见如来。 k 线图是最好的老师&#xff0c;每天持续发布板块的rps排名&#xff0c;追踪板块&#xff0c;板块来开仓&#xff0c;板块去清仓&#xff0c;丢弃自以为是的想法&#xff0c;板块去留让…

0807|IO进程线程day9 IPC对象概念及示例(消息队列、共享内存、信号灯集)

0 什么是IPC机制 概念&#xff1a; IPC机制&#xff1a;Inter Process Communication&#xff0c;即进程间通信机制。 进程与进程间的用户空间相互独立&#xff0c;内核空间共享。所以如果要实现进程间的通信&#xff0c;需要使用进程间通信机制。 分类&#xff08;3类…