【笔试题】【day3】
目录
第一题(Switch后面没有break的问题)
第二题 (return只能return一个数据类型)
第三题(循环)
第四题(二维变量的大小)
第五题(大小端存储(函数栈帧))
第一题(Switch后面没有break的问题)
以下程序的输出结果是()
#include <iostream>
int main()
{
int x=3,y=3;
switch(x%2)
{
case 1:
switch (y)
{
case 0:
cout<<"first";
case 1:
cout<<"second";
break;
default:
cout<<"hello";
}
case 2:
cout<<"third";
}
return 0;
}
A second third
B hello
C first second
D hellothird
这里我们的x=3,y=3,在switch判断的时候x%2也就是1,进入case 1的判断,因为switchy并没有case3,所以我们进入到default模块,也就是打印hello,而我们这里的default后面没有break,所以会往下继续执行,打印case2中的third,所以一共就是打印hellothird
D
第二题 (return只能return一个数据类型)
能把函数处理结果的二个数据返回给主调函数,在下面的方法中不正确的是()
A return这二个数
B 形参用数组
C 形参用二个指针
D 用两个全局变量
这里的return所返回的只有一个数据类型,并不能返回两个数据,除非放到数组或者容器里面返回出来
A
第三题(循环)
设变量已正确定义,以下不能统计出一行中输入字符个数(不包含回车符)的程序段是( )
A n=0;while(ch=getchar()!='\n')n++;
B n=0;while(getchar()!='\n')n++;
C for(n=0;getchar()!='\n';n++);
D n=0;for(ch=getchar();ch!='\n';n++);
A:n初始化为0,然后while循环,先getchar,获取到一个字符,然后将这个字符赋值给ch,然后再将ch和'\n'进行比较,如果不等于'\n'就继续++,是就结束循环
B:B和A的区别在条件判断部分,它是拿getchar的值直接跟'\n'进行比较的,也是可以的!
C:用for循环的初始化为n=0然后条件判断getchar获取到一个字符和'\n'进行比较,如果不等于'\n'就继续++,等于'\n'就停止
D:for循环的初始化的部分只会初始化一次,也就是只会读取第一个字符。
D
第四题(二维变量的大小)
32位系统中,定义**a[3][4],则变量占用内存空间为()。
A 4
B 48
C 192
D 12
三行四列的一个数组,数组中存放的是**,也就是指针类型,也就是12个指针类型,一个指针在32位的系统平台下所占的是4个字节,所以4×12一共是48个字节
([]的优先级高于*,所以先和[]结合,变成数组)
B
第五题(大小端存储(函数栈帧))
假设在一个 32 位 little endian 的机器上运行下面的程序,结果是多少?
#include <stdio.h>
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
什么是大小端?
大端:低位存高地址。
小端:低位存低地址
int i=1;
大端:00 00 00 01(数字1的低位)
小端:01 00 00 00(数字1的高位)
(低地址)-> (高地址)
long long类型占8个字节,我们不妨将abc三个变量的地址按照低地址到高地址写出来
a:01 00 00 00 00 00 00 00
b:02 00 00 00 00 00 00 00
c:03 00 00 00 00 00 00 00
printf在调用的时候也会创建一个函数栈帧,栈是从高地址向低地址增长的
(函数调用栈)
(低地址(栈顶))<-----------------------------------------------(高地址(栈底))
入栈的时候是从右往左入栈的。
printf("%d %d %d\n", a, b, c);
所以我们根据上面的printf中的a,b,c从右往左入栈的话就是c先入栈,再b再a
(低地址(栈顶))<-----------------------------------------------(高地址(栈底))
01 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00 03 00 00 00 00 00 00 00
然后从栈顶开始出栈,%d的话就是打印一个四字节的元素,
也就是栈顶开始的01 00 00 00
然后再是后面的 00 00 00 00
然后再打印后面的02 00 00 00
也就是输出1 0 2
B