结构的学习

一、视频学习

1.观看视频:3.2.1结构类型、3.2.2结构与函数、3.2.3 结构中的结构

2.C语言代码

①视频代码列表

 ②书本9.1输出平均分最高的学生信息代码

 

 ③书本9.2学生成绩排序代码

 

 ④书本9.3修改学生成绩代码

 

 3.手写笔记

 

 

 

 

 

 

 

 4.遇到的问题

问题:%i的含义

    结果:在 printf 格式串中使用时,没有区别。在 scanf 格式串中使用时%d 只与十进制形式的整数相匹配。而%i 则可以匹配八进制、十进制、十六进制表示的整数。例如: 如果输入的数字有前缀 0(018、025),%i将会把它当作八进制数来处理,如果有前缀0x (0x54),它将以十六进制来处理。

问题:视频中结构中的结构数组代码,不清楚结构体变量和结构体数组直接的关系

               #include<stdio.h>
               struct point {
               int x;
               int y;
                };
               struct rectangle {
               struct point p1;
               struct point p2;
                };
                void printrect(struct rectangle r) {
                printf("<%d,%d>to<%d,%d>\n",r.p1.x,r.p1.y,r.p2.x,r.p2.y);
                }
                int main(int argc,char const *argv[]) {
                int i;
                struct rectangle rects[]= {{{1,2},{3,4}},{{5,6},{7,8}}};
                for(i=0;i<2;i++)printrect(rects[i]);
                 }

结果:编译运行后发现{1,2}为rects[0](结构数组)中p1(结构)的x、y成员,{3,4}为rects[0](结构数组)中p2(结构)的x、y成员,同理{5,6},{7,8}分别是rects[1](结构数组)中p1(结构)的x、y成员和rects[1](结构数组)中p2(结构)的x、y成员。故结构体变量可以作为结构体数组的元素。

二、PTA中遇到的问题

1、问题:PTA2-1对于以下结构定义:struct { int len; char *str;}*p;++p->str中的++加在________
                  A指针str上   B. 指针p上   C. str所指的内容上   D.以上均不是

      结果:->的优先级比++ 所以++p->str结果就是 (p->str)=(p->str)+1

      可能答案:A

2、问题:PTA2-3有如下定义

               struct student{
               char name[10];
               int age;
               char gender;
               }std[3], *p=std;
              则以下各输入语句中错误的是:
             A.scanf("%d" ,&(*p) .age );
            B.scanf("%c" ,&std[0] .gender);
            C.scanf("%c" ,&(p->gender));
            D.scanf("%s" ,&std.name);

结果:选项A中“&(*p).age”代表的是std[0]age的地址,是正确的,选项B也是正确的,选项C先用指针变量引用结构型的成员name,然后取它的地址,也是正确的,选项D中的“std.name"是错误的引用,因为std是数组名,代表的是数组的首地址,地址没有成员“name”。

可能答案:D

 3、特别注意点:结构数组不同于一般数组,相同类型的结构数组间可以相互赋值。

posted @ 2020-03-29 20:10  板蓝根拌饭  阅读(385)  评论(1编辑  收藏  举报