问题

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为什么错

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值