习题六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 w.day=25w.month=10; w.year=1993;C w.birth.day=25; w.birth.month=10; w.birth.year=1993;D birth.day=25; birth.month=10; birth.year=1993;(6)设有如下定义:struct sk{int a;float b;}data,*p;若有p=&data;则对data中的a成员的正确引用是(B)。
A (*p).data.aB (*p).aC p->data.aD p.data.a2.填空(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成员的另外两种引用形式是x->b-> 和p.b. 。
struct st{int a;struct st *b;}*p, x;p=&x;3.阅读下面程序,写出运行结果。
(1)98765432,ffffffcc#include <stdio.h>main( ){struct byte{int x;char y;};union{int i[2];long j;char m[2];struct byte d;}r,*s=&r;s->j=0x98765432;printf("%x,%x\n",s->d.x,s->d.y);}(2)结果:1,minicomputer#include <stdio.h>struct tree{int x;char *s;}t;func(struct tree t ){t.x=10;t.s="computer";return(0);}main(){t.x=1;t.s="minicomputer";func(t);printf("%d,%s\n",t.x,t.s);}#include <stdio.h>..................................................结果:.0,<null>struct treeint x;char *s;}t;func(struct tree t ){t.x=10;t.s="computer";return(0);}main(){//t.x=1;//t.s="minicomputer";func(t);printf("%d,%s\n",t.x,t.s);}(3)结果:34,12#include <stdio.h>main(){union{char s[2];int i;}a;a.i=0x1234;printf("%x,%x\n",a.s[0],a.s[1]);}(4)结果:1,2,30#include <stdio.h>struct st{int x;int *y;}*p;int s[]={10,20,30,40};struct st a[]={1,&s[0],2,&s[1],3,&s[2],4,&s[3]};main(){p=a;printf("%d,",p->x);printf("%d,",(++p)->x);printf("%d,",*(++p)->y);(5)结果:8typedef union{long a[2];int b;char c[8];}TY;TY our;main(){printf(“%d\n”,sizeof(our));}4. 编写程序输入一个学生记录, 记录包含学号、姓名、性别和成绩信息,从键盘输入这些数据,并且显示出来。
#include<stdio.h>struct student{int no;char name[20];char sex[2];float score;}stu1;main(){printf("*********请输入该学生的学号、姓名、性别和成绩:\n");scanf("%d %s %s %f",&stu1.no,,stu1.sex,&stu1.score);printf("学号:%d\n 姓名:%s\n 性别:%s\n 成绩:%f\n",stu1.no,,stu1.sex,stu1.score);}/*5.有若干运动员,每个运动员包括编号、姓名、性别、年龄、身高、体重。
如果性别为男,参赛项目为长跑和登山;如果性别为女,参赛项目为短跑、跳绳。
用一个函数输入运动员信息,用另一个函数输出运动员的信息,再建立一个函数求所有参赛运动员每个项目的平均成绩。
*/#include<stdio.h>#include<string.h>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);//printf("第%d个运动员的信息是:",j)printf("%d\t %s\t %c\ t%d\t %f\t %f\t %s\t %s\t",ath[j].num,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<stdio.h>#include<string.h>#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");//printf("学号\t 姓名\t 性别\t 数学\t 英语");for(i=0;i<N;i++){printf("请输入第%d个人的信息:\n",i);scanf("%d %s %s %f %f",&stu[i].no,stu[i].name,stu[i].sex,&stu[i].score1,&stu[i].sco re2);}}void everyStu_avgScore()//(1) 输出每个学生2门课的平均分。