【基础强训】day3

一、选择题

💦第1题:

以下程序的输出结果是()
#include
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
int main()
{
    int x=3,y=3;
    switch(x%2)
   {
      case 1:
        switch (y)
         {
            case 0:cout<

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个字节,344= 48

💦第10题 :

假设在一个 32 位 little endian 的机器上运行下面的程序,结果是多少?
#include
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

【基础强训】day3

二、编程题

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

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

string My_LongNum(const string& str)
{

    int Max = 0;     //记录最大数字串长度
    int i = 0;
    string tmp;

    while (i

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

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

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

};

Original: https://blog.csdn.net/bit_jie/article/details/128419814
Author: 13KB
Title: 【基础强训】day3

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/806264/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球