以下for循环的执行次数是()
for(int x = 0, y = 0; (y = 123) && (x < 4); x++);
A. 是无限循环
B. 循环次数不定
C. 4次 √
D. 3次
&&:
左边为真,继续判断右边,都为真,整体为真
左边为假,整体为假,不再往右走
下列main()函数执行后的结果为()
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
判断条件是赋值时,可以理解成,此时的 bool 值就是赋给常量的值,0 为假,非 0 为真。
以下 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]
#include
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
使用printf函数打印一个double类型的数据,要求:输出为10进制,输出左对齐30个字符,4位精度。以下哪个选项是正确的?
A %-30.4e
B %4.30e
C %-30.4f √
D %-4.30f
以下程序的输出结果是()
#include
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);
}A 6
B 6789 √
C ‘6’
D 789
执行下面语句后的输出为
int I=1;
if(I<=0)
printf(“****\n”) ;
else
printf(“%%%%\n”);A %% √
B ****
C 有语法错,不能正确执行
D %%%%
有以下程序
#include
#include
using namespace std;
int main(){
int m=0123, n=123;
printf(“%o %o\n”, m, n);
return 0;
}程序运行后的输出结果是()
A 0123 0173
B 0123 173
C 123 173 √
D 173 173
int Octal = 0144;
int Decimal = 100;
int Hexadecimal = 0x64;
o%
d%
h%
若有定义语句: int a=10 ; double b=3.14 ; 则表达式 ‘A’+a+b 值的类型是()
A. char
B. int
C. double √
D. float
C 规定表达式中基本类型运算时,将“短类型”变量自动提升为 “最长类型” 参与运算,结果也是此“最长类型”。
假设在一个 32 位 little endian 的机器上运行下面的程序,结果是多少?
#include
int main(){
long long a = 1, b = 2, c = 3;
printf(“%d %d %d\n”, a, b, c);
return 0;
}A. 1,2,3
B. 1,0,2 √
C. 1,3,2
D. 3,2,1
数组名 通常是 首元素地址 有两个例外
· sizeof(数组名)
· &数组名
此时数组名代表整个数组
[ ] 比 * 的优先级高,判断类型的时候,注意步骤分析
指针 - 指针,得到的结果的绝对值,是 两个指针之间的元素的个数
注意:不是所有的指针都能相减,指向同一块空间的2个指针才能相减,才有意义
标准规定:允许指向数组元素的指针与指向数组最后一个元素后面的那个内存位置的指针比较。但是不允许指针指向第一个元素之前的那个位置的指针进行比较。
数组下标的本质:arr[i] -> *(arr + i)
用变量a给出下面的定义:一个有10个指针的数组,该指针指向一个函数,该函数有一个整形参数并返回一个整型数()
A int *a[10];
B int (*a)[10];
C int (*a)(int);
D int (*a[10])(int); √
D. a 首先与 [10] 结合,是个数组,再往前看,数组里面放的是指针,每个指针指向的都是一个返回值为 int ,参数为 int 的函数
int *p[4] 与选择项中的() 等价
A. int p[4]
B. int *p
C. int *(p[4]) √
D. int (*p)[4]
指针数组:是个数组,这个指针,指向一个数组
数组指针:是个指针,指针里面存的每个元素是一个数组
总之:看变量名先跟什么结合,后面直接接[]就是一个数组;后面没有反倒是前面有一个*,就是指针。
32位系统中,定义**a[3][4],则变量占用内存空间为()。
A. 4
B. 48 √
C. 192
D. 12
. 数组定义为”int a[4][5];”, 引用”*(a+1)+2″表示()(从第0行开始)
A a[1][0]+2
B a数组第1行第2列元素的地址 √
C a[0][1]+2
D a数组第1行第2列元素的值
分析 *(a+1)+2:
a 是二维数组的数组名,即二维数组第 0 行的数组的地址;
+1 跳过的步长就是指针类型的大小,即跳过第 0 行,a+1 便是二维数组第 1 行的地址;
*(a+1) 是对第 1 行的地址解引用,拿到的是第 1 行首元素的地址;
+2 跳过两个元素地址,此时指针指向第 1 行,第 2 列元素的地址。
下面叙述错误的是()
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. 因为 “abc” 是常量字符串,根据其写时复制机制,szX 和 szY 所指内容是一样的,没必要分配两个空间。只有当我们要修改其中一个时,系统才为我们复制一份,此时一个指针会指向新拷贝的那一份,这样对一个的修改就不会影响到另一个实体。
C. 因为acX是字符串数组,字符串的尾部有一个结束符 ‘\0’,所以 acX 有四个元素,内存空间比 acY 大。
D. 字符指针指向的是常量字符串,常量字符串不能修改
定义char dog[]=“wang\0miao”;那么sizeof(dog)与strlen(dog)分别是多少()
A. 10,4 √
B. 4,4
C. 9,9
D. 9,4
下列程序的打印结果是()
char p1[15] = “abcd”, *p2 = “ABCD”, str[50] = “xyz”;
strcpy(str + 2, strcat(p1 + 2, p2 + 1));
printf(“%s”, str);A. xyabcAB
B. abcABz
C. ABabcz
D. xycdBCD √
char * strcpy ( char * destination, const char * source );
char * strcat ( char * destination, const char * source );
在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
下面两个结构体
在#pragma pack(4)和#pragma pack(8)的情况下,结构体的大小分别是()struct One{
double d;
char c;
int i;
}
struct Two{
char c;
double d;
int i;
}A. 16 24,16 24
B. 16 20,16 20
C. 16 16,16 24 √
D. 16 16,24 24
分析:
#pragma pack(4)
struct One {
double d; // min(8,4)--> 4 --> 0~7
char c; // min(1,4)--> 1 --> 8
int i; // min(4,4)--> 4 --> 9~12(至此占了13字节)
}; // max(4,1,4)--> 最后的结果为4的倍数:16
struct Two {
char c; // min(1,4)--> 1 --> 0
double d; // min(8,4)--> 4 --> 4~11
int i; // min(4,4)--> 4 --> 12~15(至此占了16字节)
}; // max(1,4,4)--> 最后的结果为4的倍数:16
#pragma pack(8)
struct One {
double d; // min(8,8)--> 4 --> 0~7
char c; // min(1,8)--> 1 --> 8
int i; // min(4,8)--> 4 --> 9~12(至此占了13字节)
}; // max(4,1,4)--> 最后的结果为 8 的倍数:16
struct Two {
char c; // min(1,8)--> 1 --> 0
double d; // min(8,8)--> 8 --> 8~15
int i; // min(4,8)--> 4 --> 16~19(至此占了20字节)
}; // max(1,8,4)--> 最后的结果为 8 的倍数:24
下列关于C/C++的宏定义,不正确的是()
A 宏定义不检查参数正确性,会有安全隐患
B 宏定义的常量更容易理解,如果可以使用宏定义常量的话,要避免使用const常量 ×
C 宏的嵌套定义过多会影响程序的可读性,而且很容易出错
D 相对于函数调用,宏定义可以提高程序的运行效率
由多个源文件组成的C程序,经过编辑、预处理、编译、链接等阶段会生成最终的可执行程序。下面哪个阶段可以发现被调用的函数未定义()
A. 预处理
B. 编译
C. 链接 √
D. 执行