结构推理 结构体和共用体
   1.实验目的
   ①掌握结构体型变量的定义和使用。
   ②掌握结构体型数组的概念和使用。
   ③掌握链表的概念,初步学会对链表进行操作。
   ④掌握共用体的概念与使用。
   2.实验内容
   编程序,然后上机调试运行。
   ①输入和运行以下程序
   union data
   {int i[2];
   float a;
   long b;
   char c[4];
   }u;
   main()
   { scanf("/%d,/%d",&u.i[0],&u.i[1]);
   printf("i[0]=/%d,i[1]=/%d,a=/%f,b=/%ld,c[0]=/%c,c[1]=/%c,c[2]=/%c,c[3]=/%c",u i[0],u i[1],u.a,u.b,u.c[0],u.c[1],u.c[2],u.c[3]);
   输入两个整数10000、20000给u.i[0]和u.i[1],分析运行结果。
   然后将scanf语句改为:
   scanf(”/%ld",&u.b);
   输入60000给b,分析运行结果。
   ②从键盘输入一个人的姓名、年龄、性别和身高,然后将它们打印出来。
   ③在某个选举区中共有500个选民,有6个候选人,要求编写一个程序来统计并显示每一个候选人的得票数量。
   ④在一个盒子中有红、绿、蓝、白四种颜色的球各若干。现在需要依次从盒子中取出两个球,问取出的两个球颜色不同的可能取法共有多少?编程打印出可能的取法。
【正确答案】实验内容
   ②#include"stdio.h"
   main()
   {
   struct person{
   char name[20];
   int age;
   int sex;
   float height;
   }personl;
   printf("please input name:\n");
   scanf("/%s",person1.name);
   printf("please input age:\n");
   scanf("/%d",&person1.age);
   printf("please input sex(0 for male and 1 for female):\n");
   scanf("/%d",&person1.sex);
   printf("please input height:\n");
   scanf("/%f",&person1.height);
   printf("the result is:\n");
   printf("name:/%s\nage:/%d\n",person1.name,person1.age);
   if(person 1.sex==0)
   printf("sex:male\n");
   if(person 1.sex==1)
   printf("sex:female\n");
   printf("height:/%.2fm\n",person 1.height);
   }
   ③#include"stdio.h"
   #include"string.h''
   struct person {
   char name[20];
   int sum;
   };
   main()
   {
   struct person candidate[6]={{"Zhang",0),{"Wang",0},{"Li",0},{"Zhao",0),{"Liu",0},{"Qian",0}};
   int i,j;
   char tname[20];
   for(i=0;i<500;i++)
   {
   scanf("/%s",tname);
   for(j=0;j<6;j++)
   if(strcmp(candidate[j].name,tname)==0)
   candidate[j].sum++;
   }
   printf("\n");
   for(j=0;j<6;j++)
   printf("/%10s:/%d\n",candidate[j].name,candidate[j].sum);
   }
   ④#include"stdio.h"
   main()
   {
   enum color{red,green,blue,white};
   enum color i,j,type;
   int loop,count;
   count=0;
   for(i=red;i<=white;i++)
   for(j=red;j<=white;j++)
   if(i!=j)
   {
   count++;
   printf("/%-3d",count);
   for(loop=1;loop<=2;loop++)
   {
   switch(loop){
   case 1:type=i;
   break;
   case 2:type=j;
   break;
   }
   switch(type){
   case red:printf("/%-10s","red");break;
   case green:printf("/%-10s","green");break;
   case blue:printf("/%-10s","blue");break;
   case white:printf("/%-10s","white");break;
   }
   }
   printf("\n");
   }
   printf("\n\ntotal:/%6d\n",count);
   }
【答案解析】