当前位置: 首页 > news >正文

《C语言》结构体和联合体练习题--2

《C语言》结构体和联合体练习题–2

11. 嵌套联合体和结构体

题目描述:
编写一个C程序,定义一个结构体Employee,包含成员id(整数)、name(字符串)和一个联合体Contact,该联合体包含phone(字符串)和email(字符串)。输入一个员工的信息,包括联系方式(电话或邮箱),并输出。

解题思路:
定义结构体Employee,其中嵌套了一个联合体Contact。在主函数中,声明一个Employee变量,读取员工的ID、姓名和联系方式。由于联合体只能存储一个联系信息,用户需要选择是输入电话还是邮箱。最后,输出员工的信息。

详细代码:

#include <stdio.h>
#include <string.h>// 定义联合体Contact
union Contact {char phone[15];char email[50];
};// 定义结构体Employee,包含联合体Contact
struct Employee {int id;char name[50];union Contact contact;char contactType; // 'p'表示电话,'e'表示邮箱
};int main() {struct Employee emp;// 输入员工IDprintf("请输入员工ID: ");scanf("%d", &emp.id);getchar(); // 清除输入缓冲区的换行符// 输入员工姓名printf("请输入员工姓名: ");fgets(emp.name, sizeof(emp.name), stdin);// 去除换行符int i = 0;while(emp.name[i] != '\0') {if(emp.name[i] == '\n') {emp.name[i] = '\0';break;}i++;}// 输入联系方式类型printf("请输入联系方式类型(p-电话, e-邮箱): ");scanf(" %c", &emp.contactType);getchar(); // 清除输入缓冲区的换行符// 根据类型输入联系方式if(emp.contactType == 'p') {printf("请输入电话号码: ");fgets(emp.contact.phone, sizeof(emp.contact.phone), stdin);// 去除换行符int j = 0;while(emp.contact.phone[j] != '\0') {if(emp.contact.phone[j] == '\n') {emp.contact.phone[j] = '\0';break;}j++;}}else if(emp.contactType == 'e') {printf("请输入邮箱地址: ");fgets(emp.contact.email, sizeof(emp.contact.email), stdin);// 去除换行符int j = 0;while(emp.contact.email[j] != '\0') {if(emp.contact.email[j] == '\n') {emp.contact.email[j] = '\0';break;}j++;}}else {printf("无效的联系方式类型。\n");return 1;}// 输出员工信息printf("\n--- 员工信息 ---\n");printf("ID: %d\n", emp.id);printf("姓名: %s\n", emp.name);if(emp.contactType == 'p') {printf("电话号码: %s\n", emp.contact.phone);}else {printf("邮箱地址: %s\n", emp.contact.email);}return 0;
}

代码注释:

  • union Contact:定义一个联合体Contact,包含phoneemail两个字符串成员。
  • struct Employee:定义一个结构体Employee,包含idnamecontact(联合体)和contactType(字符,表示联系方式类型)。
  • getchar();:在读取字符或字符串后,清除输入缓冲区的换行符,避免影响后续的fgets读取。
  • 根据contactType,选择输入电话或邮箱,并存储到联合体的相应成员中。
  • 最后,输出员工的所有信息,包括根据类型选择输出的联系方式。

12. 联合体数组

题目描述:
编写一个C程序,定义一个联合体Data,包含成员i(整数)、f(浮点数)和str(字符串)。创建一个包含5个Data类型的数组,输入每个元素的类型和相应的值,最后输出所有数组元素的值。

解题思路:
定义联合体Data,包含ifstr三个成员。在主函数中声明一个包含5个Data的数组。对于每个数组元素,读取其类型标识(ifstr),然后根据类型输入相应的值。最后,遍历数组并根据类型标识输出存储的值。

详细代码:

#include <stdio.h>
#include <string.h>// 定义联合体Data
union Data {int i;float f;char str[20];
};// 定义结构体用于存储Data和类型标识
struct DataWithType {union Data data;char type; // 'i', 'f', 's'分别表示整数、浮点数和字符串
};int main() {struct DataWithType array[5];// 输入数组元素for(int idx = 0; idx < 5; idx++) {printf("请输入第 %d 个元素的类型(i-整数, f-浮点数, s-字符串): ", idx + 1);scanf(" %c", &array[idx].type);getchar(); // 清除输入缓冲区的换行符if(array[idx].type == 'i') {printf("请输入整数值: ");scanf("%d"
http://www.dtcms.com/a/324403.html

相关文章:

  • Excel合并同步工具V1.0
  • 比特币现货和比特币合约的区别与联系
  • 数据结构——哈希表、树、gdb调试、时间复杂度
  • 【走进Docker的世界】Docker环境搭建
  • 自动驾驶控制算法——Stanley 控制器
  • 构建健壮的商品数据采集服务:处理京东 API 限流与错误
  • python洛谷做题27:P5724 【深基4.习5】求极差 / 最大跨度值 / 最大值和最小值的差
  • mcp-go v0.37.0 版本发布:重大变更与新特性解析
  • 利用容器编排完成haproxy和nginx负载均衡架构实施
  • GitLab 零基础入门指南:从安装到项目管理全流程
  • Elasticsearch QueryDSL 教程
  • 应对高并发 - TCP/IP网络栈核心参数调优
  • 【递归、搜索与回溯算法】递归算法
  • 【代码随想录day 16】 力扣 513.找树左下角的值
  • 米哈游笔试——求强势顶点的个数
  • [python] typing 中的overload
  • Android视图回调机制:从post到ViewTreeObserver,从源码分析到最佳实践
  • MariaDB 数据库管理
  • 基于PyTorch一文讲清楚损失函数与激活函数并配上详细的图文讲解
  • Pytorch深度学习框架实战教程12:Pytorch混合精度推理,性能加速147%的技术实现
  • MPLS对LSP连通性的检测
  • 使用Blender可视化多传感器坐标系转换
  • 移动端常见的8大css兼容性问题和处理方法
  • #Linux内存管理# 浅析缺页中断中私有映射且发生写时复制COW的工作原理
  • 《Qt————Tcp通讯》
  • 容器网络隔离测试于VPS服务器环境的桥接模式验证
  • Docker 详细介绍及使用方法
  • 【大智慧数据】心智开花的时候
  • 数字图像处理3
  • 三、k8s 1.29 之 安装1网络 / ikuai路由器虚拟机安装