结构体的学习

Struct1.0

#include<stdio.h>

struct student
{
char name[15];
int id;
float score;
} ;
int main()
{
struct student wn={"wangning",174842,99};
printf("%s\t%d\t%.2f\n",wn.name,wn.id,wn.score);
wn.id = 66666;
printf("%s\t%d\t%.2f\n",wn.name,wn.id,wn.score);
return 0;
}
/*借此来掌握
1.结构体的定义
2.结构体的初始化
3.结构体成员的引用

4.结构体成员的赋值 

注意!

应用结构体时,无论是定义还是初始化,花括号“{}”后面都要跟分号“;”

struct student wn={"wangning",174842,99}; 这一句有没有等于“=”都行

这句话是真的,即使是数组的初始化也可以不用“=”*/

Struct2.0

#include<stdio.h>
int main()
{
struct st
{
char id[8];
float score;
}s[2]{{"0174842",90},{"0174853",85}};
int i;
for (i=0;i<2;i++)
printf("%s\t\t%f\n",s[i].id,s[i].score);
return 0;
}
/*借此来掌握
1.结构体数组定义以及初始化同步进行
2.在创立数组后利用循环打印数组成员*/

Struct3.0

(自己的版本)

//处理20个商店某年某季度3个月的营业额报表
//注意:此次的结构体涉及到了整数型数组 
//注意指针的使用 
#include<stdio.h>
int main()
{
struct turnover
{
char name[10];
float sale[4];
int num;
}shop[4];
struct turnover *p;
int i;
for(i=0;i<4;i++)
{
printf("No. ");scanf("%d",&shop[i].num);
printf("name ");scanf("%s",shop[i].name);
int j;
for(j=1;j<=3;j++)
{
printf("Sale%d ",j);
scanf("%f",&shop[i].sale[j]);
}
shop[i].sale[0]=0;
for(j=1;j<=3;j++)
shop[i].sale[0]+=shop[i].sale[j];
}
printf("No.\tname\tsale1\tsale2\tsale3\ttotal\n");
for(p=shop;p<shop+4;p++)
printf("%d\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",p->num,p->name,p->sale[1],p->sale[2],p->sale[3],p->sale[0]);
return 0;

运行结果

结构体的学习

(书上的版本)

结构体的学习
结构体的学习

与书上比较与收获:

1.尽管看了书,在建立二十个(实际上是四个)商店时还是有点懵逼的。
2.结构体指针的定义和基本类型指针的定义没有什么不同,前面跟的是类型(基本类型int、float……;自己定义的结构体类型)后面在具体的使用过程中就是获得具体的指针值了,如p=shop(自己的例子),p=sell;所以前面指针的学习很重要(明天就要考试了我在这里刷结构体好吗orz)
3.atoi和atoj
atoi是用来将字符串转换成整数型;
atoj是用来将字符串转换成浮点型;
要想使用需要引入stdlib.h

2018/1/12 

结构体变量之间可以直接赋值;
struct a
{
char name[15];
}a1,a2;
gets(a1.name);//输入ss
a2=a1;
puts(a2.name);//结果 ss

struct4.0
每次用到已经定义好的结构体类型去定义变量都要加上struct,要想避免麻烦,可以使用typedef(typedef是关键字,编译器直接识别,不需要头文件
模式:typedef struct {域定义}结构体类型类型名称;
例如:typedef struct {double x,y;} Point;