结构推理
结构体和共用体
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);
}
【答案解析】