C语言假期作业 DAY 16

一、选择题

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: 没有缺陷 

答案解析

正确答案: BC
一般 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、请指出以下程序的错误【多选】()

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

A: 1

B: 2

C: 3

D: 4 

答案解析

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

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

答案解析

正确答案: AC
对于 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、下面这个程序执行后会有什么错误或者效果【多选】()

#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: 内存泄露

答案解析

正确答案: AB
数组下标越界:数组大小 255 ,但是当 a[255] 就是 256 个元素,导致越界了。死循环:这个是因为无符号字符型的变量大小在0-255之间,所以说 i 永远不可能大于 255 的,是个死循环。内存泄漏:创建的临时变量,在栈中,应该会由系统自动释放,所以应该是不存在内存泄漏的问题。栈溢出:属于缓冲区溢出的一种。栈溢出是由于C 语言系列没有内置检查机制来确保复制到缓冲区的数据不得大于缓冲区的大小,因此当这个数据足够大的时候,将会溢出缓冲区的范围

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 次

二、编程题

1:WY49 数对

数对_牛客题霸_牛客网 (nowcoder.com)

描述

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

但是牛牛记得老师告诉过他x和y均不大于n, 并且x除以y的余数大于等于k。

牛牛希望你能帮他计算一共有多少个可能的数对。

输入描述

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

输出描述

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

示例1

输入:5 2

输出:7

说明:满足条件的数对有(2,3),(2,4),(2,5),(3,4),(3,5),(4,5),(5,3)

【答案解析】

暴力破解:将 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;
}

2:HJ46 截取字符串

截取字符串_牛客题霸_牛客网 (nowcoder.com)

描述

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

本题输入含有多组数据

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

输入描述

1.输入待截取的字符串

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

输出描述

截取后的字符串

示例1

输入:

abABCcDEF
6
输出:

abABCc

示例2

输入:

ffIKEHauv
1
bdxPKBhih
6
输出:

f
bdxPKB

【答案解析】

截取字符串前 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.mzph.cn/news/31488.shtml

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

相关文章

交换机的堆叠技术

目录 一、堆叠的优势 1、提高可靠性 2、简化组网 3、简化管理 4、强大的网络拓展 二、堆叠的方式 1、堆叠卡堆叠 2、业务口堆叠 3、堆叠卡和业务卡堆叠的优缺点 三、堆叠的原理 1、角色 2、单机堆叠 3、堆叠ID 4、堆叠的优先级 5、堆叠的建立过程 1&#xff09…

Windows下安装Sqoop

Windows下安装Sqoop 一、Sqoop简介二、Sqoop安装2.1、Sqoop官网下载2.2、Sqoop网盘下载2.3、Sqoop安装&#xff08;以version&#xff1a;1.4.7为例&#xff09;2.3.1、解压安装包到 D:\bigdata\sqoop\1.4.7 目录2.3.2、新增环境变量 SQOOP_HOME2.3.3、环境变量 Path 添加 %SQO…

Nginx负载均衡(重点)

正向代理 部署正向代理 server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { root html; index index.html index.htm; proxy_pass http://20.0.0.60:80…

Apple AudioToolbox 之 音频编解码(AudioConverterRef)

今天记录是的是 使用 AudioToolbox 框架 使用 AudioConverterRef 工具进行本地音频文件的编码和解码。 本文打仓库代码为&#xff1a; JBLocalAudioFileConvecter 分别实现了&#xff1a; flac,mp3等其他音频编码文件 转换成 pcm文件。 &#xff08;解码&#xff09;pcm文件 …

macos搭建appium-iOS自动化测试环境

目录 准备工作 安装必需的软件 安装appium 安装XCode 下载WDA工程 配置WDA工程 搭建appiumwda自动化环境 第一步&#xff1a;启动通过xcodebuild命令启动wda服务 分享一下如何在mac电脑上搭建一个完整的appium自动化测试环境 准备工作 前期需要准备的设备和账号&…

javabean 中临时字段的处理:@Transient

当我们使用spring data jpa开发的时候&#xff0c;会将实体类中的成员变量与表中的字段一一对应&#xff0c;当我们在实体类中加上一个数据库表没有对应字段的成员变量的时候&#xff0c;此时我们只要在这个成员变量上加上注解Transient Transient表示该属性并非一个到数据库表…

Linux: debug: systemtap: 如何调用内核函数

https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html-single/systemtap_beginners_guide/index#mainsect-network 从这个实例可以看到,可以直接调用内核的代码。但是对于inline的就不行了,因为根本就找不到其代码地址。 probe kernel.function…

Mask DINO环境配置

1. 准备工作 cuda11.3cudnncuda11对应最新版即可pytorch1.10.1torchvision0.11.2torchaudio0.10.1 2. 环境 conda create -n env_name python3.9 conda activate env_name conda install pytorch1.10.1 torchvision0.11.2 torchaudio0.10.1 cudatoolkit11.3 -c pytorch -c c…

【深度学习笔记】TensorFlow 常用函数

TensorFlow 提供了一些机器学习中常用的数学函数&#xff0c;并封装在 Module 中&#xff0c;例如 tf.nn Module 提供了神经网络常用的基本运算&#xff0c;tf.math Module 则提供了机器学习中常用的数学函数。本文主要介绍 TensorFlow 深度学习中几个常用函数的定义与用法&…

机器学习---监督学习和非监督学习

根据训练期间接受的监督数量和监督类型&#xff0c;可以将机器学习分为以下四种类型&#xff1a;监督学习、非监督学习、半监督学习和强化学习。 监督学习 在监督学习中&#xff0c;提供给算法的包含所需解决方案的训练数据&#xff0c;成为标签或标记。 简单地说&#xff0c;…

IoTDB 小白“踩坑”心得:入门安装部署篇

小伙伴介绍&#xff01; 大家好&#xff0c;我是 zai&#xff0c;一个基本功不那么扎实、没有太多经验的大学生。我刚刚加入社区&#xff0c;接触 IoTDB&#xff0c;目前仍处于学习阶段&#xff0c;所以我会跟大家分享我学习过程中踩过的一些雷&#xff0c;以及对应的解决办法&…

网络资源利用最大化:爬虫带宽优化解决方案

大家好&#xff0c;作为一名专业的爬虫程序员&#xff0c;我们都知道在爬取大量数据的过程中&#xff0c;网络带宽是一个十分宝贵的资源。如果我们不合理地利用网络带宽&#xff0c;可能会导致爬虫任务的效率低下或者不稳定。今天&#xff0c;我将和大家分享一些优化爬虫带宽利…

【2023年11月第四版教材】《第2章-信息技术发展(第一部分)》

《第2章-信息技术发展&#xff08;第一部分&#xff09;》 章节说明1 计算机软硬件2 计算机网络2.1 网络的作用范围2.2 OSI模型2.3 广域网协议2.4 网络协议2.5 TCP/IP2.6 软件定义网络&#xff08;SDN&#xff09;2.7 第五代移动通信技术 章节说明 大部分为新增内容&#xff0…

打印沙漏()

本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”&#xff0c;要求按下列格式打印 ************ *****所谓“沙漏形状”&#xff0c;是指每行输出奇数个符号&#xff1b;各行符号中心对齐&#xff1b;相邻两行符号数差2&#xff1b;符号数先从大到小顺序递…

超低功耗在智能门锁行业的应用

1. 名词解释 在本体上以电子方式识别、处理人体生物特征信息、电子信息、网络通讯信息等并控制机械执行机构实施启闭的门锁”叫电子智能门锁。通俗地理解&#xff0c;智能门锁是电子信息技术与机械技术相结合的全新的锁具品类&#xff0c;是在传统机械锁基础上升级改进的&…

【结构型设计模式】C#设计模式之桥接模式

题目&#xff1a;设计一个桥接模式来实现图形和颜色之间的解耦。 解析&#xff1a; 桥接模式是一种结构型设计模式&#xff0c;它将抽象部分与实现部分分离&#xff0c;使它们可以独立变化。在这个例子中&#xff0c;抽象部分是图形&#xff08;如圆形、正方形&#xff09;&am…

SpringBoot运行流程源码分析------阶段二(run方法核心流程)

run方法核心流程 在分析和学习整个run方法之前&#xff0c;我们可以通过以下流程图来看下SpringApplication调用的run方法处理的核心操作包含哪些。 从上面的流程图中可以看出&#xff0c;SpringApplication在run方法中重点做了以下几步操作 获取监听器和参数配置打印banner…

.NET6使用SqlSugar操作数据库

1.//首先引入SqlSugarCore包 2.//新建SqlsugarSetup类 public static class SqlsugarSetup{public static void AddSqlsugarSetup(this IServiceCollection services, IConfiguration configuration,string dbName "ConnectString"){SqlSugarScope sqlSugar new Sq…

函数的递归

1、什么是递归&#xff1f; 程序调用自身的编程技巧称为递归。 递归作为一种算法在程序设计语言中广泛应用。一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法&#xff0c;它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解&#x…

CM11 链表分割 题解

题目描述&#xff1a; 链表分割_牛客题霸_牛客网 (nowcoder.com) 现有一链表的头指针 ListNode* pHead&#xff0c;给一定值x&#xff0c;编写一段代码将所有小于x的结点排在其余结点之前&#xff0c;且不能改变原来的数据顺序&#xff0c;返回重新排列后的链表的头指针。 题解…