Jeff的错题集(六):今天是不想说话的一天!

题一:
具有很多C语言的功能,又称过滤器的是?
正确答案: C 你的答案: A (错误)
Csh
tcsh
awk
sed
解答:
csh:调用 C shell。
Tcsh是csh的增强版,并且完全兼容csh。它不但具有csh的全部功能,还具有命令行编辑、拼写校正、可编程字符集、历史纪录、 作业控制 等功能,以及C语言风格的语法结构。
AWK 是一种优良的文本处理工具, Linux 及 Unix 环境中现有的功能最强大的数据处理引擎之一, AWK 提供了极其强大的功能:可以进行样式装入、 流控制 、数学 运算符 、进程 控制语句 甚至于内置的变量和函数。
SED: Stream EDitor
题二:
如果定义 : float a[10], x;
则以下叙述中正确的是()
正确答案: A 你的答案: D (错误)
语句 a = &x; 是非法的
表达式 a+1 是非法的
三个表达式 a[1]、(a+1)、&a[1]表示的意思完全不同
表达式
&a[1]是非法的,应该写成 *(&(a[1]))
解答:
数组名是数组的首地址,就是数组中第一个元素的地址,是常量。常量是不能出现在赋值号=左边作为左值的。
转义字符:" ;是 " " ",&是 “&”,<是 “<”,>是 “>”, 是 " "。

题三:
(1)静态链表既有顺序存储的优点,又有动态链表的优点。所以,它存取表中第i个元素的时间与i无关。
(2)静态链表中能容纳的元素个数的最大数在表定义时就确定了,以后不能增加.
(3)静态链表与动态链表在元素的插入、删除上类似,不需做元素的移动。
以上错误的是()
(1),(2)
(1)
(1),(2),(3)
(2)
解答:
B。
(1)错,(2)(3)对。
静态链表是用数组存储节点数据,模拟链表的实现,但是没有用到指针。每个数组节点包括两部分:data域和cursor(游标)域。data存储数据,cursor指明下个元素在数组中的下标。
(1)存取第i个元素时,需要从头遍历到i-1和元素,由第i-1个节点的cursor,才能知道第i个元素存储的位置,因此和i是相关的。
(2)使用数组对元素进行存储,在定义时大小已经确定。
(3)插入和删除操作无需移动元素,只需要修改cursor游标的值即可,就像修改动态链表中的指针一样。
题四:
#include命令的功能是()。
正确答案: C 你的答案: B (错误)
在命令处插入一个头文件
在文件首部插入一个头文件
在命令处插入一个文本文件
在文件首部插入一个程序文件
解答:
预处理器发现#include后,就会寻找指令后面<>中的文件名,并把这个文件的内容包含到当前的文件中,被包含的文件中的文本将替换源代码文件中的#include指令
题五:
下面程序运行结果为()。
void main()
{
char c=’a’;
if (‘a’ else printf(“UP”);
}
正确答案: A 你的答案: B (错误)
LOW
UP
LOWUP
程序语法错误
解答:
【解释】关系运算符具有左结合性,所以表达式(’a’ 0(假),再求0<=’z’的值,即为1(真),所以执行if后面的语句printf(“LOW”);故正确
答案为A。
题六:
int a[2][3];
int (*p)[3]=a;
int *q=*a;

则能输出a[1][2]的值的语句是( )
正确答案: A B C 你的答案: A B D (错误)
cout<<((a+1)+2);
cout< cout<<(q+5);
cout< 解答:
A选项:a是一个二维数组,a是二维数组的第一行(可以看做一维数组),所以(a+1)是这个二维数组的第二行,把它当做一维数组b,
(b+2)很好理解了吧,只要明白(a+i)等价于a[i];
B选项:p是一个指向数组的指针,调试以后是这个样子的(假设a为{{1,2,3},{4,5,6}}),我是这样理解:**p是第一行第一个数的值,p[0][0]
同样具有取到值的能力,因此可以通过p[1][2]取到目标值;
C选项:q是指向a数组的第一行的指针,
(q+5)就是取往后数第五个元素的值,即a[1][2];
D选项:VS里会报语法错误,q[1]本来就是一个常数了(即a[0][1]),对一个常数后面加 " [2] “显然不符合语法规则,改成q[5]可以;
题七:
下面哪个方法是 public void example(){…} 的重载方法? ( )
正确答案: D 你的答案: C (错误)
public void Example( int m){…}
public int example(){…}
public void example2(){…}
public int example ( int m, float f){…}
解答:
D。考察的是方法重载的定义。
方法名相同------------------排除AC选项。
方法的参数类型,参数个不一样。-----------------B选项和题目中的都没有参数,所以排除B选项。
方法的返回类型可以不相同
方法的修饰符可以不相同
题八:
union Test
{
char a[4];
short b;
};
Test test;
test.a[0]=256;
test.a[1]=255;
test.a[2]=254;
test.a[3]=253;
printf(”%d\n",test.b);
问题:在80X86架构下,输出什么值?
正确答案: B 你的答案: A (错误)
-128
-256
128
256
解答:
char为8位,赋值时直接取低8位即可。
a[0] = 0000 0000
a[1] = 1111 1111
a[2] = 1111 1110
a[3] = 1111 1101
short为16位,从a的首地址开始前16位为b。
80X86架构 小端寻址(低位低地址,高位高地址),故 b = 1111 1111 0000 0000 。
符号位为1,因此b为负数。
负数原码 = 取反(补码-1)=~( 111 1111 0000 0000 - 1 )= 000 0001 0000 0000=256。
故b=-256。
题9:
已知int占4个字节,bool占1个字节。
unsigned int
value = 1024;
bool condition =
*((bool *)(&value));
if (condition)
value += 1; condition = *((bool *)(&value));
if (condition)
value += 1; condition = ((bool )(&value));
问value, condition 的值为____。
正确答案: D 你的答案: B (错误)
1026, 1
1025, 0
1025, 1
1024, 0
解答:
bool是一个字节,&value就是获取value的地址,(bool
)(&value)就是用bool指针指向value地址,外面再套个
就是获取bool指向地址的值
1024转二进制只有第11位是1,那么低八位肯定都是0,那么bool指向的低八位肯定也是零也就是false,所有那两个condition都没有通过
题十:
下面程序的输出是:
#include
int main()
{
int i = 1;
sizeof(i++);
printf("%d\n", i);
return 0;
}
正确答案: A 你的答案: C (错误)
1
4
2
8
解答:
根据C99规范, sizeof是一个编译时刻就起效果的运算符,在其内的任何运算都没有意义,
sizeof(i++); 在编译的时候被翻译成
sizeof((i++的数据类型)) 也就是 sizeof(int); 不会执行i++了。
sizeof是运算符,它在编译时起作用,而不是运行时。
也就是说,在编译时,就得到了sizeof(int),运行时,i++根本没有执行过。

你可能感兴趣的:(ubuntu,数据结构,链表,c语言,数据结构)