7.0 KiB
7.0 KiB
结构体类型定义
/*
struct 结构体名{
数据类型 变量名;
数据类型 变量名;
};
CREATE TABLE 表名(
字段名 数据类型,
字段名 数据类型
);
*/
//声明了一个结构体类型 学生类型
struct student{
int id;//学号
char name[20];//姓名
int age;//年龄
char sex;//性别
double score;//成绩
};
结构体变量定义
#include <stdio.h>
#include <string.h>
/*
struct 结构体名{
数据类型 变量名;
数据类型 变量名;
};
CREATE TABLE 表名(
字段名 数据类型,
字段名 数据类型
);
*/
//定义了一个结构体类型 学生类型
struct student{
int id;//学号
char name[20];//姓名
int age;//年龄
char sex[2];//性别
double score;//成绩
};
int main(void){
//结构体类型如果没有取别名的情况下
//需要 使用 struct 结构体名 结构体变量名; 来定义结构体变量
//定义了一个学生变量s1
struct student s1;//存储一个的学生
//对结构体变量进行赋值操作
s1.id = 100;
strcpy(s1.name, "小明");
s1.age = 18;
strcpy(s1.sex, "男");
s1.score = 99;
//对结构体变量进行取值操作
printf("%d %s %d %s %.0lf\n", s1.id, s1.name, s1.age, s1.sex, s1.score);
return 0;
}
#include <stdio.h>
#include <string.h>
//结构体类型的定义
//1.在主函数内 通过struct 结构体类型名 变量1, 变量2;
//2.在定义结构体类型的时候定义
//3.只在定义结构体类型时定义变量(结构体类型只使用一次)
struct student{
int id;//学号
char name[20];//姓名
int age;//年龄
char sex[2];//性别
double score;//成绩
}stu1, stu2;
//在定义结构体类型的时候同时定义了两个结构体变量stu1, stu2
int main(void){
stu1.id = 1;
stu2.id = 2;
printf("%d %d\n", stu1.id, stu2.id);
return 0;
}
使用typedef对结构体类型起别名
#include <stdio.h>
#include <string.h>
/*
struct 结构体名{
数据类型 变量名;
数据类型 变量名;
};
CREATE TABLE 表名(
字段名 数据类型,
字段名 数据类型
);
*/
//定义了一个结构体类型 学生类型
//typedef 数据类型 类型别名;
//typedef int element;
/*
typedef struct 结构体类型名{
数据类型 变量名1;
数据类型 变量名2;
}别名;
*/
typedef struct student{
//4+20+4+2+8
int id;//学号
char name[20];//姓名
int age;//年龄
char sex[2];//性别
double score;//成绩
}student;
//struct student <=> student
int main(void){
//结构体类型如果没有取别名的情况下
//需要 使用 struct 结构体名 结构体变量名; 来定义结构体变量
//定义了一个学生变量s1
struct student s1;//存储一个的学生
student s2;
//对结构体变量进行赋值操作
s1.id = 100;
strcpy(s1.name, "小明");
s1.age = 18;
strcpy(s1.sex, "男");
s1.score = 99;
//对结构体变量进行取值操作
printf("%d %s %d %s %.0lf\n", s1.id, s1.name, s1.age, s1.sex, s1.score);
return 0;
}
习题-1
#include <stdio.h>
/*
1.定义一个图书类型,要求存储以下数据,图书编号、图书名、作者名、出版社、价格
定义两个图书变量,别分命名为book1、book2存储以下数据
1 数据结构 桃桃 高等教育出版社 59.9
2 操作系统 台球王子 高等教育出版社 58.9
并打印出来
*/
struct book{
int id;//图书编号
char title[50];//图书名称
char author[50];//作者名称
char publishing[50];//出版社
double price;//价格
};
int main(){
struct book book1={1, "数据结构", "桃桃", "高等教育出版社", 59.9};
struct book book2={2, "操作系统", "台球王子", "高等教育出版社", 58.9};
printf("%d\t %s\t %s\t\t %s\t %.1lf\n", book1.id, book1.title,
book1.author, book1.publishing, book1.price);
printf("%d\t %s\t %s\t %s\t %.1lf\n", book2.id, book2.title,
book2.author, book2.publishing, book2.price);
return 0;
}
习题-2
#include <stdio.h>
/*
2.定义一个动物类型,要求存储以下数据,自行推断成员变量类型
1 斑马 素食 一级保护动物
2 小熊猫 素食 一级保护动物
3 蝙蝠 肉食 其他动物
*/
typedef struct animal{
int id;
char type[20];
char foodType[20];
char leve[20];
}animal;
int main(){
animal a1 = {1, "斑马", "素食", "一级保护动物"};
animal a2 = {2, "小熊猫", "素食", "一级保护动物"};
animal a3 = {3, "蝙蝠", "肉食", "一级保护动物"};
printf("%d\t %s\t %s\t %s\n", a1.id, a1.type, a1.foodType, a1.leve);
printf("%d\t %s\t %s\t %s\n", a2.id, a2.type, a2.foodType, a2.leve);
printf("%d\t %s\t %s\t %s\n", a3.id, a3.type, a3.foodType, a3.leve);
return 0;
}
结构体数组、指针
#include <stdio.h>
/*
2.定义一个动物类型,要求存储以下数据,自行推断成员变量类型
1 斑马 素食 一级保护动物
2 小熊猫 素食 一级保护动物
3 蝙蝠 肉食 其他动物
*/
typedef struct animal{
int id;
char type[20];
char foodType[20];
char leve[20];
}animal;
int main(){
int i;
animal aList[3] = {
{1, "斑马", "素食", "一级保护动物"},
{2, "小熊猫", "素食", "一级保护动物"},
{3, "蝙蝠", "肉食", "一级保护动物"}};
animal *pA = aList;//定义一个动物指针指向数组的第一个结构体变量的元素
//(*pA).id <=> pA->id
//1.使用*访问符得到元素
//printf("%d\n", (*pA).id);
//printf("%d\n", pA->id);
for(i=0;i<3;i++){
//aList[i] <=> *(aList+i)
printf("%d\t %s\t %s\t %s\n", (aList+i)->id, (aList+i)->type,
(aList+i)->foodType, (aList+i)->leve);
}
return 0;
}
结构体类型作为函数的参数
#include <stdio.h>
/*
2.定义一个动物类型,要求存储以下数据,自行推断成员变量类型
1 斑马 素食 一级保护动物
2 小熊猫 素食 一级保护动物
3 蝙蝠 肉食 其他动物
*/
typedef struct animal{
int id;
char type[20];
char foodType[20];
char leve[20];
}animal;
//结构体变量作为函数的参数
void print(animal a){
printf("%d\t %s\t %s\t %s\n", a.id, a.type, a.foodType, a.leve);
}
//结构体的指针变量作为函数的参数
void print2(animal *a){
printf("%d\t %s\t %s\t %s\n", a->id, a->type, a->foodType, a->leve);
}
int main(){
int i;
animal aList[3] = {
{1, "斑马", "素食", "一级保护动物"},
{2, "小熊猫", "素食", "一级保护动物"},
{3, "蝙蝠", "肉食", "一级保护动物"}};
animal *pA = aList;//定义一个动物指针指向数组的第一个结构体变量的元素
//(*pA).id <=> pA->id
//1.使用*访问符得到元素
//printf("%d\n", (*pA).id);
//printf("%d\n", pA->id);
for(i=0;i<3;i++){
print2(aList+i);
}
return 0;
}
使用结构体存储点通过函数计算两个点之间的距离
#include <stdio.h>
#include <math.h>
typedef struct point{
int x;
int y;
}point;
float distance(point *p1, point *p2){
/*
pow((float)(p2->y - p1->y), 2) <=> (y2-y1)*(y2-y1)
*/
return sqrt(pow((float)(p2->y - p1->y), 2) + pow((float)(p2->x - p1->x), 2));
}
int main(){
point p1 = {1, 2}, p2 = {2, 2};
printf("两点之间的距离为%.2lf\n", distance(&p1, &p2));
return 0;
}