笔试强训day2

目录

一. 单选

二. 编程

1. ACM编程题 标题:排序子序列 | 时间限制:1秒 | 内存限制:32768K

2. ACM编程题 标题:倒置字符串 | 时间限制:1秒 | 内存限制:32768K


一. 单选

1. 使用printf函数打印一个double类型的数据,要求:输出为10进制,输出左对齐30个字符,4位精度。以 下哪个选项是正确的?
A %-30.4e
B %4.30e
C %-30.4f
D %-4.30f
f 打印的是double类型    e 打印的是指数类型
%m.nf-->左对齐30个字符-->%30.nf 四位精度,即保留4位小数-->%30.4f
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* 的相对位置: const在*左边:常量指针   const在*右边:指针常量
(1)p1是常量指针
(2)p2是常量指针  指针所指向的值不能发生改变,所以(6)err
(4)p3是指针常量  指针的指向不能发生改变,所以(7)err
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的内容也会被更改
acX与acY是字符数组,定义时在栈上开辟空间,可以修改 
szX与szY是字符指针,指向同一个常量字符串,所以指向同一个地址
acX初始化为"abc \0"比acY的内存多一个'\0'
szY是指针,指针内容被修改-->指针指向发生改变,但常量字符串"abc"未发生改变,指针szY的指向没有发生改变
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
 数组名-->数组首元素地址
int *b=a; //b=1
*b+=2; //将a的首元素地址解引用并赋值为3,优先级 * > +=
*(b+2)=2; // 取数组第三个元素的地址并赋值为2
b++; // 此时b指向数组的第二个元素地址
所以 *b = 2, *(b+2) = 4// 取第四个元素的地址,并解引用
5. 下列关于C/C++的宏定义,不正确的是()
A 宏定义不检查参数正确性,会有安全隐患
B 宏定义的常量更容易理解,如果可以使用宏定义常量的话,要避免使用const常量
C 宏的嵌套定义过多会影响程序的可读性,而且很容易出错
D 相对于函数调用,宏定义可以提高程序的运行效率
 使用宏定义时要尽量使用const常量
6.有以下定义:
int a[10];
char b[80];
函数声明为:
void sss(char[],int[]);
则正确的函数调用形式是()
A sss(a,b);
B sss(char b[],int a[]);
C sss(b[],a[]);
D sss(b,a);
函数调用要与之函数定义时的数据类型一一对应
7. 用变量a给出下面的定义:一个有10个指针的数组,该指针指向一个函数,该函数有一个整形参数并返回一个整
型数()
A int *a[10];
B int (*a)[10];
C int (*a)(int);
D int (*a[10])(int);
A 是一个指针数组
B 是一个数组指针
C 是一个函数指针,有一个整形参数,其返回值也是整数
D 是数组,函数指针,函数指针数组,有一个整形参数并返回一个整形
8. 以下 C++ 函数的功能是统计给定输入中每个大写字母的出现次数(不需要检查输入合法性,所有字母都为大 写),则应在横线处填入的代码为()
void AlphabetCounting(char a[], int n) {
    int count[26] = {}, i, kind = 10;
    for (i = 0; i < n; ++i)
        _________________;
    for (i = 0; i < 26; ++i) {
    printf("%c=%d", _____, _____);
    }
}
A ++count[a[i]-'Z']
    'Z'-i
    count['Z'-i]
B ++count['A'-a[i]]
    'A'+i
    count[i]
C ++count[i]
    i
    count[i]
D ++count['Z'-a[i]]
    'Z'-i
    count[i]
大写字母A-Z的ASCII值为65~90 
如果count下标a[i]-'Z' 得负数,属于非法访问,同理,'A'-a[i]也会造成越界访问
9. 在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
: 后边的数字表示所占比特位
在32位CPU下,无符号unsigned占用四个字节
unsigned a 4个字节(32):19 + 11
unsigned b 与a同用
unsigned c 再开一个空间,4 + 29
unsigned d 与c 同用
一个字符类型占用1个字节(8)
4+4+4+1=13,内存对齐,最后为16
10. 下面代码会输出()
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
&数组名,表示取出整个数组的大小
(int*)(&a+1); 即取数组的最后一个元素的地址的后一个地址
(ptr-1) 即原来取得的地址再-1,所以最后取得的是数组最后一个元素的地址

二. 编程

1. ACM编程题 标题:排序子序列 | 时间限制:1秒 | 内存限制:32768K

​​​​​​​排序子序列_牛客笔试题_牛客网

#include
#include
using namespace std;
int main()
{
    int n=0;
    cin>>n;
    vector a ;
    a.resize(n+1);//多扩一个空间,防止越界
    for(int i=0;i>a[i];
    }
    int i=0;//记录下标,遍历数组
    int count=0;//计数器
    while(i=a[i+1])
            {
                i++;
            }
            count++;
            i++;
        }
    }
    cout<

2. ACM编程题 标题:倒置字符串 | 时间限制:1秒 | 内存限制:32768K

倒置字符串_牛客题霸_牛客网

#include 
#include
#include
using namespace std;

int main() {
    string str;
    getline(cin,str);
    //先逆置整个字符串
    reverse(str.begin(),str.end());
    auto start =str.begin();
    while(start!=str.end())
    {
        //分别逆置每个单词
        auto end=start;
        while(end!=str.end() && *end!=' ')
        {
            end++;
        }
        reverse(start,end);
        if(end!=str.end())
        {
            start=end+1;
        }
        else//遍历到字符串最后
        {
            start=end;
        }
    }
    cout<

你可能感兴趣的:(C++笔试强训,java,开发语言,c++,算法)