文档库 最新最全的文档下载
当前位置:文档库 › 结构和枚举

结构和枚举

结构和枚举
结构和枚举

专业:xxxxxxxxxxxxxxxx

姓名:xxxxxxxxxxx

学号:xxxxxxxxxxxxxxxxx

.NET程序设计实验报告

结构体与共用体小结

结构体与共用体小结 一,结构体得概念与定义 1,结构体得定义 struct 结构体名 { 数据类型成员名1; 数据类型成员名1; 、、、 }; 这里数据类型可以就是复合类型,例如又就是一个结构体类型,即嵌套; 2,结构体变量得定义 struct 结构体名变量名1,变量名2,,,变量名n; 或: struct 结构体名 { 数据类型成员名1; 数据类型成员名1; 、、、 }结构体变量1,结构体变量2;

或: struct { 数据类型成员名1; 数据类型成员名1; 、、、 }结构体变量1,结构体变量2; 三种方式,第三种方式得话,每次要定义这个类型得结构体变量都要重复得写这一段代码; 其实定义了结构体后,struct 结构体名就就是一种新得类型,上述语句就像声明变量一样; 3,结构体变量得引用 只能对结构体变量中得各个成员分别输出,不能对一个结构体变量作为一个整体输出; 嵌套得结构体类型得引用: 结构体变量名、结构体类型成员名、内嵌结构体得成员名; 4,结构体变量得初始化 struct 结构体名变量名= {初始化数据};

或者在定义得时候就初始化: struct 结构体名 { 数据类型成员名1; 数据类型成员名1; 、、、 }变量名= {初始化数据}; 二,结构体数组 1,结构体数组得定义举例struct stu { int stu_nu; char name[20]; float score; }; struct stu student[5]; 或者: struct stu { int stu_nu;

char name[20]; float score; }student[5]; 或者: struct { int stu_nu; char name[20]; float score; }student[5]; 跟定义结构体变量得三种形式就是一样得,只不过这里每次定义得结构体变量就是一个数组;每一个student[i]都就是struct stu类型得; 2,结构体数组得初始化与引用 略; 三,结构体与指针 1,指向结构体得指针得定义,同上,也就是三种形式; struct employees employee1,*p1; 或者: struct employees

结构体共用体与枚举课后习题

1.定义一结构体,成员项包括一个字符型、一个整型。编程实现结构体变量成员项的输入、输出,并通过说明指针引用该变量。 #include void main() { struct a { char b; int c; }d,*p; p=&d; printf("输入:\n"); scanf("%c",&(*p).b); scanf("%d",&p->c); printf("输出:\n"); printf("%c\n",(*p).b); printf("%d\n",p->c); } 2.建立一结构体,其中包括学生的姓名、性别、年龄和一门课程的成绩。建立的结构体数组通过输入存放全班(最多45人)学生信息,输出考分最高的同学的姓名、性别、年龄和课 程的成绩。 #include void main() { int i,b,n; float a; printf("请输入班级的人数:"); scanf("%d",&n); getchar(); struct person { char name[20]; char sex[10]; int year; float score; }stu[45]; for(i=0;i

getchar(); } for(b=0,a=stu[0].score,i=0;i #define N 4 struct person { char name[20]; long int number; float score1; float score2; }; void shuru(struct person stu[N]) { int i; for(i=0;i

结构体和共用体习题

习题六 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.a B (*p).a C p->data.a D p.data.a 2.填空 (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;

第8章练习 结构体与共用体

第十一章习题结构体与共用体 1.以下C语言共用体类型数据的描述中,不正确的是( ) A) 共用体变量占的内存大小等于所需内存最大的成员所占的内存 B) 共用体类型可以出现在结构体类型定义中 C) 在定义共用体变量的同时允许对第一个成员的值进行初始化 D) 同一共用体中各成员的首地址不相同 2.下列对结构体类型变量定义不正确的是( ) A)struct teacher B) struct { int num; { int num; int age; }teach1; int age; }teach1,teach2; C) struct D) struct teacher { int num; { int num; int age; }teacher; int age; }; struct teacher teach1; struct teacher teach1; 3.若有定义: struct teacher { int num; char name[10]; char sex; int age; float score;}teacher1; 则变量teacher1所占用的内存字节数是( ) A) 5 B)14 C) 19 D) 20 4.以下程序的运行结果是( ) #include union Utype { int i; float y; }u[2]; void main() { printf("sizeof(u):%d\n",sizeof(u)); } A)2 B) 4 C) 6 D) 8 5.设有以下定义语句: struct student { int num; char name[10]; float score; }wang,zhang; 则变量wang所占的内存字节数是( ) A) 14 B) 16 C)18 D) 20 6.设有如下定义语句: union u_type { int i; double x; float f; }; struct str_type { char str[100]; union u_type u[2]; }; 则语句“printf("%d",sizeof(struct str_type));”的输出结果是( ) A)100 B) 116 C) 120 D) 200 第 1 页共2 页

结构体和共用体

第十一章结构体和共用体 11.1 本章基本知识结构 11.2 知识难点解析 1.结构体与共用体变量在计算机中占用多少内存? [解答] 结构体变量所占的内存长度等于所有各成员的长度之和,每个成员分别占有自己的内存单元;共用体变量所占的内存长度等于最长的成员的长度。 2.结构体和共用体的有几种不同的引用方法? [解答] 结构体和共用体一样,有两种引用办法,一种是采用成员(分量)运算符“.”;还有一种是采用指针的办法。下面以结构体为例说明这两种不同的引用的方法。 struct stu {int num; char name[10]; int age; } zhangsan, *lisi; 要访问学生zhangsan年龄的办法有两种:zhangsan.age 或者(&zhangsan) —>age; 要访问学生lisi年龄的办法也有两种:(*lisi).age 或者lisi—>age。

11.3 习题 1.选择题 (1).以下程序运行的输出结果是( )。 main() {union {char i[2]; int m; }r; r.i[0]=2;r.i[1]=0; printf("%d\n",r.m); } A.2 B.1 C.0 D.不确定 [分析、解答] 答案为A。本题涉及共用体的概念。字符数组i[2]与整型变量m使用同一内存单元。M占用2个字节,高字节对应i[1],低字节对应i[0],所以答案为A。 (2).有以下程序输出结果是( )。 #include struct stu {int num; char name[10]; int age; }; void fun(struct stu *p) {printf("%s\n",(*p).name);} main() {struct stu students[3]= {{9801,"zhang",20},{9802,"Wang",19},{9803,"zhao",18}}; fun(students+2);} A.Zhang B.Zhao C.Wang D.18 [分析、解答]答案为B。在main函数中,定义结构体类型数组student[3],并赋初值。即student[0]={9801,〞zhang〞,20}, student[1]={9802, 〞wang〞,19}, student[2]={9803, 〞zhao〞,18}, 调用子函数fun,实参“student+2”为student[2]的首地址,则p指向student[2]的首地址,(*p).name即“zhao”。 (3).有下列程序输出结果是( )。 #include main() {union {int k; char i[2]; }*a,b;

实验11结构体、共用体和枚举类型

实验11 结构体、共用体和枚举类型 一、实验目的: 1、掌握结构体类型定义和结构体变量定义、初始化的方法; 2、掌握结构体成员的访问方法,熟悉结构体嵌套定义方法; 3、掌握结构体数组的定义和使用方法,能够用模块化方法设计程序; 4、熟悉共用体类型、枚举类型、typedef的基本用法。 二、实验内容 1、下列程序的功能是:先定义结构体Book,再定义两个变量book1、book2,其中一个初始化,另一个从键盘输入数据,最后输出book1、book2的值。程序运行结果如下: 请根据题意和注释填写下列程序所缺代码,并回答相关问题: #include //定义结构体Book,成员有:书名(title),字符数组,长度为100; //作者(authors),字符数组,长度为30;ISBN,字符数组,长度为20; //页数(pages),整型;价格(price),单精度浮点数。 /*代码段_1*/ int main() { //定义两个Book型变量book1、book2,其中book1用我们本学期所使用教材的数据初始化/*代码段_2*/ //从键盘输入我们本学期所使用实验指导书的数据给book2 /*代码段_3*/ printf("请输入实验指导书的信息:书名、作者、ISBN、页数、作者:\n"); /*代码段_4*/ printf("\n教材、实验书信息如下:\n"); /*代码段_5*/

return 0; } 问题: (1)如何定义结构体类型? (2)怎样定义结构体变量,并初始化? (3)怎样输入、输出结构体变量各成员的值? 2、请按下列要求编程: (1)先定义一个结构体Date,它包含三个成员:年(year,int)、月(month,int)、日(day,int); (2)再定义一个结构体,它包含三个成员:姓名(name,char[10])、性别(sex,char类型,’m’为男,’f’为女)、出生时间(birthday,Date类型)、身份证号(ID,char[19])、电子邮箱(email,char[60]),并用typedef将该结构体命名为Person类型; (3)然后定义一个Person类型的变量me,通过键盘输入自己的信息,然后输出me的各成员值。 程序执行如下图所示: (提示:由于输入内容有字符串、字符、整数等,建议在scanf()中的格式控制符用空格隔开,例如scanf("%s %c %d %d %d %s %s",https://www.wendangku.net/doc/737153986.html,,…);) 3、学生有三门课程:A、B、C,3名学生的成绩如下表所示: 姓名 A B C 平均分 张三78 84 67 李四88 90 95 王五66 79 80 请先定义一个结构体Student,其成员包括:name(姓名)、A、B、C、aver(平均分),再定义一个Student类型的数组stud[3]来存放学生资料。现欲先输入

第8章 结构体与共用体

一、程序改错 1、 /*下列给定程序中,函数fun的功能是:对N名学生的学习成绩,按从高到低的顺序找出前m(m<=10)名学生,并将这些学生数据存放在一个动态分配的连续存储区中,此存储区的首地址作为函数值返回。 试题程序:*/ #include #include #include #include #define N 10 typedef struct ss { char num[10]; int s; } STU; STU *fun(STU a[], int m) { STU b[N],*t; int i, j,k; /**********ERROR**********/ *t=calloc(m,sizeof(STU)); 【参考答案】 t=calloc(m,sizeof(STU)); for(i=0;i

for(k=0;kb[j].s) j=i; /**********ERROR**********/ t[k].num=b[j].num; 【参考答案】t[k]=b[j]; t[k].s=b[j].s; b[j].s=0; } return t; } outresult(STU a[],FILE *pf) { int i; for(i=0;i

结构体、共用体、枚举

最终排名 Time Limit: 1000MS Memory limit: 65536K 题目描述 第四届山东理工大学ACM网络编程擂台赛比赛完后需要产生一个最终排名,排名按照题数多少来决定。但是有太多的队伍参与,手动计算排名已经不能满足比赛的需求。现在有一份名单记录各个队伍的ID和做出的题目数,需要你写一个程序,产生最终的排名。 为了简化题目,这里的排名规则为:做出题目数量多的队伍排在前面,如果题数相等,保持输入时的相对顺序不要改变。 输入 第一行包含一个正整数T( 1≤T≤15),表示有T组测试数据。每组数据第一行有一个正整数N(1< N≤10000),表示队伍数量。接下来N 行包含两个整数,1≤ID≤10^7, 0≤M≤100。ID为队伍的编号,M为做出的题数。 输出 每组数据输出包含N行,第i行有两个整数,ID和M表示排在第i位的队伍的ID和做出的题数。 示例输入 1 8 1 2 16 3 11 2 20 3 3 5 26 4 7 1 22 4 示例输出 3 5 26 4 22 4

16 3 20 3 1 2 11 2 7 1

#include void main() { struct team { int ID; int M; }t[10000],T; int N,n,i,j,k,time=0; scanf("%d",&N); while(time!=N) { scanf("%d",&n); for(i=0;i

C语言题库第8章 结构体和共同体

第八章结构体和共同体 一、单项选择 1. 若有以下定义: struct link { int data; struct link *next; }a,b,c,*p,*q; 且变量a和b之间已有如下图所示的链表结构,若指针p指向a,指针q指向c。 则能把c插入到a和b之间形成新的链表的语句是( C ) 2. 若有以下程序段: int a=1,b=2,c=3; struct dent { int n ; int *m ; } s[3] = {{101,&a},{102,&b},{103,&c}}; struct dent *p=s ; 则以下表达式中值为2的是( D )。 3. 下面程序的运行结果是( D )。 #iunclude int main ( ) { struct complx { int x; int y ;

}cnum[2]={1,3,2,7} ; printf(“%d\n”,cnum[0].y/cnum[0].x*cnum[1].x) ; return 0; } 二、程序设计 1. /*学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s 中,请编写函数fun, 它的功能是:按分数的高低排列学生的记录,高分在前。注意:部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序: */ #include #define N 16 typedef struct { char num[10]; int s ; }STREC; void fun (STREC a[]) { /*********Begin*********/ /*********End**********/ } int main () { FILE *wf,*in; STREC s[N]={{ "GA005",85},{"GA003",76},{"GA002",69},{"GA004",85}, {"GA001",91},{"GA007",72},{"GA008",64},{"GA006",87}, {"GA015",85},{"GA013",91},{"GA012",64},{"GA014",91}, {"GA011",66},{"GA017",64},{"GA018",64},{"GA016",72}}; int i; fun(s); printf("The data after sorted :\n"); for (i=0; i

C程序实验报告十 结构体与共用体

实验10 结构体与公用体 1.实验目的、要求 (1)掌握结构体类型变量的定义和使用。 (2)掌握结构体类型数组的概念和使用。 (3)掌握公用体的概念与使用。 2.实验内容 (1)输入程序并运行,观察运行结果 #include “stdio.h” int main( ) { struct cmplx { int x; int y; } cnum[2]={1 , 3 , 2 , 7}; printf(“%d\n”, cnum[0].y / cnum[0].x * cnum[1].x ); return(0); } 运行此程序:按F2保存源程序,按F9完成一次编译连接,无提示错误,按任意键返回源程序行,按ctrl+F9运行,按alt+F5看结果,结果显示:6 (2)输入程序并运行,观察运行结果 union ks { int a; int b; }; union ks s[4]; union ks *p; #include “stdio.h” int main( ) { int n=1, i; printf(“\n”); for(i=0;i<4;i++) { s[i].a=n; s[i].b=s[i].a+1; n=n+2; } p=&s[0]; printf(“%d,”,p->a); printf(“%d” ,++ p->a); return(0); } 运行此程序:按F2保存源程序,按F9完成一次编译连接,无提示错误,按ctrl+F9运行,按任意键返回源程序行,按alt+F5看结果,结果显示:23 (3)编写程序 有10个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入10个学生数据,要求打印出3门课总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课成绩、平均分数)。要求用input 函数输入10个学生数据;用average函数求总平均分;用

C语言6:结构体,共用体

选票统计 Time Limit: 1000MS Memory limit: 65536K 题目描述 某校学生会主席由全校学生投票选举产生,共有m名候选人报名参选,编号为1到m(0<m<1000),全校有n名学生(0<n<30000),每人都可以投票。但每人只能投一票,每票只能选1名候选人。请你设计一个程序能够统计出哪个候选人得票最高,得了多少票。不会出现得票数相同的情况。 输入 第一行输入候选人数m和学生数n,以空格分开; 下面依次输入每个学生所选的候选人的编号。 输出 第一行输出得票最多的候选人编号; 第二行输出该候选人所得的票数。 示例输入 3 10 1 2 3 2 3 1 2 3 1 3 示例输出 3 4 #include struct st { int sum; }man[1000]; void main() { int m,n,i,a,j,max; scanf("%d %d\n",&m,&n); for(i=0;imax) { max=man[i].sum; j=i; } } printf("%d\n%d\n",j,max); }

最终排名 Time Limit: 1000MS Memory limit: 65536K 题目描述 第四届山东理工大学ACM网络编程擂台赛比赛完后需要产生一个最终排名,排名按照题数多少来决定。但是有太多的队伍参与,手动计算排名已经不能满足比赛的需求。现在有一份名单记录各个队伍的ID和做出的题目数,需要你写一个程序,产生最终的排名。 为了简化题目,这里的排名规则为:做出题目数量多的队伍排在前面,如果题数相等,保持输入时的相对顺序不要改变。 输入 第一行包含一个正整数T( 1≤T≤15),表示有T组测试数据。每组数据第一行有一个正整数N(1< N≤10000),表示队伍数量。接下来N 行包含两个整数,1≤ID≤10^7, 0≤M≤100。ID为队伍的编号,M为做出的题数。 输出 每组数据输出包含N行,第i行有两个整数,ID和M表示排在第i位的队伍的ID和做出的题数。 示例输入 1 8 1 2 16 3 11 2 20 3 3 5 26 4 7 1 22 4 示例输出 3 5 26 4 22 4 16 3 20 3 1 2 11 2 7 1 #include struct st { int ID; int M; }p[10000]; void main() { struct st s; int t; scanf("%d\n",&t); while(t--) {

结构体与共用体

试卷编号:825 所属语言:C语言 试卷方案:结构体与共用体 试卷总分:90分 共有题型:5种 一、填空共5题(共计10分) 第1题(2.0分)题号:205 结构体是不同数据类型的数据集合,作为数据类型, 必须先说明结构体【1】,再说明结构体变量. 答案: =======(答案1)======= 类型 第2题(2.0分)题号:208 将函数funl 的入口地址赋给指针变量p的语句是【1】. 答案: =======(答案1)======= p=funl; 第3题(2.0分)题号:232 设有以下结构类型说明和变量定义,则变量a在内存所占字节数是【1】 . struct stud { char num[6]; int s[4]; double ave; } a,*p; 答案: =======(答案1)=======

第4题(2.0分)题号:345 若在程序中用到"strlen()"函数时,应在程序开头写上包含命令# include "【1】". 答案: =======(答案1)======= string.h 第5题(2.0分)题号:803 预处理命令行都必须以【1】号开始. 答案: =======(答案1)======= # 二、单项选择共20题(共计40分) 第1题(2.0分)题号:464 以下描述中,正确的是()。 A:预处理是指完成宏替换和文件包含中指定的文件的调用 B:预处理指令只能位于C源文件的开始 C:C源程序中凡是行首以#标识的控制行都是预处理指令 D:预处理就是完成C编译程序对C源程序第一遍扫描,为编译词法和语法分析作准备答案:C 第2题(2.0分)题号:472 下列程序运行结果为: #define P 3 #define S(a) P*a*a main() {int ar; ar=S(3+5); printf("\n%d",ar); } A:192 B:29

枚举类型及Enum方法

枚举类型及Enum方法 实际问题中,有些变量的取值被限定在一个有限的范围内。例如,一个星期只有七天,一年只有十二个月。如果把这些量说明为整型,字符型或其它类型显然是不妥当的。为此,程序设计语言提供了一种枚举类型(也称为枚举)。枚举类型为定义一组可以赋给变量的命名整数常量提供了一种有效的方法。例如,使用枚举类型定义一个星期七天,定义一年十二个月: enum Days { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday } enum Months : byte { Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec } 1.枚举的声明,其形式为: 访问修饰符enum 枚举名: 基础类型{ 枚举成员(标识符) } 说明:任意枚举类型都有基础类型,该基础类型可以是除char 以外的任何整型,如:byte、sbyte、short、ushort、int、uint、long 、ulong。基础类型必须能够表示该枚举中定义的所有枚举成员。枚举声明时可以对基础类型进行显式地声明。而没有显式声明时基础类型默认是int。基础类型指定为每个枚举数成员分配的内存大小。 2.枚举注意事项: 1)枚举成员不能是数值常量、字符常量、字符串常量,使用时不能加单、双引 号。例如,以下的定义是错误的: enum Days { …Sun?, …Mon?, …Tues?, …Wed?, …Thu?, …Fri?, …Sat? } enum Days { “Sun”, “Mon”, “Tues”, “Wed”, “Thu”, “Fri”, “Sat” } 2)每个枚举成员均具有相关联的常数值。此值的类型就是枚举的基础类 型。枚举类型属于顺序类型。根据定义类型时各枚举成员的排列顺序确定它们的序列,如在默认基础类型即int的情况下序列号从0开始,后面每个枚举成员的值依次递增1。当然可以显式赋值。例如: enum Days { Sunday=2, Monday, Tuesday,Wednesday, Thursday, Friday, Saturday } 3)枚举成员是常量,不是变量。尽管是标识符也不能在程序中当做变量用赋值 语句对它赋值。例如以下在程序中对枚举成员赋值会提示错误。 public class EnumTest { enum Days { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday } static void Main() { Sunday = 5; Sunday = Monday; Console.WriteLine("Sunday = {0}", Sunday); } } 4)从枚举成员到整型的转换需要用显式类型转换来完成。例如对于下面的语 句将枚举类型Days类型的枚举成员通过使用强制转换来转换枚举成员为整型。 public class EnumTest { enum Days { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday }

第9章结构体类型与共用体类型习题及答案

第九章结构体类型与公用体类型习题及其答案9-3编写程序,使用结构体类型,输出一年十二个月的英文名称及相应天数。 解:#include "stdio.h" struct date { char month[10] ; int daynumber ; } main() { int i ; date a[12] ={{"January",31},{"February",29},{"March",31},{"Aprial",30}, {"May",31},{"June",30},{"july",31},{"August",31},{"September",30} ,{"October",31},{"November",30},{"December",31}} ; for(i=0;i<12;i++); printf("%d 月:%s %d\n",i+1,a[i].month,a[i].daynumber) ; } 思考:如何对结构体变量进行初始化?对结构体变量的引用为何要体现为分量(或成员)的引用? 9-4 编写程序求空间任一点到原点的距离,点用结构体描述。并请考虑求空间中任意两点的距离的程序。 解:#include "stdio.h" #include "math.h" struct point { float x ; float y ; float z ; } void main() { double d1,d2,d ;

point p1,p2 ; printf("请输入第一个点的坐标:"); scanf("%f,%f,%f",&p1.x,&p1.y,&p1.z); printf("请输入第二个点的坐标:"); scanf("%f,%f,%f",&p2.x,&p2.y,&p2.z); d1=sqrt(p1.x*p1.x+p1.y*p1.y+p1.z*p1.z); d2=sqrt(p2.x*p2.x+p2.y*p2.y+p2.z*p2.z); d=sqrt((p2.x-p1.x)*(p2.x-p1.x)+(p2.y-p1.y)*(p2.y-p1.y)+(p2.z-p1.z)*( p2.z-p1.z)); printf("第一个点到原点的距离:%f\n",d1); printf("第二个点到原点的距离:%f\n",d2); printf("两点间的距离:%f\n",d); } 9-5 编写输入、输出10个朋友数据的通讯录程序,每个朋友数据包括姓名、地址、邮编、电话、传呼、手机等数据。 解:#include "stdio.h" struct AddressBook { char name[10] ; char address[30] ; char mailnumber[7] ; char telphone[12] ; char byphone[16] ; char movephone[1] ; } void main() { int i ; AddressBook fd[10] ; for(i=0;i<10;i++) { printf("请输入第%d个朋友的信息:\n",i+1); printf("姓名:");

C++结构体,共用体,枚举,自定义类型

1.结构体类型: struct Student{ int num; char name[20]; char sex; int age; float score; char addr[30]; }; 上面代码声明了一个结构体类型,其结构体类型名为Student。声明一个结构体类型的一般形式为, struct 结构体类型名{ 成员列表 }; 大括号内是该结构体中的全部成员(member),在声明一个结构体类型时必须对各成员都进行类型声明: 类型名成员名; 每一个成员也称为结构体中的一个域(field)。成员列表又称为域表。 在C语言中,结构体的成员只能是数据。C++对此加以补充,结构体的成员既可以包括数据(成员),又可以包括函数(成员)。但由于C++提供了类(class)类型,所以不必使用带函数的结构体。 声明一个结构并不分配内存,内存分配发生在定义这个新数据类型的变量中。 2.结构体变量的定义与初始化 2.1定义结构体变量: 方法一:先声明结构体类型再定义变量名 struct Student{ int num; char name[20]; char sex; int age; float score; char addr[30]; }; Student stu1,stu2; 方法二:在声明时同时定义变量 struct Student{ int num; char name[20]; char sex; int age; float score; char addr[30]; }stu1,stu2; 2.2结构体变量赋初值

方法一:在定义结构体变量时赋初值 struct Student{ int num; char name[20]; char sex; int age; float score; char addr[30]; }stu1={001,"Jeff",'M',25,88,"Shanghai"}; 方法二:在定义变量时初始化 struct Student{ int num; char name[20]; char sex; int age; float score; char addr[30]; }; Student stu1={001,"Jeff",'M',25,88,"Shanghai"}; 3.结构体变量的使用 [1]可以将一个结构体变量的值赋给另一个具有相同结构的结构体变量。 struct Student{ int num; char name[20]; char sex; int age; float score; char addr[30]; }; Student stu1={001,"Jeff",'M',25,88,"Shanghai"}; Student stu2; stu2=stu1; [2]可以访问和设定结构体变量中的一个成员的值。 引用结构体变量中成员的一般方式为,结构体变量名.成员名。“.”是成员运算符,它在所有的运算符中优先级最高。 stu2.num=002; [3]可以访问结构体变量成员的地址,也可以访问结构体变量的地址。 int main(){ struct Student{ int num; char name[20];

结构型、共用型和枚举型典型例题分析与解答

结构型、共用型和枚举型典型例题分析与解答 1 设有下列定义语句,则表达式“p->x「l」”的值是_____________;表达式“(*p).k”的值是 ____________。 struct { int x[5]; int k; } s={{1,2},3},*p=&s; 【分析】p是指向结构型变量s的结构型指针变量,所以“p->成员名”就是结构型变量s的成员。由于表达式中给出的成员是数组元素x[1],所以该表达式的值就是x[1]的值。从赋初值来看,这个数组元素的初值为2,所以第一个空白应该填写2。同样道理,*p就是p指向的结构型变量s,所以第二个表达式就是s.k,k是结构型变量S的成员,初值为3,所以第二个表达式的值为3。 【答案】2 3 2 设有下列定义语句,则下列表达式中能表示结构型xx的成员x的表达式是() struct xx{ int x;}; struct yy { struct xx xxx;int yy;} xxyy; ① xxyy.x ② xxyy->x ③(&xxyy)->xxx.x ④xxx.x 【分析】分析备选答案①:xxyy是结构型yy的变量,其后跟“.成员”是正确的,但是这个成员必须是结构型yy的成员,而表达式中的“x”是结构型xx的成员,所以是错误的。分析备选答案②:xxyy是结构型变量,其后不能跟“->”,这样会造成语法错误。分析备选答案③:&xxyy是结构型变量xxyy的 地址,其后跟“->成员”是正确的,表示该结构型 的成员,这个成员是结构型对的成员xxx,而这个成员的数据类型又是另一个结构型xx,所以其后应该是“.xx的成员”,表达式中恰好是xx的成员x,所以这个表达式是正确的(注意,这是嵌套结构型成员的弓l用格式)。至于备选答案④:xxx是结构型成员,不能直接引用,前面必须有结构型变量或结构型数 组元素。 【答案】③ 3 设有下列定义语句,则表达式“(*(p+1)).name[1]”的值是______________;表达式“(p+1) -> score[1]”的值是_____________。 struct { long num;char name[10」;float score[3]; }s[2」={{101L,"zhao",{90,80,70}},{102L,"qian",{75,65,55}}},*p=s;【分析】指针变量 p是指向结构型数组 S的首地址,所以 p+ 1就是数组元素 s[1]的地址,因此,*(p + l)就是 s[1],这是一个结构型数组元素,其后跟“.name[1]”,则代表结构型成员,所以第一个空白处应该填写的是结构型成员name数组的元素name[1]的值,从赋初值的情况来看,这个值是字符‘i’。 再来分析第二个表达式, p+ l是结构型数 组s的元素s[1]的地址,在地址后面跟“->score[1]”也是代表结构型成员,因此第二个空白处填写的是结构型成员score数组的元素score[l]的值,这个值显然是65.0。

相关文档
相关文档 最新文档