第十一章作业
1,在PC机上使用C语言,若有如下定义:
struct data { int i;
char ch;
float f;
}a;
则结构变量a占用内存的字节数是
2,在PC机上使用C语言,若有如下定义:
union data { int i;
char ch;
float f;
}a;
则结构变量a占用内存的字节数是
3,根据下面的定义,能打印出字母M的语句是
struct person { char name[9];
int age;
};
struct person class[10]={“John,,17,
,Paul”,19,
,Mary”,18,
,Adam”,16
};
4,以下程序运行结果
main()
{ struct s1{char c[4],*s;
}s1={“abc”,”def”};
struct s2{char *cp;
struct s1 ss1;
}s2={“ghi”,{“jkl”,”mno”}};
printf(“%c,%c\n”,s1.c[0],*s1.s);
printf(“%s,%s\n”,s1.c,s1.s);
printf(“%s,%s\n”,s2.cp,s2.ss1.s);
printf(“%s,%s\n”,++s2.cp,++s2.ss1.s);
5,以下程序运行结果
struct s{ int a;
float b;
char *c;
};
main()
{ struct s x={19,83.5,”zhang”};
struct s *px=&x;
printf(“%d%f%s\n”,x.a,x.b,x.c);
printf(“%d%f%s\n”,px->a,(*px).b,px->c);
printf(“%c%s\n”,*px->c-1,&px->c[1]);
}
6,以下程序运行结果
#include,stdio.h”
union un
{ int i;
char c[2];
}
main()
{ union un x;
x.c[0]=10;
x.c[1]=1;
printf(“\n%d”,x.i);
}
7,以下程序运行结果
union ks
{ int a;
int b;
};
union ks s[4];
union ks *p;
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);
}
8,以下程序的功能是统计链表中结点的个数,其中first为指向第一个结点的指针(即为头指针),请填空
struct link{ char date;
struct link *next;
};
…
struct link *p,*first;
int c=0;
p=first;
while( p->next!=null )
{ c++ ;
p= p->next ;
}
9,以下min3()函数的功能是:计算循环单链表first中每3个相邻结点数据域中的和,并返回其最小值,填空
struct node{ int data;
struct node *link;
int min3(struct node *first)
{ struct node *p=first;
int m,m3;
m3=p->data+p->link->data+p->link->link->data;
for(p=p->link;p!=first;p= p->link )
{ m=p->data+p->link->data+p->link->link->data;
if( m3>m ) m3=m;
return(m3);
}
main()
{ … }
10,输入20个学生的姓名和年龄并存在结构数组中,设计一个程序从中查找年龄最大和最小的学生的姓名和年龄并打印出来
11,编程序:建立一个带有头指针的单向链表,链表结点中数据通过键盘输入,当输入数据为-1时,表示输入结束
12,已知head指向一个单向链表,链表中每个结点包含数据域(data)和指针域(link),请编写程序实现如图所示链表的逆置
1,在PC机上使用C语言,若有如下定义:
struct data { int i;
char ch;
float f;
}a;
则结构变量a占用内存的字节数是
2,在PC机上使用C语言,若有如下定义:
union data { int i;
char ch;
float f;
}a;
则结构变量a占用内存的字节数是
3,根据下面的定义,能打印出字母M的语句是
struct person { char name[9];
int age;
};
struct person class[10]={“John,,17,
,Paul”,19,
,Mary”,18,
,Adam”,16
};
4,以下程序运行结果
main()
{ struct s1{char c[4],*s;
}s1={“abc”,”def”};
struct s2{char *cp;
struct s1 ss1;
}s2={“ghi”,{“jkl”,”mno”}};
printf(“%c,%c\n”,s1.c[0],*s1.s);
printf(“%s,%s\n”,s1.c,s1.s);
printf(“%s,%s\n”,s2.cp,s2.ss1.s);
printf(“%s,%s\n”,++s2.cp,++s2.ss1.s);
5,以下程序运行结果
struct s{ int a;
float b;
char *c;
};
main()
{ struct s x={19,83.5,”zhang”};
struct s *px=&x;
printf(“%d%f%s\n”,x.a,x.b,x.c);
printf(“%d%f%s\n”,px->a,(*px).b,px->c);
printf(“%c%s\n”,*px->c-1,&px->c[1]);
}
6,以下程序运行结果
#include,stdio.h”
union un
{ int i;
char c[2];
}
main()
{ union un x;
x.c[0]=10;
x.c[1]=1;
printf(“\n%d”,x.i);
}
7,以下程序运行结果
union ks
{ int a;
int b;
};
union ks s[4];
union ks *p;
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);
}
8,以下程序的功能是统计链表中结点的个数,其中first为指向第一个结点的指针(即为头指针),请填空
struct link{ char date;
struct link *next;
};
…
struct link *p,*first;
int c=0;
p=first;
while( p->next!=null )
{ c++ ;
p= p->next ;
}
9,以下min3()函数的功能是:计算循环单链表first中每3个相邻结点数据域中的和,并返回其最小值,填空
struct node{ int data;
struct node *link;
int min3(struct node *first)
{ struct node *p=first;
int m,m3;
m3=p->data+p->link->data+p->link->link->data;
for(p=p->link;p!=first;p= p->link )
{ m=p->data+p->link->data+p->link->link->data;
if( m3>m ) m3=m;
return(m3);
}
main()
{ … }
10,输入20个学生的姓名和年龄并存在结构数组中,设计一个程序从中查找年龄最大和最小的学生的姓名和年龄并打印出来
11,编程序:建立一个带有头指针的单向链表,链表结点中数据通过键盘输入,当输入数据为-1时,表示输入结束
12,已知head指向一个单向链表,链表中每个结点包含数据域(data)和指针域(link),请编写程序实现如图所示链表的逆置