C及C++每日练习(2)

1.选择:

1.使用printf函数打印一个double类型的数据,要求:输出为10进制,输出左对齐30个字符,4位精度。以下哪个选项是正确的?

A.%-30.4e  B.%4.30e  C.%-30.4f  D.%-4.30

       在上一篇文章中,提到了对于打印字符串时,其打印模板%m.ns中各个字母的含义,对于m,表示输出的字符串的宽度,对于n表示在打印时,打印左起字符串的前n个字符。并且是右对齐,且字符不足时会自动补充空格。当字符串长度>n>m时,m失效,当n>字符串长度时,直接打印到结尾。

      对于本题,则是考察对于数字的打印格式。对于打印十进制的double,采用的格式是%m.nf

对于题目中的%m.ne,是表示按照指数类型打印。

    对于对齐问题,主要由m控制,表示右对齐打印m个字符。但是题目中要求左对齐,因此需要采用-m的形式。对于n,主要用于控制打印精度,即表示打印到小数点的后n位。

   因此,对于本体题目要求,对应答案C

2.请找出下面程序中有哪些错误()

int main(){ 
    int i = 10; 
    int j = 1; 
    const int *p1;//(1) 
    int const *p2 = &i; //(2) 
    p2 = &j;//(3) 
    int *const p3 = &i;//(4) 
    *p3 = 20;//(5) 
    *p2 = 30;//(6) 
    p3 = &j;//(7) 
    return 0; 
}


 A.1,2,3,4,5,6,7

B. 1,3,5,6

C.6,7

D.3,5

在正式讲解题目之前,首先需要介绍两个概念,即:指针常量、常量指针

对于常量指针:表示指针指向的内容是常量内容,因此,指针指向的内容不能被修改,也就是说,不能通过解引用的方式来改变指针指向的内容,但是,可以改变指针本身的指向。

对于指针常量:表示指针本身就是一个常量,指针的指向不能发生更改,但是可以通过解引用的方式改变空间中内容。

而对于如何区分指针常量和常量指针,可以通过const*的相对位置来判断。

例如,对于题目中的(1)const\, \, \, int *p1;因为const*前面,所以表示常量指针,即:p1指向的内容不能通过解引用进行修改,但是p1的指向可以修改。

对于题目中的(2)int \, \, \, const *p2 =&i表示常量指针,与(1)不同的是,此处进行了对于指针的初始化。

对于题目中的(3),表示改变指针p2的指向,由于p2是常量指针,故正确。

对于题目中的(4),此时*const前面,表示指针常量,即指针是一个常量,指针的指向不能被更改,但是指向的内容可以修改。

对于题目中的(5),表示对指针p3解引用,更改指针指向的内容,由于p3是一个指针常量,因此,可以更改指针指向的内容。正确。

对于题目中的(6),表示对指针p2解引用,修改指向的内容,由于指针式常量指针,即指针指向的内容是常量,可以修改指针的指向,但是不能更改指针指向的内容,因此错误。

对于题目中的(7),表示更改p3的指向,由于指针p3是指针常量,因此,指针指向不能被改变,所以错误。

因此答案选择C

3.下面叙述错误的是()

char acX[]="abc"; 
char acY[]={'a','b','c'}; 
char *szX="abc"; 
char *szY="abc";

A.acX与acY的内容可以修改

B. szX与szY指向同一个地址

C.acX占用的内存空间比acY占用的大

D. szX的内容修改后,szY的内容也会被更改

        对于代码的前两行,都是创建一个常量字符串,只不过采取的放肆不同,不过需要注意,在第一行代码中,由于是一个完整的字符串,因此,在字符串的末尾带有字符串的结束标志\0。但是第二行代码中,并不存在这个结束标志,因此,对于C选项,acX的大小大于acY的大小。

       对于A选项,可以通过数组下标进行更改,正确。

       对于B选项,由于两个指针指向的内容相同,因此正确。

       对于D选项,需要注意,题目说的是改变指针szX的内容,也就是修改指针指向的地址,并不是修改其指向的内容。所以错误。

因此选择D

4.在头文件及上下文均正常的情况下,下列代码的运行结果是()

int a[] = {1, 2, 3, 4};

int *b = a; 
*b += 2;

*(b + 2) = 2; 
b++;

printf("%d,%d\n", *b, *(b + 2));

A.1,3

B. 1,2

C.2,4

D.3,2

对于上述代码,首秀按创建了一个指针b,指向了数组a的起始地址。随后,对于*b += 2;,需要注意,由于*的结合优先级高于+=,因此,这句代码表示的含义是,解引用,拿到数组中第一个数,随后对这个数+2,因此,此时的数组为:

int a[] = {3, 2, 3, 4};

对于*(b + 2) = 2;,则是表示针对指针的地址进行加2,由于指针的类型为int,因此表示跳过8字节,对跳过后的地址进行解引用,再将这个值修改为2。因此,此时的数组为:

int a[] = {3, 2, 2, 4};

对于b++,表示修改指针b,使得其指向数组中的第二个元素的地址。

因此,再打印时,指针b指向数组中第二个元素的下标,此时进行打印,打印的值分别为2,4,答案选择C

5. 用变量a给出下面的定义:一个有10个指针的数组,该指针指向一个函数,该函数有一个整形参数并返回一个整型数()

A. int *a[10];

B. int (*a)[10];

C. int (*a)(int);

D. int (*a[10])(int);

本题目涉及到了三个概念:数组指针,指针数组,函数指针,对于数组指针。对于前二者的判断,只需要知道[]的结合优先级大于*即可。

例如对于选项A,由于结合性问题,因此a首先表示一个数组,数组的容量为10,其中保存了10int*类型的变量,因此表示指针数组。

对于选项Ba首先表示一个指针,这个指针指向了一个数组,数组可以存储10int类型的变量,因此是数组指针。

对于选项Ca表示一个指针,外部的括号()是函数指针的标志,因此表示一个函数,参数为一个整型参数。返回值类型为int

对于选项Da首先表示一个数组,这个数组存储的变量为指针,且指针为函数指针,返回值为整型,参数为一个整型参数,所以答案选择D

6.在32位cpu上选择缺省对齐的情况下,有如下结构体定义:

 struct A
{ 
unsigned a : 19;
 unsigned b : 11;
 unsigned c : 4; unsigned d : 29;
 char index; 
};

则sizeof(struct A)的值为()

A.9 B. 12 C.16 D.20

     需要注意,此时的变量是以位断的形式定义的,冒号后面的数组表示这个变量占有多少比特位。

     对于一个unsigned类型的变量,大小为4字节,因此会开辟4字节,即32比特位大小的空间,由于a,b占有的比特位小于32,因此对于二者只会开辟一次4字节大小的空间。

     对于c,由于此时第一次开辟的空间大小不足,因此会在开辟4字节大小的空间。对于d,由于此时的空间再次不足,因此会第三次开辟4字节空间。

   对于index,由于类型不同,因此会再开辟1字节的空间。

   最后,因为存在内存对齐机制,因此总空间大小必须是最大对齐数的整数倍,因此答案选择C

7.下面代码会输出()

int main(){ 
 int a[4]={1,2,3,4}; 
 int *ptr=(int*)(&a+1); 
 printf("%d",*(ptr-1)); 
}

A.4 B. 1 C.2 D.3

对于数组名,如果于sizeof,&结合,则表示整个数组,其他情况下均表示数组首元素地址。因此,此处的&a+1,表示跳过整个数组长度的内容。即数组最后一个内容的下一个位置。对于ptr-1,由于指针的类型int,因此为指向前四个字节的内容,也就是指向数组的最后一个元素的地址。,因此选择A

2. 编程:

2.1 倒置字符串:

倒置字符串_牛客题霸_牛客网 (nowcoder.com)

       原理较为简单,首先将给定的字符串整体进行逆置,例如对于图中给出的字符串,整体逆置后如下:

                                                      .gnijieb \, \, ekil\, \, I

      对于本题,可采用双指针法进行解决。具体解法如下:

   

     创建两个指针,分别为start,end,在最开始,两个指针均指向字符串的开头。这里由于使用string类创建一个对象s用于存放字符串,因此:start=s.start()=end

     建立循环,循环的条件是start<s.end()

    如果end的位置不指向字符串的结束位置,即:最后一个字符的下一个位置。并且对于*end !=' \, \, ',即不等于空,则让end指向下一个位置。

    如果*end ==' \, \, ',则将start,end两个指针区域内的字符串再次逆置。在逆置后,这里有两种情况,一是end <s.end(),则令start=end+1,再令end = start即可。如果end == s.end(),则表示,已经将整个字符串遍历结束,直接令start =end即可。此时start==s.end(),循环结束,输出字符串即可。对应代码如下:

#include <iostream>
#include<string>
#include<algorithm>
using namespace std;

int main() 
{
    string s1;
    getline(cin,s1);

    reverse(s1.begin(),s1.end());

    auto start = s1.begin();

    while(start != s1.end())
    {
        auto end = start;

        while(*end != ' ' && end != s1.end())
        {
            end++;
        }

        reverse(start,end);

        if(end != s1.end())
        {
            start = end+1;
        }
        else {
         start = end;
        }
    }

    cout << s1;
    return 0;
  
 
    
}

2.2 排序子序列:


排序子序列_牛客笔试题_牛客网 (nowcoder.com)

在给出题解之前,首先解释以下题目中提出的两个概念,即:非递增序列,非递减序列。

对于非递增序列,可以看作不严格的递增序列,即存在前后相等元素的递增序列,例如:

                                                    1\, \, \, 2\, \, \, 2\, \, \, 3\, \, \, 3\, \, \, 4

对于非递减序列,可以看作不严格的递减序列,即存在前后相等元素的递减序列,例如:
                                                    5\, \, \, 4\, \, \, 4\, \, \, 3\, \, \, \, 2\, \, \, 2\, \, \, 1\,

      对于本题目的解法,首先利用vector实例化出对象v来接收输入元素,利用变量n接收输入元素数量:

     如果v[i] <v[i+1],则表示数组进入了非递增序列。

     如果v[i] >v[i+1],则表示数组进入了非递减序列

    对于v[i]==v[i+1]的情况,指向下一个元素即可。不做处理

     如果数组进入了上述序列,需要继续判断,如果出现了相反的情况,例如在非递增序列中,出现了v[i] > v[i+1],则表示这部分的数据不再满足非递增性,此时前面的数据构成了一个完成的非递增序列,因此让记录排序子序列数量的变量count++,再令i++,作为另一种序列的首个元素。如果没有出现相反的情况,则表示目前数据依旧满足非递增行,需要检测下一个数据,再令i++即可。

    不过对于条件的判断需要注意,对于下面的情况:1 \, \, \, 2\, \, \, 3\, \, \, 4,因为上面给出的序列是一个递增序列,因此当i==2时,此时v[i]==3,v[i+1]==4,然后令i++,此时i==3,对于v[i+1]会造成越界访问的问题。为了方便的解决这个问题,可以在实例化出对象v后,利用resize函数,扩容N+1数量的空间,并且将这些空间初始化为0。具体代码如下:
 

#include <iostream>
#include<vector>
using namespace std;

int main() {
    int n = 0;
    cin >> n;
    vector<int> v;
    v.resize(n+1,0);

    for( int i = 0; i < n; i++)
    {
        cin >> v[i];
    }

    int count = 0;
    int i = 0;
    while( i < n)  
    {
        //进入非递减
        if( v[i] < v[i+1])
        {
            while( i < n && v[i] <= v[i+1])
            {
                i++;
            }
            count++;
            i++;  
        }
        else if( v[i] == v[i+1])
        {
            i++;
        }
        else
        {
            while( i < n && v[i] >= v[i+1])
            {
                i++;
            }
            count++;
            i++;
        }
    }

    cout << count;

    return 0;

}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

社科院与杜兰大学金融管理硕士——精心准备,只为那一刻的刚刚好

我们每个人都是夜空中独一无二的那颗星&#xff0c;静静地照耀&#xff0c;期待着照亮自己的宇宙。我们的每一步前行&#xff0c;都像是星尘累积&#xff0c;汇聚成璀璨的光轨&#xff0c;照亮未来的道路。正如我们现在努力申请的社科院与杜兰大学金融管理硕士项目&#xff0c;…

深圳/广州/厦门/上海/宁波/义乌2024最新跨境电商展计划表发布!

全国各城市2024年跨境电商年度效果好的跨境展会排期表来了&#xff0c;具体展会活动议程根据组委会实际公示结果为准。 励佳展览(上海)有限公司是一家专业组织、代理国内跨境电商行业展会会展公司&#xff0c;励佳展览拥有高素质的员工队伍&#xff0c;广泛的客户资源&#xf…

香港媒体发稿:【超值1元港媒发稿套餐】推广技巧-华媒舍

在当今竞争激烈的市场中&#xff0c;品牌的推广是企业取得成功的关键。众多的宣传渠道中&#xff0c;香港媒体发稿无疑是一种高效的品牌推广方式。本文将为您介绍《超值1元港媒发稿套餐》的各个组成部分&#xff0c;以及它如何帮助您实现品牌的腾飞。 1. 1元套餐的优势 1元港媒…

田宏斌:以人为本的听力健康管理实践经验 | 演讲嘉宾公布

一、助辅听器材Ⅲ分论坛 助辅听器材Ⅲ分论坛将于3月28日同期举办&#xff01; 听力贯穿人的一生&#xff0c;听觉在生命的各个阶段都是至关重要的功能&#xff0c;听力问题一旦出现&#xff0c;会严重影响生活质量。助辅听器材能有效提高生活品质。在这里&#xff0c;我们将分享…

逆变器专题(15)-弱电网下的LCL逆变器控制以及谐振峰问题(2)

相应仿真原件请移步资源下载 LCL滤波器 LCL滤波器因其本身为一个二阶系统&#xff0c;其本身就会引发谐振&#xff0c;导致相应谐振频率处的增益得到放大&#xff0c;进而产生谐波等问题&#xff1b;另一方面&#xff0c;在弱电网下&#xff0c;逆变器会与电网阻抗发生耦合&am…

IP劫持的危害及应对策略

随着互联网的发展&#xff0c;网络安全问题日益凸显&#xff0c;其中IP劫持作为一种常见的网络攻击手段&#xff0c;对个人和企业的信息安全造成了严重的威胁。IP数据云将分析IP劫持的危害&#xff0c;并提出相应的应对策略。 IP地址查询&#xff1a;IP数据云 - 免费IP地址查询…

多张gif怎么拼接?三步教你在线拼接gif

GIF拼图常用于制作表情包、动态海报、广告宣传等场景。它可以将多个图像或动画元素组合在一起&#xff0c;形成一个有趣、生动的动画效果&#xff0c;吸引观众的注意力&#xff0c;并传达特定的信息或情感。要将多个GIF动图拼接在一张图像上&#xff0c;要使用适合的gif动画图片…

奥壹科技推出婚恋相亲系统免费软件,旨在扶持创业者降低行业入门门槛

(广州, 2024年3月6日星期三) - 随着婚恋市场的日益增长&#xff0c;奥壹科技宣布推出其旗下奥壹云相亲系统的全新免费版(OEyun Free V1.0)。该公司表示&#xff0c;该举措旨在通过降低创业门槛&#xff0c;为有意进入婚恋行业的创业者及小型企业提供支持&#xff0c;从而进一步…

Java继承与多态:深入理解继承、组合和多态的精髓!

Java继承与多态&#xff1a;深入理解继承、组合和多态的精髓&#xff01; 引言 欢迎来到这篇关于Java继承与多态的博客&#xff01;在Java编程中&#xff0c;继承与多态是两个非常重要的概念&#xff0c;它们为我们构建灵活而高效的代码提供了强大的支持。本文将深入探讨Java继…

2024年冲刺年薪40w,Android岗面试

一个程序员&#xff0c;如果不想35 岁被淘汰&#xff0c;请把它当成一种信仰&#xff01; 25岁&#xff0c;一个北漂程序员&#xff0c;入职三年&#xff0c;Android中级工程师&#xff0c;月薪15k&#xff0c;965的工作经常干成996&#xff0c;比起老家的同龄人&#xff0c;我…

校招中的“熟悉linux操作系统”一般是指达到什么程度?

校招中的“熟悉linux操作系统”一般是指达到什么程度&#xff1f; 在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「Linux的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&am…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:PanGesture)

拖动手势事件&#xff0c;当滑动的最小距离超过设定的最小值时触发拖动手势事件。 说明&#xff1a; 从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 接口 PanGesture(value?: { fingers?: number; direction?: PanDir…

three.js如何实现简易3D机房?(二)模型加载的过渡动画

接上一篇&#xff1a; three.js如何实现简易3D机房&#xff1f;&#xff08;一&#xff09;基础准备-下&#xff1a;http://t.csdnimg.cn/TTI1P 目录 六、自定义过渡动画 1.过渡动画组件 2.模型加载时使用 根据模型大小&#xff0c;可以自定义模型加载的过渡动画效果&am…

修改表中某个字段等于另一个字段减去 2 小时的 SQL

需求&#xff1a;将表中到达时间按照客户要求改为比赛时间的提前 N 小时&#xff0c;具体如下&#xff1a; 表结构 update contestSchedule SET mainRefereeArrivalTimeDATE_FORMAT(CONCAT(2024-03-04 ,gameTime)- INTERVAL 2 HOUR, %H:%i), assistantRefereeArrivalTimeDAT…

算法沉淀——贪心算法一(leetcode真题剖析)

算法沉淀——贪心算法一 01.柠檬水找零02.将数组和减半的最少操作次数03.最大数04.摆动序列 贪心算法&#xff08;Greedy Algorithm&#xff09;是一种基于贪心策略的优化算法&#xff0c;它通常用于求解最优化问题&#xff0c;每一步都选择当前状态下的最优解&#xff0c;以期…

动动嘴就能搞研发?百度Comate带你0门槛玩转代码

3月1日&#xff0c;百度旗下智能代码助手Baidu Comate 又添两大重磅能力&#xff1a;“Comate ” 开放平台、AutoWork “私人研发助理”&#xff0c;为行业首家免费开放试用。本次发布&#xff0c;Baidu Comate 将更加贴合软件研发现场&#xff0c;通过易用的研发平台、丰富的插…

Docker的安装跟基础使用一篇文章包会

目录 国内源安装新版本 1、清理环境 2、配置docker yum源 3、安装启动 4、启动Docker服务 5、修改docker数据存放位置 6、配置加速器 现在我们已经完成了docker的安装和初始配置。以下为基本测试使用 自带源安装的版本太低 docker官方源安装的话速度太慢了 所以本篇文…

2023年算法OOA-DBSCAN聚类

2023年算法OOA-DBSCAN聚类 鱼鹰优化算法&#xff08;Osprey optimization algorithm&#xff0c;OOA&#xff09;由Mohammad Dehghani 和 Pavel Trojovsk于2023年提出&#xff0c;其模拟鱼鹰的捕食行为。鱼鹰是鹰形目、鹗科、鹗属的仅有的一种中型猛禽。 DBSCAN聚类算法&#x…

RLNNA-DBSCAN聚类

RLNNA-DBSCAN聚类 RLNNA算法&#xff08;基于强化学习的神经网络优化算法&#xff09;是一种性能较佳的优化算法。DBSCAN聚类算法&#xff08;密度聚类算法&#xff09;是一种基于密度的聚类算法&#xff0c;其主要思想是通过寻找样本点周围的密度可达关系来聚类数据。 使用RL…

小白跟做江科大51单片机之DS1302可调时钟

原理部分 1.DS1302可调时钟介绍 单片机定时器主要占用CPU时间&#xff0c;掉电不能继续运行 图1 2.原理 图2 内部有寄存器&#xff0c;寄存的时候以时分秒寄存&#xff0c;以通信协议实现数据交互&#xff0c;就可以实现对数据进行访问和读写 3.主要寄存器定义 CE芯片使能…