寒假作业Day 03

寒假作业Day 03

一、选择题

在这里插入图片描述

在C语言中,字符型指针char *p;通常用于指向字符数组(即字符串)的首字符。对于给定的选项,我们来分析每一个选项是否可以将字符串正确地赋值给p:

A: p=getchar();
getchar()函数从标准输入读取一个字符,并返回该字符的ASCII值。由于getchar()返回的是一个int类型的值(它可能是EOF,即文件结束标记,这是一个负值),所以直接将这个返回值赋给char *类型的p是不正确的。此外,即使忽略类型不匹配的问题,getchar()也仅仅读取一个字符,而不是整个字符串。

B: scanf(“%s”,p);
这个语句试图从标准输入读取一个字符串并存储在p指向的位置。然而,这个语句有潜在的风险。因为p没有被初始化指向一个有效的内存区域(即一个足够大的字符数组),scanf可能会写入一个随机的内存位置,这可能会导致程序崩溃或未定义的行为。

C: char s[]=“china”; p=s;
这个语句是正确的。它首先定义了一个字符数组s并初始化为字符串"china"。然后,它将p指向s的首字符,即s[0](即’c’)。这样,p就指向了一个有效的字符串。

D: *p=“china”;
这个语句是错误的。首先,*p表示p指向的字符,它是一个char类型的变量。然而,字符串"china"是一个字符数组,不是一个单个的字符。此外,你不能直接将一个字符串字面量赋给一个char类型的变量。

综上所述,选项A、B和D都不能正确地将字符串赋值给字符型指针p。因此,正确答案是A、B和D。

在这里插入图片描述

接下来,我们逐步分析:

static char *s[] = {“black”, “white”, “pink”, “violet”};
这里定义了一个静态的字符串数组s,包含四个字符串元素。

char **ptr[] = {s+3, s+2, s+1, s}, ***p;
这里定义了一个名为ptr的指针数组,每个元素都是一个指向字符指针的指针。s+3、s+2、s+1和s分别指向s数组中的第四个、第三个、第二个和第一个字符串的起始地址。
所以,ptr数组的内容如下:

* ptr[0] 指向 "violet"  
* ptr[1] 指向 "pink"  
* ptr[2] 指向 "white"  
* ptr[3] 指向 "black"
  1. p = ptr;
    这里定义了一个名为p的指针,它指向一个指针的指针。然后将p指向ptr。
  2. ++p;
    将p的值增加1,由于p是一个指向指针的指针的指针,所以p现在指向ptr数组的下一个元素,即ptr[1],它指向"pink"。
  3. printf(“%s”, **p+1);

这里有两个*,所以**p首先解引用p,得到ptr[1],然后再次解引用得到"pink"。接着,**p+1将指针向前移动一个字符,指向’i’。因此,输出的是从’i’开始的字符串,即"ink"。
总结:该程序的输出是"ink"。

在这里插入图片描述
在这里插入图片描述

首先分析语句,char s[3][10]是一个3行10列的二维字符数组,char (*k)[3]是一个包含3个元素的字符指针数组,char *p是一个字符指针;
分析选项:1、p = s;:这是错误的。s是一个二维数组,其名字s在大多数上下文中会被解释为指向其首行(即s[0])的指针,该指针的类型是char ( *)[10](指向包含10个字符的数组的指针)。但p是一个char *,即指向单个字符的指针。类型不匹配,所以这是错误的。
2、p = k;:这也是错误的。k是一个指向包含3个字符的数组的指针,即char ( *)[3]。但p是一个指向单个字符的指针,即char * 。类型不匹配。
3、p = s[0];:这是正确的。s[0]是s的第一行,它是一个包含10个字符的一维数组。在大多数上下文中,数组名s[0]会被解释为指向其首元素的指针,即指向s[0][0]的指针。这个指针的类型是char *,与p的类型相同。
4、k = s;:这也是错误的,尽管可能看起来是正确的。s的名字在大多数上下文中会被解释为指向其首行(即s[0])的指针,其类型是char ( * )[10](指向包含10个字符的数组的指针)。但k的类型是char ( *)[3],即指向包含3个字符的数组的指针。尽管s的首行确实有3个字符的空间(实际上是10个),但k和s的指针类型并不匹配,因此这是错误的。

故选择答案A,只有选项3是正确的

4、假设 sizeof(void * ) 为4, sizeof(char) 为1,那么对于 char str[sizeof(“ab”)]; , sizeof(str) 的值是( )
A: 2 B: 3 C: 4 D: 代码无法编译

sizeof(“ab”)的值为3,其中有a,b和\0;char str[3],即str是有3个元素的字符数组,故sizeof(str)的值为3*1=3,选B

5、有如下程序段,则对函数 fun 的调用语句正确的是【多选】( )

char fun(char *);
int main()
{char *s = "one", a[5] = {0}, (*f1)(char *) = fun, ch;return 0;
}

A: * f1(&a); B: f1( * s); C: f1(&ch); D: ch = * f1(s);要改成( * f1)(s)才正确

首先,我们分析给定的程序段:
定义了一个函数fun,它接受一个字符指针作为参数,并返回一个字符。
在main函数中:
定义了一个字符指针s,指向字符串"one"。
定义了一个字符数组a,大小为5,并全部初始化为0。
定义了一个函数指针f1,它指向函数fun。这意味着f1可以用来调用fun函数。
定义了一个字符变量ch。
接下来,我们分析每个选项:

A: *f1(&a);

这是错误的。因为&a得到的是指向数组a的指针,但它的类型是char (*)[5],而不是char *。此外,*f1的解引用方式也是不正确的,应该是(*f1)(…)。

B: f1(*s);
这是错误的。*s得到的是s指向的字符串的第一个字符,即’o’。但fun函数期望一个字符指针作为参数,而不是一个字符。此外,调用函数指针的正确方式是(*f1)(…)。

C: f1(&ch);
这是错误的。虽然&ch得到的是一个字符指针,但是调用函数指针的正确方式是(*f1)(…)。

D: ch = *f1(s); 要改成 ( f1)(s) 才正确。
原始表达式
f1(s)是错误的,因为它试图先调用函数然后解引用返回的结果,但函数的返回类型不是指针。正确的调用方式是(*f1)(s),并且由于fun的返回类型是char,所以可以将返回值赋给ch,即ch = (*f1)(s);

二、编程题

在这里插入图片描述

方法1:qsort排序之后使用strcmp比较两个字符串

int cmp(const void* _a,const void * _b){char a=*(char*)_a,b=*(char*)_b;return a-b;
}bool CheckPermutation(char* s1, char* s2){if(strlen(s1)!=strlen(s2))return false;qsort(s1,strlen(s1),sizeof(char),cmp);qsort(s2,strlen(s2),sizeof(char),cmp);return strcmp(s1,s2)==0;
}

在这里插入图片描述

方法二:哈希表
如果两个字符串中的字符重新排列后相等,其实也就说明其中的字符种类和其数量是一致的,所以我们可以用一个频次数组来记录,在s1数组中碰到字符就增加其频数,而在s2中则是减少频数,如果其中一个频数小于0,就说明两者不相等

bool CheckPermutation(char* s1, char* s2){if(strlen(s1)!=strlen(s2))return false;int table[128]={0};for(int i=0;i<strlen(s1);i++){table[s1[i]]++;//对应下标频数增加}for(int i=0;i<strlen(s2);i++){table[s2[i]]--;//对应下标频数减少if(table[s2[i]]<0)return false;}return true;
}

在这里插入图片描述

哈希表
我们举出几个回文数的例子,比如abccba,abcccba,a和不是回文数的例子,比如ab,abc,abcd,abcddeba…我们会发现,如果是回文数,顶多有一个数出现的次数为奇数;而如果不是,则一定会出现两个及以上的数出现的次数为奇数,通过这个,我们可以用哈希表记录频数,并记录奇数次的个数

bool canPermutePalindrome(char* s){int table[128]={0};int count=0;for(int i=0;i<strlen(s);i++){table[s[i]]++;}for(int i=0;i<128;i++){if(table[i]%2==1){count++;}if(count>=2){return false;}}return true;
}

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

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

相关文章

图的简单介绍

定义及术语 G(V,E)&#xff1a;图G的顶点集为V&#xff0c;边集为E。分为有向图和无向图两类。 顶点的度&#xff1a;与该结点相连的边的条数。 出度&#xff1a;顶点的出边条数 入度&#xff1a;顶点的入边条数 顶点的权值称为点权&#xff0c;边的权值称为边权。 存储 1.邻…

SpringCache【缓存接口返回值信息】【前端访问后端,后端访问数据库(可以缓存这个过程,前端访问后端,保存记录,下次访问直接返回之前的数据)】

SpringCache 针对不同的缓存技术需要实现不同的CacheManager&#xff1a;注解入门程序CachePut注解CacheEvict注解Cacheable注解 Spring Cache是一个框架&#xff0c;实现了基于注解的缓存功能&#xff0c;只需要简单地加一个注解&#xff0c;就能实现缓存功能&#xff0c;大大…

Mongodb基础(node.js版)

一、Mongodb 介绍 Mongodb 是一个文档数据库&#xff0c;以文档形式存储数据&#xff0c;格式类似于 JSON 与 Mysql 的特点及选型对照 MongodbMysql关系类型非关系型关系型存储类型文档存储&#xff08;类似于写 Word &#xff09;表格存储 &#xff08;类似于写 Excle&…

Java玩转《啊哈算法》之模拟链表

人应该支配习惯&#xff0c;而绝不是让习惯支配人。一个人要是不能改掉坏习惯&#xff0c;那么他就一文不值。 目录 缘代码地址模拟链表创建遍历打印插入插入优化 完整代码 缘 各位小伙伴们好呀&#xff01;本人最近看了下《啊哈算法》&#xff0c;写的确实不错。 但稍显遗憾…

【C++】string 类 ( 上)

标准库中的string类 注意&#xff1a; 1. string是表示字符串的字符串类 2. 该类的接口与常规容器的接口基本相同&#xff0c;再添加了一些专门用来操作string的常规操作。 比特就业课 3. string在底层实际是&#xff1a;basic_string模板类的别名&#xff0c;typedef basi…

python爬虫之selenium知识点记录

selenium 一、前期准备 1、概述 selenium本身是一个自动化测试工具。它可以让python代码调用浏览器。并获取到浏览器中加载的各种资源。 我们可以利用selenium提供的各项功能。 帮助我们完成数据的抓取。 2、学习目标 掌握 selenium发送请求&#xff0c;加载网页的方法 掌…

Stable-Diffusion ubuntu服务器部署,报错解决方法(小白教程)

Stable Diffusion是一个深度学习模型&#xff0c;专注于生成高质量的图像。它由CompVis团队与Stability AI合作开发&#xff0c;并在2022年公开发布。这个模型使用文本提示&#xff08;text prompts&#xff09;生成详细、逼真的图像&#xff0c;是目前人工智能图像生成领域的一…

逆向案例四:360k静态和精灵数据动态AES解密,用js的方法

一、360K 网页链接:https://www.36kr.com/p/2672600261670407 页面中有静态的需要解密的内容&#xff0c;确定html包&#xff0c;确定方法 1.1方法步骤 在下方的搜索中输入decrypt(或者关键字window.initialState &#xff0c;进入js文件 在AES.decrypt处打上断点&#xff0…

机器学习-03-机器学习算法流程

总结 本系列是机器学习课程的第02篇&#xff0c;主要介绍机器学习中专家系统的应用介绍 本门课程的目标 完成一个特定行业的算法应用全过程&#xff1a; 定义问题&#xff08;Problem Definition&#xff09; -> 数据收集(Data Collection) -> 数据分割(Dataset Spit…

守护无价数据:文件备份的重要性与实用策略

一、数据安全&#xff1a;为何文件备份至关重要 在数字化时代&#xff0c;我们的生活和工作越来越离不开电子设备与其中的文件数据。这些文件可能包含重要的工作文档、珍贵的家庭照片、个人的创意作品等&#xff0c;它们是我们回忆的载体&#xff0c;也是我们工作和创新的基石…

PDF Expert for Mac v3.9.2中文激活版下载

PDF Expert for Mac是一款易于使用的 PDF 编辑器和注释器&#xff0c;专为 Mac 设备设计。它允许用户轻松查看、编辑、签名、注释和共享 PDF。该软件使用户能够向他们的 PDF 添加文本、图像、链接和形状&#xff0c;突出显示和标记文本&#xff0c;填写表格以及签署数字文档。它…

金融行业专题|期货超融合架构转型与场景探索合集(2023版)

更新内容&#xff1a; 更新 SmartX 超融合在期货行业的覆盖范围、部署规模与应用场景。新增 CTP 主席系统实践与评测、容器云资源池等场景实践。更多超融合金融核心生产业务场景实践&#xff0c;欢迎下载阅读电子书《SmartX 金融核心生产业务场景探索文章合集》。 面对不断变…

mac iNode 断开后没网 经测试 后台还在运行

界面断开&#xff0c;但是连不上网&#xff1a;实际上可能是服务在后台还在运行 解决方式&#xff1a;终端执行命令 &#xff0c;手动停止iNode服务 sudo /Library/StartupItems/iNodeAuthService/iNodeAuthService stop 停掉之后&#xff0c;有可能连不上网&#xff0c;断开wi…

基于springboot+vue的美食推荐商城

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

网工必懂的ICMP协议

福建厦门微思网络始于2002年&#xff0c;面向全国招生&#xff01; 主要课程&#xff1a;华为、思科、红帽、Oracle、VMware、CISP安全系列、PMP....... 网络工程师实用课程华为HCIA课程介绍 网络工程师使用课程华为HCIP课程介绍 网络工程师使用课程华为HCIE课程介绍 因特网…

更详细的软件测试理论基础:流程,开发、测试模型,测试分类,测试用例及其设计方法,缺陷

文章目录 一、测试流程二、开发模型1、 瀑布模型2、增量模型3、快速模型4、其他 三、测试模型1、V模型2、W模型 四、测试分类五、测试用例 test case六、测试用例设计方法1、等价类划分法2、边界值分析法3、因果图法4、判定表法5、正交法6、场景法7、流程分析法8、错误推测法方…

数据分析-Pandas数据的探查面积图

数据分析-Pandas数据的探查面积图 数据分析和处理中&#xff0c;难免会遇到各种数据&#xff0c;那么数据呈现怎样的规律呢&#xff1f;不管金融数据&#xff0c;风控数据&#xff0c;营销数据等等&#xff0c;莫不如此。如何通过图示展示数据的规律&#xff1f; 数据表&…

第16章-DNS

目录 1. 域名 1.1 产生背景 1.2 概述 1.3 域名的树形层次化结构 2. DNS 2.1 概述 2.2 工作机制 3. DNS查询模式 3.1 递归查询&#xff1a; 3.2 迭代查询&#xff1a; 4. 相关知识点 4.1 集中式DNS 4.2 国内通用DNS 4.3 配置DNS代理 1. 域名 1.1 产生背景 ① IP…

【Excel PDF 系列】iText 库直接实现表格 PDF

你知道的越多&#xff0c;你不知道的越多 点赞再看&#xff0c;养成习惯 如果您有疑问或者见解&#xff0c;欢迎指教&#xff1a; 企鹅&#xff1a;869192208 文章目录 前言生成表格 PDF 效果引入 pom 配置代码实现定义 CreateExcelToPdfModel 对象主方法 前言 最近遇到生成 E…

EchoServer回显服务器简单测试

目录 工具介绍 工具使用 测试结果 工具介绍 github的一个开源项目,是一个测压工具 EZLippi/WebBench: Webbench是Radim Kolar在1997年写的一个在linux下使用的非常简单的网站压测工具。它使用fork()模拟多个客户端同时访问我们设定的URL&#xff0c;测试网站在压力下工作的…