dashidai_ 2023-01-01 01:40 采纳率: 94.1%
浏览 38
已结题

关于#c语言#的问题:定义union类型(整数、浮点数、长度为N的字符串),并使用typedef重定义union 类型,输入一组整数、浮点数、字符串

定义union类型(整数、浮点数、长度为N的字符串),并使用typedef重定义union 类型,输入一组整数、浮点数、字符串。计算这组数据中,整数的平均值;浮点数 的最大值和最小值;所有字符串的总的字符数。

  • 写回答

3条回答 默认 最新

  • 关注

    需要写一个函数判断数据是什么类型。运行结果:

    img

    代码:

    #define _CRT_SECURE_NO_WARNINGS 1
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define N 100
    union _MyUnion
    {
        int d1;
        float d2;
        char d3[N];
    };
    
    typedef union _MyUnion MyUnion;
    
    int isNmb(const char* p)
    {
        int i = 0;
        int cnt = 0;
        for (; p[i] != '\0'; i++)
        {
            if (p[i] == '.')
                cnt++;
            else if (p[i] >= '0' && p[i] <= '9')
                continue;
            else
                return 0;//非数字
        }
        if (cnt == 0)
            return 1; //整数
        else if (cnt == 1)
            return 2; //浮点数
        else
            return 0; //非数字
    }
    
    
    int main()
    {
        MyUnion u[10];
        int i = 0;
        int t = 0;
        float maxv,minv;
        int flag = 0; //标记是否已经有浮点型
        float ave = 0;
        int cnt = 0; //整数的个数
        int nlen = 0;
        printf("请输入10个数字或者字符串:");
        for (i = 0; i < 10; i++)
            scanf("%s", u[i].d3);
    
        
        for (i = 0; i < 10; i++)
        {
            t = isNmb(u[i].d3);
            if (t == 0) //字符串
                nlen += strlen(u[i].d3);
            else if (t == 1)
            {
                ave += atoi(u[i].d3);
                cnt++;
            }
            else
            {
                if (flag == 0)
                {
                    maxv = minv = atof(u[i].d3);
                    flag = 1;
                }
                else
                {
                    if (atof(u[i].d3) > maxv)
                        maxv = atof(u[i].d3);
                    if (atof(u[i].d3) < minv)
                        minv = atof(u[i].d3);
                }
            }
        }
        printf("整数的平均值:%.2f\n", ave / cnt); //保留2位小数
        printf("浮点数的最大值:%f,最小值:%f\n", maxv, minv);
        printf("所有字符串的总字符数:%d\n", nlen);
        return 0;
    }
    
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 1月9日
  • 已采纳回答 1月1日
  • 创建了问题 1月1日

悬赏问题

  • ¥15 需要数据库运行的图片
  • ¥15 如何获取vue-video-editor?
  • ¥100 vs2019 mfc程序如何实现64*64/48*48大小的真彩色工具栏
  • ¥15 全志v3s耳机音频输出口怎么外接功放
  • ¥15 华为ensp使用基本ACL限制公司网络访问
  • ¥15 帮我做下照片上的PLC题
  • ¥15 labview2022 使用modbus报缺少依赖?
  • ¥15 谷歌地图是不是不开通结算功能,api会使用不了哦
  • ¥15 unity腾讯云对象存储机型适配
  • ¥15 求全国交通咨询模拟代码,要求如下,可以完全在dev c++运行