信息工程 学院 通信 专业 2 班 成绩评定_______
学号 ******** 姓名 *** (合作者____号____)教师签名_____
预习情况
操作情况
考勤情况
数据处理情况
实验 八 题目 结构体和共用体实验 第21周 星期一第6~7节
一、实验目的与要求
1、掌握结构体类型的概念和定义方法以及结构体变量的定义和应用。2、掌握指向结构体变量的指针变量的概念和应用,特别是链表的概念和应用。3、掌握运算符“.”和“->”的应用。
4、掌握共同体的概念和应用。
二、实验内容和步骤
1、程序功能:
输入具体的年、月、日,输出该日期是这一年的第几天。请将空白处填补好。
#include
static int day_tab[2][13]={0,31,28,31,30,31,30,31,31,30,31,30,31,
0,31,29,31,30,31,30,31,31,30,31,30,31};
struct date{
int day;int month;int year;int yearday;char mon_name[5];
};
day_of_year(struct date *p ){
int i,day,leap;
leap=!(p->year %4!=0);
day=p->day;
for(i=1;imonth;i++)
day+=day_tab[leap][i];
p->yearday=day;
return 0;
}
struct date w;
void main(){
printf("input year_month_day please:\n");
scanf("%4d%2d%2d",&w.year,&w.month,&w.day);
day_of_year(&w);
printf("the yearday is:%d\n",w.yearday);
}
3、下面的程序旨在建立一条单项链表(a1-a2-...-an),然后将此链表逆置成(an-a(n-1)-...-a2-a1)。
程序代码:
#include
#include
reverse(struct node *p);
struct node{
int num;
struct node *next;
}*head;
int a[10]={1,2,3,4,5,6,7,8,9,10};
void main(){
int i;
struct node *p;
head=(struct node*)malloc(sizeof(struct node));
if(head!=NULL){
p=head;
p->num=a[0];
}
else{
printf("\nmemory error?");
exit(1);
}
for(i=2;i<=10;i++){
p->next=(struct node*)malloc(sizeof(struct node));
if(p->next!=NULL){
p= p->next;
p->num=a[i-1];
p->next=NULL;
}
else break;
}
reverse(head);
}
reverse(struct node *p)
{ struct node *ptr1,*ptr2;
ptr1=p->next;
while(ptr1->next!=NULL){
ptr2= ptr1->next;
ptr1->next=p;
p=ptr1 ;
ptr1=ptr2;
}
ptr1->next=p;
head->next=NULL;
head=ptr1;
}
三、比较数组、结构体和共同体之间的联系和区别:
都是数据结构,不过数组只能存放同样类型的数据,而结构体则能够存放不同类型的数据,结构体里面也可以有结构体。
共同体与结构体的定义形式相似。但它们的含义是不同的。共同体变量所占的内存长度等于最长的成员的长度。
共同体类型可以出现在结构体类型定义中,也可以定义共同体数组。