实验十五结构体和共用体 级 姓名 指导老师 成绩 第 机房 号机器时间: 实验目的:1.理解结构体和共用体的定义方式和内存分配情况, 2.掌握指向结构体的类型数据的指针定义与使用 3.掌握链表的建立、插入和删除等操作, 实验要求:上机实验前,认真预习实验内容,先人工分析程序写出应得分析结果,然 上机运行、调试程序,得出最终正确结果 实验内容 、读程序 要求:编辑下面源程序,并且读懂与分析运行程序,上机运行程序,并与分析结果相 对比 #inc stdio. h> void fint x,y }cnum[2]={1,3,2,7}; printf ("\nsa", cnum[o] y/cnum[o]. x*cnum[1].x) 分析结果 includesstdio h main() I static struct s Isxl=f"abc","def"); static struct sy (char *cp; struct sx sx2
实验十五 结构体和共用体 班级______________姓名___________指导老师_____________成绩___________ 第_____________机房___________号机器 时间:________________________ 实验目的:1. 理解结构体和共用体的定义方式和内存分配情况。 2. 掌握指向结构体的类型数据的指针定义与使用。 3. 掌握链表的建立、插入和删除等操作。 实验要求:上机实验前,认真预习实验内容,先人工分析程序写出应得分析结果,然 后上机运行、调试程序,得出最终正确结果。 实 验 内 容 一、读程序 要求:编辑下面源程序,并且读懂与分析运行程序,上机运行程序,并与分析结果相 对比。 1. #include <stdio.h> void main( ) { struct complex {int x,y; }cnum[2]={1,3,2,7}; printf(“\n%d”,cnum[0].y/cnum[0].x*cnum[1].x); } 分析结果 运行结果 2. include<stdio.h> main() { static struct SX {char c[4],*x; }sx1={“abc”,”def”}; static struct SY {char *cp; struct SX sx2;
第一部分c语言程序设计上机指导 printf("sxl.c[o]=sc\t *sxl. x=&s\n",sxl.c[o],*sxl.x) printf("syl. cp=ss\t syl sx2. x=%s\n", syl. cp, syl sx2.x) printf("++sy1 cp=ss\t ++syl sx2.x=x\n",++sy1 cp, ++sy1 sx2.x) 分析结果 运行结果 include <stdio. h> union [2] printf("g. i=%x\n",g. i printf(”g,s[0]=影x,g.s[1]=旨x\n”,g.s[0],g.s[1]) g.s[0]=1;g.s[1]=0; printf("g. i=x\n", g. i) 运行结果 #include <stdio. h> struct stru void func(struct stru b) cntf("\nd, sc/n void func(struct stru b) [b b.c=y′ 析结果
第一部分 C 语言程序设计上机指导 ·83· ·83· }sy1={“ghi”,{“jkl”,”mno”}}; printf(“sx1.c[0]=%c\t *sx1.x=%s\n”,sx1.c[0],*sx1.x); printf(“sx1.c=%s\t sx1.x=%s\n”,sx1.c,sx1.x); printf(“sy1.cp=%s\t sy1.sx2.x=%s\n”,sy1.cp,sy1.sx2.x); printf(“++sy1.cp=%s\t ++sy1.sx2.x=%x\n”,++sy1.cp,++sy1.sx2.x); } 分析结果 运行结果 3. # include <stdio.h> void main( ) { union {char s[2]; int i; }g; g.i=0x4142; printf(“g. i=%x\n”,g. i); printf(“g. s[0]=%x, g. s[1]=%x\n”, g. s[0],g.s[1]); g.s[0]=1; g.s[1]=0; printf(“g. i=%x\n”, g. i); } 分析结果 运行结果 4. #include <stdio.h> struct stru {int x; char c; }; void func(struct stru b); void main( ) {struct stru a={10,’x’}; func(a); printf(“\n%d,%c/n”,a.x,a.c); } void func(struct stru b) {b.x=20; b.c=’y’; } 分析结果 运行结果
·84· C语言程序设计上机指导与同步训练 #include <stdio. h> struct data fint int void main () int i, j struct data array [n], temp; printf("输入10个整数:") scanf("d", &array [i]. num) for(i=0;i<n; i++) for(j=0;j<n-1-1;j++) f(array [j]. num>array [j+1]. num Temp=array [jl j+1] printf(输出结果\n"); printf(”序号值原序号\n”); printf ("83d84ds4d\n",i, array [i]. num, array [i]. no)i printf("\n”) #include <stdio. h> int y; }s【2]={{1,2},{3,4}},*p=s printf(Mnd",++p→x) printf("\ntd”,(++p)→x) 两条 printf语句改为一条: printf"hn%d%d”,++p→x,(+p)→x),重新运行程序
·84· C 语言程序设计上机指导与同步训练 ·84· 5. #include <stdio.h> #define n 10 struct data {int no; int num; }; void main() { int i,j; struct data array[n],temp; printf(“输入 10 个整数:”); for(i=0;i<n;i++) { scanf(“%d”,&array[i].num); array[i].no=i; } for(i=0;i<n;i++) for(j=0;j<n-i-1;j++) { if(array[j].num>array[j+1].num) {temp=array[j]; array[j]=array[j+1]; array[j+1]=temp; } } printf(“输出结果\n”); printf(“序号 值 原序号\n”); for(i=0;i<n;i++) printf(“%3d%4d%4d\n”,i,array[i].num,array[i].no); printf(“\n”); } 6. #include <stdio.h> main() {struct {int x; int y; }s[2]={{1,2},{3,4}},*p=s; printf(“\n%d”,++p→x); printf(“\n%d”,(++p)→x); } 两条 printf 语句改为一条:printf(“\n%d,%d”, ++p→x, (++p) →x);重新运行程序。 分析结果 运行结果
第一部分c语言程序设计上机指导 分析结果 运行结果 #include stdio int x Jin in e. ln 析结果 二、完成程序 要求:依据题目要求,分析已给出的语句,填写空白。但是不要增行或删行,不要改 动程序的结构 编程:输入一个长整数,分别取出该数各字节的值。 void main() union data vali int i, ns=sizeof(long) printf("输入一个长整数:”); printf("各字节如下:;\n) printf("第d个字节:号s\n”,i,va1.s[i])
第一部分 C 语言程序设计上机指导 ·85· ·85· 分析结果 运行结果 7. #include <stdio.h> void main() { struct example { union { int x; int y; }in; int a; int b; }e; e.a=1;e.b=2; e.in.x=e.a*e.b; e.in.y=e.a+e.b; printf(“\n%d,%d”,e.in.x, e.in.y); } 分析结果 运行结果 二、完成程序 要求:依据题目要求,分析已给出的语句,填写空白。但是不要增行或删行,不要改 动程序的结构。 1. 编程:输入一个长整数,分别取出该数各字节的值。 #include <stdio.h> union data { char s[5]; long n; }; void main() { union data val; int i, ns=sizeof(long); printf(“输入一个长整数:”); scanf( ); printf(“各字节如下:;\n) for(i=0;i<ns;i++) printf(“第%d 个字节:%s\n”, i, val.s[i]); printf(“\n”); }
C语言程序设计上机指导与同步训练 2.编程:输入一串整数,以0标识结束,将输入的整数构成一个单链表并显示输出 #include <stdio. h> #define null 0 struct node int da struct node *nexti int d; struct node *h=null, *r,*s: printf("创建单链表\n”); printf(“输入整数:”) scant(wd”,&d); if(d==) break if(h==null) h=s;r=s;/*h指向单链表的第一个节点*/ x->next=s;x=s;/*r始终指向最后一个结点*/ 3.输入三角形三边长的值ab,c,求周长和面积 #include <math. h> float b main( truct triand printf(tra.a=旨f,tra.b=旨f,tra.c=号f\n”,tra.a,tra.b,tra.c); Ecom(tra) printf("%d\n",tra. a)
·86· C 语言程序设计上机指导与同步训练 ·86· 2. 编程:输入一串整数,以 0 标识结束,将输入的整数构成一个单链表并显示输出。 #include <stdio.h> #include <malloc.h> #define null 0 struct node { int data; struct node *next; }; struct node *create ( ) { int d; struct node *h=null,*r,*s; printf(“创建单链表\n”); while(1) {printf(“输入整数:”); scanf(“%d”,&d); if(d==0) break; ______________; s->data=d;s->next=null; if(h==null) { h=s;r=s; /*h 指向单链表的第一个节点*/ } else { r->next=s;r=s; /*r 始终指向最后一个结点*/ } } return h; } 3. 输入三角形三边长的值 a,b,c, 求周长和面积。 #include <math.h> { float a; float b; float c; }; main( ) { struct triangle tra; tra.a=13.5; tra.b=16.5; tra.c=21; printf(“tra.a=%f,tra.b=%f,tra.c=%f\n”,tra.a,tra.b,tra.c); fcom(tra); printf(“%d\n”,tra.a);