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日

悬赏问题

  • ¥20 我要一个分身加定位两个功能的安卓app
  • ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥100 求采集电商背景音乐的方法
  • ¥15 数学建模竞赛求指导帮助
  • ¥15 STM32控制MAX7219问题求解答