结构体的学习

结构体与共用体,枚举

1.数据类型复习:

结构体的学习_第1张图片

2结构体.

eg;统计全校同学信息    需要记录的点--- 姓名,班级,性别,成绩,年龄
        统计名字:char s[ ] [ 100 ] = { "Tmo" }
        统计班级:int ; 统计性别: char     ;  统计成绩 : float   ; 统计年龄: int
一个人的相关信息要用到5个数组,想有一种数据可以描述一个人的相关信息,就可以用结构体:

结构体:struct
描述一些原先基本数据类型不好描述的,复杂的数据类型
语法:struct + 结构体类型名
          {       
          };            //定义了一个“数据类型”   --  用户自定义的数据类型
eg:描述学生的个人信息----
struct  student                 
{
      char  name[20];       //放名字
      unsigned  char  age;    //放年龄
      等 - - - 
};
于是乎: struct student  s   ------   学生这种数据类型(等价于基本类型的种类),定义了一个s变量            按照给的类型顺序来用   struct student  s = {"Tom",20,59.5,110}  ---  名字,年纪,成绩,

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

访问结构体:  .  //结构体成员运算符
打印输出: printf("%d",  s . 定义的数据类型中的名字(如 name,aage))         
eg;printf(”%d“,s.name)

-> : 指向结构体成员

3.结构体的对齐规则:
1.在32位的平台上,默认都是按4字节对齐的。
2.对于成员变量,各自在自己的自然边界上对齐。
3.如果 成员变量中有比4字节大。此时整个结构体按照4字节对齐。(64位默认为8字节)
4.如果成员变量中没有有比4字节大。
此时整个结构体按照最大的那个成员对齐。


相关程序实现

1.编写一个“老师”的结构体,写出一个输入、输出的函数,打印出来

struct teacher
{
	char name[20];
	int tno;
	float salary;
};


void printfteacher(struct teacher *t)
{
	printf("name   = %s\n",t-> name);
	printf("tno    = %d\n",t-> tno);
	printf("salary = %2.f\n",t-> salary);

}

void inputteacher(struct teacher *t)
{
	printf("name :");
	scanf("%s",t->name);
	printf("tno :");
	scanf("%d",&t->tno);
	printf("salary :");
	scanf("%f",&t->salary);
}


int main(void)
{
	struct teacher t={0};
	inputteacher(&t);
	printfteacher(&t);

}

2.编写一个学生的结构体,编写输入输出函数,找到最大成绩的学生打印信息,以学生成绩做一个排序

struct student
{
	char name[20];
	int sno;
	float score;
};

void printfstudent(struct student *t,int len)
{
	int i;
	printf("name\tsno\tscore\t\n");
	for(i=0;iname);
		printf("%d\t",(t+i)->sno);
		printf("%.2f\t\n",(t+i)->score);
	}
}


void inputstudent(struct student *t,int len)
{
	int i;
	for(i=0;iname);
	printf("sno :");
	scanf("%d",&(t+i)->sno);
	printf("score :");
	scanf("%f",&(t+i)->score);
	}

}

void maxstudent(struct student *t,int len)
{
	int i=0;
	float max=t->score;
	int j=0;
	for(i=0;iscore)
		{
			max=(t+i)->score;
			j=i;
		}
	}

		printf("max = %s %d %.2f\n",(t+j)->name,(t+j)->sno,(t+j)->score);
}

int compare(const void *a,const void *b)
{
	const struct student *p1=a;
	const struct student *p2=b;
	return p1->score - p2->score;
}


int main(void)
{
	struct student s[3]={0};
	inputstudent(s,3);
	maxstudent(s,3);
	qsort(s,3,sizeof(struct student),compare);
	printfstudent(s,3);
	return 0;
}

你可能感兴趣的:(算法,java,linux,arm开发,arm)