码迷,mamicode.com
首页 > 其他好文 > 详细

29._结构体

时间:2015-04-27 00:03:20      阅读:226      评论:0      收藏:0      [点我收藏+]

标签:

结构体
     为什么需要结构体
          为了表示一些复杂的事物,而普通的的基本
          类型无法满足实际要求

     什么叫结构体
          把一些基本数据类型组合在一起形成的一个
          新的复合数据类型,这个叫做结构体

     如何定义结构体
          三种方式,推荐使用第一种

技术分享
 1 /*
 2     2015年04月26日 14:21:45
 3     目的:
 4         结构体的定义
 5 */
 6 
 7 # include <stdio.h>
 8 
 9 //第一种方式
10 struct Student1
11 {
12     int age;
13     float score;
14     char sex;
15 }; //分号不能省
16 
17 //第二种方式
18 struct Student2
19 {
20     int age;
21     float score;
22     char sex;
23 }st2;
24 
25 //第三种方式
26 struct 
27 {
28     int age;
29     float score;
30     char sex;
31 }st3;
32 
33 int main(void)
34 {
35 
36     return 0;
37 }
38 
39 /*
40     在VC6.0中运行结果是:
41 -----------------------------
42 
43 -----------------------------
44     总结:
45 
46 
47 */
View Code

 

 

     怎么使用结构体变量
          赋值和初始化

技术分享
 1 /*
 2     2015年04月26日 14:36:03
 3     目的:
 4         结构体的赋值和初始化
 5 */
 6 
 7 # include <stdio.h>
 8 
 9 struct Student
10 {
11     int age;
12     float score;
13     char sex;
14 };
15 
16 int main(void)
17 {
18     struct Student st1 = {80, 66.6, F}; //定义的同时初始化
19     struct Student st2; //先定义后初始化
20     st2.age = 10;
21     st2.score = 88;
22     st2.sex = F;
23 
24     printf("%d %f %c\n", st1.age, st1.score, st1.sex);
25     printf("%d %f %c\n", st2.age, st2.score, st2.sex);
26 
27     return 0;
28 }
29 
30 /*
31     在VC6.0中运行结果是:
32 -----------------------------
33 80 66.599998 F
34 10 88.000000 F
35 -----------------------------
36     总结:
37 
38 
39 */
View Code

 

 

    如何操作结构体变量中的成员
           1. 结构体变量名.成员名
           2. 指针变量名->成员名

技术分享
 1 /*
 2     2015年04月26日 14:51:39
 3     目的:
 4         如何操作结构体变量中的成员
 5 */
 6 
 7 # include <stdio.h>
 8 
 9 struct Student
10 {
11     int age;
12     float score;
13     char sex;
14 };
15 
16 int main(void)
17 {
18     struct Student st = {80, 66.6F, F};
19     struct Student * pst = &st;
20 
21     st.age = 22; //结构体变量名.成员名
22     pst->score = 99.9F; 
23     /*指针变量名->成员名,这种格式较为常用
24     pst->age 在计算机内部会被转换成 (*pst).age 也等价于 st.age
25     99.9在C语言中默认是double类型,如果希望一个实数是float类型
26     必须在末尾加f或F,故99.9是double,99.9f或99.9F是float
27     */
28 
29     printf("%d\n%f\n", st.age, pst->score);    
30 
31     return 0;
32 }
33 
34 /*
35     在VC6.0中运行结果是:
36 -----------------------------
37 22
38 99.900002
39 -----------------------------
40     总结:
41 
42 
43 */
View Code

 

 

     结构体变量和结构体变量指针作为函数参数传递的问题

技术分享
 1 /*
 2     2015年04月26日 16:02:47
 3     目的:
 4         结构体变量和结构体变量指针作为函数参数传递
 5 */
 6 
 7 # include <stdio.h>
 8 # include <string.h> 
 9 void InputStudent(struct Student *);
10 void OutputStudent(struct Student *);
11 
12 struct Student
13 {
14     int age;
15     char sex;
16 }; //分号不能省
17 
18 int main(void)
19 {
20     struct Student st;
21 
22     InputStudent(&st); //对结构体变量输入,必须发送st的地址
23     //OutputStudent(st); //对结构体变量输出,可以直接发送st的内容
24     OutputStudent(&st); //也可以发送st的地址
25     return 0;
26 }
27 
28 void InputStudent(struct Student * pStu) //pStu只占4个字节
29 {
30     (*pStu).age = 10;
31     pStu->sex = F;
32 }
33 
34 void OutputStudent(struct Student *pSt)
35 {
36     printf("%d %c \n", pSt->age, pSt->sex);
37 }
38 
39 /*
40 void OutputStudent(struct Student ss)
41 {
42     printf("%d %c \n", ss.age, ss.sex);
43 }
44 */
45 
46 
47 
48 /*
49     在VC6.0中运行结果是:
50 -----------------------------
51 10 F
52 -----------------------------
53     总结:涉及到对内容的更改,必须发送地址
54           如果只是访问,可以发送内容也可以发送地址
55           推荐发送地址,因为
56                 指针的优点:
57                     快速的传递数据
58                     耗用内存小
59                     执行速度快
60                 
61 
62 
63 */
View Code

 

 

      结构体变量的运算
           结构体变量不能相加、减、乘和除
           但可以相互赋值
           例如:
              st1 = st2;

      冒泡排序:

技术分享
 1 /*
 2     2015年04月26日 16:30:30
 3     目的:
 4         冒泡排序
 5 */
 6 
 7 # include <stdio.h>
 8 
 9 //冒泡排序
10 void sort(int * a, int len)
11 {
12     int i, j, t;
13 
14     for (i=0; i<len-1; ++i)
15     {
16         for (j=0; j<len-1-i; ++j)
17         {
18             if (a[j] > a[j+1]) // >升序,<降序
19             {
20                 t = a[j];
21                 a[j] = a[j+1];
22                 a[j+1] = t;
23             }
24         }
25     }
26 }
27 
28 int main(void)
29 {
30     int a[6] = {10, 2, 8, -8, 11, 0};
31     int i;
32 
33     sort(a, 6);
34 
35     for (i=0; i<6; ++i)
36     {
37         printf("%d ", a[i]);
38     }
39 
40     printf("\n");
41 
42     return 0;
43 }
44 
45 /*
46     在VC6.0中运行结果是:
47 -----------------------------
48 -8 0 2 8 10 11
49 -----------------------------
50     总结:
51 
52 */
View Code

 

 

 

      举例
         动态构造存放学生信息的结构体数组

技术分享
  1 /*
  2     2015年04月26日 17:20:47
  3     目的:
  4         学生管理系统
  5         动态构造一个数组,存放学生的信息
  6                 然后按分数排序输出(降序)
  7 */
  8 
  9 # include <stdio.h>
 10 # include <malloc.h>
 11 
 12 struct Student
 13 {
 14     int age;
 15     float score;
 16     char name[100];
 17 };
 18 
 19 int main(void)
 20 {
 21     int len;
 22     struct Student * pArr;
 23     int i, j;
 24     struct Student t;
 25 
 26     printf("请输入学生个数:\n");
 27     printf("len = ");
 28     scanf("%d", &len);
 29     
 30     //动态构造一维数组
 31     pArr = (struct Student *)malloc(len * sizeof(struct Student));
 32 
 33     for (i=0; i<len; ++i)
 34     {
 35         printf("请输入第%d个学生的信息:\n", i+1);
 36         printf("age = ");
 37         scanf("%d", &pArr[i].age);
 38 
 39         printf("name = ");
 40         scanf("%s", pArr[i].name); //name是数组名,即首元素地址。不能再加&
 41 
 42         printf("score = ");
 43         scanf("%f", &pArr[i].score);
 44 
 45     }
 46 
 47     //按学生成绩降序排序 冒泡算法
 48     for (i=0; i<len-1; ++i)
 49     {
 50         for (j = 0; j<len-1-i; ++j)
 51         {
 52             if (pArr[j].score < pArr[j+1].score)
 53             {
 54                 t = pArr[j]; //此处不能写成pArr[j].score,因为是整个一个学生信息互换,而不是只交换分数
 55                 pArr[j] = pArr[j+1];
 56                 pArr[j+1] = t;
 57             }
 58         }
 59 
 60     }
 61 
 62 
 63     printf("\n\n\n\n");
 64 
 65     //输出
 66     for (i=0; i<len; ++i)
 67     {
 68         printf("第%d个学生的信息是:\n", i+1);
 69         printf("age = %d\n", pArr[i].age);
 70         printf("name = %s\n", pArr[i].name);
 71         printf("score = %f\n", pArr[i].score);
 72 
 73         printf("\n");
 74 
 75     }
 76 
 77 
 78     return 0;
 79 }
 80 
 81 /*
 82     在VC6.0中运行结果是:
 83 -----------------------------
 84 请输入学生个数:
 85 len = 3
 86 请输入第1个学生的信息:
 87 age = 22
 88 name = zhangsan
 89 score = 67
 90 请输入第2个学生的信息:
 91 age = 23
 92 name = lisi
 93 score = 77
 94 请输入第3个学生的信息:
 95 age = 34
 96 name = wangwu
 97 score = 56
 98 
 99 
100 
101 
102 第1个学生的信息是:
103 age = 23
104 name = lisi
105 score = 77.000000
106 
107 第2个学生的信息是:
108 age = 22
109 name = zhangsan
110 score = 67.000000
111 
112 第3个学生的信息是:
113 age = 34
114 name = wangwu
115 score = 56.000000
116 -----------------------------
117     总结:
118 
119 */
View Code

 

29._结构体

标签:

原文地址:http://www.cnblogs.com/houhaibushihai/p/4458601.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!