嵌入式学习第十四天

1.结构体:
    1.结构体类型定义
    2.结构体变量的定义
    3.结构体元素的访问
    4.结构体的存储:
        内存对齐:
            char   按照1字节对齐
            short  按照2字节对齐
            int    按照4字节对齐
            double 按照4字节对齐

        结构体整体的大小必须为最大基本类型长度的整数倍
    5.结构体作为函数参数

变量传参嵌入式学习第十四天_第1张图片


      

指针传参

嵌入式学习第十四天_第2张图片

练习:定义一个学生的类型,封装一个函数GetStuInfo获得学生信息放入结构体中,
            再封装一个函数PutStuInfo打印学生信息
                struct student 
                {
                    char name[32];
                    char sex;
                    int age;
                    int score;
                };

嵌入式学习第十四天_第3张图片嵌入式学习第十四天_第4张图片

    6.结构体数组:
        struct student s[5];

嵌入式学习第十四天_第5张图片嵌入式学习第十四天_第6张图片

2.共用体:

    union 共用体名 
    {
        数据类型1 成员变量1;
        数据类型2 成员变量2;
        数据类型3 成员变量3;
        ...
    };

    共用体所有成员变量共享同一片空间

    内存大小端:
        1.内存小端:
            内存低地址存放低数据位
            内存高地址存放高数据位

        2.内存大端:
            内存低地址存放高数据位
            内存高地址存放低数据位

嵌入式学习第十四天_第7张图片

嵌入式学习第十四天_第8张图片

3.枚举:
    enum 枚举类型名 
    {
        枚举常量1,
        枚举常量2,
        枚举常量3,
        ..
    };

    1.枚举类型一般说明将来变量的值在给定的常量中选择其一作为它的值
    2.枚举常量的值总是前一个枚举常量的值+1,第一个默认为0值
    3.枚举常量默认为int类型,可以直接在程序中使用

嵌入式学习第十四天_第9张图片嵌入式学习第十四天_第10张图片

4.位运算运算符:
    &   按位与
    |   按位或
    ^   按位异或        相同为0 相异为1
    ~   按位取反
    >>  右移            右移n位 等价于 让该数 / 2^n 
    <<  左移            左移n位 等价于 让该数 * 2^n 

    与0得0
    或1置1

    9 & 3
    0000 0000 0000 0000 0000 0000 0000 1001 &
    0000 0000 0000 0000 0000 0000 0000 0011 
    0000 0000 0000 0000 0000 0000 0000 0001

    9 | 3
    0000 0000 0000 0000 0000 0000 0000 1001 |
    0000 0000 0000 0000 0000 0000 0000 0011 
    0000 0000 0000 0000 0000 0000 0000 1011

    9 ^ 3
    0000 0000 0000 0000 0000 0000 0000 1001 ^
    0000 0000 0000 0000 0000 0000 0000 0011 
    0000 0000 0000 0000 0000 0000 0000 1010 

    ~9
    0000 0000 0000 0000 0000 0000 0000 1001
    1111 1111 1111 1111 1111 1111 1111 0110 
     111 1111 1111 1111 1111 1111 1111 0101
     000 0000 0000 0000 0000 0000 0000 1010

    9
    00000000000000000000000000000001

    1 << 3
    00000000000000000000000000000001
    00000000000000000000000000001000

嵌入式学习第十四天_第11张图片嵌入式学习第十四天_第12张图片

    按位异或实现数据交换:
        a = a ^ b;
        b = a ^ b;
        a = a ^ b;

嵌入式学习第十四天_第13张图片

    将变量的第n位置0:
        num = num & ~(1 << n)

    将变量的第n位置1:
        num = num | (1 << n)

作业

有一个班的5个学生,有3门课程。

1、求第一门课的平均分;

2、找出有两门以上课程不及格的学生,输出他们的学号和全部课程成绩及平均分

3、找出平均分在90分以上或全部课程成绩在85分以上的学生。

分别编写三个函数来实现以上三个要求 

  1 #include                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
  2 
  3 struct student
  4 {
  5     char name[32];
  6     int num;
  7     int score[3];
  8 };
  9 
 10 int GetAveScore(struct student *ps,int len)
 11 {
 12     int i = 0;
 13     int sum = 0;
 14 
 15     for (i = 0; i < len; i++)
 16     {
 17         sum += ps->score[0];
 18 
 19         ps++;
 20     }
 21 
 22     return sum / 5;
 23 }
 24 
 25 int GtTwoScore(struct student *ps,int len)
 26 {
 27     int i = 0;
 28     int j = 0;
 29     int cnt = 0;
 30     int sum = 0;
 31 
 32     for (j = 0; j < len; j++)
 33     {
 34         for (i = 0,cnt = 0; i < 3; i++ )
 35         {
 36             if (ps[j].score[i] < 60)
 37             {
 38                 cnt++;
 39             }
 40         }
 41         
 42         if (cnt >= 2)
 43         {
 44             printf("学号:%d\n",ps[j].num);
 45             
 46             for (i = 0; i < 3; i++)
 47             {
 48                 printf("score%d = %d ",i,ps[j].score[i]);
 49 
 50                 sum += ps[j].score[i];
 51             }
 52             printf("\n");
 53             printf("平均成绩:%d\n",sum / 3);
 54 
 55             sum = 0;
 56         }
 57     }
 58 
 59     return 0;
 60 }
 61 
 62 int GetHsNum(struct student *ps,int len)
 63 {
 64     int i = 0;
 65     int j = 0;
 66     int sum = 0;
 67     int cnt = 0;
 68     for (j = 0; j < len; j++)
 69     {
 70         for (i = 0,cnt = 0; i < 3; i++)
 71         {
 72             if (ps[j].score[i] > 85)
 73             {
 74                 cnt++;
 75             }
 76 
 77             sum += ps[j].score[i];
 78         }
 79 
 80         if (cnt == 3 || (sum / 3) >90)
 81         {
 82             printf("高分姓名:%s\n",ps[j].name);
 83         }
 84         sum = 0;
 85     }
 86 
 87     return 0;
 88 }
 89 
 90 int main(void)
 91 {
 92     struct student s[5] = {
 93         {"zhang",2039930,76,56,56},
 94         {"li",23032942,98,78,87},
 95         {"wang",32004944,98,23,54},
 96         {"shao",298284824,89,87,98},
 97         {"han",399438347,76,92,33}
 98     };
 99 
100     int ret = 0;
101 
102     ret = GetAveScore(s,5);
103 
104     printf("第一门课平均分:%d\n",ret);
105 
106     GtTwoScore(s,5);
107 
108     GetHsNum(s,5);
109     return 0;
110 }

嵌入式学习第十四天_第14张图片

你可能感兴趣的:(学习,java,c语言,嵌入式硬件,vim,编辑器)