学习日志以及个人总结(15)

用变量a给出指针相关定义

一道典型题目

结构体

结构体 struct 

描述一些 原先 基本数据类型不好描述的 这种复杂数据类型 
比如 struct 汽车 
{
   //1.姓名   //chat name[20] 
   //2.班级   //int classNo
   //3.性别   //char sex; //f m 
   //4.成绩   //float score;
   //5.年龄   //int age;
}

语法:
struct 结构体类型名
{
   数据成员列表;
};
//定义了一个 "数据类型"  --- 用户自定义的数据类型 
 

注意:
1.结构体 --- 用来实现 自定义数据类型 
2.用结构体 
  a.先构造出 数据类型 
  b.用数据类型 定义变量 
               数组
               指针 
               

访问结构体:
  . //结构体成员运算符 
  
 结构体变量名.成员变量名  
 
 s.name //   . 的

学生与老师

//定义结构体类型 
//定义变量 
结构体变量初始化 
结构体变量赋值 --结构体不能整体 赋值  {"tom",20,89.5,100}; 

struct student s;
s = {"tom",20,89.5,100}; //

int a = 10; //初始化 
int a;    //赋值 
a = 10;


-> //用于结构体类型的指针变量的 
   //结构体访问成员的方式2 
   //
struct student *s = &s1;
s->name 


结构体类型的变量.成员变量名 
结构体类型的指针->成员变量名

  1 #include<stdio.h>
  2 
  3 struct teacher
  4 {
  5     char name[20];
  6     int num;
  7     int salary;
  8 };
  9 
 10 int main(void)
 11 {
 12     struct teacher o ={"bigfly",7,7000};
 13 
 14     printf("name = %s\n",o.name);
 15     printf("num = %d\n",o.num);
 16     printf("salary = %d\n",o.salary);
 17 
 18     printf("--%7s-|--%7s-|--%7s--\n","name","num","salary");
 19     printf("--%7s-|--%7d-|--%7d--\n",o.name,o.num,o.salary);                                    
 20 
 21     return 0;
 22 
 23 }
~                                                                                                   
~                                                                                                   
~                

结构体对齐原则

结构体构建学生系统

1 #include<stdio.h>                                                                                                                                                                                       
  2 #include<stdlib.h>
  3 #include<string.h>
  4 
  5 struct student
  6 {
  7     char name[20];
  8     int sno;
  9     float score;
 10 };
 11 
 12 void inputSinfo(struct student *p,int len)
 13 {
 14     for (int i = 0; i < len; i++)
 15     {
 16         printf("name:\n");
 17         scanf("%s",(p+i)->name);
 18         printf("sno:\n");
 19         scanf("%d",&(p+i)->sno);
 20         printf("score:\n");
 21         scanf("%f",&(p+i)->score);
 22     }
 23 
 24 }
 25 
 26 void outSinfo(struct student *p,int len)
 27 {
 28     printf("--%7s-|--%7s-|--%7s--\n","name","sno","score");
 29     for (int i = 0; i <len ; i++)
 30     {
 31         printf("%7s",p->name);
 32         printf("   %7d",p->sno);
 33         printf("     %7.2f\n",p->score);
 34         p++;
 35     }
 36 }
 37 void max(struct student *p,int len)
 38 {
 39     float max = p->score;
 40     int i=0;int j =0;
 41     for (i = 0; i < len; i++)
 42     {
 43         if ((p+i)->score>max)
 44         {
 45             max = p->score;
 46             j=i;                                                                                                                                                                                        
 47         }
 48     }
 49     printf("max:%s sno(%d) score(%.2f)\n",p->name,p->sno,p->score);
 50 }
 51 int compareScore(const void *a,const void *b)
 52 {
 53     const struct student *p1 =a;
 54     const struct student *p2 =b;
 55     return p1->score - p2->score;
 56 }
 57 int compareName(const void *a,const void *b)
 58 {
 59     const struct student *p1 =a;
 60     const struct student *p2 =b;
 61     return p1->name - p2->name;
 62 }
 63 int compareSno(const void *a,const void *b)
 64 {
 65     const struct student *p1 =a;
 66     const struct student *p2 =b;
 67     return p1->sno - p2->sno;
 68 }
 69 
 70 int printMenu(void)
 71 {
 72     printf("|-student information-|\n");
 73     printf("1 选择输入的学生人数\n");
 74     printf("2 输入信息\n");
 75     printf("3 查看学生信息\n");
 76     printf("4 查看成绩最高的的学生信息\n");
 77     printf("5 按成绩进行排序\n");
 78     printf("6 按学号进行排序\n");
 79     printf("7 按姓名进行排序\n");
 80     printf("0 退出\n");
 81     printf(">");
 82 }
 83 int main(void)
 84 {
 85     int n;
 86     int len = 0;                                                                                                                                                                                        
 87     struct student *s;
 88 
 89     while (1)
 90     {
 91         printMenu();
 92         scanf("%d",&n);
 93         switch(n)
 94         {
 95         case 0:
 96               printf("exit----\n");
 97               return 0;
 98         case 1:
 99             printf(">");
100             scanf("%d",&len);
101             s = malloc(len*sizeof(struct student));
102             break;
103         case 2:
104             inputSinfo(s,len);
105             break;
106         case 3:
107             outSinfo(s,len);
108             break;
109         case 4:
110             max(s,len);
111             break;
112         case 5:
113             outSinfo(s,len);
114             qsort(s,len,sizeof(struct student),compareScore);
115             outSinfo(s,len);
116             break;
117         case 6:
118             outSinfo(s,len);
119             qsort(s,len,sizeof(struct student),compareSno);
120             outSinfo(s,len);
121             break;
122         case 7:
123             outSinfo(s,len);
124             qsort(s,len,sizeof(struct student),compareName);
125             outSinfo(s,len);
126             break;
127         }
128     }
129     
130     return 0;
131 }

  • 13
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值