11-结构体
include
include
/*
作业:
1>实现myStrcat(),myStrncmp(),myStrncpy()
2>自定义一个结构体数组,对数组里面的信息进行自动输入赋值,再利用选择排序对数据进行整理
struct Student
{
char name[10];
int num;
};
3>实现一个函数吸收空格
zhang san
zhang san
而不是zhang
*/
//结构体数据类型的定义一般放在函数的外面,供全局使用
typedef struct Student
{
char name[10];
int num;
}Student,* pStudent;
/*
typedef struct Student Student;
typedef struct Student * pStudent;
*/
void test1()
{
//结构体类型:可以将不同种数据类型组合在一起的集合
/*
结构体数据类型的定义
struct 结构体名
{
属性变量;(特征变量)
};
*/
struct Person
{
char name[10];
char sex;
int height;
float score;
};
//结构体变量的定义
struct Person person;
//1.结构体变量初始化方法
//.代表‘的’
person.sex='m';
strcpy(person.name, "xxxx");
person.height=180;
person.score=90.5;
printf("name=%s,sex=%c,height=%d,score=%f\\n",person.name,person.sex,person.height,person.score);
//2.
struct Person person1={"xx1",'w',120,80.0};
printf("name=%s,sex=%c,height=%d,score=%f\\n",person1.name,person1.sex,person1.height,person1.score);
//3.
struct Person person2=person1;
printf("name=%s,sex=%c,height=%d,score=%f\\n",person2.name,person2.sex,person2.height,person2.score);
}
/*
内存对齐:
1>如果结构体里面成员变量(特征变量)都是基本数据类型,那么第一个成员变量的内存从内存偏移量为0的位置,后面的成员变量从内存偏移量是它本身字节数的倍数开始分配
2>如果结构体成员变量里是集合类型,数组,结构体,枚举。。。比如struct XXX{ char ch;int score;};那么该结构体成员从内存偏移量是该结构体里面最大字节数的成员变量的倍数开始分配
3>最后收尾的时候,总的字节数是最大(字节数)成员变量的倍数
*/
void test2()
{
struct Person
{
char sex;//0
char ch[5];//1--5
double height;//8---15
int score;//16---19
};
printf("字节数=%ld\\n",sizeof(struct Person));
}
void test3()
{
struct Birthday
{
int year;
int month;
int day;
};
struct Person
{
char name[10];
int score;
char sex;
struct Birthday birth;
};
struct Person person={"xxx",100,'m',{1990,1,1}};
printf("person.name=%s,birthday=%d/%d/%d\\n",person.name,person.birth.year,person.birth.month,person.birth.day);
}
void test4()
{
struct Birthday
{
int year;//0--3
double month;//8---15
int day;//16---19
};//24个字节
struct Person
{
char name[10];//0--9
int score;//12---15
char sex;//16
struct Birthday birth;//24---47
};
printf("%ld\n",sizeof(struct Person));
}
void test5()
{
//1.有名结构体
struct Person
{
int a;
char b;
};
//2.无名结构体
struct
{
int a;
char b;
}xx,xx1;
//3.定义这个结构体数据类型的同时定义出来一个这个结构体类型的变量
struct Student
{
int score;
char sex;
}stu1[2]={{12,'m'},{13,'w'}};
}
void test6()
{
struct Person
{
int height;
char sex;
};
struct Person person;
struct Person p=&person;
(p).sex='m';
(*p).height=120;
printf("person.height=%d,sex=%c\\n",person.height,person.sex);
p->height=190;
p->sex='w';
printf("person.height=%d,sex=%c\\n",person.height,person.sex);
}
void test7()
{
//typedef将现有的数据类型定义成你想要的数据类型
typedef int I;
I i=9;
printf("%d\n",i);
}
void test8()
{
//type define
typedef struct Student
{
char name[10];
int num;
}Student;
Student stu={"xx",10};
printf("name=%s\\nnum=%d\\n",stu.name,stu.num);
}
void test9()
{
//按照名字进行排序,小---》大(ASCII)
Student stu[4]={
{"xxu",12},
{"xxe",13},
{"xxb",14},
{"xxk",15}
};
int i=0;
for (i=0; i<4-1; i++)
{
int j=0;
for(j=0;j<4-1-i;j++)
{
//stu[j]>stu[j+1]
if (strcmp(stu[j].name,stu[j+1].name)>0)
{
Student temp=stu[j];
stu[j]=stu[j+1];
stu[j+1]=temp;
}
}
}
pStudent p=stu;//*(p+i)===>p[i]====>stu[i]
for (i=0; i<4; i++)
{
printf("stu[%d].name=%s,num=%d\\n",i,(*(p+i)).name,p[i].num);
}
}
int main()
{
int arr[6]={11,5,7,8,39,12};
int i=0;
for (i=0; i<6-1; i++)
{
int minIndex=i;
int j;
for(j=i+1;j<6;j++)
{
if(arr[minIndex]>arr[j])
{
minIndex=j;
}
}
//判断minIndex是否还在原来的位置
if(minIndex!=i)
{
int temp=arr[i];
arr[i]=arr[minIndex];
arr[minIndex]=temp;
}
}
for (i=0; i<6; i++){
printf("arr[%d]=%d\\n",i,arr[i]);
}
return 0;
}