目录
选择题
单选
OR59 字符串中找出连续最长的数字串⭐
【题目解析】
【解题思路】
JZ39 数组中出现次数超过一半的数字⭐
【题目解析】
【解题思路1】
【解题思路2】
选择题
单选
1、以下程序的输出结果是 ( )
#include <stdio.h>
int 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);
return 0;
}
正确答案:
解析:
- %s:格式化打印是遇见 '\0'(0) 才会停止打印。
----------------------------------------------
2、以下程序的输出结果是 ( )
#include <iostream.h>
using namespace std;
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";
}
return 0;
}
正确答案:
解析:
根据x % 2 = 1匹配 case 1: ,根据y = 3匹配 default: ,于是会打印 "hello" 。但是此处我们需要注意,外层的switch语句的case : 是没有 break; 语句的,所以其会继续向下执行,然后执行case 2: ,再打印 "third" 。
没有 break; 语句会一直执行到 break; 语句为止 / 结束。
----------------------------------------------
正确答案:
解析:
:二维数组再声明的时候,行可以省略,列是不可以省略的。
:声明的是两行,但是初始化的时候,初始化的是三行。
:初始化每一行的时候,必须连续的初始化,中间不能间隔。
----------------------------------------------
正确答案:
解析:
return 每一次只能 return 一个数据类型,多个除非放到一个数组 / 一个容器里面。
用数组的话,在调用这个函数的时候需要传递数组的地址,然后将函数处理的结果,放到这个数组中,然后函数调用完之后,就可以通过主调函数去访问数组来获取处理结果。
用指针的话,在调用这个函数的时候需要传递两个地址变量,然后将对应的处理结果,放到地址的所属空间中,然后在函数调用完之后,主调函数通过两个指针去访问所属空间的值。
全局变量的作用域是在整个源文件都是有效的,所以主调函数可以对其访问,以获取处理结果。
----------------------------------------------
正确答案:
解析:
- 题int *p[4]:[]的优先级是高于*的,所以p先和[]进行结合表示其是一个数组,然后数组里面存储的是int类型的指针 —— int类型的指针数组,元素个数为4
int p[4]:int类型的数组,元素个数为4
int *p:int类型的指针数组
int *(p[4]):此时[]的优先级是高于*的,int类型的指针数组,元素个数为4
int (*p)[4]:此时*的优先级是高于[]的,数组指针,元素个数为4,int类型
----------------------------------------------
正确答案:
解析:
while(ch=getchar()!='\n'):先getchar()获取一个字符,然后由于 != 优先级高于 '\n' ,所以,先进行 getchar()!='\n' 后再执行 ch = (getchar()!='\n'),虽然ch存在很奇怪,但是能计算。
操作符优先级(详细说明+表格+问题表达式)_川入的博客-CSDN博客
while(getchar()!='\n'):的简易版,能实现。
for(n=0; getchar()!='\n'; n++):getchar()!='\n' 作为判断条件,此可以理解为与效果一样,能实现。
for(ch=getchar(); ch!='\n'; n++):ch=getchar() 作为初始化部分,只有最开始的时候才会执行一次,所以是无法实现的,并且如果输入的第一个字符不是 '\n' 将会死循环。
----------------------------------------------
char* ptr;
char myString[] = "abcdefg";
ptr = myString;
ptr += 5;
正确答案:
解析:
因为p指向的类型是char类型的。
----------------------------------------------
int b;
(1)const int* a = &b;
(2)int const* a = &b;
(3)int* const a = &b;
正确答案:
解析:
- 常量指针:指针所指空间的值是不能发生改变的,不能通过指针解引用修改指针所指向的空间的值,但是指针的指向是可以发生改变的。
- 指针常量:指针本身是一个常量,指针的指向不能发生改变,但是指针所指空间的值是可以发生的,可以通过指针解引用改变指针所指空间的值。
- 区分:const与*的相对位置
- const在*的左边 -- 常量指针
- const在*的右边 -- 指针常量
(1)常量指针
(2)常量指针
(3)指针常量
----------------------------------------------
正确答案:
解析:
三行四列的一个数组,一共有 3 * 4 = 12 个元素。每一个元素都是int的二位指针类型,指针类型在32位系统中,是4个字节,于是:12 * 4 = 48。
----------------------------------------------
#include <stdio.h>
int main() {
long long a = 1, b = 2, c = 3;
printf("%d %d %d\n", a, b, c);
return 0;
}
正确答案:、
解析:
- 大端:低位存高地址,高位存低地址。
- 小段:高位存高地址,低位存低地址。
C语言整数存储_大小端_川入的博客-CSDN博客
看题:
long long类型是占8个字节,32 位 little endian 的机器。
利用printf函数打印这三个变量的值,printf是一个库函数,在调用的时候,会创建一个函数栈帧。(栈:高地址向低地址增长)
调用printf函数的时候,变量是从右到左入栈的(先c,再b,再a)。
然后利用 %d 进行打印,每次获取4个字节内存的数据,然后根据后进先出的原则,依次向后4个字节,以转化为十进制打印。
所以输出为:1 0 2
----------------------------------------------
OR59 字符串中找出连续最长的数字串⭐
字符串中找出连续最长的数字串_牛客题霸_牛客网 (nowcoder.com)
【题目解析】
【解题思路】
#include <iostream>
#include <string>
using namespace std;
int main() {
string str;
cin >> str;
string str_ret;
string str_tmp;
for(auto ch : str)
{
if(ch <= '9' && ch >= '0')
str_tmp.push_back(ch);
else
{
if(str_tmp.size() > str_ret.size()) str_ret = str_tmp;
str_tmp.clear();
}
}
if(str_tmp.size() > str_ret.size()) str_ret = str_tmp;
cout << str_ret << endl;
}
JZ39 数组中出现次数超过一半的数字⭐
数组中出现次数超过一半的数字_牛客题霸_牛客网 (nowcoder.com)
【题目解析】
【解题思路1】
class Solution {
public:
int MoreThanHalfNum_Solution(vector<int> numbers) {
if(numbers.empty()) return 0;
sort(numbers.begin(), numbers.end());
return numbers[numbers.size() / 2];
}
};
【解题思路2】
class Solution {
public:
int MoreThanHalfNum_Solution(vector<int> numbers) {
int result = numbers[0];
int times = 1;
int i = 1;
for (int i = 1; i < numbers.size(); ++i)
{
if (times != 0)
{
if (numbers[i] == result) // 相同记录个数
++times;
else // 不同消
--times;
}
else // 前面的数全部消完,需要重新挨着再拿出一个数做标准
{
result = numbers[i];
times = 1;
}
}
return result;
}
};
/