习题六1. 从下列四个选项中选择一个正确的填入括号中。
(1)在说明一个结构体变量时系统分配给它的存储空间是( D)。
A该结构体中第一个成员所需存储空间B该结构体中最后一个成员所需存储空间C该结构体中占用最大存储空间的成员所需存储空间D该结构体中所有成员所需存储空间的总和(2)在说明一个共用体变量时系统分配给它的存储空间是(D )。
A该共用体中第一个成员所需存储空间B该共用体中最后一个成员所需存储空间C该共用体中占用最大存储空间的成员所需存储空间D该共用体中所有成员所需存储空间的总和(3)共用体类型在任何给定时刻, ( B)。
A所有成员一直驻留在内存中B只有一个成员驻留在内存中C部分成员驻留在内存中D没有成员驻留在内存中(4)以下定义结构体类型的变量st1,其中不正确的是(A )A typedef stuct student{int num;int age;}STD;STD st1;B struct student{int num,age;}st1;C struct{int num;float age;}st1;D struct student{int num;int age;};struct student st1;(5)已知职工记录描述为:struct workers{int no;char name[20];char sex;struct{int day;int month;int year;}birth;};struct workers w;设变量w中的”生日”应是”1993年10月25日”,下列对”生日”的正确赋值方式是( C)。
A day=25; month=10; year=1993;B ==10; =1993;C =25; =10; =1993;(6)设有如下定义:struct sk{int a;float b;}data,*p;若有p=&data;则对data中的a成员的正确引用是( B)。
A (*p).B (*p).aC p->D 填空(1)若有以下说明和定义且数组w和变量k已正确赋值,则对w数组中第k个元素中各成员的正确引用形式是 w[k-1].b、 w[k-1].c 、 w[k-1].d 。
struct aa{int b;char c;double d;};struct aa w[10];int k=3;(2)若有以下说明和定义,则对成员的另外两种引用形式是 x->b-> 和 . 。
struct st{int a;struct st *b;}*p, x;p=&x;3.阅读下面程序,写出运行结果。
(1),ffffffcc#include <>main( ){struct byte{int x;char y;};union{int i[2];long j;char m[2];struct byte d;}r,*s=&r;s->j=0x;printf("%x,%x\n",s->,s->;}(2)结果:1,minicomputer#include <>struct tree{int x;char *s;}t;func(struct tree t ){=10;="computer";return(0);}main(){=1;="minicomputer";func(t);printf("%d,%s\n",,;}#include <>..................................................结果:.0,<null>struct tree{int x;char *s;}t;func(struct tree t ){=10;="computer";return(0);}main(){编写程序输入一个学生记录, 记录包含学号、姓名、性别和成绩信息,从键盘输入这些数据,并且显示出来。
#include<>struct student{int no;char name[20];char sex[2];float score;}stu1;main(){printf("*********请输入该学生的学号、姓名、性别和成绩:\n");scanf("%d %s %s %f",&,,,&;printf("学号:%d\n 姓名:%s\n 性别:%s\n 成绩:%f\n",,,,;}/*5.有若干运动员,每个运动员包括编号、姓名、性别、年龄、身高、体重。
如果性别为男,参赛项目为长跑和登山;如果性别为女,参赛项目为短跑、跳绳。
用一个函数输入运动员信息,用另一个函数输出运动员的信息,再建立一个函数求所有参赛运动员每个项目的平均成绩。
*/#include<>#include<>char items1[2]={'长跑','登山'};char items2[2]={'短跑','跳绳'};void InputAthInfo();void outputAthInfo();void items_Avg();struct athlete{int num;char name[10];char sex;int age;float height;float weight;char items[2];}ath[2];void InputAthInfo(){int i;for( i=0;i<2;i++){printf("请输入第%d个运动员的信息:",i);scanf("编号:%d\n 姓名:%s\n 性别: %c\n 年龄:%d\n 身高: %f\n 体重:%f\n ",&ath[i].num ,ath[i].name,ath[i].sex,&ath[i].age,&ath[i].height,&ath[i].weight);}}void outputAthInfo(){ int j;printf("编号\t 姓名\t 性别\t 年龄\t 身高\t 体重\t 项目\n" );for(j=0;j<2;j++){if(ath[j].sex=='m'||ath[j].sex=='M')strcpy(ath[j].items ,items1);elsestrcpy(ath[j].items,items2);um,ath[j].name,ath[j].sex,ath[j].age,ath[j].height,ath[j].weight,ath[j].items[0],ath[j].items[1]);}}void items_Avg(){int i;float sum1=0,sum2=0,avg1,avg2;for(i=0;i<2;i++){sum1+=ath[i].items[0];avg1=sum1/2;sum2+=ath[i].items[1];avg2=sum2/2;}printf("%-3f%-3f",avg1,avg2);}void main(){void InputAthInfo();void outputAthInfo();void items_Avg();}6.一个班有30名学生,每个学生的数据包括学号、姓名、性别、及2门课的成绩,现从键盘上输入这些数据,并且要求:(1) 输出每个学生2门课的平均分。
(2) 输出每门课的全班平均分。
(3) 输出姓名为”zhangliang”的学生的2门课的成绩。
/*6.一个班有30名学生,每个学生的数据包括学号、姓名、性别、及2门课的成绩,现从键盘上输入这些数据,并且要求:(1) 输出每个学生2门课的平均分。
(2) 输出每门课的全班平均分。
(3) 输出姓名为”zhangliang”的学生的2门课的成绩。
*/#include<>#include<>#define N 2void Input_Info();void score_avg();void everyStu_avgScore();void score_zhangliang();void main(){Input_Info();score_avg();everyStu_avgScore();score_zhangliang();}struct student{int no;char name[20];char sex[2];float score1;float score2;}stu[N];void Input_Info(){int i;printf("*************输入该班所有人的信息:(学号、姓名、性别、数学成绩、英语成绩,并用空格隔开)\n");o,stu[i].name,stu[i].sex,&stu[i].score1,&stu[i].score2);}}void everyStu_avgScore()core1+stu[i].score2)/2;for(i=0;i<N;i++)printf("第%d个学生的两门课平均分为%\n",i,oneself_avg[i]);}void score_avg()core1;sum2+=stu[i].score2;}avg1=(sum1)/2;avg2=(sum2)/2;printf("该班的数学平均成绩为%,英语平均分为%\n",avg1,avg2);}void score_zhangliang()ame=="zhangliang")core1,stu[i].score2 );}}7. 定义枚举类型money,用枚举元素代表人民币的面值。
包括1,2,5分;1,2,5角,1,2,5,10,50,100元。
enum money{fen1,fen2,fen5,jiao1,jiao2,jiao5,yuan1,yuan2,yuan5,yuan10,yuan20,yuan50,yuan 100}。