【C与数据结构】——寒假提高每日练习Day2

news2024/11/26 0:40:05

 一共16日的练习,分为选择题与编程题,涵盖了C语言所学以及数据结构的重点,以及一些秋招、春招面试的高频考点,难度会随着天数而上升。1-8day为C语言,9-16day为数据结构。

(建议在电脑客户端进行,将鼠标选中被遮挡的地方,即可看到解析。)

专栏放在:【C语言】经典题目


选择题

1、以下代码执行后的输出结果为:

#include <stdio.h>
void fun(char **p)
{
int i;
for(i = 0; i < 4; i++)
printf("%s", p[i]);
} in
t main()
{
char *s[6] = {"ABCD", "EFGH", "IJKL", "MNOP", "QRST", "UVWX"};
fun(s);
printf("\n");
return 0;

A、ABCDEFGHIJKL     B、ABCD     C、AEIM    D、ABCDEFGHIGKLMNOP

答案:->D

解析:首先我们要知道,s是一个指针数组共6个元素,元素类型为char*,fun(s),这里s表示数组首元素的地址,指针的地址,所以用二级指针接收,而数组首元素在这里指的是“ABCD”的首字符,p+1也就是s+1,即指向“EFGH”的‘E’,而打印一个字符串时知道该字符串的首字符便可以打印出来完整的该字符串,因此这里会打印出ABCDEFGHIJKLMNOP

2、数组 a 的定义为: int a[3][4]; 下面哪个不能表示 a[1][1]?

A、*(&a[0][0]+5)     B、*(*(a+1)+1)     C、*(&a[1]+1)     D、*(a[1]+1)

答案:->C

解析:首先,A选项,二维数组在内存中的存储它的地址也是连续的,所以a[ 1 ] [ 1 ]与a[ 0 ][ 0 ]之间隔了五个int,所以a[ 0 ][ 0 ]的地址+5后就是a[ 1 ][ 1 ]的地址,再解引用进行访问。B与D选项表示的是同一个意思,a[ 1 ]就等价于*(a+1),表示指向a的下一行,再+1表示指向下一列,B和D都可以写为a[ 1 ][ 1 ]. C选项,&a[ 1 ]表示的是取出整个这一行的地址,+1跳过整个一行,指向下一行,即指向a[ 2 ]这一整行,与题意不符,因此选C。

3、void (*s[5])(int) 表示意思为

A、函数指针     B、函数指针数组     C、数组指针函数     D、语法错误

答案:-> B

解析:[]优先级高于*,因此s与[]结合,说明s是一个数组,数组共5个元素,去掉数组名表示数组元素类型,这里为void(*)(int),即函数指针类型,该函数指针指向的函数返回值为void,参数类型为int,因此选B,函数指针数组。

4、在64位机器下,下面程序的运行结果:

#include<stdio.h>
int main()
{
	int* k[10][30];
	printf("%d\n", sizeof(k));
	return 0;
}

A、4     B、8     C、1200     D、2400

答案:->C

解析:这道题可能有的铁子一看,64位机器,k还是指针,直接选B,但其实忽略了一点,sizeof(数组名),这里表示的是整个数组的大小,不能被64位机器给蒙蔽了双眼,一共10*30=300个元素,元素类型位int*,这是一个二维的指针数组。因此选C

5、假设函数原型和变量说明如下,则调用合法的是( )

void f(int **p);
int a[4]={1,2,3,4};
int b[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
int *q[3]={b[0],b[1],b[2]};

A、f(a)     B、f(b)     C、f(q)     D、f(&a)

答案:->C

解析:数组名表示数组首元素,可以用一级指针接收,而调用的函数参数为二级指针,因此A错误。B同理,不可以用二级指针接收,C选项正确,q为数组名表示数组首元素地址,而数组的元素类型为int *,一级指针的地址所以用二级指针接收。D、&数组名表示的是取出整个数组的地址,因此也不能用二级指针接收。


编程题

描述

在一个长为 字符串中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).(从0开始计数)

数据范围:100000≤n≤10000,且字符串只有字母组成。

要求:空间复杂度 O(n)O(n),时间复杂度 O(n)O(n)

输入:

"google"

返回值:

4

思路:这道题既然限定了时间复杂度为O(N),所以我们不可以用暴力求解两次遍历,但是空间复杂度可以为O(N),因此我们可以借助一个数组来搞,由于这里输入的是字符串,我们可以利用它的ASCII码来做题。具体思路为:我们创建一个大小为125的数组arr(没必要创建太大的,超出ASCII即可)。然后我们将题目给的str数组的元素作为arr的下标,遍历整个str,每次arr对应的下标++,最后再遍历str,arr的下标对应的值即为str元素出现的次数。如下图:

代码实现:

int FirstNotRepeatingChar(char* str ) {
    if(str == NULL)
    {
        return true;
    }
    // write code here    // write code here
    int arr[123]={0};//初始化数组全部为0
    int len=strlen(str);//数组长度
    for(int i=0; i<len; i++)
    {
        arr[str[i]]++;//统计字母出现的次数,出现一次,对应的坐标的值就+1
    }
    //遍历整个数组,如果下标位置的值为1,说明只出现1次,直接返回i
    for(int i=0; i<len; i++)
    {
        if(arr[str[i]] == 1)
        {
            return i;
        }
    }
    //走到这里说明没有出现1次的
    return -1;
}

实现一个算法,确定一个字符串 s 的所有字符是否全都不同。(所有字母为小写)

示例 1:

输入: s = "leetcode"
输出: false 
示例 2:

输入: s = "abc"
输出: true

这道题与上面的题类似,这里提供两种简单的思路:1、与上面一样,借助一个数组来做。2、排序后遍历。

代码实现1:

//与上面的题一样
bool isUnique(char* astr){
    int arr[200]={0};//借助一个数组
    int len=strlen(astr);
    for(int i=0; i<len; i++ )
    {
        arr[astr[i]]++;
    }
    for(int i=0; i<len; i++)
    {
        if(arr[astr[i]] != 1)
        {
            return false;
        }
    }

    return true;
}

代码二实现(qsort排序):

//比较的函数
int compchar(const void*a1,const void*a2)
{
    return *(char*)a1-*(char*)a2;
}

bool isUnique(char* astr){
    if(astr == NULL)
    {
        return NULL;
    }
    int len=strlen(astr);
//排序后遍历,遇见相同的返回false
    qsort(astr,len,sizeof(char),compchar);
    for(int i=0; i<len-1; i++)
    {
        if(astr[i] == astr[i+1])
        {
            return false;
        }
    }

    return true;
}

end

生活原本沉闷,但跑起来就会有风!🌹

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

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

相关文章

docker中的数据卷

目录 1. 为什么使用数据卷 2. 数据卷基本操作 2.1 创建数据卷 2.2 查看数据卷 2.3 查看数据卷详细信息 2.4 数据卷删除 3. 数据卷的使用 3.1 先创建数据卷再挂载 3.2 直接挂载宿主机目录 3.3 只读数据卷 4. 数据卷容器 4.1 新建数据卷容器 4.2 新建一个容器来使用数…

Nacos学习笔记 (8)服务发现基础应用

1. 什么是服务发现 在微服务架构中&#xff0c;整个系统会按职责能力划分为多个服务&#xff0c;通过服务之间协作来实现业务目标。这样在我们的代码中免不了要进行服务间的远程调用&#xff0c;服务的消费方要调用服务的生产方&#xff0c;为了完成一次请求&#xff0c;消费方…

求空间曲线的切线,法平面

求空间曲线的切线&#xff0c;法平面&#xff1a;归结为求空间曲线的切向量 进而用点向式直线方程表示出切线&#xff0c;点法式方程表示出法平面 情况一&#xff1a;空间曲线以参数式给出&#xff0c;求切向量时直接求导即可&#xff0c;如下题 情况二&#xff1a;空间曲线…

ROS2 基础概念 话题

ROS2 基础概念 话题1. Topics2. rqt_graph3. 话题4. 话题类型5. 话题发布6. 话题频率1. Topics 话题是节点交换消息的总线 节点可以向任意数量的话题发布数据&#xff0c;并同时订阅任意数量的话题 2. rqt_graph 将使用rqt_graph来可视化不断变化的节点和话题&#xff0c;以…

云服务器ECS入门及云上网站部署

云服务器ECS入门及云上网站部署 一、什么是云服务器ECS 云服务器ECS (Elastic Compute Service) 是阿里云提供的性能卓越、稳定可靠、弹性扩展的laaS(Infrastructure as a Service) 级别云计算服务 云服务器ECS免去了您采购IT硬件的前期准备&#xff0c;让您像使用水、电、天…

JavaScript操作BOM对象

BOM&#xff1a;浏览器对象模型 window代表浏览器窗口 >window.alert(1) undefined >window.innerHeight //浏览器内部高度 242 >window.innerWidth 1229 >window.outerHeight //浏览器外部高度 824 >window.outerWidth 1536 Navigator&#xff0c;封装了浏…

【Linux】第六部分 远程登录

【Linux】第六部分 远程登录 文章目录【Linux】第六部分 远程登录6. 远程登录6.1 配置hosts映射文件6.2 xshell和xftp的使用总结6. 远程登录 6.1 配置hosts映射文件 为什么要配置呢?利于后续我们进行连接方便,就比如:我们没有办法记住很多手机号,但是我们可以记住人名,我们打…

【20221225】【剑指1】链表

1、从尾到头打印链表 可以用rbegin&#xff0c;rend&#xff1b;也可以用reverse翻转数组。 2、如果是翻转链表的话&#xff08;双指针法&#xff0c;用虚拟头节点依次翻转&#xff09;&#xff1a;https://blog.csdn.net/HYAIWYH/article/details/127118468?ops_request_mi…

java ssm 摄影约拍系统的设计

目录 第一章 绪论 5 1.1 研究背景 5 1.2系统研究现状 5 1.3 系统实现的功能 6 1.4系统实现的特点 6 1.5 本文的组织结构 6 第二章开发技术与环境配置 7 2.1 Java语言简介 7 2.2JSP技术 8 2.3 MySQL环境配置 8 2.4 MyEclipse环境配置 9 2.5 mysql数据库介绍 9 2.6 B/S架构 9 第三…

6、集合介绍

文章目录6、集合6.1 介绍6.2 常用接口和类6.3 ArrayList6.3.1 介绍6.3.2 基本操作6.3.3 常用方法6.4 LinkedList6.4.1 基本操作6.4.2 常用方法6.5 泛型6.5.1 介绍6.5.2 基本使用6.6 比较器6.7 ArrayList和LinkedList的比较6.8 HashSet6.8.1 介绍6.8.2 常用方法6.8.3 重复数据6.…

Attetion is all you need论文阅读笔记

Attetion is all you need 参考&#xff1a;沐神&#xff08; 沐神_论文精讲_Attention is all you need&#xff09; 1、Abstract 主流的序列转录模型&#xff08;给一个序列生成另一个序列&#xff0c;比如机器翻译&#xff0c;给一句英文&#xff0c;生成一句中文&#x…

数据可视化大屏应急管理综合指挥调度系统完整案例详解(PHP-API、Echarts、百度地图)

文章目录项目说明一、项目说明单位信息数据库字段&#xff1a;资源数据库字段项目需求二、项目开发1.项目分析2.引入库3.项目开发&#xff08;1&#xff09;地图容器构建&#xff08;2&#xff09;筛选和返回按钮事件&#xff08;3&#xff09;企业筛选功能&#xff08;4&#…

【java】stream流

文章目录体验stream流stream流的生成方式Stream流的常见中间操作方法Stream流的常见中间操作方法Stream流的常见终结操作方法Stream流的练习Stream流的收集操作体验stream流 package heima.stream流;import java.util.ArrayList;public class P1 {public static void main(Stri…

node.js+uni计算机毕设项目基于微信小程序的肉鸡养殖管理平台LW(程序+小程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等…

第二十四章 数论——质数(2)(详细讲解质数的筛选原理和证明!!)

第二十四章 数论——质数的筛选一、朴素筛法——埃氏筛法1、问题描述2、算法思路3、代码实现二、线性筛法——欧拉筛1、朴素筛法的弊端2、欧拉筛&#xff08;1&#xff09;算法思路&#xff08;2&#xff09;代码实现一、朴素筛法——埃氏筛法 1、问题描述 2、算法思路 我们从…

【折腾服务器 2】妖板 Intel N5105 + i226 主板安装 群晖、直通 SATA 控制器 教程

Catch UP 前期回顾&#xff0c;我在这台使用 N5105 和 Intel 226V 2.5G 网卡的电脑上安装了 ESXi 7.0 系统。文章在博客里有&#xff0c;可以去翻翻。 Chapter 1 网络环境准备 登录 VMWare ESXi&#xff0c;点击左侧的网络。 点击 虚拟交换机 有一个 vSwitch 0 这个是默认的&a…

抽象类与接口(Java系列6)

目录 前言&#xff1a; 1.抽象类 1.1抽象类的概念及语法 1.2 抽象类的特征 1.3抽象类的特性 2.接口 2.1接口的概念及语法 2.2接口的使用及特性 2.2.1接口的使用 2.2.2接口的特性 2.3实现多个接口 2.4接口的继承 3.抽象类与接口的区别 结束语&#xff1a; 前言&…

分布式理论之分布式选举

写在前面 一个国家需要领导人制定各种国家决策&#xff0c;一个军队也需要最高统领来制定各种军事决策&#xff0c;同理&#xff0c;一个分布式集群也需要一个领导&#xff0c;来协调整个集群的事务&#xff0c;比如保证数据一致性(这也是最重要的&#xff01;)&#xff0c;分…

uni-app学习总结

本文以B站黑马教程的uni-app项目实战视频为载体&#xff0c;总结uni-app相关用法&#xff0c;如有误&#xff0c;请指出~ 一、创建项目&#xff1a; HbuilderX工具-->文件-->新建-->项目---》选择uni--app项目&#xff0c;创建。 二、项目初始化&#xff1a; 去掉一…

设计模式之结构型模式:适配器模式

前言 前面讲解完了设计模式中的创建性模式&#xff0c;本文开始讲解设计模式中的结构性模式之一&#xff1a;适配器模式。 一、适配器模式的是干什么的&#xff1f; A类想要使用B类中的某些方法&#xff0c;但是不能直接使用&#xff0c;需要一个中间类对B类进行处理后&…