当前位置: 首页 > 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.xdnf.cn/news/1277821.html

相关文章:

  • 前端学习日记 - 前端函数防抖详解
  • 无人机集群协同三维路径规划,采用梦境优化算法(DOA)实现,Matlab代码
  • python魔法属性__doc__介绍
  • 区块链让物联网真正链接万物
  • Mysql系列--5、表的基本查询(上)
  • 【论文阅读】Deep Adversarial Multi-view Clustering Network
  • C语言:指针(2)
  • 基于ECharts的智慧社区数据可视化
  • Knuth‘s TwoSum Algorithm 原理详解
  • JS实现数组扁平化
  • 【C#补全计划】万类之父中的方法
  • Linux环境下实现简单TCP通信(c)
  • 《算法导论》第 16 章 - 贪心算法
  • [激光原理与应用-221]:设计 - 皮秒紫外激光器 - 常见技术难题、原因与解决方案
  • 博览会(树形DP)
  • 性能解析案例
  • Speaking T2 - Dining Hall to CloseDuring Spring Break
  • 论文复现与分析内容关于一种实用的车对车(V2V)可见光通信(VLC)传播模型
  • 攻击实验(ARP欺骗、MAC洪范、TCP SYN Flood攻击、DNS欺骗、DHCP饿死)
  • Doubletrouble靶机练习
  • Leaflet地图高亮与编辑功能实现
  • Jmeter性能测试之检测服务器CPU/Memory/磁盘IO/网络IO
  • 深度学习-卷积神经网络-AlexNet
  • 【走进Docker的世界】Docker环境搭建
  • 震动马达实现库函数版(STC8)
  • 机器学习——多元线性回归
  • C++移动语义、完美转发及编译器优化零拷贝
  • [创业之路-541]:经营分析会 - 企业的经营分析会,研发负责人负责提供哪些信息?
  • 【RocketMQ 生产者和消费者】- ConsumeMessageOrderlyService 顺序消费消息
  • 不同于传统的简并模分离圆极化天线,基于耦合谐振器的圆极化天线的原理是什么?