1.(数据结构与链表)有以下结构体说明和变量定义,指针p、q、r依次指向一个链表中的三个连续结点。
struct node
{
int data
struct node *next ;
} *p, *q, *r;
现要将q和r所指结点的先后位置交换,同时要保持链表的连续,以下错误的程序段是
A.r->next=q; q->next=r->next; p->next=r;
B.p->next=r; q->next=r->next; r->next=q;
C.q->next=r->next; r->next=q; p->next=r;
D.q->next=r->next; p->next=r; r->next=q;
正确答案:A
解析:
- p->next=q->next:意思是让p节点指向q节点的下一个数据
- q->next=p:就是将q的下一个节点变为p,就相当于在q节点后面加上p节点。
- p=q->next:将q的下一个节点的值赋给p
A选项:第一句后q在第四个位置,第二句q的下个位置填r的下一个位置的值,即q,显然不对
B选项:第二个位置填r;q的下个位置指向r的下个位置即第三位;在r后面填q,即q现在在第三位,所以为pqr
C选项:q的下一位指向r的下一位即第四位;第四位填上q;第二位填上r
D选项:q的下一位指向r的下一位即第四位;第二位填r;第三位填q
C选项有点不理解
2.(文件)有以下程序
void WriteStr(char *fn,char *str)
{
FILE *fp;
fp=fopen(fn,"w");
fprintf(fp, "%s", str);
fclose(fp);
}
int main()
{
WriteStr("t1.dat","start");
WriteStr("t1.dat","end");
return 0;
}
程序运行后,文件t1.dat中的内容是
A.start
B.startend
C.endrt
D.end
正确答案:D
3.(struct)若有定义
struct {
int k;
char s[30];
} a[5] = {1, "ABC", 2, "abc"}, *p = a;
那么表达式*(p++)->s的值是_______.
A.“abc”
B.‘B’
C.“ABC”
D.‘A’
正确答案:D
4.有以下代码片段:
struct {
union {
char a,b;
int c;
} d;
int e[5];
} f, *p = &f;
那么,下列语句哪个是能被编译的:
A.p->b = ’ ';
B.p->d->c = 20;
C.p->e[3] = 10;
D.p.d.a = ‘*’;
正确答案:C
知道C是正确的,不知道ABD为什么错