C++刷题--选择题1

选择题

1, 以下for循环的执行次数是()

for(int x = 0, y = 0; (y = 123) && (x < 4); x++);

A 是无限循环
B 循环次数不定
C 4次
D 3次

解析 : C,for循环y = 123 是赋值语句, 也就是一直为真, 只用关心x,x < 4 x = 0, 1, 2,3 循环4次。


2,
以下程序的运行结果是()

#include <stdio.h>
int main(void) 
{
	printf("%s , %5.3s\n", "computer", "computer");
	return 0;
}

A computer , puter
B computer , com
C computer , computer
D computer , compu.ter

解析 : B, %5.3s, 先取出5个字符, 然后再从5个字符里面拿出3个字符出来
在这里插入图片描述


3,

int func()
{
	int i, j, k = 0;
	for(i = 0, j = -1;j = 0;i++, j++)
	{
		k++;
	} 
	return k;
} 

int main()
{
   cout << (func());
   return 0;
}

A -1
B 0
C 1
D 2
解析 : for循环要先判断!! , j = 0是赋值语句, 直接为假, for循环不执行


4,下面程序输出什么?

#include <stdio.h>
int main()
{
	int a=1,b=2,c=3,d=0;
	if(a == 1 && b++==2)    //为真 a = 1 , b = 3
		if(b!=2||c--!=3)    // b != 2为真, 后面的 c--!=3就不执行了,所有结果为  1, 3 , 3
		    printf("%d,%d,%d\n" ,a,b,c);   
		else
		    printf("%d,%d,%d\n" ,a,b,c);
	else
		printf("%d,%d,%d\n" ,a,b,c);
		     
	return 0;
}

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

解析 : D, 见注释, 强调 1 , || 和 && 会中断 2, if else 与最近的匹配


5,若有定义语句: int a=10 ; double b=3.14 ; 则表达式 ‘A’+a+b 值的类型是()

A char
B int
C double
D float

解析 : C, 低字节类型向高字节类型发生提升, 这样才可以进行计算


6,

int p[][4] = {{1}, {3, 2}, {4, 5, 6}, {0}};

求 p[1][2]的值
A 1
B 0
C 6
D 2

解析 : B, p[1][2] 求的是1行2列的值, 数组的下标是从0开始的。题目的一维数组都是不完全初始化,默认缺少的值为0


7,选择表达式 11|10 的结果(本题数值均为十进制)()
A 11
B 10
C 8
D 2

解析 : A ,这是按位或,依赖的是比特位 11 | 10 ------> 1011 | 1010 = 1011 (11), || 这个是逻辑或,返回值为bool值


8,

int fun(int a)
{
	a ^= (1<<5)-1;
	return a;
}

fun(21)运行结果是()

解析 : 10, 牢记一点 ^= , |= , += , -=,涉及赋值运算符的优先级都是相当低的。 先算括号里面的然后-1 结果 : 11111
然后按位异或21(10101) 按位异或后 ----> 1010 结果为10


9,若有定义语句:int year=1009,*p=&year;以下不能使变量 year 中的值增至 1010 的语句是()
A *p+=1;
B (*p)++;
C ++(*p)
D *p++

结果 : D。 D选项中的后置++作用的其实是指针p, 相当于是 p = p + 1; 向后偏移了4个字节, 而非指向的内容 + 1


10,下面关于指针描述不正确的是 :
A 当使用free释放掉一个指针内容后,指针变量的值被置为NULL
B 32位系统下任何类型指针的长度都是4个字节
C 指针的数据类型声明的是指针实际指向内容的数据类型
D 野指针是指向未分配或者已经释放的内存地址

解析 : A ,需要手动置为NULL


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

解析 : C, 左对齐是负号, 右对齐是正号, 控制精度是 .xf (控制在x位精度)


12, 请找出下面程序中有哪些错误()

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

解析 : C, const放在 ’ * ’ 的前面, 修饰的是 ‘ *p ’ , p指向的内容不能改变, 放在 ‘ * ’的后面,修饰的是p, p不能改变指向
扩展: 关于引用, 权限只能缩小, 不能扩大。


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

解析 : D char* 实质上是 const char* , 因为是常量字符串,C++11已经规定写之前必须加const了, 不然会报错。也就是不能修改。


14,在头文件及上下文均正常的情况下,下列代码的运行结果是()

	int a[] = {1, 2, 3, 4};
	int *b = a;
	*b += 2;   // a[0] = 3;
	*(b + 2) = 2;   // a[2] = 2;
	b++;  // b = a + 1;
	printf("%d,%d\n", *b, *(b + 2));  // a[1]   a[3]

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

解析 : C ,看注释


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

解析: B A,C,D都正确, B的更容易理解? 避免使用const有点错误, const和宏定义一样,其实差别不大。


16,有以下定义:
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);

解析 : D, 解析 函数声明的那一部分, 实质上就是传数组起始元素的地址, 也就是数组名


17.,用变量a给出下面的定义:一个有10个指针的数组,该指针指向一个函数,该函数有一个整形参数并返回一个整
型数()

A int *a[10];
B int (*a)[10];
C int (*a)(int);
D int (*a[10])(int);

解析: D 牢记 : [ ]的优先级大于 * , 所以排除B,C, 然后的话指向函数,A无返回值,排除。


18,
以下 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 c
ount[i]

D
++count[‘Z’-a[i]]
‘Z’-i
count[i]

解析 : D ’Z‘ 字符是最大的, ’A‘字符是最小的,A,B均会出现越界的问题, C肯定错,


19,在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

解析 : C , unsigned默认是无符号数, 是4个字节。 也就是32个bit位, a + b公用一个, c 用一个, d用一个, char是一个字节 , 也就是4 + 4 + 4 + 1 = 13个字节,对齐到4个字节, 也就是16个字节。


20,
下面代码会输出()

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 直接跳过整个数组, -1到最后一个元素

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

通过全部用例

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值