结构体简介

/*
   结构体演示
   */
#include <stdio.h>
#include <string.h>
/*struct phone {
char manu[20];
char model[20];
float price;
};
typedef struct phone phone;*/
typedef struct /*phone*/ {
char manu[20];
char model[20];
float price;
} phone;
//#define   phone       struct phone  错误
int main() {
//struct phone iphone6;  //结构体变量声明
phone honor3 = {"huawei", "honor 3", 2000.0f};
phone *p_phone = NULL;
p_phone = &honor3;
/*strcpy(honor3.manu, "huawei");
strcpy(honor3.model, "honor 3");
    honor3.price = 2000.0f;*/
printf("生产厂家是%s\n", honor3.manu);
printf("型号是%s\n", honor3.model);
printf("价格是%g\n", honor3.price);
printf("生产厂家是%s\n", p_phone->manu);
printf("型号是%s\n", p_phone->model);
printf("价格是%g\n", p_phone->price);
return 0;
}




/*
   结构体练习
   */
#include <stdio.h>
typedef struct /*pixel*/ {
int row, col;
} pixel;
struct rect {
pixel pt1, pt2;
};
int main() {
pixel pt1 = {}, pt2 = {}, mid = {};
printf("请输入行号和列号:");
scanf("%d%d", &(pt1.row), &(pt1.col));
printf("请输入行号和列号:");
scanf("%d%d", &(pt2.row), &(pt2.col));
mid.row = (pt1.row + pt2.row) / 2;
mid.col = (pt1.col + pt2.col) / 2;
printf("中间点位置是(%d, %d)\n", mid.row, mid.col);
return 0;
}






/*
   结构体练习
   */
#include <stdio.h>
typedef struct /*pixel*/ {
int row, col;
} pixel;
typedef struct {
pixel pt1, pt2;
} rect;
int main() {
int area = 0;
rect r = {};
printf("请输入一个角的位置:");
scanf("%d%d", &(r.pt1.row), &(r.pt1.col));
printf("请输入另一个角的位置:");
scanf("%d%d", &(r.pt2.row), &(r.pt2.col));
area = (r.pt1.row - r.pt2.row) * (r.pt1.col - r.pt2.col);
area = area >= 0 ? area : 0 - area;
printf("面积是%d\n", area);
return 0;
}



/*
   结构体作业
   */
#include <stdio.h>
typedef struct {
int row, col;
} pixel;
typedef struct {
pixel pt1, pt2;
} line;
#define  LEN2(l) (((l).pt1.row - (l).pt2.row) * ((l).pt1.row - (l).pt2.row) + ((l).pt1.col - (l).pt2.col) * ((l).pt1.col - (l).pt2.col))
int main() {
line l1 = {}, l2 = {}, *p_line = NULL;
printf("请输入第一条线段的位置:");
scanf("%d%d%d%d", &(l1.pt1.row), &(l1.pt1.col), &(l1.pt2.row), &(l1.pt2.col));
printf("请输入第二条线段的位置:");
scanf("%d%d%d%d", &(l2.pt1.row), &(l2.pt1.col), &(l2.pt2.row), &(l2.pt2.col));
    if (LEN2(l1) > LEN2(l2)) {
p_line = &l1;
}
else {
p_line = &l2;
}
printf("比较长的线段是((%d, %d), (%d, %d))\n", p_line->pt1.row, p_line->pt1.col, p_line->pt2.row, p_line->pt2.col);
return 0;
}





/*
   结构体演示
   */
#include <stdio.h>
typedef struct {
int row, col;
} pixel;
void print(const pixel *p_pt) {
printf("位置是(%d, %d)\n", p_pt->row, p_pt->col);
}
pixel *read(pixel *p_pt) {
printf("请输入一个点的位置:");
scanf("%d%d", &(p_pt->row), &(p_pt->col));
return p_pt;
}
int main() {
    pixel pt1 = {}, pt2 = {}, *p_pt = NULL;
p_pt = read(&pt1);
pt2 = *p_pt;
print(&pt2);
return 0;
}






/*
   求中点位置练习
   */
#include <stdio.h>
typedef struct {
int row, col;
} pixel;
pixel *midpt(const pixel *p_pt1, const pixel *p_pt2, pixel *p_ret) {
p_ret->row = (p_pt1->row + p_pt2->row) / 2;
p_ret->col = (p_pt1->col + p_pt2->col) / 2;
return p_ret;
}
int main() {
    pixel pt1 = {}, pt2 = {}, mid = {}, *p_pt = NULL;
printf("请输入一个点的位置:");
scanf("%d%d", &(pt1.row), &(pt1.col));
printf("请输入另一个点的位置:");
scanf("%d%d", &(pt2.row), &(pt2.col));
p_pt = midpt(&pt1, &pt2, &mid);
printf("中点位置是(%d, %d)\n", p_pt->row, p_pt->col);
printf("中点位置是(%d, %d)\n", mid.row, mid.col);
return 0;
}










/*
   点和长方形关系练习
   */
#include <stdio.h>
typedef struct {
int row, col;
} pixel;
typedef struct {
pixel pt1, pt2;
} rect;
int incl(const rect *p_rect, const pixel *p_pt) {
if ((p_pt->row - p_rect->pt1.row) * (p_pt->row - p_rect->pt2.row) < 0 && (p_pt->col - p_rect->pt1.col) * (p_pt->col - p_rect->pt2.col) < 0) {
return 1;
}
else {
return 0;
}
}
int main() {
rect r = {};
pixel pt = {};
printf("请输入点的位置:");
scanf("%d%d", &(pt.row), &(pt.col));
printf("请输入长方形的位置:");
scanf("%d%d%d%d", &(r.pt1.row), &(r.pt1.col), &(r.pt2.row), &(r.pt2.col));
if (incl(&r, &pt)) {
printf("点被长方形包含\n");
}
else {
printf("点不被长方形包含\n");
}
return 0;
}



/*
   数据对齐和补齐演示
   */
#include <stdio.h>
typedef struct {
char ch;
int num;
} stru;
typedef struct {
char ch;
char ch1;
int num;
} stru1;
typedef struct {
char ch;
int num;
char ch1;
} stru2;
typedef struct {
char ch;
short num;
char ch1;
} stru3;
int main() {
printf("sizeof(stru)是%d\n", sizeof(stru));
printf("sizeof(stru1)是%d\n", sizeof(stru1));
printf("sizeof(stru2)是%d\n", sizeof(stru2));
printf("sizeof(stru3)是%d\n", sizeof(stru3));
return 0;
}






/*
   枚举类型演示
   */
#include <stdio.h>
#define   CHUN       0
#define   XIA        1
#define   QIU        2
#define   DONG       3
int main() {
//enum {CHUN, XIA, QIU = 20, DONG};   //枚举声明
printf("QIU是%d\n", QIU);
printf("DONG是%d\n", DONG);
return 0;
}




/*
   联合演示
   */
#include <stdio.h>
typedef union /*un*/ {
char buf[2];
int num;
} un;
int main() {
    un un1;
printf("un1.buf是%p,&(un1.num)是%p\n", un1.buf, &(un1.num));
printf("sizeof(un1)是%d\n", sizeof(un1));
return 0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值