定义union类型(整数、浮点数、长度为N的字符串),并使用typedef重定义union 类型,输入一组整数、浮点数、字符串。计算这组数据中,整数的平均值;浮点数 的最大值和最小值;所有字符串的总的字符数。
需要写一个函数判断数据是什么类型。运行结果:
代码:
#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;
}
这个很简单,看看例子就会: https://so.csdn.net/so/search?q=union%E7%B1%BB%E5%9E%8B%20&t=blog&u=&urw=
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!