栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

牛客刷题——part2

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

牛客刷题——part2

牛客刷题

  1. 使用printf函数打印一个double类型的数据,要求:输出为10进制,输出左对齐30个字符,4位精度。以下哪个选项是正确的? (C)
    A %-30.4e
    B %4.30e
    C %-30.4f
    D %-4.30f

这里题目要是主要是该类型为一个double类型的数据,输出类型为10进制,左对齐30个字符以及控制4位精度。double类型说明类型为%f,%e为指数类型的输出。默认输出为右对齐,如果需要左对齐则需要加上负号,控制30个字节因此负号后面为30,4位精度表示.后面为4,因此选C

  1. 请找出下面程序中有哪些错误:C
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在*右边则是一个指针常量。
(6)中p2是一个常量指针,不能修改所指向的值,因此出错。
(7)中更改了p3指针,但是p3是一个指针常量,所指向不能发生变化,所以选择C

  1. 下面叙述错误的是(D)
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的内容也会被更改

其中
A:acX和acY都是字符数组,内容都是可以修改的.
B:szX,szY所指向的都是常量指针,因此指向同一个地址
C:acX和acY的区别就是初始化方式不同,acX会自带一个,因此占4个字节比acY大
D:szX内容发生改变是其指针的指向发生了改变,不会影响常量字符串的内容,因此szY所指向的内容不变,因此选D

  1. 下列代码的运行结果是(C)
int a[]={1,2,3,4};
int *b=a;
*b+=2;
*(b+2)=2;
b++;
printf(“%d,%dn”,*b,*(b+2));

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

题中,指针b指向数组a首元素,*运算符优先级高于+=,因此*b+=2中,先对b解引用,让数组a第一个值变为3。*(b+2)=2语句中先将指针b向后移动2个字节,也就是让a数组第三个元素变为2,b++就是让b指向位置向后移动1,也就是指向第二个元素位置。因此打印结果为2,4,选C

  1. 下列关于C/C++的宏定义,不正确的是(B)
    A 宏定义不检查参数正确性,会有安全隐患
    B 宏定义的常量更容易理解,如果可以使用宏定义常量的话,要避免使用const常量
    C 宏的嵌套定义过多会影响程序的可读性,而且很容易出错
    D 相对于函数调用,宏定义可以提高程序的运行效率

B:尽量使用const常量,因为宏定义没有类型安全检查,在预处理阶段进行替换,因此无法进行调试

  1. 有以下定义:
    int a[10];
    char b[80];
    函数声明为:
    void sss(char[],int[]);
    则正确的函数调用形式是(D)。
    A sss(a,b);
    B sss(char b[],int a[]);
    C sss(b[],a[]);
    D sss(b,a);

函数调用时如果参数是数组类型,传入数组名即数组地址即可。

  1. 用变量a给出下面的定义:一个有10个指针的数组,该指针指向一个函数,该函数有一个整形参数并返回一个整型数(D)
    A int *a[10];
    B int (*a)[10];
    C int (*a)(int);
    D int (*a[10])(int);

A:[]运算符优先级高于*因此a先和[]结合,所以a是一个数组,存放的是int类型的指针,指针数组
B:加了()后先和*结合,因此是一个指针,是一个数组指针
C:这是一个函数指针,有一个参数,参数类型是int。
D:这里a先和[]结合,是一个数组,再和*结合表示他数组里面存放的是指针,这个指针指向函数,因此是一个函数指针数组,并且传入参数是int类型,返回值也是int,因此选D

  1. 以下程序统计给定输入中每个大写字母的出现次数(不需要检查输入合法性,所有字母都为大写),则应在横线处填入的代码为(D)
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]

这里的代码目的是要计算每个大写字母的出现次数,使用一个26个元素的整型数组来统计次数的,数组下标是每个大写字母的ASCLL码值减去最小大写字母的ASCLL码值,因此第一个空格处应该是count[‘Z’-a[i]] ,这样减出来的值是正的,A和B都有可能会出现数组下标为负的情况。C无法起到统计次数作用。

  1. 在32位cpu上选择缺省对齐的情况下,有如下结构体定义:
struct A{
unsigned a : 19;
unsigned b : 11;
unsigned c : 4;
unsigned d : 29;
char index;
};

则sizeof(struct A)的值为(C)
A 9
B 12
C 16
D 20

这里是以位段的形式进行定义的。unsigned类型会开辟4个字节空间,位段占用数据类型,如果前一个数据空间足够的话则会和前一个放在同一4个字节中,否则会开辟一个新的空间。因此这里a和b存放在4个字节中,c占4个比特位,放不进去,需要新开4个字节空间,d也放不进c的4个字节空间中,因此也需要重新开辟4个字节空间,最后index是char类型需要开辟一个字节空间,因此一共是13.最后根据内存对齐的原则,对齐数按照最大宽度也就是4,所以最终结果为16选择C

  1. 下面代码会输出(A)
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

这里&a+1是将指针偏移整个数组大小,因此整型指针ptr指向4的后一个位置。最后ptr-1将指针向前移动一个整型的大小也就是指向4的位置,所以解引用后打印的值为4,选择A

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/887711.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号