BUAA数据结构与程序设计选填题摘录(1-3)

主要来整理一下作业里面的题目:

  • 首先一个优先级关系:在C语言中,初等量运算符(),[ ] ,. , -> 优先级高于单目运算符*,++,–

我们在此基础上先记住一些简单的关系:

struct {
int x;
int* y;
}*p;
下面表达式的含义为:

在这里插入图片描述基础为钢!下面我们开始谱写华章(不卸原神)!

一、

在这里插入图片描述我们把这个结构体变得明显一点:
在这里插入图片描述
pt = c , 即pt指向数组c的首元素地址,也就是指向红色括号结构体的地址,a和b都是指针,指向各自数组的首元素地址,即1和3的地址。

  • A选项,先取元素y,再取y指向的元素,元素y为a,a指向的元素为1,因此A选线值为1;
  • B选项,很简单,pt的x就是红色括号结构体的成员x,也就是10;
  • C选项,先取p的成员x,再对成员x自增,即x自增后为11;
  • D选项,先取p的成员x,再对指针pt自增,那么表达式值仍为x的值,也就是与B选项一样是10;

二、

#include<stdio.h>

struct stu{

int num;

float TotalScore;

};

void f(struct stu p)

{

struct stu s[2]={{20044,550},{20045,537}};

p.num=s[1].num;

p.TotalScore=s[1].TotalScore;

}

int main()

{

struct stu s[2]={{20041,703},{20042,580}};

f(s[0]);

printf("%d %3.0f\n",s[0].num,s[0].TotalScore);

return 0;

}

程序运行后的输出结果是: 【 正确答案: D】
(A) 20045 537
(B) 20044 550
© 20042 580
(D) 20041 703

将s[0]传入函数 f ,那么结构体s[0]只是把值传过去了,但是函数内部对这个结构体不能做出任何修改
因此,函数运行结束后,s[0]里头的值该是多少还是多少。

三、

在这里插入图片描述
s指向结构体数组的首元素地址,也就是指向{101,&a}这个结构体

  • A,先取p的元素m,p再自增,则表达式值为一个地址。
  • B,先取p的元素m,再取m的元素,p再自增,则表达式的值为1
  • C,先对p解引用得到结构体{101,&a},再取这个结构体的元素m,得到的还是个地址
  • D,p先自增,则p此时指向结构体{102,&b},再取这个结构体的成员m,即&b,再对&b解引用得到2

四、

在这里插入图片描述
C,结构类型应该是struct strutype,var是结构变量名

在这里插入图片描述
node不是结构类型,struct node才是结构类型
在这里插入图片描述
这个题就不解释了,把几种正确的方法杂糅在一起就不对了

五、

在这里插入图片描述
这个题真很坑。。。。不仔细看稍微扫一年就觉得对啊对啊换的很成功(比如我。。。)
但是这个swap函数里,你仔细看,相当于交换了a和b的指针,进一步讲,是改变了a和b的指针,
那你要改变指针,是不是得传指针的指针啊?
在这里插入图片描述

注意:

如果这里打印的是a和b,那么结果仍然是0 1,因为,swap函数是交换了pa和pb的指向,但是ab的位置是没变得,所以如果要访问交换后的,那就得通过交换后的指针来访问。

六、

在这里插入图片描述
p指向数组a的第三个元素,也就是3。

  • 第一条printf,先访问指针p指向的元素3,然后元素自增,得到4
  • 第二条,p先自减,指向a[1],再访问,得到2。

七、

在这里插入图片描述p指向结构体数组tab的首元素,也就是结构体{1,“ab”};
p先自增,再取p中成员y,也就是“cd”,注意到打印格式为“%c”,因此输出c(一定要记得看输出类型哦~不要倒在最后一步!)

八、

在这里插入图片描述泪目本来自己写对了的但是检查的时候问了gpt改错了wuwuwuuw
#语句的执行次数不代表这个语句为真,也就是说就算i<=j,if(i<=j)这条语句还会执行比较工作!其次,考试的时候这种题写上前3-4个发现规律就知道是多少了
我们这里简单模拟一下:

  • i=1,j=0,
    i+j=1<=n,
    i=1>j=0,(1次)
    j++,j=1
  • i=1,j=1,
    i+j=2<=n,
    i=1!>j=1,(2次)
    i++,i=2;
  • i=2,j=1,
    i+j=3<=n,
    i=2>j=1(3次)
    j++,j=2;
  • i=2,j=2,
    i+j=4<=n,
    i=2!>j=2(4次)
    i++,i=3
    ……
    现在,如果n=4,那么就相当于上面四步都走完了,但一步循环i+j=5,跳出while循环,即if语句执行4次,依次类推1-3,4+次的情况,得到#语句执行n次。

期中考试就先考到前3次作业,后面几次的小题等到期末再整理吧!一会儿再整理一下大题的思路~

最近更新

  1. TCP协议是安全的吗?

    2024-05-15 16:14:14       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-15 16:14:14       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-15 16:14:14       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-15 16:14:14       20 阅读

热门阅读

  1. vue从入门到精通(一):Vue模板语法

    2024-05-15 16:14:14       9 阅读
  2. 前端内嵌iframe网页单点登录的三种方式

    2024-05-15 16:14:14       13 阅读
  3. 32-Openwrt nand flash坏块管理nmbm功能支持

    2024-05-15 16:14:14       11 阅读
  4. 【数据结构与算法】力扣 49. 字母异位词分组

    2024-05-15 16:14:14       11 阅读
  5. 大数据面试 --- 六

    2024-05-15 16:14:14       11 阅读
  6. R语言数据分析案例分析一个关于房价的数据集

    2024-05-15 16:14:14       11 阅读
  7. 平衡车电池UL2271认证是什么?

    2024-05-15 16:14:14       10 阅读
  8. Symbol类型的作用

    2024-05-15 16:14:14       11 阅读
  9. [前端] vue2的/deep/转化为vue3语法(笔记)

    2024-05-15 16:14:14       12 阅读