结构体
1.结构体
1.1 定义与声明
结构体:由不同数据类型组成的有机整体
先声明,再定义
plain
struct 结构体名
{
成员列表;
};plain
struct Product
{
char Name[10]; //产品名称
char Shape[20]; //产品形状
char Color[10]; //产品颜色
char Func[20]; //产品功能
int price; //产品价格
char Area[20]; //产品产地
};声明的同时定义
plain
struct 结构体名
{
成员列表;
}变量名列表;plain
struct Product
{
char Name[10]; //产品名称
char Shape[20]; //产品形状
char Color[10]; //产品颜色
char Func[20]; //产品功能
int price; //产品价格
char Area[20]; //产品产地
}product1,product2;直接定义
plain
struct
{
成员列表;
}变量名列表;plain
struct
{
char Name[10]; //产品名称
char Shape[20]; //产品形状
char Color[10]; //产品颜色
char Func[20]; //产品功能
int price; //产品价格
char Area[20]; //产品产地
}product1,product2;不要忘记结构体后的分号
通常将结构体的声明放在头文件中
1.2 引用
结构体变量.成员名
plain
product1.Name="Icebox";
product2.Price="2000";只能对最低级的结构体成员进行操作,不能直接操作结构体
既能引用结构体成员地址,也能直接引用结构体变量地址
plain
#include<stdio.h>
struct Product
{
char Name[10]; //产品名称
char Shape[20]; //产品形状
char Color[10]; //产品颜色
char Func[20]; //产品功能
int Price; //产品价格
char Area[20]; //产品产地
};
int main()
{
struct Product product1;
printf("请输入产品名称:");
scanf("%s",&product1.Name);
printf("请输入产品形状:");
scanf("%s",&product1.Shape);
printf("请输入产品颜色:");
scanf("%s",&product1.Color);
printf("请输入产品功能:");
scanf("%s",&product1.Func);
printf("请输入产品价格:");
scanf("%d",&product1.Price);
printf("请输入产品产地:");
scanf("%s",&product1.Area);
printf("产品名称:%s\n",product1.Name);
printf("产品形状:%s\n",product1.Shape);
printf("产品颜色:%s\n",product1.Color);
printf("产品功能:%s\n",product1.Func);
printf("产品价格:%d\n",product1.Price);
printf("产品产地:%s\n",product1.Area);
return 0;
}1.3 初始化
plain
#include<stdio.h>
struct Student
{
char Name[10];
char Sex;
int Grade;
} student1={"zhangsan",'M',100};
int main()
{
struct Student student2={"lisi",'W',99};
printf("结构体1中的信息为:\n");
printf("姓名:%s\n性别:%c\n成绩:%d\n",student1.Name,student1.Sex,student1.Grade);
printf("结构体2中的信息为:\n");
printf("姓名:%s\n性别:%c\n成绩:%d\n",student2.Name,student2.Sex,student2.Grade);
return 0;
}2.结构体数组
2.1 定义
plain
struct 结构体名
{
成员列表;
}数组名;plain
struct Student
{
char Name[10];
int Number;
char Sex;
int Grade;
}student[5];2.2 初始化
plain
struct 结构体名
{
成员列表;
}数组名={初始值列表};plain
#include<stdio.h>
struct Student
{
char Name[10];
int Number;
char Sex;
int Grade;
}student[5]={{"zhangsan",000001,'M',90},
{"lisi",000002,'W',100},
{"wangwu",000003,'M',80},
{"zhaoliu",000004,'w',70},
{"zhongqi",000005,'M',60}};
int main()
{
int i;
for(i=0;i<5;i++)
{
printf("第%d名学生:\n",i+1);
printf("姓名:%s\n学号:%d\n性别:%c\n成绩:%d\n",student[i].Name,student[i].Number,student[i].Sex,student[i].Grade);
printf("\n");
}
}3.结构体指针
3.1 指向结构体变量
定义
结构体类型 \*指针名
引用
- 使用点运算符引用结构成员
(*pStruct).成员名 - 使用指向运算符引用结构成员
pStruct->成员名
plain
#include<stdio.h>
#include<string.h>
struct Student
{
char Name[10];
int Number;
char Sex;
int Grade;
}student;
int main()
{
struct Student *pStruct;
pStruct=&student;
strcpy(pStruct->Name,"zhangsan");
pStruct->Number=000001;
pStruct->Sex='W';
pStruct->Grade=100;
printf("姓名:%s\n学号:%d\n性别:%c\n成绩:%d\n",student.Name,student.Number,student.Sex,student.Grade);
}3.2 指向结构体数组
plain
#include<stdio.h>
struct Student
{
char Name[10];
int Number;
char Sex;
int Grade;
}student[5]={{"zhangsan",000001,'M',90},
{"lisi",000002,'W',100},
{"wangwu",000003,'M',80},
{"zhaoliu",000004,'w',70},
{"zhongqi",000005,'M',60}};
int main()
{
struct Student*pStruct;
int i;
pStruct=student;
for(i=0;i<5;i++,pStruct++)
{
printf("第%d名学生:\n",i+1);
printf("姓名:%s\n学号:%d\n性别:%c\n成绩:%d\n",pStruct->Name,pStruct->Number,pStruct->Sex,pStruct->Grade);
printf("\n");
}
return 0;
}3.3 结构体作函数参数
结构体变量
plain
#include<stdio.h>
struct Student
{
char Name[10];
float Score[3];
}student0={"Zhangsan",80,85,87.5};
void Display(struct Student student)
{
printf("姓名:%s\n语文:%.1f\n数学:%.1f\n英语:%.1f\n",student.Name,student.Score[0],student.Score[1],student.Score[2]);
printf("平均分:%.1f",(student.Score[0]+student.Score[1]+student.Score[2])/3);
}
int main()
{
Display(student0);
return 0;
}指向结构体变量指针
plain
#include<stdio.h>
struct Student
{
char Name[10];
float Score[3];
}student={"Zhangsan",80,85,87.5};
void Display(struct Student *stu)
{
printf("姓名:%s\n语文:%.1f\n数学:%.1f\n英语:%.1f\n",stu->Name,stu->Score[0],stu->Score[1],stu->Score[2]);
stu->Score[2]=80;
}
int main()
{
struct Student *pStruct=&student;
Display(pStruct);
printf("改变后的英语:%.1f",pStruct->Score[2]);
return 0;
}结构体变量成员
4.包含结构的结构
plain
#include<stdio.h>
struct data
{
int year;
int month;
int day;
};
struct student
{
char Name[10];
int num;
char sex;
struct data birthday;
}student={"Zhangsan",000001,'M',{1999,12,21}};
int main()
{
printf("姓名:%s\n学号:%d\n性别:%c\n生日:%d/%d/%d",student.Name,student.num,student.sex,student.birthday.year,student.birthday.month,student.birthday.day);
return 0;
}5.链表
5.1 概述
链表必须利用指针实现
5.2 动态链表
malloc函数:在内存中动态的分配一块内存空间void *malloc(int size);
calloc函数:在内存中动态分配n个连续内存空间void calloc(unsigned n,unsigned size);
free函数:使用指针指向的内存区void free(void *p);
补充
一个程序可以由一个或多个源文件组成,但只能有一个源函数
c语言编译不检查注释
c语言的基本组成单位是函数
c语言总是先从main()函数开始执行
形式参数是局部变量
机器语言的所有指令和数据都是一串二进制数0和1表示
输出a:printf("%d",a);
输入:getchar()
输入(无enter带回显):getche()
输入(无enter无回显):getch()
输入a:scanf("%d",&a);
输入一行:gets()
输出换行:puts()
控制台暂停:system("pause");
控制台颜色:system("color XY");
绿底白字:system("color 2F");
白底红字:system("color F4");- 0 = 黑色
- 1 = 蓝色
- 2 = 绿色
- 3 = 浅绿色
- 4 = 红色
- 5 = 紫色
- 6 = 黄色
- 7 = 白色
- 8 = 灰色
- 9 = 淡蓝色
- A = 淡绿色
- B = 淡浅绿色
- C = 淡红色
- D = 淡紫色
- E = 淡黄色
- F = 亮白色
睡眠1秒:sleep(1000);
清除屏幕内容:system("cls");
随机数:rand()
初始化随机数种子:srand()
每次都随机:srand((unsigned)time(NULL))
关机:system("shutdown -s -t 50");
重启:system("shutdown -r -t 50");
取消关机:system("shutdown -a");
获取长度:include<string.h> strlen()
字典顺序:include<string.h> strcmp()
复制:include<string.h> strcpy()
