1.例:
2.数据定义:
(1)在内部定义共用体
#include <stdio.h>
struct
{
int num;
char name[10];
char sex;
char job;
union ///此处无类型
{
int clas;
char position[10];
}category;
}person[2];
(2)在外部定义共用体
#include <stdio.h>
union Categ ///有共用体类型
{
int clas;
char position[10];
}; ///与定义结构体类似
struct
{
int num;
char name[10];
char sex;
char job;
union Categ category;///调用
}person[2];
3.输入:
for(i=0;i<2;i++)
{
scanf("%d %s %c %c",
&person[i].num, person[i].name, &person[i].sex, &person[i].job);
if(person[i].job == 's')
scanf("%d", &person[i].category.clas);//班级
else if(person[i].job == 't')
scanf("%s", person[i].category.position); //职务
else
printf("Input error!");
}
4.输出
for(i=0;i<2;i++)
{
if (person[i].job == 's')
printf("%-6d%-10s%-4c%-4c%-10d\n",
person[i].num,
person[i].name,
person[i].sex,
person[i].job,
person[i].category.clas );
else
printf("%-6d%-10s%-4c%-4c%-10s\n",
person[i].num,
person[i].name,
person[i].sex,
person[i].job,
person[i].category.position );
}
5.枚举
(1)
题意:
口袋中有红、黄、蓝、白、黑5种颜色的球若干。
每次从口袋中依次取出3个球;
求得到3种不同色的球的取法,打印出每种排列的情况。
思路:
定义枚举类型color,其中有红、黄、蓝、白、黑5个枚举元素。
3个球需3个枚举变量;分别从“红”到“黑”,只要“颜色”不一样就将结果打出来。
用一个计数器(整型变量)记忆取出不同色球组合次数。
(2)
int main()
{
enum Color{red,yellow,blue,white,black};
enum Color i,j,k;
int n,loop;
n=0;
for (i=red;i<=black;i++)
for (j=red;j<=black;j++)
if (i!=j)
{
for (k=red;k<=black;k++)
if ((k!=i) && (k!=j))
{
n=n+1;
printf("%-4d",n);
printf("%d,%d,%d\n",i,j,k);
}
}
printf("\ntotal:%5d\n",n);
return 0;
}