夜雨*漂雪 2021-10-31 14:01 采纳率: 50%
浏览 42
已结题

编写一个存储艺术作品的程序。艺术作品分为三类:Painting、Music和Chamber,Chamber是Music中的一类。要求如下所述。

①每件作品都要标明著者、作品标题、作品诞生年份及其所属分类。
② Painting类要求显示画的宽和高等尺寸信息。
③ Music类要求显示能够代表其内容的关键信息,例如"D Major"。
④ Chamber类要求显示其中包括的演奏人员的数目。

  • 写回答

1条回答 默认 最新

  • 从善若水 5G/6G通信领域优质创作者 2021-11-03 11:20
    关注
    
    #include<stdio.h>
    
    enum art_class{
        PAINTING,
        MUSIC,
        CHAMBER,
        ART_CLASS_MAX
    };
    
    typedef struct art_s{
    #define AUTHOR_STR_MAX (20)
    #define TITLE_STR_MAX (20)
    #define DATE_STR_MAX (50)
    #define ARTICLE_DESC_STR_MAX (100)
        char author[AUTHOR_STR_MAX];
        char title[TITLE_STR_MAX];
        char date[DATE_STR_MAX];
        enum art_class class;
        union{
            struct{
                int widgh;
                int height;
            }painting;
            union{
                struct{
                    char description[ARTICLE_DESC_STR_MAX];
                }music;
                struct{
                    char description[ARTICLE_DESC_STR_MAX];
                    int musicians_num;
                }chamber;
            }u;
        }; 
    }art_t;
    
    #define get_painting_info(c) (c)->painting
    #define get_music_info(c) (c)->u.music
    #define get_chamber_info(c) (c)->u.chamber
    
    int main()
    {
        art_t art[10];
        
        char *author="夜雨*飘雪"; 
        char *title="No.1";
        char *date = "2021年11月3日";
        char *description = "没谁了";
        
        memcpy(art[0].author,author,strlen(author)+1);
        memcpy(art[0].title,title,strlen(title)+1);
        memcpy(art[0].date,date,strlen(date)+1);
        art[0].class = CHAMBER;
        memcpy(get_chamber_info(&art[0]).description,description,strlen(description)+1);
        get_chamber_info(&art[0]).musicians_num=2;
        
        printf("author is %s\n",art[0].author);
        printf("title is %s\n",art[0].title);
        printf("date is %s\n",art[0].date);
        printf("class is %d\n",art[0].class);
        printf("description is %s\n",get_chamber_info(&art[0]).description);
        printf("musicians_num is %d\n",get_chamber_info(&art[0]).musicians_num);
        
        return 0;
    } 
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 4月23日
  • 已采纳回答 4月15日
  • 创建了问题 10月31日

悬赏问题

  • ¥15 Oracle中如何从clob类型截取特定字符串后面的字符
  • ¥15 想通过pywinauto自动电机应用程序按钮,但是找不到应用程序按钮信息
  • ¥15 如何在炒股软件中,爬到我想看的日k线
  • ¥15 seatunnel 怎么配置Elasticsearch
  • ¥15 PSCAD安装问题 ERROR: Visual Studio 2013, 2015, 2017 or 2019 is not found in the system.
  • ¥15 (标签-MATLAB|关键词-多址)
  • ¥15 关于#MATLAB#的问题,如何解决?(相关搜索:信噪比,系统容量)
  • ¥500 52810做蓝牙接受端
  • ¥15 基于PLC的三轴机械手程序
  • ¥15 多址通信方式的抗噪声性能和系统容量对比