金陵科技学院实验报告
实验4 构造类型程序设计
一、实验目的和要求
(1)熟悉结构体和共同体的概念;
(2))熟悉并掌握结构体变量、数组和共同体变量的定义、赋值与使用; (3)掌握结构体指针的定义与引用;
(4)掌握链表的概念,初步学会对链表进行操作;
(5)熟悉文件打开、关闭、写入、读出的方法;学会使用文件操作函数。
二、实验仪器和设备
奔腾以上计算机,装有windows XP以上版本操作系统和Visual C++ 6.0软件。
三、实验内容与过程
1、程序调试 (1) struct aa
{int x,*y;}*p;
int a[8]={10,20,30,40,50,60,70,80};
struct aa b[4]={100,&a[1],200,&a[3],10,&a[5],20,&a[7]}; main() {p=b;
printf(″%d″,*++p->y); printf(″%d\n″,++(p->x)); } (2) struc STU
{ char name[10]; int num; };
void f1(struct STU c)
{ struct STU b={“LiSiGuo”,2042}; c=b; }
void f2(struct STU *c)
{ struct STU b={“SunDan”,2044}; *c=b; } main( )
{ struct STU a={“YangSan”,2041},b={“WangYin”,2043}; f1(a) ;f2(&b) ;
printf(“%d %d\\n”,a.num,b.num); } 2、程序设计
39
金陵科技学院实验报告
说明,所有题目均需添加main(),在main()中调用子函数并设计完整的输入输出才可调试通过。
(1)(2)两题的学生记录由学号和成绩组成,结构体类型定义如下:
typedef struct { char num[10]; double s;
} STREC; (1)功能:a所指向的数组中有N名学生的数据,请编写函数double fun(STREC *a,STREC *b),把a数组中分数最高的学生数据放在b所指的数组中。分数最高的学生可能不止一个,函数返回分数最高的学生人数。(画程序流程图)
(2)功能:a所指的数组中有N名学生的数据,请编写函数double fun(STREC *a,STREC *b,int *n),把低于平均分的学生数据放在b所指的数组中,低于平均分的学生人数通过形参n传回,平均分通过函数值返回。
(3)从键盘输入一系列字符(以$作为输入结束标志),将其存入文件file1.txt中,再从该文件中查找某个字符(该字符可以输入),如果查找成功将返回成功标志,否则返回不成功标志。
3、讨论、思考题
功能:N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。请编写子函数double fun(STREC *h),找出学生的最高分,由函数值返回。
注意:链表的节点类型定义如下: struct slist { double s;
struct slist *next; };
typedef struct slist STREC;
程序清单及流程图: 2(1)
#include
typedef struct { char num[10]; double s; }STREC;
double fun(STREC *a,STREC *b) { int i,j; double k=a[0].s,counter=0.0; for(i=1;i
金陵科技学院实验报告
{ k=a[i].s; } } for(j=0;j main() { STREC a[N]; STREC b[N]; int i; double max; printf(\ scanf(\ getchar(); for(i=0;i (2) #include typedef struct { char num[10]; 41 金陵科技学院实验报告 double s; }STREC; double fun(STREC *a,STREC *b) { int i,j; double k=a[0].s,counter=0.0,aver,sum=0; for(i=0;i 42 than average 金陵科技学院实验报告 (3)#include FILE *fp; if((fp = fopen(\ { exit(1); } char a; printf(\输入一串字符,以$结束\\n\ while(scanf(\ { fputc(a,fp); } fflush(stdin); fclose(fp); } int Find(char c) { FILE *fp; int flag = 0; if((fp = fopen(\ { exit(1); } while(!feof(fp)) { char ch = fgetc(fp); if(ch == c) flag = 1; } if(flag == 1) { printf(\ } else printf(\ fclose(fp); return 0; } int main() { 43