文章目录
- 选择题
 
选择题
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肯定错,
在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个字节。
下面代码会输出()
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到最后一个元素




![[Linux]环境变量](https://img-blog.csdnimg.cn/94dbb11cf7c642f39cd0254a90275532.png)














