阶段性回顾(4)与四道题目

news2024/9/27 17:37:50

TIPS

1. 当创建数组的时候,如果没有指定数组的元素个数也没关系,编译器会根据你初始化的内容来自行确定。

2. 在逻辑表达式当中,如果为真,就以1作为结果,如果为假,就以0作为结果。

3. 输入字符串的时候,可以用scanf加上%s,但是这么弄有一个缺陷,就是说scanf一旦读到空格就会停下来(有\n的话也会继续读下去),这就导致在输入字符串的时候,如果想要完整读入,就不能有空格。而gets()读取字符串的时候就没有那么多事了,并且还会把最后输入的一个\n自动从入缓冲区里面拿掉。

4. 指针的核心在于进行解引用操作,解引用操作!bty,指针(变量)与地址与内存编号这三个概念完全等价!

5. 比如说一个函数返回值是一个数组,那么其实我们知道,在代码里面数组名就是首元素的地址,其实也相当于就是返回了一个指针,于是在定义函数的时候开头比如说是int *。

6. 每一次函数调用,都需要在内存的栈区上为该函数开辟一块内存空间,事实上也就是该函数的函数栈帧。

7.  寄存器是电脑当中独立于内存的存储介质,常见的有eax, ebx,ecx,edx,ebp,esp等等,其中,ebp与esp这两个寄存器很关键。
 1. 首先这两个寄存器里面放的是地址。
 2. 其次这两个寄存器一个维护栈顶,一个维护栈底。
 3. 这两个寄存器指向的位置=在维护的位置=里面放的地址=寄存器的值

8. 每压一次栈,esp指向的位置就会发生变化。

9. 内存栈区的使用习惯是先使用高地址,在使用低地址,由高向低不断蔓延

10.strlen与printf在操作字符串时,\0都是不统计在内,而sizeof则不一样,字符串末尾的\0也是统计在内。

11. 不完全初始化的时候,其他位置默认初始化为0;静态区里面的值(如全局变量)就算不初始化,也默认为0.

12. 在C语言中,非0表示真,0表示假。逻辑表达式为真则为1,逻辑表达式为假则为0.

13. 尤其要注意,在除/时,如果两边操作数都为整数的话,执行的是整数除法,这时候就算你用double类型的数据去接受结果,也无非白添了小数点加6个0。当两边其中一个操作数为浮点数时,才执行小数除法,用double类型去接受结果才能如你所意。

14. #define定义常量与宏的时候不需要在末尾加;号。在代码里面就无脑替换就可以了,举个例子:

题目1

代码1:

/**
 * 
 * @param rotateArray int整型一维数组 
 * @param rotateArrayLen int rotateArray数组长度
 * @return int整型
 */
int minNumberInRotateArray(int* rotateArray, int rotateArrayLen ) 
{
    int left=0;
    int right=rotateArrayLen-1;
    while(left<right)
    {
        int mid=(left+right)/2;
        if (*(rotateArray+mid)>*(rotateArray+right))
        {
            left=mid+1;
        }
        else if (*(rotateArray+mid)<*(rotateArray+right))
        {
            right=mid;
        }
        else
        {
            right--;
        }
    }
    return *(rotateArray+left);
}

经验总结:

1. 数组有关问题利用双指针指向首尾做为区间的端点是个常见的操作。
2. 像这道题可以用二分法的思路(同样经常运用在查找当中),旋转数组将原本有序的数组分成了两部分有序的数组,在原始有序数组中,最小的元素一定是在首位,现在相当于切断成了两部分,并且旋转了一下,我们可以将旋转前的前半段叫A,后半段叫B,现在相当于由原先的AB变成了BA。那么就可以知道:那个切点一定是数组的最小值所在。

3. 这时候就把中间值与端点值进行比较,发现:

     1. 若是区间中点值大于区间右界值,则最小的数字一定在中点右边。

     2. 若是区间中点值等于区间右界值,则是不容易分辨最小数字在哪半个区间,比如[1,1,1,0,1],应该逐个缩减右界。

     3. 若是区间中点值小于区间右界值,则最小的数字一定在中点左边。

4. 于是就用二分法调整区间,最后就可以锁定最小值所在。

代码2:

/**
 * 
 * @param rotateArray int整型一维数组 
 * @param rotateArrayLen int rotateArray数组长度
 * @return int整型
 */
int minNumberInRotateArray(int* rotateArray, int rotateArrayLen ) 
{
    int i=0;
    for (i=1;i<rotateArrayLen;i++)
    {
        if (*(rotateArray+i)<*(rotateArray+i-1))
        {
            return *(rotateArray+i);
        }

    }
    return *(rotateArray);
}

经验总结:

1. 再怎么旋转,这也是一个数组,我们要找的数组最小值,更通用的解法莫过于遍历数组。

题目2

答案:8

经验总结:

1. 像这样define定义的常量与宏,都是可以去进行替代的,但是尤其要注意的一点就是,不能用数学的惯性给它随意加上括号(),如下面这样就是大错特错的

2. 而应该是这样才对:

题目3

设变量已正确定义,以下不能统计出一行中输入字符个数(不包含回车符)的程序段是( )


 

答案:D

经验总结:

1.  这是for循环的执行流程图:for (exp1 ; exp2 ; exp3),是先执行exp1,然后判断exp2,为真的话再执行循环体,再执行exp3,然后在进行判断。

 

2. getchar()可以用来读取一个字符(你输入的),它的返回值是读取到的那个字符的ASCII码。

3. 当程序执行时一旦出现getchar,如果此时输入缓冲区里面没有东西,就会弹出一个界面,让你去输入字符(它读取不到就会返回EOF)。如果此时输入缓冲区里面有东西,那么getchar对抓去它干它自己的活。一次只能读取一个字符

题目4

代码:

#include <stdio.h>
#include <string.h>
int Judge(char* arr)
{
    //条件2
    if ((*arr>=48)&&(*arr<=57)) 
    {
        return 0;
    }
    //条件4
    if (strlen(arr)<8)
    {
        return 0;
    }
    //条件3
    int flag1=0;
    int flag2=0;
    int flag3=0;
    while(*arr!='\0')
    {
        if ((*arr>=48)&&(*arr<=57)) 
        {
            flag1=1;
        }
        else if ((*arr>=65)&&(*arr<=90)) 
        {
            flag2=1;
        }
        else
        {
            flag3=1;
        }
        int sum=flag1+flag2+flag3;
        if (sum>=2)
        {
            return 1;
        }
        arr++;
    }
    return 0;
}
int main()
{
    //输入n
    int n=0;
    scanf("%d",&n);
    //循环n次
    int i=0;
    char arr[100]={0};
    for (i=0;i<n;i++)
    {
        //输入字符串
        scanf("%s",arr);
        if (Judge(arr))
        {
            printf("YES\n");
        }
        else
        {
            printf("NO\n");
        }
    }
    return 0;
}

经验总结:

1. 在计算机代码里面,可以用简单的数字来表达一个事件的发生与否与状态。比如这边就定义flag1,flag2, flag3即使如此。 

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

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

相关文章

VUE实例的组件的生命周期和数据共享和ref的使用方法(建议直接看ref)

目录VUE实例的组件的生命周期和数据共享组件间的数据共享ref的使用方法使用ref操作dom使用ref引用组件this.$nextTick(cb)方法的使用VUE实例的组件的生命周期和数据共享 生命周期和生命周期函数 这个是我学校vue书籍阿里云盘地址,有需要可以点击看看 生命周期&#xff08;Life…

对Java中异常的认识

文章目录一、异常的概念与体系结构1.异常的概念2.异常的体系结构3.异常的分类二、异常的处理1.防御式编程2. 异常的抛出3.异常的捕获4.异常处理流程总结三、自定义异常类一、异常的概念与体系结构 1.异常的概念 在生活中&#xff0c;当我们发现朋友表现出不舒服的情况&#x…

LabVIEW ​​单​进程​共享​变量​与​​全局​变量

LabVIEW ​​单​进程​共享​变量​与​​全局​变量 单​进程​共享​变量​与​LabVIEW​全局​变量​相似。​事实​上&#xff0c;​单​进程​共享​变量​的​实现​是在​LabVIEW​全局​变量​的​基础​上​增加​了​时间​标识​功能。 ​为了​比较​单​进程​…

《终身成长》读书笔记

文章目录书籍信息思维模式思维模式解析关于能力和成就的真相体育&#xff1a;冠军的思维模式商业&#xff1a;思维模式和领导力人际关系&#xff1a;关于相处的思维模式父母、老师与教练&#xff1a;思维模式的传播改变思维模式书籍信息 书名&#xff1a;《终身成长》 作者&am…

Java算法_LeetCode26:删除排序数组中的重复项

LeetCode26&#xff1a;删除排序数组中的重复项 给你一个 升序排列 的数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使每个元素 只出现一次 &#xff0c;返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。 由于在某些语言中不能改变数组的长度&a…

设计模式-责任链模式之**动态配置责任链**

正在参加2022年度博客之星评选&#xff0c;大家帮我点个五星好评。有投必会 责任链的优势劣势我就不说&#xff0c;百度上很多。 1、怎么&#xff1a;动态配置责任链 通过配置文件yml来指定你的责任链的执行顺序。 地址 配置文件如何配置&#xff0c;怎么读取 为什么&#x…

HTTP协议详解 - 通过C++实现HTTP服务剖析HTTP协议

前言 C/C程序员一般很少会接触到HTTP服务端的东西&#xff0c;所以对HTTP的理解一般停留在理论。 本文章实现通过C实现了一个http服务&#xff0c;可以通过代码对HTTP协议有更深的理解&#xff0c;并且通过抓包工具对HTTP协议进行更为详细的分析。 HTTP协议简介 HTTP(hypert…

Linux--多线程

目录1. 什么是线程2. 创建线程3. 线程等待3.1 pthread_join函数3.2 线程分离3.2 线程终止的方案4. 线程ID1. 什么是线程 Linux中没有专门为线程设计TCB&#xff0c;而是用进程的PCB来模拟进程。 这也是为什么有种观点会说Linux下没有真正意义上的线程。 对于线程来说&#xf…

Elasticsearch搜索引擎(二)——SpringData Elasticsearch

SpringData Elasticsearch SpringData介绍 Spring Data是一个用于简化数据库访问&#xff0c;并支持云服务的开源框架。其主要目标是使得对数据的访问变得方便快捷&#xff0c;并支持map-reduce框架和云计算数据服务。 Spring Data可以极大的简化JPA的写法&#xff0c;可以在…

CSND近期推出的猿如意到底怎么样?

CSND近期推出的猿如意到底怎么样&#xff1f; 投稿测评正文 猿如意传送门 猿如意下载地址&#xff1a;猿如意-程序员的如意兵器,工具代码,一搜就有 猿如意使用了几次了&#xff0c;今天来想分享一下我对于猿如意的使用感受吧&#xff01;&#xff01; 先说结论&#xff1a…

吴恩达《机器学习》——Logistics回归代码实现

Logisitc回归1. Sigmoid与二分类Sigmoid函数为什么Sigmoid函数可以表示二分类概率&#xff1f;2. Logistics回归交叉熵损失函数梯度过拟合与欠拟合正则化3. Python代码实现4. 单维与多维Logistic分类单维数据分类多维数据分类数据集、源文件可以在Github项目中获得 链接: https…

04 kafka 中一些常用的配置的使用

前言 呵呵 也是最近有一些 搭建 kafka 的环境的需求 然后 从新看了一下 一部分的配置情况, 这里 大致理一下 一些我这里比较关心的配置 那些配置关联了 kafka 服务器绑定服务 绑定 tcp 服务的配置来自于这里, 读取的是 config.dataPlaneListeners config.dataPlaneListen…

Java母婴商城母婴店孕妇商城婴幼儿商城网站系统源码

简介 java使用ssm开发的母婴商城系统&#xff0c;用户可以注册浏览商品&#xff0c;加入购物车或者直接下单购买&#xff0c;在个人中心管理收货地址和订单&#xff0c;管理员也就是商家登录后台可以发布商品&#xff0c;上下架商品&#xff0c;处理待发货订单等。 演示视频&…

Allegro如何在PCB上查看pin number的三种方法操作指导

Allegro如何在PCB上查看pin number的三种方法操作指导 Allegro支持快捷的在PCB上查看pin number,如下图 具体操作如下 方法一:show element 选择Show Element命令Find选择Pins

2022年学习机器人和人工智能的一些期待

2022年学习机器人和人工智能的一些体会 2023年即将到来&#xff0c;满满的期待。 做好规划是非常非常重要的&#xff0c;有时候甚至比认真做事本身更为重要。 《礼记中庸》&#xff1a;“凡事豫则立&#xff0c;不豫则废。言前定则不跲&#xff0c;事前定则不困&#xff0c;行…

视频解码学习备忘

媒体文件知识 日常都是播放器直接播&#xff0c;其实这里面还有不少内容的。 首先是视频容器&#xff0c;就是所谓的.mp4 .mkv 这类文件,其目的主要就是用来存放音频视频字幕等内容&#xff0c;所以叫做容器。这些都有一定规范&#xff0c;比如mp4&#xff0c;叫ISO 14496-12…

流程图+BPMN+脑图 JointJS++ 3.6.3 Crack

一个库&#xff0c;‍ 无限的UI选择&#xff0c;直接在您的应用程序中享受交互式流程图、BPMN 和其他图表工作室。利用我们的模板化应用程序&#xff0c;将开发时间缩短至几天。 经过十多年和数百万行代码的编写&#xff0c;我们推出了一组随时可用的功能&#xff0c;以帮助您创…

数据结构进阶 二叉树OJ题二

作者&#xff1a;小萌新 专栏&#xff1a;数据结构进阶 作者简介&#xff1a;大二学生 希望能和大家一起进步&#xff01; 本篇博客简介&#xff1a;介绍几道二叉树的oj题 题目一 二叉搜索树与双向链表 输入一棵二叉搜索树&#xff0c;将该二叉搜索树转换成一个排序的双向链表…

帆软—图表专题

饼图 优点&#xff1a;能很直观的看到每一个部分在整体中所占的比例。 缺点&#xff1a;不适合较大的数据集&#xff08;分类&#xff09;展现&#xff0c;数据项中不能有负值&#xff0c;当比例接近时&#xff0c;人眼很难准确判别。 变形饼图 柱形图 特点 优点&#xff…

SpringBoot HandlerMethodArgumentResolver接口自定义参数解析器

参考资料 【SpringBoot】HandlerMethodArgumentResolver的简单使用HandlerMethodArgumentResolver(参数解析器)的作用使用小案例HandlerMethodArgumentResolver用于统一获取当前登录用户 目录一. 需求二. 前期准备三. 实现HandlerMethodArgumentResolver接口四. 将自定义的方法…