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 Stata链式中介效应代码修改
  • ¥15 latex投稿显示click download
  • ¥15 请问读取环境变量文件失败是什么原因?
  • ¥15 在若依框架下实现人脸识别
  • ¥15 网络科学导论,网络控制
  • ¥100 安卓tv程序连接SQLSERVER2008问题
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错