C语言——结构体的应用

归纳编程学习的感悟,
记录奋斗路上的点滴,
希望能帮到一样刻苦的你!
如有不足欢迎指正!
共同学习交流!
🌎欢迎各位→点赞 👍+ 收藏⭐ + 留言​📝
     路还在继续,梦还在期许。天高云远,至少看得见!

 一起加油! 

目录

一、题目:

二、分析:

三、知识点:

        指向结构体的指针变量作为函数参数

        结构体指针与函数 

四、代码实现: 

五、运行结果(这里假设3为教师):

​编辑 

 六、总结:


一、题目:

        某学校增加教师的工资。假设工资根据教师的职称增加:教授增加 500元副教授增加 300 元,讲师增加 200 元,助教增加 100 元。教师的信息有姓名、年龄、职和工资等,编写程序,计算每位教师增加后的工资(假设共有 100 位老师)

二、分析:

        分析:教师的基本信息包括: name(姓名)、age(年龄)、post(职称)和 wages(工资)。采用结构体类型存储基本信息。增加工资用 add()函数实现,实参和形参采用指向结构体类型的指针。

三、知识点:

        指向结构体的指针变量作为函数参数

        函数间传递结构体数据时,函数参数可以是结构体变量的成员,也可以是结构体变量,还可以是指向结构体的指针。
        常见的做法是将指向结构体的指针作为函数的实参,传递给调用的函数。这种传递方式相当于地址传递,指针形参变量和实参指针指向同一内存空间。需要注意的是,采用这种参数传递方式,在被调用的函数中如果对结构体成员进行赋值,则会改变上一级函数中结构体变量的值。

        结构体指针与函数 

        C 语言函数的参数传递都是传值的,一些应用程序需要用结构体数据作为参数进行传
递。一般情况下,虽然说 C 语言允许传递结构体数据,但是结构体使用的存储空间可能比较大,这就可能导致传送数据量过大影响程序的运行效率。如果选择结构体变量作为数,那么只能在该结构体使用的字节数比较少时使用。

        函数之间如果需要传递结构体数据,有经验的程序员一般采用传递结构体指针的方法这样就大幅减少了参数传递时的数据传送量,也意味着程序运行速度得以提高

        函数返回时道理也一样,在结构体的字节数比较多时,应该尽量避免返回一个结构类型的数据,而尽可能返回一个指向结构体的指针变量。

四、代码实现: 

#include<stdio.h>
#include<string.h>
#define N 100struct teach{//teach结构体定义 char name[11];int age;char post[11];double wages;
};double add(struct teach *);//add函数声明 int main(){struct teach man[N];int i;for(i=0;i<N;i++){//输入教师的基本信息 printf("输入第%d个教师的基本信息\n",i+1);printf("姓名: ");scanf("%s",man[i].name);printf("年龄:");scanf("%d",&man[i].age);printf("职称:");scanf("%s",man[i].post);printf("原工资:");scanf("%lf",&man[i].wages); }for(i=0;i<N;i++){//对每个教师调用add函数 printf("姓名:%s 调整后的工资:%.2f\n",man[i].name,add(&man[i]));}
}double add(struct teach *q){double addwage;if(strcmp(q->post,"教授")==0){q->wages+=500;}else if(strcmp(q->post,"副教授")==0){q->wages+=300;}else if(strcmp(q->post,"讲师")==0){q->wages+=200;}else {q->wages+=100;}addwage=q->wages;return addwage;
}

五、运行结果(这里假设3为教师):

 六、总结:

        利用结构体可以将多个相同或不同类型的数据组合在一起构成新数据类型。

        通常在源程序文件的开始部分定义结构体类型,以便本文件的所有函数中都能用它定义变量,数组和指针。

        当然也可以在函数中声明结构体类型,其有效范围仅限与该函数。

        最后,希望本篇文章对你有所帮助,也希望可以支持支持博主,后续博主也会定期更新学习记录,记录学习过程中的点点滴滴。若这篇文章中有哪些不正确的内容,欢迎大家在评论区和我交流讨论!

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

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

相关文章

webGL技术开发的软件类型

WebGL 是一种在浏览器中渲染 2D 和 3D 图形的 JavaScript API。通过 WebGL&#xff0c;你可以创建各种类型的软件项目&#xff0c;特别是那些需要强大图形渲染能力的项目。以下是一些你可以使用 WebGL 实现的软件项目类型&#xff0c;希望对大家有所帮助。北京木奇移动技术有限…

老生常谈之 JavaScript 中 0.1 + 0.2 != 0.3 的原因

先来一个模棱两可的说法&#xff1a;因为精度丢失、存储溢出的问题 先复习一下二进制的转换方法&#xff1a; 整数&#xff1a;除以基数&#xff0c;取余&#xff0c;自底向上小数&#xff1a;乘以基数&#xff0c;取整&#xff0c;自顶向下 接着&#xff0c;复习一下双精度…

【计算机基础】通过插件plantuml,实现在VScode里面绘制状态机

&#x1f4e2;&#xff1a;如果你也对机器人、人工智能感兴趣&#xff0c;看来我们志同道合✨ &#x1f4e2;&#xff1a;不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 &#x1f4e2;&#xff1a;文章若有幸对你有帮助&#xff0c;可点赞 &#x1f44d;…

redis运维(十五) 集合

一 集合 ① 概念 集合的元素在redis里面的世界是member集合&#xff1a; setset集合当中不允许重复的元素&#xff0c;而且set集合当中元素是没有顺序的,不存在元素下标 ② sadd、smembers、srem ③ sismember、srandmember、spop、scard spop 命令用于移除集合中的指定 …

sql语法大全

1&#xff0c;创建数据库 create database 数据库名字; 2,查看所有的数据库名称 show databases; MySQL服务器已有4个数据库&#xff0c;这些数据库都是MySQL安装时自动创建的。 information_schema 和 performance_schema 数据库分别是 MySQL 服务器的数据字典&#xff08;…

算法——滑动窗口(Sliding Window)

一、背景知识 滑动窗口算法&#xff08;Sliding Window&#xff09;&#xff1a; 在给定数组 / 字符串上维护一个固定长度或不定长度的窗口。可以对窗口进行滑动操作、缩放操作&#xff0c;以及维护最优解操作。题型一&#xff1a;固定长度题型二&#xff1a;不固定长度 二、例…

TypeScript 学习笔记 第二部分 webpack 创建typescript项目

【视频链接】尚硅谷TypeScript教程&#xff08;李立超老师TS新课&#xff09; 创建webpack 项目 IDE&#xff1a;webstorm 新建一个空的项目运行npm init初始化项目目录结构 1. 安装 webpack&#xff1a;构建工具webpack-cli&#xff1a; webpack的命令行工具typescript&am…

PCIE链路训练-状态机描述1

状态机描述 Config.linkwidth.start&#xff1a; 1. &#xff08;1&#xff09;Linkup 0 状态机没有执行链路宽度的升级&#xff08;upconfiguration of the Link width&#xff09;&#xff1a;那么tx会在所有active的dsp上发送TS1&#xff0c;其中link num为具体内容&a…

git stash 用法总结

目录 1&#xff0c;介绍场景1&#xff1a;场景2&#xff1a; 2&#xff0c;常用命令2.1&#xff0c;基础2.2&#xff0c;进阶1&#xff0c;存储时指定备注2&#xff0c;通过索引来操作指定的存储3&#xff0c;修改存储规则 2.3&#xff0c;查看 stash 修改的具体内容 1&#xf…

摩尔定律,梅特卡夫定律,吉尔德定律

信息系统的三大定律(摩尔定律&#xff0c;梅特卡夫定律&#xff0c;吉尔德定律)有一个清晰的视角&#xff1a; 信息系统不是左边的生产消费系统&#xff0c;而是右边的交易系统&#xff0c;交易系统与生产消费典型的区别在于信息交易过程会产生新的信息&#xff0c;就像钱一样…

c语言——俄罗斯方块

一、游戏效果 俄罗斯方块 二. 游戏背景 俄罗斯方块是久负盛名的游戏&#xff0c;它也和贪吃蛇&#xff0c;扫雷等游戏位列经典游戏的⾏列。 《俄罗斯方块》&#xff08;Tetris&#xff0c;俄文&#xff1a;Тетрис&#xff09;是一款由俄罗斯人阿列克谢帕基特诺夫于1984…

java http

超文本传输协议 超文本/html 工作方式 get / url 请求获取相应报文 http://xxxxxxxxxxxx.com/user?xxx xxx 协议类型 - 服务器地址 -路径 path 请求格式: head / body path路径进行处理资源 等同于报文请求: GET: /users HTTP/1.1 Host:api.github.com 响应报文 请求方式…

京东数据分析平台(京东运营数据采集):2023年10月京东白酒品牌销售排行榜

鲸参谋监测的京东平台10月份白酒市场销售数据已出炉&#xff01; 鲸参谋数据显示&#xff0c;10月份&#xff0c;京东平台上白酒的销量为340万&#xff0c;环比增长约16%&#xff0c;同比增长约37%&#xff1b;销售额为28亿&#xff0c;环比增长约20%&#xff0c;同比增长约122…

如何在Ubuntu的Linux系统中安装MySQL5.7数据库

前往MySQL数据库官网链接地址下载5.7数据库。 MySQL :: Download MySQL Community Server (Archived Versions)使用ssh的可视化工具将下载的mysql-5.7.40-linux-glibc2.12-x86_64.tar.gz文件上传到Linux服务器&#xff0c;并解压文件 tar -zxvf mysql-5.7.40-linux-glibc2.12-x…

基于蛇优化算法优化概率神经网络PNN的分类预测 - 附代码

基于蛇优化算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于蛇优化算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于蛇优化优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神经网络…

大数据预处理技术

文章目录 前言 大数据技术成为前沿专业 也是现在甚至未来的朝阳产业&#xff0c;大数据有分别是 数据预处理 数据存储 大数据处理和分析 数据可视化 部分组成 &#xff0c;大数据行业有数据则称王&#xff0c;大数据的核心是数据本身 怎么获取有价值的数据呢&#xff1f;本章讲…

Cent OS 8.2 安装 自定义硬盘 固定IP VMware

时间&#xff1a;20231122 环境&#xff1a;win11 、VMware 16 pro、Cent OS 8.2 说明&#xff1a;自定义安装方法、自定义硬盘分区、固定IP且能联网 1、使用自定义的方式安装虚拟机 此处选择典型&#xff0c;则会自动安装系统&#xff0c;无法自定义硬件以及配置信息 选择…

CCF CSP认证 历年题目自练Day49

题目一 此题用暴力枚举做过&#xff08;80分&#xff09;现如今终于用二维前缀和做到满分。 试题编号&#xff1a; 202309-2 试题名称&#xff1a; 坐标变换&#xff08;其二&#xff09; 时间限制&#xff1a; 2.0s 内存限制&#xff1a; 512.0MB 问题描述&#xff1a; 问题…

NFC:应用场景广泛的短距离通信技术

NFC&#xff1a;应用场景广泛的短距离通信技术 一、NFC 技术介绍1.1 NFC 技术应用场景1.2 NFC 技术优点1.3 NFC 工作原理 二、NFC 开发2.1 NFC 应用开发流程2.2 NFC 读取和写入2.3 NFC 读写功能示例 三、总结 一、NFC 技术介绍 NFC &#xff08;Near-field communication&…

分类预测 | Matlab实现基于PSO-PNN粒子群算法优化概率神经网络的数据分类预测

分类预测 | Matlab实现基于PSO-PNN粒子群算法优化概率神经网络的数据分类预测 目录 分类预测 | Matlab实现基于PSO-PNN粒子群算法优化概率神经网络的数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现基于PSO-PNN粒子群算法优化概率神经网络的数据…