C语言 结构体 struct Cat cat1;

引入

在这里插入图片描述
使用传统技术解决
需要定义多个变量或数组
在这里插入图片描述

结构体与结构体变量的关系示意图

类似Java类中的对象(结构体)与属性(结构体变量)
一切物体都可以看作对象(结构体)
在这里插入图片描述
补充:C语言数据类型
在这里插入图片描述

简单使用案例

在这里插入图片描述
代码
Cat是我们自己定义的数据类型
struct Cat cat1;//创建struct Cat的一个变量
在这里插入图片描述
在这里插入图片描述

练习

输入字符串,匹配person信息

#include<stdio.h>
#include<string.h>
//结构体 struct
//输入字符串,匹配person信息
#define SIZE 100
int main()
{char s[SIZE];printf("please input s:\n");gets(s);struct Person{char *name;int age;char *car;};//不要忘记;struct Person p1;struct Person p2;p1.name="dq";p1.age=18;p1.car="WT";p2.name="ww";p2.age=12;p2.car="ET";if(strcmp(s,p1.name)==0){printf("name=%s age=%d car=%s\n",p1.name,p1.age,p1.car);}else if(strcmp(s,p2.name)==0){printf("name=%s age=%d car=%s\n",p2.name,p2.age,p2.car);}else{printf("no found\n");}getchar();//entergetchar();return 0;
}

结构体和结构体变量的区别和联系

在这里插入图片描述

结构体变量在内存中的布局

在这里插入图片描述

结构体成员

声明结构体/结构体包含的变量
在这里插入图片描述
结构体成员的基本介绍
在这里插入图片描述
注意事项
在这里插入图片描述

结构体定义的三种形式

创建结构体的三种方式
方式1:
在这里插入图片描述
方式2:
在这里插入图片描述
方式3:匿名结构体
在这里插入图片描述

结构体成员的获取和赋值

方式1:
在这里插入图片描述
方式2:
在这里插入图片描述
使用案例:
在这里插入图片描述

整体使用代码

#include<stdio.h>
//定义结构体的方式&结构体成员的定义和赋值方式int main()
{//定义结构体的方式1struct A{int aage;char*aname;};struct A a={99,"A"};printf("age=%d name=%s\n",a.aage,a.aname);//定义结构体的方式2struct B{int bage;char*bname;}b;//没有b={90,"B"}; 因为struct B是一个整体,只有struct B b={90,"B"}b.bage=10;b.bname="B";printf("age=%d name=%s\n",b.bage,b.bname);//定义结构体的方式3struct{int cage;char*cname;}c={88,"C"};printf("age=%d name=%s\n",c.cage,c.cname);getchar();return 0;
}

结构体案例练习1

在这里插入图片描述
补充:spintf()函数

Sprint(字符串,”%原先的类型”,要转换的数据类型变量)
将其他数据类型转换到字符串中
“%8.2f”代表一共有8位,2代表小数的位置,不够用空格补齐

结构体是值传递,在传递时会拷贝一份值,对原来的值没有影响

#include<stdio.h>
//小狗案例
char*say(struct Dog dog);
struct Dog{//结构体char *name;int age;double weight;
}dog={"dog",3,10.8};
int main()
{char*s=say(dog);printf("结果:%s\n",s);getchar();return 0;
}
char*say(struct Dog dog)//形参为struct Dog类型{static char info[100];//局部变量/*Sprint(字符串,”%原先的类型”,要转换的数据类型变量)将其他数据类型转换到字符串中*/sprintf(info,"name=%s age=%d weight=%.2f",dog.name,dog.age,dog.weight);dog.name="MMMM";//对输出的内容没有影响//结构体是值传递,在传递时会拷贝一份值,对原来的值没有影响return info;
}

结构体案例练习2

在这里插入图片描述
代码

#include<stdio.h>
//结构体--盒子案例
char* info(struct Box box);
struct Box{double l;//长double w;//宽double h;//高
};
int main()
{double l;//长double w;//宽double h;//高printf("please input the information of box:\n");//double %lfscanf("%lf %lf %lf",&l,&w,&h);struct Box box={l,w,h};printf("information:%s\n",info(box));getchar();//entergetchar();return 0;}
char* info(struct Box box)
{static char s[100];//局部变量--staticdouble v=box.l*box.w*box.h;sprintf(s,"l=%.2f w=%.2f h=%.2f v=%.2f",box.l,box.w,box.h,v);return s;
}

结构体案例练习3

在这里插入图片描述

代码:
strcmp()==0与!strcmp()效果一样
!strcmp()//0代表假,非0为真,所以使用!取反(真取反为0)

visitor.name是数组,本身就是地址,而visitor.age是整型变量,要使用&visitor.age取地址(优先级:.高于&)

*visitor:获取的是visitor本身

#include<stdio.h>
#include<string.h>
//结构体--景区门票案例:使用地址传递//函数原型/声明
double ticket(struct Visitor*visitor);
struct Visitor{char name[10];int age;double pay;//需要支付的门票
} visitor;
int main()
{int i=1;while(1){printf("please input information%d:name age\n",i);scanf("%s %d",visitor.name,&visitor.age);if(!(strcmp(visitor.name,"n"))){break;//结束while循环}visitor.pay=ticket(&visitor);printf("pay=%.2f\n",visitor.pay);i++;}printf("exit\n");getchar();//entergetchar();return 0;
}
//使用结构体指针,传递地址,提高效率
double ticket(struct Visitor*visitor)
{//使用*visitor取的具体的visitor变量if((*visitor).age>=18)return 20;elsereturn 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/446530.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言 共用体/联合体 union

引入 传统技术的缺陷—结构体 共用体基本介绍 共用体与结构体一样都是值传递 定义共用体的三种方式 内存布局 共用体数据空间占用最大的成员的数据空间大小 案例解析 1) 2) 3) 4) 注: 1010 1101 0101 0100所对应的十进制是负数 计算机中的二进制都是以补码存储的,所…

C语言 项目练习-家庭收支软件

目标 需求说明 界面说明 登记收入界面: 登记支出界面 收支明细界面 退出界面 项目代码改进要求 自己完成的代码 版本1 #include<stdio.h> #include<string.h> void choose(int button,int i); //项目--家庭收支软件 static double total10000;//总金额 #de…

c++ fmt 库安装和使用示例、clion配置

安装 git clone https://github.com/fmtlib/fmt.gitmake .mkae && make install CLion使用 使用和安装存在出入下载源码&#xff0c;可以先 clone 到你的项目中去&#xff0c;https://github.com/fmtlib/fmt &#xff0c;我放到的是项目的 dependencies 目录然后在…

C语言 项目 CRM系统(客户信息管理系统)

项目目标 项目需求说明 系统界面 1)添加客户界面 通过编号来区分客户 2)删除客户界面 对用户输入的编号进行核查,存在与否,合法与否 3)显示客户列表界面 4)修改客户信息的界面 项目设计 Customer结构体的设计 CRM系统结构框架图 案例代码 #include <stdio.h>…

代码重构 防火墙 相关知识

参考 依据Linux命令以及sysconf下现有的iptables命令&#xff0c;详见hsm_sysconf_server/src/sysconf_server.cpp中的firewall规则。 接口名称 firewall_manager 目的(现实) 根据网口直连获取当前eth0和eth1的各种信息保证设置的正确性 以及要针对管理口和服务口设计不…

C语言 文件的基本介绍

基本介绍 输入流与输出流 重点在C程序(内存)的数据移动方向 对于C程序(内存) 输入数据:输入流 输出数据:输出流 输入 和输出 C标准库 标准输入输出库 标准文件 getchar()&putchar()函数 代码 #include<stdio.h> #include<stdlib.h> //文件--getchar()和…

ubuntu修改字体 样式

使用 快捷键 ctrlaltt 打开终端安装gnome-tweaks桌面管理工具 sudo apt install gnome-tweaksaltf2 在运行窗口输入 gnome-tweaks 命令&#xff0c;然后回车打开优化窗口&#xff0c;选择第二个front字体选项ubuntu显示中文

C语言 文件的读写

引入 OS操作系统 打开文件fopen()函数 读写模式: r:读取已有文件 w:文件不存在,创建文件并写入文件.文件存在,内容清零,再写入文件 a: 文件不存在,创建文件并写入文件.文件存在,以追加的形式写入文件 r:读写已有文件 w:文件不存在,创建文件并读写文件.文件存在,内容清零,再…

StarWind V2V Image Converter:虚拟机镜像转换工具,可将 IMG 文件转换为 VMware VMDK 文件

操作流程 选择本地的需要转换的文件找到源文件的路径&#xff0c;img格式选择转化后的格式 第一个选择 第二个 速度快一些选择将转化后的文件的存储路径软件的下载链接 链接: https://pan.baidu.com/s/1Fe6yI42Zz9d_Q7aUhGe1FQ 提取码: 5vmv

数学建模基础知识

原型与模型 模型的分类 数学建模 数学建模的分类 成为建模大神 数学建模比赛 数学建模一般步骤 数学建模全过程 数学建模论文写作 1&#xff09;摘要:是决定最后获奖等级的关键 2&#xff09;问题重述:使用自己的语言将问题重述一次 3&#xff09;符号说明:对于常见的或…

数学建模 线性规划模型基本原理

线性规划问题 例1.1 可行解&可行域 matlab标准形式及软件求解 标准形式: C称为价值向量 如果是求max,加一个负号-c^T 如果是求Ax>b,加一个负号-Ax<b 使用matlab求线性规划例题 求解的是最大值:加上负号 y是求解的最优解 zeros()使用: zeros(n)&#xff1a;生…

接上文 ,解决 虚拟机VM,U盘(磁盘)装有系统,将其中系统安装到另外一块磁盘的具体操作

问题原因&#xff1a;接上文&#xff0c;将生成的vsdk格式的磁盘导入VM创建镜像&#xff0c;相关于U盘装载系统镜像&#xff0c;将U盘其中的镜像导入到磁盘里边&#xff0c;U盘是引导&#xff0c;会将系统最终装载到磁盘出错原因是因为 没有新建第二块磁盘 解决 新增一块磁盘如…

数学建模 层次分析法

简介 针对多目标,多准则或无结构特性的复杂决策问题 步骤 解决评价类问题 评价类问题: 资料查找: 1)查找相关文献 2)如果没有找到相关文献 3)搜索 通过上述步骤后得到的结果 构建层次结构模型 举例: 成对比较矩阵 标度表: 奇数:越大越重要 偶数:上述两相邻判断的中值…

接上文 VM安装的ubuntu系统,配置双网卡

点击编辑 进入虚拟网络编辑器 点击更改设置 补充&#xff1a;如何判定桥接至哪张网卡&#xff1f;进入win&#xff0c;winr 输入cmd&#xff1b;输入 systeminfo选中系统&#xff0c;点击右键&#xff0c;选中设置 重启系统使用 ifconfig查看&#xff0c;发现有eth0和eth1…

数学建模 趣味数模问题(数模入门)

狼羊人菜渡河问题 解答 试探法 因为有4个变量,所以一共有222*216种状态 找出其中不安全的状态:无人看守的状态下:狼羊一起,羊菜一起 人 狼 羊 菜(0是在对面,1是在这边) 狼羊一起:(0,1,1,0) (0,1,1,1) (1,0,0,0) (1,0,0,1) 羊菜一起:(0,0,1,1) (1,1,0,0) 其余的10个都是安全状态…

数学建模 整数规划的基本原理和标准形式

整数规划模型 变量限制为整数 一般解决运输问题和整数问题 分类: 研究的是纯整数规划问题 整数规划特点 实数的解不能直接四舍五入为整数,因为此时可能不满足约束条件 举例-合理下料问题 模型: 题目: 这是在使用材料 1)使用零件A1-Am毛胚,就是使用零件 2)下料方式B1-Bn就…

程序员 面试笔记 C++ 程序设计的基础 第10章

10.1.1 程序的编译和执行 以#开头的代码都属于预处理器处理的步骤#include 将头文件的内容包含进入当前源文件中#define 展开宏定义#ifdef 处理条件编译指令(#ifdef、ifndef、#if、#else、#elif、#endif)#other 处理其他宏指令(#error、#warning、#line、#pragma) 预…

数学建模 分支限界算法求解整数规划原理以及编程实现

引入 线性规划问题(松弛问题) 图解法: 使用图解法求出最优解,再使用四舍五入求出的整数解不满足条件 完全枚举法(穷举法):找出集合内所有满足条件的整数点,再带入不等式中,看是否有最优解 分支限界法 说明: 松弛问题:线性规划问题 ILP:整数规划,在线性规划的基础上对决策…

数学建模 割平面算法求解整数规划基本原理与编程实现

基本思想 松弛问题:线性规划 割掉一块全部都是小数的区域(这一部分取不到整数) 案例 1)横坐标x1,纵坐标x2 2)蓝色小三角形的区域:x2:(1,7/4) x1:(0,3/4) 这块区域,x1与x2完全取不到整数,所以直接切去 所以,此时取值范围变化了: x2<1把此约束条件带入,得到x11,x21,z2 3…