结构体练习题

发布时间 : 星期三 文章结构体练习题更新完毕开始阅读

1. 试利用结构体类型编制一程序,实现输入5个学生的学号,数学和语文成绩。然后计

算并输出每个人的学号和平均成绩。

2. 已知链表结点结构如下,假设动态链表已经建立,请编写删除给定学号的结点的函

数。(只编写删除子函数即可) 3. 编写函数实现动态链表的建立。链表结点结构如下,要求在主函数中将你所建立的链

表输出到屏幕上。

4. 有10个学生,每个学生的信息包括学号、姓名、3门课的成绩,从键盘输入10个学

生数据存入结构体数组中,要求输出个人总分最高的学生的信息(包括学号、姓名、3门课成绩、总分)。

5. 链表的结点数据类型如下:

struct node{ int data;

struct node *next; };

链表的建立和输出函数如下,编写将第i个结点删除的函数,并完善主函数,调试运行整个程序。 struct node *creat() { int x;

struct node *h,*s,*r;

h=(struct node *)malloc(sizeof(struct node)); r=h;

scanf(\ while(x!=-1)

{ s=(struct node*)malloc(sizeof(struct node)); s->data=x; r->next=s; r=s;

scanf(\ }

r->next=NULL; return h; }

void print(struct node *h) //打印函数 { struct node *p; p=h->next; if(p==NULL)

printf(\ else

{ while(p!=NULL)

{ printf(\ p=p->next; } } }

6. 试利用结构体类型编制一程序,实现输入一个学生的数学期中和期末成绩。然后计算

并输出其平均成绩。 7. 试利用指向结构体的指针编制一程序,实现输入三个学生的学号、数学期中和期末成

绩,然后计算其平均成绩并输出成绩表。

8. 有一个unsigned long型整数,现要分别将其前2个字节和后2个字节作为两个

unsigned int型整数输出(设一个int型数据占2个字节),试编一函数partition实现上述要求。要求在主函数中输入该long型整数,在函数partition中输出结果。

9. 编写一个函数print,打印一个学生的成绩数组,该数组中有5个学生的数据记录,每个

记录包括num、name、score[3],用主函数输入这些记录,用print函数输出这些记录。用结构体共用体来实现。

10. 有10个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入10个学生

数据,要求打印出3门课总平均成绩(指全体学生所有成绩的平均值),以及最高分的学生的数据(包括学号、姓名、3门课成绩、平均分数)。用结构体来实现。

11. 有一个结构体变量stu,内含学生学号、姓名和3门课的成绩。要求在main函数中赋

以值,在另一函数print中将它们打印输出。用结构体变量作函数参数。

12. 对候选人得票的统计程序。设有3个候选人,有20个人对其进行投票,每次输入一个

得票的候选人的名字,要求最后输出各人得票结果。用结构体的方法实现。 13. 定义一个结构体变量(包括年、月、日)。计算该日在本年中是第几天?注意闰年问

题。

14. 请删除已知链表中的指定结点。要求删除的结点数据从键盘输入。

#define NULL 0 struct student{ long num; float score;

struct student *next; };

main(){

struct student a,b,c,*head,*p; a.num=99101; a.score=89.5; b.num=99103; b.score=90; c.num=99107; c.score=85; head=&a; a.next=&b; b.next=&c; c.next=NULL;

p=head; do{

printf(\ p=p->next;

}while(p!=NULL);

del();/*请完成此函数来删除某一结点*/ } 答案:略

15. 请在已知链表中插入某一指定结点。要求插入的结点数据从键盘输入,顺序按学号

升序插入。 #define NULL 0 struct student{ long num; int score;

struct student *next; };

main(){

struct student a,b,c,*head,*p; a.num=99101; a.score=89; b.num=99103; b.score=90; c.num=99107; c.score=85; head=&a; a.next=&b; b.next=&c; c.next=NULL; p=head; do{

printf(\ p=p->next;

}while(p!=NULL);

insert();/*请完成此函数来插入某一结点*/ } 答案:略

16. 请编写程序动态生成一个链表。要求结点数据从键盘输入。并将建立好的链表输出

到屏幕上。结点数据类型如下: struct student{ long num; int score;

struct student *next; };

答案:略

17. 定义一个结构体变量(包括年、月、日)。计算该日在本年中是第几天?注意闰年问

题。请写一函数days来完成此功能。要求由主函数将年、月、日传递给days函数,

计算后将日子数传回主函数输出。 答案:略

18. 有两个链表a和b。设结点中包含学号、姓名。从a链表中删去与b链表中有相同

学号的那些结点。

链表a的数据:{\链表b的数据:{\

19. 建立一个链表,每个结点包括:学号、姓名、性别、年龄。输入一个年龄,如果链

表中的结点所包括的年龄等于此年龄,将此结点删去。请完善程序。 #include #define NULL 0

#define LEN sizeof(struct student) struct student { char num[8]; char name[10]; char sex[2]; int age;

struct student *next; }stu[10]; main() {

struct student *p,*pt.*head; int i,length,iage,flag=1; int find=1; while(flag==1)

{ printf(\ scanf(\ if(length<10) flag=0; }

/*请完成建立链表*/

/*输出*/ p=head;

printf(\ while(p!=NULL)

{ printf(\ p=p->next; }

/*请完成删除*/

联系合同范文客服:xxxxx#qq.com(#替换为@)