实验九 结构体与链表程序设计(解答)
C程序设计(链表)习题与答案

一、单选题1、链表不具有的特点是()。
A.不必事先估计存储空间B.插入、删除不需要移动元素C.可随机访问任一元素D.所需空间与线性表长度成正比正确答案:C2、链接存储的存储结构所占存储空间()。
A.分两部分,一部分存放结点值,另一部分存放结点所占单元数B.只有一部分,存放结点值C.分两部分,一部分存放结点值,另一部分存放表示结点间关系的指针D.只有一部分,存储表示结点间关系的指针正确答案:C3、链表是一种采用()存储结构存储的线性表。
A.网状B.星式C.链式D.顺序正确答案:C4、有以下结构体说明和变量的定义,且指针p指向变量a,指针q指向变量b,则不能把结点b连接到结点a之后的语句是()。
struct node {char data;struct node *next;} a,b,*p=&a,*q=&b;A.(*p).next=q;B.p.next=&b;C.a.next=q;D.p->next=&b;正确答案:B5、下面程序执行后的输出结果是()。
#include <stdio.h>#include <stdlib.h>struct NODE {int num; struct NODE *next;};int main(){ struct NODE *p,*q,*r;p=(struct NODE*)malloc(sizeof(struct NODE));q=(struct NODE*)malloc(sizeof(struct NODE));r=(struct NODE*)malloc(sizeof(struct NODE));p->num=10; q->num=20; r->num=30;p->next=q;q->next=r;printf("%d",p->num+q->next->num);return 0;}A.30B.40C.10D.20正确答案:B6、下面程序执行后的输出结果是()。
C语言实验9(附参考答案)

C语言实验9(附参考答案)实验9:选择结构(2)实验目的:(1)进一步掌握if语句和switch语句;(2)掌握用条件运算符实现选择;(3)掌握选择结构的嵌套,掌握简单的算法。
(4)能灵活应用下列语句:if,if-else,switch,break。
实验内容:1、若希望当A的值为奇数时,表达式的值为“真”,A的值为偶数时,表达式的值为“假”,则以下不能满足要求的表达式是( C )。
A)A%2==1 B)!(A%2==0) C)!(A%2) D)A%2 2、以下程序的运行结果是 F 。
main() { } if(2*2==5<2*2==4) print(“T”); else printf(“F”);3、下列程序的运行结果是。
#include void main(void) { int x,y=1,z; if(y!=0) x=5;printf(“\\t%d\\n”,x); if(y==0) x=4; else x=5;printf(“\\t%d\\n”,x); x=1;1} if(y<0) if(y>0) x=4; else x=5; printf(“\\t%d\\n”,x); 4、根据程序的功能,将以下程序补充完整以下程序计算某年某月有几天。
其中判别闰年的条件是:能被4整除但不能被100整除的年是闰年,能被400整除的年也是闰年。
请在内填入正确内容。
main() { int yy,mm,len; printf(“year,month=”);scanf(“%d %d”,&yy,&mm); switch(mm) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: len=31 ; break; case 4: case 6: case 9: case 11: len=30; break; case 2:if(yy%4==0&&yy0!=0||yy@0==0) len=29 ; else len=28 ; break; default: printf(“input error”); break; } printf(“the length of %d %dis %d\\n”,yy,mm,len); } 二、编程:21、(必做)试编程判断输入的正整数是否既是5又是7的整倍数。
结构体与链表习题附答案

结构体与链表习题附答案一、选择题1、在说明一个结构体变量时系统分配给它的存储空间是().A)该结构体中第一个成员所需的存储空间B)该结构体中最后一个成员所需的存储空间C)该结构体中占用最大存储空间的成员所需的存储空间D)该结构体中所有成员所需存储空间的总和。
2.设有以下说明语句,则以下叙述不正确的是( )struct stu{int a;float b;}stutype;A. struct 是结构体类型的关键字B. struct stu 是用户定义的结构体类型C. stutype 是用户定义的结构体类型名D. a 和b 都是结构体成员名3、以下对结构体变量stu1中成员age的合法引用是()#includestruct student{int age;int num;}stu1,*p;p=&stu1A)stu1->age B)student.age C)p->age D) p.age4、有如下定义:Struct date{int year,month,day;};Struct worklist{Char name[20];Char sex;Struct date birthday;}person;对结构体变量person的出生年份进行赋值时,下面正确的赋值语句是( ) 。
A worklist .birthday.year=1978B birthday.year=1978C person.birthday.year=1958D person.year=19585、以下程序运行的结果是( ) 。
#include”stdio.h”main(){ struct date{ int year , month , day ;} today ;printf(“%d\n”,sizeof(struct date));}A .6 B.8 C.10 D.126、对于时间结构体struct date{ int year , month , day ;char week[5];}则执行printf(“%d\n”,sizeof(struct date))的输出结果为( ) 。
C语言实验报告题及答案

《C程序设计实验》实验一C程序开发环境(2学时)1.实验目的熟悉C语言的集成开发环境,了解菜单的使用方法;掌握C语言程序上机的编辑、编译、连接、运行的基本步骤;了解C语言程序的结构。
2.实验内容(1)熟悉C语言程序上机的编辑、编译、连接、运行的基本步骤;(2)输入并调试、运行下面的程序。
#include <stdio.h>int main( ){printf ("This is a C program.\n");return 0;}(3)输入并调试、运行下面的程序。
#include <stdio.h>int main( ){int max(int x,int y);int a,b,c;scanf("%d,%d",&a,&b);c = max(a,b);printf("max=%d\n",c);return 0;}int max(int x,int y){int z;if (x > y) z = x;else z = y;return(z);}3.实验仪器设备微型计算机一套,配置Windows系统和VC++6.0/Turbo C3.0 软件。
4.问题讨论将printf函数改为print,调试并分析结果。
实验二数据类型、运算符与表达式(2学时)1.实验目的掌握整型、字符型和实型变量的定义和使用;掌握算术运算符的使用;掌握C语言表达式的运算规则。
2.实验内容(1)输入并调试、运行下面的程序。
#include <stdio.h>int main(){char c1,c2;c1=97;c2=98;printf("%c %c\n",c1,c2);printf("%d %d\n",c1,c2);return 0;}(2)输入并调试、运行下面的程序。
#include <stdio.h>int main(){int i,j,m,n;i=8;j=10;m=++i;n=j++;printf("%d,%d,%d,%d\n",i,j,m,n);return 0;}3.实验仪器设备微型计算机一套,配置Windows系统和VC++6.0/Turbo C3.0 软件。
C语言程序设计实验实验报告

C语⾔程序设计实验实验报告《C语⾔程序设计实验》实验报告实验九⽂件编程(⼀)班级:_07某某专业1班_学号:______姓名:___实验样例_____⽇期:___2008.6.10_____台州学院数信学院计算机系制作⼀、实验⽬的和要求综合使⽤基本结构、基本算法、函数、指针、结构体、链表等知识设计程序。
⼆、实验指导1、注意:本次实验为综合性实验,需要综合本课程以前所学内容,完成编制⼀个⼩型应⽤程序。
需要复习课本以前所学内容,浏览上课讲解的相关内容。
2、实验时间安排:准备实验⽅案,上课时上机编程,课余完成整个设计并完成实验报告。
3、实验具体要求:以⼀张假想的学⽣期中成绩表为实验对象,编制⼀个⼩型应⽤程序,可以考虑实现以下功能:(1)成绩修改;(2)成绩查询;(3)成绩统计;(4)成绩输⼊。
也可以实现其他⾃定义的功能。
界⾯采⽤简易菜单形式,可以分级显⽰。
实验需要进⾏以下步骤:需求分析、程序设计、程序调试、程序运⾏,并对程序运⾏效果进⾏分析,提出改进⽅案。
初步锻炼学⽣的程序设计能⼒、程序调试能⼒、对实验结果进⾏综合分析的能⼒。
4、实验成绩评价标准:参见成绩评定表。
四、实验报告内容(参见样本,请另附页)实验报告必须包含以下内容:1、对你设计的程序功能进⾏的较详细描述。
2、画出程序测试⽤的学⽣期中成绩表(包含:表头、若⼲⾏包含学⽣成绩等信息的数据⾏)。
3、给出程序清单(包含结构体的声明与定义、所有的函数声明、所有的全局变量、所有的函数定义、必要的注释。
注:如果程序过长,可以不⽤给出所有的函数定义,只给出主要的函数定义)。
4、运⾏结果(写出运⾏时的主界⾯、各模块的实现界⾯等,不作具体要求,但要求能清晰地体现出程序的功能)。
5、对你的设计作⼀个评价(可以包含你所花的时间、精⼒,你遇到的困难及如何解决的,你的设计过程所遇到的其他事情;必须包含你对设计的客观评价,以及提出的改进⽅案)。
1、程序功能描述:(略)2、成绩表样表:3、程序清单:(红⾊部分是和上⼀个程序的区别之处)#includestruct student /*期中成绩表的结构声明*/{int num;char name[20];char sex;float YuWen;float ShuXue;float YingYu;float totle;};#define MAX_STU_NUMBER 100 /*宏定义最⼤学⽣数为100⼈*/struct student Stu[MAX_STU_NUMBER]; /*⼀次性定义100个学⽣的存储空间*/int STU_NUMBER; /*存放学⽣数*/char *FileName = "chengji.txt"; /*成绩存放的⽂件*//*所有的函数声明:*/int SelectMainMenu(); /*显⽰并选择主菜单。
C语言结构体与链表(总结)

C程序设计快速进阶大学教程
12.1.5 结构体与指针
例12.4 用指针变量输出结构体数组。 #include<stdio.h> struct student { int iNum; char *pcName; char cSex; float fScore; }strStuArr[5]={ {101,"Zhou ping",'M',45},{102,"Zhang ping",'M',62.5}, {103,"Liou fang",'F',92.5}, {104,"Cheng ling",'F',87}, {105,"Wang ming",'M',58} }; int main() { struct student *pStrStudent; /*指针指向数组开始*/ pStrStudent=strStuArr; printf("No\tName\t\t\tSex\tScore\t\n"); /*通过移动指针访问数组*/ for(pStrStudent=strStuArr;pStrStudent<strStuArr+5;pStrStudent++) printf("%d\t%s\t\t%c\t%f\t\n",pStrStudent->iNum, pStrStudent->pcName,pStrStudent->cSex,pStrStudent->fScore); return 0; }
struct student *pStrStudent; pStrStudent =&strStu1;
C语言 结构体与链表

CHAPTER 10第10章结构体与共用体学习目标本章主要介绍结构体的定义和使用方法,然后介绍链表的概念和相关操作,最后介绍两种新的数据类型——共用体和枚举。
通过本章的学习,需要掌握结构体的概念与结构体类型的定义方法,熟练掌握结构体变量的定义、引用和初始化方法,掌握链表的概念,熟练掌握链表的相关操作,了解共用体和枚举的概念及其使用方法。
实际问题中,经常需要对一些类型不同但又相互关联的数据进行处理。
比如,对一个学生而言,他的学号(num)、姓名(name)、性别(sex)、年龄(age)、成绩(score)等数据都与该学生有联系。
如果将num、name、sex、age、score分别定义成相互独立的简单变量,则无法反映它们之间的内在联系;又因为这些数据彼此类型不同,而数组只能对同种类型的成批数据进行处理,所以,此时也无法使用数组。
这就需要有一种新的数据类型,它能将具有内在联系的不同类型的数据组合成一个整体,在C语言里,这种数据类型就是“结构体”。
结构体属于构造数据类型,它由若干成员组成,成员的类型既可以是基本数据类型,也可以是构造数据类型,而且可以互不相同。
由于不同问题需要定义的结构体中包含的成员可能互不相同,所以,C语言只提供定义结构体的一般方法,结构体中的具体成员由用户自己定义。
这样,编程人员可以根据实际需要定义各种不同的结构体类型。
10.1 结构体结构体遵循“先定义后使用”的原则,其定义包含两个方面,一是定义结构体类型;二是定义该结构体类型的变量。
10.1.1 结构体类型的定义格式:struct 结构体类型名{类型1 成员名1;类型2 成员名2;类型n 成员名n;};功能:定义一种结构体类型。
例如,图10.1所示结构体类型可有如下定义:图10.1 struct student结构体类型组织结构图struct date{int year;int month;int day;};struct student{int num;char name[20];char sex;struct date birthday;float score;};【说明】①“结构体类型名”与“成员名”都遵循标识符命名规则。
C语言_实验九、结构体程序设计

实验九、结构体程序设计一、实验目的1.掌握结构、结构数组、结构指针的定义及使用;2.掌握简单的链表的定义及使用;3.掌握共用体和枚举类型的定义及使用;4.掌握文件的简单的定义、打开、写、关闭等操作。
二、实验内容1.[题目内容]某考点建立一个考生人员情况登记表、表格内容如下:1)根据上表正确定义该表格内容要求的数据类型。
2)分别输入各成员项数据,并打印输出(为简便,假设有3个考生)编程序,然后上机调试运行程序。
2.[题目内容]某单位进行选举,有5位候选人:zhang、wang、li、zhao、liu。
编写一个统计每人得票数的程序。
要求每个人的信息使用一个结构体表示,5个人的信息使用结构体数组。
3.[题目内容]设张三20岁、李四22岁、王平23岁,编程输出3人中年龄最小者的姓名和年龄。
4.[题目内容]定义一个学生成绩结构体类型,包含“学号”、“姓名”、“性别”、“年龄”、“班级”、“英语”、“数学”、“物理”、“总分”、“名次”等信息。
编写6个函数分别用于:(1)使用结构体数组,输入全班10名学生的上述信息;(2)计算每一个学生的总分、平均分;(3)计算每一门课程的平均分;(4)查找成绩有不及格的学生信息;(5)按学生成绩总分降序排序;(6)输出全班学生的学号、总分及名次。
5.[题目内容]利用上一题的结构类型,创建包含10个结点的无序链表。
编写5个函数分别实现下述功能(参考前面第三部分内容):(1)显示链表;(2)添加结点;(3)删除结点;(4)计算每位学生的总分;(5)按英语成绩排序。
三、课后作业(写实验报告)1.学生成绩管理:有5个学生,每个学生的数据包括学号、班级、姓名、三门课成绩。
从键盘输入5个学生数据,要求打印出每个学生三门课的平均成绩,以及每门课程平均分、最高分学生数据(包括学号、班级、姓名、三门课成绩,平均分)。
(1)定义学生结构体。
(2)用一个函数实现5个学生数据的输入,用另一个函数负责求每个学生三门课程的平均成绩,再用一个函数求出平均分最高的学生并输出该学生的数据。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
int min,i;
min=0;
for(i=0;i<n;i++)
if(person[i].age <person[min].age) min=i; // person[i] <person[min]
return (person[min]); //return (person )
}
void main()
t.x=(p1.x+p2.x)/2;
t.y=(p1.y+p2.y)/2;
return t;
}
double dists(struct point p1,struct point p2 )
{ double d;
d=sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y));
q=H;p=H->next;
while(p && n>p->data) //while(n>p->data && p)
{
q=p;p=p->next;
}
s->next=q->next; // q->next=s;
q->next=s; // s->next=q->next;
}
void main()
{
int a[]={12,3,45,67,7,65,10,20,35,55};
p=p->next;
}
printf("\n");
}
2、程序填空
(1)下列函数findbook的功能为:在有n个元素的数组s中查找书名为a的书,若找到,函数返回数组下标,否则,函数返回-1,请填写适当的符号或语句,使程序实现其功能,程序以文件名sy8_4.c存盘。
#include<stdio.h>
#include<string.h>
{ int no;
char name[16];
float math,eng,c;
float sum;
};
struct student st[N];
int i;
printf("请输入%4d个学生的学号、姓名、数学、英语、C++成绩\n",N);
for (i=0;i<N;i++)
{
scanf("%d %s",&st[i].no,&st[i].name);
float gongzi;
struct node *next;
} ;
void creat(struct node *H,int *a,int n)
{ int i;
float x;
struct node *p;
for(i=0;i<n;i++)
{printf("输入工号%4d的工资:",a[i]);
scanf("%f",&x);
struct bdata
{ int id;
char bname[20];
float price;
} ;
int findbook(struct bdata st[],int n,char s[])
{ int i;
for(i=0;i<n;i++)
if(strcmp(st[i].bname,s)==0) return i; //1
return -1; //2
}
void main()
{ struct bdata book[10ห้องสมุดไป่ตู้];
char st[20];
int index;
printf("请输入要查找书名:");
gets(st);
index=findbook(book,100,st); //3
……
}
(2)下列函数average功能为:计算5名学生3门课成绩的平均分,请填写适当的符号或语句,使程序实现其功能,程序以文件名sy8_5.c存盘。
printf("输入第一个点坐标:\n");
a=inputpoint( );//
printf("输入第二个点坐标:\n");
b=inputpoint( );
c=midpoint(a,b );
printf("中点坐标为:(%5.1f,%5.1f)\n",c.x,c.y);
printf("两点站距离为:%10.4f\n",dists(a,b));
struct Link
{int data;
struct Link *next;
} ;
void InsertList(struct Link *H,int n)
{
struct Link *p,*q,*s;
s=(struct Link *) malloc(sizeof(struct Link));
s->data=n;
#include<stdio.h>
struct link
{ int data;
struct link *next;
};
void hbsort(link *a,link *b,link *c)
{link *pa,*pb,*pc;
pa=a->next;
pb=b->next;
pc=a;c=pc;
while(pa!=NULL && pb!=NULL) //1
{
struct stud a[]={{"Zhao",21},{"Qian",20},{"Sun",19},{"LI",22}};
int n=4;
struct stud minpers;
minpers=fun(a,n);
printf("%s是年龄小者,年龄是:%d\n",,minpers.age);
return d;
}
(3)编写一个程序实现如下功能:建立一个单链表,每个结点数据要有职工号、工资。用一个creat函数来建立链表,用list函数输出数据(数据自定)(程序以文件名sy8_9.c存盘)。
#include<stdio.h>
#include<malloc.h>
struct node
{int no;
①为点输入坐标值。
②求两个点中点坐标。
③求两点间距离。
(程序以文件名sy8_8.c存盘)
#include<stdio.h>
#include<math.h>
struct point
{ float x,y; } ; /*定义一个点结构*/
struct point inputpoint( ) ; /*输入点坐标值*/
struct point midpoint(struct point p1,struct point p2 ); /*两个点中点坐标*/
double dists(struct point p1,struct point p2 ); /*两点间距离*/
void main()
{ struct point a,b,c;
p=(struct node *) malloc(sizeof(struct node));
p->no=a[i];
p->gongzi=x;
p->next=H->next;
H->next=p;
}
}
void list(struct node *H)
{ struct node *p;
p=H->next;
while(p)
{sum=0; //1
for(j=0;j<m;j++)
sum=sum+st[i].mark[j]; //2
st[i].ave=sum/m; //3
}
}
void main()
{int i;
struct stud preson[n];
……
average(preson);
……
}
(3)下列函数hbsort功能为:将两个已知的有序链表合并成一个有序链表,请填写适当的符号或语句,使程序实现其功能,程序以文件名sy8_6.c存盘。
scanf("%f",&x);
printf("输入多项式系数(a)和指数(n,n=-10000,结束):\n");
scanf("%f %d",&p.a,&p.n); //scanf("%f %d", p.a, p.n)
while(p.n!=-10000)
{pvalue+=p.a*pow(x,p.n);//pvalue+=p.a*pow(x, n);
H->next=NULL;
creat(H,a,5);
printf("%6s%8s\n","工号","工资");
list(H);
}
《结构体与链表程序设计》实验解答
1、改错题
(1)
#include<stdio.h>
struct stud
{char name[20];
int age;
} ;
struct studfun(struct stud person[],int n) //fun(struct stud person[],int n)