C语言中可以构造自己想要的数据类型,这种类型可以叫做符合数据类型
结构体:是由一系列具有相同类型或者不同类型的数据构成的数据集合
结构体是一种可以由我们自己定义的数据类型
#include<stdio.h>
//定义结构体包含学生的序号,三门课成绩,平均分
struct student{//student是结构体名称
int num;
int score[3];
float avg;
};
int main(){
//int类型的形参赋值float类型会自动消除小数点后面的数字
struct student Tom={10,{63,78},88.22};
struct student Mike{11,78,65,75};
printf("Tom的序号是:%d\n",Tom.num);
printf("Tom的成绩1:%d\n",Tom.score[0]);
printf("Tom的成绩2:%d\n",Tom.score[1]);
printf("Tom的成绩3:%d\n",Tom.score[2]);
printf("Tom的平均分是:%f\n",Tom.avg);
return 0;
}
#include<stdio.h>
//定义结构体包含学生的序号,c语言成绩,平均分
struct student{//student是结果体名称
int num;
float c;
float math;
double avg;
}Jerry,Mike;//定义多个结构体变量
int main(){
struct student Tom={10,65.5,89.2,75};
Tom.num=14;
Tom.c=88.5;
Tom.avg=76;
printf("Tom的序号:%d\n",Tom.num);
printf("Tom的c语言成绩%f\n",Tom.c);
printf("Tom的数学成绩是%f\n",Tom.math);
printf("Tom的平均成绩是%lf\n",Tom.avg);
return 0;
}
typedef的使用
注意:它不是创建一个类型,而是给已有的一个类型取一个别名
语法:typedef 已有的类型 别名;
typedef与define的区别前者是定义类型的别名,后者是定义一个常量的别名。
结构体数组
结构体数组的初始化
语法:struct 结构体名 数组名[数组长度] ={初始值列表};
#include<stdio.h>
#include<string.h>
#define N 5
struct books{ //图书结构
int bno; //图书编号
char bname[20]; //书名
char field[10]; //专业领域
char author[10]; //作者
char publisher[30];//出版社
float price; //书的价格
};
int main(){
struct books book[N];//定义结构体数组保存N本图书信息
int i,j,k;
char isc='n',isb='n';
int bno,count[N]={0};//数组count记录各种图书的订购数量
float total =0,pp;
printf("输入书号 书名 专业领域 作者 出版社 价格:\n");
//输入图书信息
for(i=0;i<N;i++){
printf("NO.%d:",i+1);//提示输入第i个图书的信息
scanf("%d%s%s%s%s%f",&book[i].bno,book[i].bname,
book[i].field,book[i].author,book[i].publisher,&pp);
book[i].price=pp;
}
printf("\n----------------------------------------\n");
printf("图书订单:\n");//购买图书
do
{
printf("输入图书书号和数量:\n");//提示输入要购买图书的编号和数量
scanf("%d%d",&bno,&k);
isb='n';
for(j=0;j<N;j++)
if(bno==book[j].bno){
count[j]+=k;
isb='y';
}
if(isb=='n') printf("书号错误\n");
printf("继续购买吗?(y/n):");
scanf("%c",&isc);
}while(isc=='y');
printf("\n-------------------------------------\n");
printf("购书清单\n");//输出购书清单
printf("书号\t书名\t\t作者\t单价\t数量\n");
for(i=0;i<N;i++){
if(count[i]!=0)
{printf("%d\t%s\t%s\t%.2f\t%d\n",book[i],bno,book[i].bname,
book[i].author,book[i].price,count[i]);
total+=count[i]*book[i].price;
}
}
printf("\n------------------------------------\n");
printf("\t\t\t总价:%.2f\n",total);//输出总价格
return 0;
}