C(结构体)

2021-01-19

结构体

什么是结构体?

  把一些基本类型数据组合在一起形成的一个新的复合数据类型,叫结构体;
  例如:
         struct Student{
              String name;
              int age;
              String sex;
              float score;
              };

为什么需要结构体?

  为了表示一些复杂的事务,而普通的基本类型无法满足实际要求;

如何定义结构体?

  //第一种:struct Student{ int age ; float score;char sex;};
  //第二种:struct Student2{ int age ; float score;char sex;}st2;
  //第三种:struct { int age ; float score;char sex;}st2;

怎么使用结构体变量

  1、赋值和初始化
        #include <stdio.h>
        struct Student{ int age ; float score;char sex;};
        int main(void){
              struct Student st = {80,66.6,'f'};//定义的同时赋予初始化;
              struct Student st2;//先定义
              st2.age =10;//在赋值
              st2.score = 88;
              st2.sex = 'f';
              printf("%d %f %c\n",st.age,st.score.st.sex);
              printf("%d %f %c\n",st2.age,st2.score.st2.sex);
              return 0;
  2、如何取出结构体变量中的每一个成员【重点】
        1、结构体变量名.成员名;
        2、指针变量名->成员名;例如:psp->age等价于(* psp)->age;
              psp->age的含义:psp所指向的那个结构体变量中的age这个成员;
        
  3、结构体变量的运算
  4、结构体变量和结构体变量指针作为函数参数传递的问题

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

  动态构造一个数组,存放学生信息;然后按分数排序
        # include <stdio.h>
        #include <malloc.h>
        struct Student
        {
        	int age;
        	float score;
        	char name[100];
        };

        int main(void)
        {
            	int len ;
            	struct Student * pArr;
            	int i ,j ;//循环变量
            	struct Student t;//结构体t

            	printf("请输入学生的个数:\n");
            	printf("len = ");
            	scanf("%d",&len);
         //动态构造一维数组
            	pArr = (struct Student *)malloc(len * sizeof(struct Student));

	            for(i=0; i<len; ++i){
	            	printf("请输入第%d个学生的信息:\n",i+1);
	            	printf("age = ");
	            	scanf("%d",&pArr[i].age);

	            	printf("name = ");
	         scanf("%s",pArr[i].name);//name是数组名,本身就已经是数组首元素的地址,所以pArr[i].name不能改成&pArr[i].name
	
	                printf("score = ");
	            	scanf("%f",&pArr[i].score);
		}
        //冒泡排序:升序
	for(i=0; i<len-1;++i){
		for(j=0;j<len-1-i;++i){
			if(pArr[j].score > pArr[j+1].score){//成绩比较,成绩大的,把位置呼唤
				t = pArr[j];
				pArr[j] = pArr[j+1];
				pArr[j+1] = t;

			}
		}
	
	}

	      printf("\n\n学生的信息是:\n");
	//输出
	      for(i = 0;i<len;++i){

		printf("第%d个学生的信息:\n",i+1);
		printf("age = %d\n",pArr[i].age);			
printf("name = %s\n",pArr[i].name);//name是数组名,本身就已经是数组首元素的地址,所以pArr[i].name不能改成&pArr[i].name		
		printf("score = %f\n",pArr[i].score);

		printf("\n");
		}
	return 0;
        }

posted @ 2021-01-20 20:29  一名初学者  阅读(654)  评论(0)    收藏  举报