IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 【基础强训】day3 -> 正文阅读

[C++知识库]【基础强训】day3

一、选择题


💦第1题:

以下程序的输出结果是()
#include <stdio.h>
main() {
char a[10] = {'1', '2', '3', '4', '5', '6', '7', '8', '9', 0}, *p;
int i;
i = 8;
p = a + i;
printf("%s\n", p - 3);
}
A 6
B 6789
C '6'
D 789

B

先定义一个长度为10的字符数组a[]和一个字符指针*p

p=a+8代表指针p向后偏移8个字节此时指针p指向'9', p-3后此时指针p指向6

%s打印时遇到\0结束,所以会打印 6 ,7,8,9


💦第2题??:

以下程序的输出结果是()
#include <iostream.h>
int main()
{
    int x=3,y=3;
    switch(x%2)
   {
      case 1:
        switch (y)
         {
            case 0:cout<<"first";
            case 1:cout<<"second";break;
            default:cout<<"hello";
          }
        case 2:cout<<"third";
    }
}

A second third
B hello
C first second
D hellothird

D

x%2==1,所以会进入case1中,然后又是switch(y=3),所以会进入default打印hello.

但是这个switch(y)分支结束没有break,他会继续执行语句case2,所以再打印third.

所以会打印hellotyhird


💦第3题? ?:

以下能对二维数组a进行正确初始化的语句是()
A int ta[2][]={{0,1,2},{3,4,5}};
B int ta[][3]={{0,1,2},{3,4,5}};
C int ta[2][4]={{0,1,2},{3,4},{5}};
D int ta[][3]={{0,,2},{},{3,4,5}};

B?

对于二维数组来说ta[][]第一个括号中的数表示行数,第二个[]表示列数。行数可以省略,列数不可以省略。在对数组中的数进行初始化时必须连续初始化,中间不能有间隔。


?💦第4题? ?:

能把函数处理结果的二个数据返回给主调函数,在下面的方法中不正确的是()
A return这二个数
B 形参用数组
C 形参用二个指针
D 用二个全局变量

?A

A选项: return每次只能一个数据类型,只能放在一个数组或者容器里面返回出来,所以A错误

B选项 形参在使用数组的时候会传递数组的地址,然后将函数处理的结果放在数组当中,当函数调用完以后可以访问数组获取处理结果,B正确

C选项 形参用两个指针,然后两个指针在调用的时候需要传递两个地址变量,将对应的处理的结果放在对应的地址空间,然后可以根据指针访问处理结果,C正确

D选项 全局变量的作用域在整个文件中都是有效的,所以在处理完以后主调函数可以在全局域中访问到处理结果,所以D正确
?


?💦第5题? ?:

int *p[4] 与选择项中的() 等价
A int p[4]
B int *p
C int *(p[4])
D int (*p)[4]

A

?这题最重要的就是*和[]谁的优先级高,[]的优先级高,所以更规范的写法是int* (p[4])

C选项:这是一个指针数组,数组中存放的是int*类型的数据,数组的大小是4,正确。

D选项:是一个数组指针,指向包含4个元素的数组p[]的指针。


?💦第6题? ?:

设变量已正确定义,以下不能统计出一行中输入字符个数(不包含回车符)的程序段是
A n=0;while(ch=getchar()!='\n')n++;
B n=0;while(getchar()!='\n')n++;
C for(n=0;getchar()!='\n';n++);
D n=0;for(ch=getchar();ch!='\n';n++);

?D

?键输一串字符abcdaidnacadc\n,统计一共输入多少字符。

A选项:输入的字符被ch接收然后和\n比较,不是n++,所以A正确。

B选项:这个就是青春版的A,B选项也可以。

C选项:如果A是P40的话,C就是mate40,两者型号不同,但是都可以。

D选项:初始化部分只会执行一次,所以此次循环只会获取一个字符,所以D错误。


💦第7题? ?:

以下代码
char *ptr;
char myString[] = "abcdefg";
ptr = myString;
ptr += 5;
代码执行之后ptr指向的内容是?
A Compiler error       B fg
C efg                  D defg

B?

先解读一下代码,定义一个字符指针ptr,指针指向数组myString首元素a?,ptr+5代表ptr偏移5个字节指向f,所以是fg


💦第8题? ?:

下面3段程序代码的效果一样吗()
 int b;
(1)const int *a = &b;
(2)int const *a = &b;
(3)int *const a = &b;
A (2)=(3)      B (1)=(3)
C (1)=(2)      D 都不一样

?C

?const* :常量指针,指针所指空间的值不能发生改变,不能通过指针解引用修改指针所指空间的值,但是指针的指向可以发生改变。

*const:指针常量,指针本身是一个常量,指针的指向不能发生改变,但是指针所指空间的值可以发生改变,可以通过指针解引用改变指针所指空间的值。

所以(1)(2)是常量指针,(3)是指针常量。选项C正确。


💦第9题? ?:

32位系统中,定义**a[3][4],则变量占用内存空间为()。
A 4
B 48
C 192
D 12

B?

这个我们可以理解为是一个三行四列的数组,数组中存放的是指针类型。

1个指针类型是4个字节,3*4*4=48?。


💦第10题? ?:?

假设在一个 32 位 little endian 的机器上运行下面的程序,结果是多少?
#include <stdio.h>
int main(){
long long a = 1, b = 2, c = 3;
printf("%d %d %d\n", a, b, c);
return 0;
}
A 1,2,3
B 1,0,2
C 1,3,2
D 3,2,1

B

此题是在32位小端的机器上运行。 所以我们要先了解小端是啥意思。

大端:低位存高地址

小端:高位存低地址,一般来说左边低右边高。

longlong类型占8个字节,用小端存储

a:01 00 00 00 00 00 00 00
b:02 00 00 00 00 00 00 00
c:03 00 00 00 00 00 00 00

?printf在打印的时候会创建函数栈帧,是从高地址向低地址增长的,从高地址开辟空间往低地址延伸,并且函数在调用的时候是从右往左入栈的,依次是c b a,三个变量入栈以后再进行打印,%d每次获取四个字节,栈是后进先出的,所以先打印a


?二、编程题

🌈第一题:字符串中找出连续最长的数字串??

思路详解:

这个的大致思路是用判断字符是不是数字函数进行判定,如果是就++计数器count,同时将数字拼接到字符串Num上面,当循环到非数字字符上面时,更新最大数字长度计数器Max,一直保持Max记录的是最长数字字符串的长度,然后count在重新从0开始计数,知道一直循环到字符串遍历结束为止。

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

string My_LongNum(const string& str)
{
   
    int Max = 0;     //记录最大数字串长度
    int i = 0;
    string tmp;

    while (i<str.size())
    {
         int count = 0;  // 记录当前数字串长度
        string Num;  //用来拼接数字串
        while (isdigit(str[i]))
        {
            count++;
            Num += str[i];
            i++;
        }
        if (Max < count)
        {
            Max = count;
            tmp = Num;
        }
        i++;
    }
    return tmp;
}
int main()
{
    string str;
    getline(cin, str);
    cout << My_LongNum(str) << endl;
    return 0;


}



🌈第二题:数组中出现次数超过一半的数字

?

?

?思路详解:

其实这题的思路挺简单的,先整体进行排序,假设存在一个超过整体一半的数,我们把这个数命名为众数,那最中间的数一定是众数,所以我们取数组最中间的那个数,如果我们拿这个众数去一个一个抵消非众数,那最后剩下的一定是众数(因为众数超过一半)。所以我们就看消完后的那个数是不是中位数即可。

class Solution {
public:
    int MoreThanHalfNum_Solution(vector<int> numbers) {
       if(numbers.empty())
        return 0;
        sort(numbers.begin(), numbers.end());  //先整体进行排序
        int midNum=numbers[numbers.size()/2];  //取排序好后的中位数为众数
        int count=0;
        for(int i=0;i<numbers.size();i++)
        {
            if(midNum==numbers[i])
            {
                 count++;
            }
           
        }
        if(count>numbers.size()/2)
        {
            return midNum;
        }
        else
             return 0;
    }
    
};

?

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-12-25 10:47:31  更:2022-12-25 10:48:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 7:05:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码