实验9 结构体

news2024/12/26 22:31:24

1、商品信息处理

【问题描述】

设计结构体,用于存储商品的信息,包含商品编号、商品名称、商品价格以及商品折扣信息。

设计函数input,实现商品数据的输入。

设计函数display,实现商品信息的输出。

在主函数main中定义keyboard结构体变量,用来处理商品键盘的数据。

定义一个结构体数组,用于存储3种电器商品的信息。

【输入形式】

输入商品的编号、名称、价格以及折扣信息

【输出形式】

输出商品的编号、名称、价格、折扣以及实际价格信息

【样例输入】

1010 keyboard 89.50 0.85

1021 fridge 1024.00 0.95

1022 A/C 2058.50 0.90

1023 TV 3001.88 0.95


【样例输出】

No:1010 name:keyboard price:89.50 discount:0.85 real price:76.08

No:1021 name:fridge price:1024.00 discount:0.95 real price:972.80

No:1022 name:A/C price:2058.50 discount:0.90 real price:1852.65

No:1023 name:TV price:3001.88 discount:0.95 real price:2851.79

#include <stdio.h>
typedef struct _PRODUCR
{
    int number;
    char name[20];
    double price;
    double discount;
} PRODUCT, *PPRODUCT;
void input(PRODUCT *p);
void input(PRODUCT *p)
{
    scanf("%d", &p->number);
    scanf("%s", p->name);
    scanf("%lf", &p->price);
    scanf("%lf", &p->discount);
}
void display(PRODUCT *p)
{
    printf("No:%d ", p->number);
    printf("name:%s ", p->name);
    printf("price:%.2lf ", p->price);
    printf("discount:%.2lf ", p->discount);
    printf("real price:%.2lf\n", p->discount * p->price);
}
int main() //主函数
{
    int i;
    PRODUCT kyeboard; //请定义结构体类型 PRODUCT
    PRODUCT ElecDevice[3];
    input(&kyeboard); //请定义函数 input
    for (i = 0; i < 3; i++)
    {
        input(&ElecDevice[i]);
    }
    display(&kyeboard); //请定义函数 display
    for (i = 0; i < 3; i++)
    {
        display(&ElecDevice[i]);
    }
    return 0;
}

2、利用链表实现歌曲播放列表

【问题描述】

(1)利用链表结构(PLAY_LIST),为某媒体播放器建立一个播放列表(playList),该链表的每一个节点包括:歌曲编号(number)、歌曲名称(name)、歌手姓名(artist)。

(2)建立4个函数,以实现对播放列表操作。函数的原型如下:

    PLAY_LIST*  createList(); /*创建播放列表*/

    PLAY_LIST* insertItem(PLAY_LIST* pPlayList,

    PLAY_LIST* pNewPlayList); 

    /*在播放列表中添加一首歌曲*/

    PLAY_LIST* deleteItem(PLAY_LIST* pPlayList, 

    int iItemNumber); 

    /*在播放列表中删除编号为iItemNumber的歌曲*/

    void displayList(PLAY_LIST* pPlayList); /*显示整个播放列表中的所有信息*/

(3)在主函数中定义一个链表playList。

   A)利用函数createList创建播放列表playList,并在其节点上依次存储编号为1100、1101、1103的3首歌曲,并调用displayList函数显示此时整个播放列表中的所有信息。

   B)调用insertItem函数将编号为1102的歌曲添加到playList中,并显示整个播放列表中的所有信息。

   C) 调用deleteItem函数将编号为1101的歌曲从playList中删除,并显示整个播放列表中的所有信息。

【输入形式】输入歌曲的信息

【输出形式】输出链表中所有歌曲的信息

显示列表信息时,每一个成员占10列,并左对齐。

即:

No        name      singer    

1100      ABC       Jack      

【样例输入】

1100

ABC

Jack

1101

Wind

Li

1103

Sky

Wang

-1

1102

OldStory

Qi

-1

【样例输出】

Create new playlist:

Please input song No, if No<0 end input:

Please input song name:

Please input singer name:

Please input song No, if No<0 end input:

Please input song name:

Please input singer name:

Please input song No, if No<0 end input:

Please input song name:

Please input singer name:

Please input song No, if No<0 end input:

playlist:

No        name      singer   

1100      ABC       Jack    

1101      Wind      Li        

1103      Sky       Wang      

Insert item to playlist:

Please input song No, if No<0 end input:

Please input song name:

Please input singer name:

Please input song No, if No<0 end input:

playlist:

No        name      singer    

1100      ABC       Jack      

1101      Wind      Li        

1102      OldStory  Qi        

1103      Sky       Wang      

Delete item from playlist:

playlist:

No        name      singer    

1100      ABC       Jack      

1102      OldStory  Qi        

1103      Sky       Wang   

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct PLAY_LIST
{
	int iNumber;
	char strName[20];
	char strArtist[20];
	struct PLAY_LIST *pNext;
	int pTemp;
};
int inputItem(struct PLAY_LIST* pPlayList)
{
	printf("Please input song No, if No<0 end input:	\n");
	scanf("%d",&pPlayList->iNumber);
	if(pPlayList->iNumber<0)
		return 0;			
	printf("Please input song name:\n");	
	scanf("%s",pPlayList->strName);	
	printf("Please input singer name:\n");
	scanf("%s",pPlayList->strArtist);
	return 1;
}
struct PLAY_LIST*  createList()
{
	int iResult=0;
	struct PLAY_LIST *pListHead,*pTemp,*pNewList;
	pTemp=pNewList=(struct PLAY_LIST*)malloc(sizeof(struct PLAY_LIST));
	pNewList->pNext=NULL;	
	pListHead=NULL;	
	iResult=inputItem(pNewList);
	if(iResult)	{	pListHead=pNewList;	}
	while(iResult)	{
		pNewList=(struct PLAY_LIST*)malloc(sizeof(struct PLAY_LIST));
		pNewList->pNext=NULL;
		iResult=inputItem(pNewList);		
		if(iResult)	{
			pTemp->pNext=pNewList;
			pTemp=pNewList;
		}
	}
	return pListHead;
}
struct PLAY_LIST* insertItem(struct PLAY_LIST* pPlayList,struct PLAY_LIST* pNewPlayList)
{
	struct PLAY_LIST *p1,*p2;
	p1=p2=pPlayList;
	if(pPlayList==NULL)
	{
		pPlayList=pNewPlayList;
		pNewPlayList->pNext=NULL;
	}
	else
	{
		while((pNewPlayList->iNumber>p1->iNumber)&&(p1->pNext!=NULL))
		{
			p2=p1;
			p1=p1->pNext;
		}
		if(pNewPlayList->iNumber<=p1->iNumber)
		{
			if(pPlayList==p1)pPlayList=pNewPlayList;
			else p2->pNext=pNewPlayList;
			pNewPlayList->pNext=p1;
		}
		else
		{
			p1->pNext=pNewPlayList;
			pNewPlayList->pNext=NULL;
		}
	}
	return pPlayList;
}
struct PLAY_LIST* deleteItem(struct PLAY_LIST* pPlayList,int iItemNumber)
{
	struct PLAY_LIST *p1,*p2;
	if (pPlayList == NULL)return(pPlayList); 
	p1=p2=pPlayList;
	while(iItemNumber!=p1->iNumber&&p1->pNext!=NULL)
	{
		p2=p1;p1=p1->pNext;
	}
	if(iItemNumber==p1->iNumber)
	{
		if(p1==pPlayList)
			pPlayList=p1->pNext;
		else p2->pNext=p1->pNext;
	}
	return pPlayList;
}
void print(struct PLAY_LIST *head)
{
	struct PLAY_LIST *p;
	printf("playlist:\n");
	printf("No        name      singer\n");
	p=head;
	if(head!=NULL)
		do
		{
			printf("%-10d%-10s%-10s\n",p->iNumber,p->strName,p->strArtist);
			p=p->pNext;
		}while(p!=NULL);
}
int main()
{
	struct PLAY_LIST *head;
	int i;
	printf("Create new playlist:\n");
	head=createList();
	print(head);
	printf("Insert item to playlist:\n");
	insertItem(head,createList());
	print(head);
	printf("Delete item from playlist:\n");
	scanf("%d",&i);
	head=deleteItem(head,1101);
	print(head);
	return 0;
}

3、位段的使用

【问题描述】

(1)在一个显示系统中,需要在任意位置显示1个或者2个字符,为此请根据表9-3设计一种数据结构。其中当label=0时,content的16位数据中低8位为英文字符,高8位的数据丢弃。当label=1时, content的16位数据为2个英文字符。

表9-3  位段的结构 

(2)建立2个函数,函数的原型如下:
PACK_DATA packData(unsigned uRow,unsigned uCol, unsigned uLabel,

char * pContent); /*封装数据,即将数据按照表9-4方式存储*/

void unpackData(PACK_DATA data); /*将封装的数据提取出来,并安装要求显示在屏幕上。*/

(3)考虑数据(content)可能是1个或者2个英文字符的情况。在主函数中,2次调用函数packData(),将信息1(在第2行第3列显示英文字符X)和信息2(在第3行第4列显示2个字符OK)封装好;然后2次调用函数unpackData() 将上一步封装好的数据提取并显示出来。

【输入形式】

输入显示数据的信息。第一个数据为行号,第二个数据为列号,第三个数据为1个或2个字符标志,第4部分数据为显示的数据。

【输出形式】正确的地方显示数据

【样例输入】1 2 1 OK

【样例输出】(一个空格,从第2列开始显示)OK

#include <stdio.h>
typedef struct _PACK_DATA
{
    unsigned int uRow : 3;
    int uCol : 3;
    unsigned char uLabel : 2;
    unsigned short uContent : 16;
} PACK_DATA, *PPACK_DATA;
PACK_DATA packData(unsigned uRow, unsigned uCol, unsigned uLabel, char *pContent)
{
    PACK_DATA pack_data;
    pack_data.uRow = uRow;
    pack_data.uCol = uCol;
    pack_data.uLabel = uLabel;
    pack_data.uContent = *(unsigned short *)pContent;
    return (pack_data);
}
void unpackData(PACK_DATA data)
{
    int i;
    char temp[3];
    for (i = 0; i < data.uRow; i++)
        printf("\n");
    for (i = 0; i < data.uCol; i++)
        printf(" ");
    if (data.uLabel == 1)
    {
        temp[0] = data.uContent & 0xff;
        temp[1] = (data.uContent >> 8) & 0xff;
        temp[2] = '\0';
        printf("%s\n", temp);
    }
    else
        printf("%c\n", (char)data.uContent);
}
int main()
{
    unsigned a, b, c;
    char A[10];
    PACK_DATA data;
    scanf("%d %d %d %s", &a, &b, &c, A);
    data = packData(a, b, c, A);
    unpackData(data);
    return 0;
}

4、根据数字输出对应的月份名

【问题描述】

编写程序,根据用户输入的数字(1~12),输出相应的月份名;输入不在范围,则输出“Error!”。要求:用枚举类型实现。

【输入形式】输入1~12

【输出形式】输出January~December

【样例输入】2

【样例输出】February

测试用例2

【样例输入】15

【样例输出】Error!

#include <stdio.h>
enum Mouths
{
  Jan=1,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec
};
int main()
{
    int i;
    scanf("%d",&i);
    if (i<1||i>12)
    {
        printf("Error!");
    }
    else
    {
        switch (i)
        {
        case Jan:
            printf("January\n");
            break;
        case Feb:
            printf("February\n");
            break;
        case Mar:
            printf("March\n");
            break;
        case Apr:
            printf("April\n");
            break;
        case May:
            printf("May\n");
            break;
        case Jun:
            printf("June\n");
            break;
        case Jul:
            printf("July\n");
            break;
        case Aug:
            printf("August\n");
            break;
        case Sep:
            printf("September\n");
            break;
        case Oct:
            printf("October\n");
            break;
        case Nov:
            printf("November\n");
            break;
        case Dec:
            printf("December\n");
            break;
        }
    }
    return 0;
}

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

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

相关文章

国外解压视频素材哪里找?五个海外解压视频素材网站推荐

国外解压视频素材哪里找&#xff1f;五个海外解压视频素材网站推荐 如果你正在寻找国外的解压视频素材&#xff0c;那么今天这篇文章一定能帮助你。无论是修牛蹄、洗地毯&#xff0c;还是切肥皂、玩解压游戏等&#xff0c;下面分享的几个网站都是你找到高质量海外解压视频素材…

信息抽取数据集处理——RAMS

引言 RAMS数据集&#xff08;RAMS&#xff1a;Richly Annotated Multilingual Schema-guided Event Structure&#xff09;由约翰斯霍普金斯大学于2020年发布&#xff0c;是一个以新闻为基础的事件抽取数据集。它标注了9,124个事件&#xff0c;涵盖了139种不同的事件类型和65种…

celery 项目中mysql 数据库连接数耗尽事故记录

python 项目中使用 celery 中导致mysql数据库连接耗尽记录【mysql数据库连接池使用错误】 结论&#xff1a;由于使用 celery 进行项目的多任务管理&#xff0c;在worker任务定义的过程中&#xff0c;使用了 dbutils 中的 PooledDB 连接池进行 mysql数据库连接&#xff0c; 因此…

IO密集型任务及Vertx框架入门

注意&#xff1a; 本文内容于 2024-10-02 02:25:47 创建&#xff0c;可能不会在此平台上进行更新。如果您希望查看最新版本或更多相关内容&#xff0c;请访问原文地址&#xff1a;IO密集型任务及Vertx框架入门。感谢您的关注与支持&#xff01; 一、背景 1.1 铺垫知识 涉及到…

C++入门基础知识112—【关于C++嵌套 switch 语句】

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///C爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于C嵌套 switch 语句的相关内容&#xff…

C++20中头文件numbers的使用

<numbers>是C20中新增加的头文件&#xff0c;提供一组常量用于表示数学中的某些特殊值&#xff0c;此头文件是numeric库的一部分。包括&#xff1a; 1. 圆周率π:std::numbers::pi、std::numbers::pi_v<T> 2. 圆周率π的倒数&#xff1a;numbers::inv_pi、std::num…

灵当CRM data/pdf.php 任意文件读取漏洞复现

0x01 产品简介 灵当CRM是一款专为中小企业打造的智能客户关系管理工具,由上海灵当信息科技有限公司开发并运营。广泛应用于金融、教育、医疗、IT服务、房地产等多个行业领域,帮助企业实现客户个性化管理需求,提升企业竞争力。无论是新客户开拓、老客户维护,还是销售过程管…

软件开发----SQL基础每日刷题(转载于牛客)

1. 查询语句select stuff(lo ina,3, 1, ve ch)结果为&#xff1f; A love B love china C china love D china 正确答案&#xff1a;B 解析&#xff1a; STUFF(原字符, 开始位置, 删除长度, 插入字符) 从指定的起点处开始删除指定长…

六tomcat

​​​​​​ Java Web环境搭建 1. 初识Tomcat Tomcat 服务器是一个免费的开放源代码的Web 应用服务器&#xff0c;属于轻量级应用服务器&#xff0c;在中小型系统和并发访问用户不是很多的场合下被普遍使用&#xff0c;是开发和调试JSP 程序的首选。Tomcat 是 Apache 服务器…

redis集成到spring boot中使用

&#xff08;一&#xff09;添加依赖 redis服务器在官网中公开了自己使用的协议--RESP&#xff0c;所以我们可以使用这个协议来访问redis服务器&#xff0c;但是如果我们要自己实现库&#xff0c;那肯定是非常麻烦的&#xff0c;所以我们可以使用网上的库&#xff0c;我们直接调…

读数据工程之道:设计和构建健壮的数据系统08主要架构概念

1. 域和服务 1.1. 域是你正在为其构建的现实世界主题区域 1.2. 服务是一组功能&#xff0c;其目标是完成一项任务 1.3. 一个域可以包含多个服务 1.4. 确定领域中应包含的内容 1.4.1. 确定领域应该包含什么以及要包括哪些服务时&#xff0c;最好的建议是简单地去与用户和利益…

SQLAlchemy入门:详细介绍SQLAlchemy的安装、配置及基本使用方法

SQLAlchemy是一个流行的Python SQL工具包和对象关系映射&#xff08;ORM&#xff09;框架&#xff0c;它为开发人员提供了一种高效、灵活的方式来与数据库进行交互。本文将详细介绍SQLAlchemy的安装、配置及基本使用方法&#xff0c;并通过代码示例和案例分析&#xff0c;帮助新…

C++ | Leetcode C++题解之第478题在圆内随机生成点

题目&#xff1a; 题解&#xff1a; class Solution { private:mt19937 gen{random_device{}()};uniform_real_distribution<double> dis;double xc, yc, r;public:Solution(double radius, double x_center, double y_center): dis(0, 1), xc(x_center), yc(y_center),…

Web前端高级工程师培训:异步处理专题

异步处理专题 课前准备 工具 编辑器 VSCode浏览器 Chorme 前置知识 ES6基础语法 课堂主题 同步及异步概念方块运动的实现promise的用法then的返还值Async 函数 和 await 课堂目标 理解并学会使用promise使用方式以及async 、await的使用 同步异步概念 js是单线程 单线程…

动态规划-多状态问题——LCR.090.打家劫舍

1.题目解析 题目来源&#xff1a;LCR.090.打家劫舍——力扣 测试用例 2.算法原理 1.状态表示 每一个房子都有两个状态&#xff1a;被偷与不被偷&#xff0c;因此需要两个dp表f/g来表示被偷与不被偷&#xff0c;其中f[i]/g[i]表示小偷走到第i个位置的最大偷钱数 2.状态转移方程…

【开源物联网平台】Fastbee系统稳定性和压测报告

目录 一、机器准备 二、压测步骤 2.1 去除认证&#xff0c;修改clientid识别问题 2.2 添加重发布脚本 三、压测结果 四、压测工具使用 一、机器准备 准备两台服务器&#xff0c;一台为部署fastbee服务端应用&#xff0c;另一台为客户端压力机。其中&#xff1a; fastbee…

TensorRT-LLM七日谈 Day3

今天主要是结合理论进一步熟悉TensorRT-LLM的内容 从下面的分享可以看出&#xff0c;TensorRT-LLM是在TensorRT的基础上进行了进一步封装&#xff0c;提供拼batch&#xff0c;量化等推理加速实现方式。 下面的图片更好的展示了TensorRT-LLM的流程&#xff0c;包含权重转换&…

动态规划-简单多状态dp问题——面试题17.16.按摩师

多状态问题的核心就是每个位置不止有一个状态&#xff0c;因此需要多个dp表表示不同状态对应位置的值&#xff0c;然后根据题目考虑特定情况写出状态转移方程即可 1.题目解析 题目来源&#xff1a;面试题17.16.按摩师——力扣 测试用例 2.算法原理 1.状态表示 这里与路径问…

红米AC2100路由器原官方固件关闭IPv6防火墙

红米AC2100路由器原官方固件关闭IPv6防火墙 问题背景 我家里宽带开通了IPv6&#xff0c;并且获得了公网的IPv6地址。在同一Wi-Fi内部&#xff0c;可以使用公网IPv6正常访问。 但是&#xff0c;当我切换为手机流量&#xff0c;也就是公网环境&#xff0c;访问就失败了。 问题…

苹果最新论文:LLM只是复杂的模式匹配 而不是真正的逻辑推理

大语言模型真的可以推理吗&#xff1f;LLM 都是“参数匹配大师”&#xff1f;苹果研究员质疑 LLM 推理能力&#xff0c;称其“不堪一击”&#xff01;苹果的研究员 Mehrdad Farajtabar 等人最近发表了一篇论文&#xff0c;对大型语言模型 &#xff08;LLM&#xff09; 的推理能…