暨南大学本科实验报告专用纸
课程名称 高级语言程序设计 成绩评定
实验项目名称 结构体和共用体 指导教师 张晓刚
实验项目编号8060151108实验项目类型 综合性实验地点 C301
学生姓名 苟长弘 学号 2007051282
学院 信息科学技术 系 计算机科学 专业 软件工程
实验时间2007年6月12 日 下午~6月13 日 下午 温度 ℃湿度
(一) 实验目的
1. 掌握结构体类型变量的定义和使用。
2. 掌握结构体类型数组的概念和应用。
3. 掌握链表的概念,初步学会对链表进行操作。
4. 掌握共用体的概念与使用。
(二) 实验内容和要求
实验内容1::试编写一个程序完成:有5个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入5个学生数据,要求输出3门课总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课成绩、平均分数)。
实验要求:(1)要求用一个input函数输入5个学生数据;应一个average函数求平均分;用max函数求出最高分学生数据;总平均分和最高分的学生的数据都在主函数中输出。
(2)输入事先已编好的程序,并运行该程序。分析运行结果是否正确。
实验内容2::试编写一个程序完成:建立一个链表,每个结点包括:学号、姓名、性别、年龄。输入一个年龄,如果链表中的结点所包含的年龄等于此年龄,则将此结点删去。
实验要求:(1)用链表实现。
(2)输入事先已编好的程序,并运行该程序。分析运行结果是否正确。
(三) 主要仪器设备
仪器:计算机
实验环境: Windows XP + Visual C++6.0
暨南大学本科实验报告专用纸(附页)
(四) 实验原理
实验1的N-S图如下:
实验2的N-S图如下:
creat函数:
print函数:
暨南大学本科实验报告专用纸(附页)
del函数:
主函数:
(五) 源程序
实验1的源程序如下:
#include<stdio.h>
struct student
{
int number;
char name[10];
int classes[3];
int average;
}stu[5];
void input(struct student *p)
{
暨南大学本科实验报告专用纸(附页)
int i;
for(i=0;i<5;i++,p++)
{
printf("Please input %dth student's data:",i+1);
scanf("%d %s %d %d %d",&p->number,p->name,&p->classes[0],&p->classes[1],&p->classes[2]);
}
}
average(struct student *p)
{
int m=0;
m=p->classes[0]+p->classes[1]+p->classes[2];
m=m/3;
p->average=m;
return(m);
}
struct student *max(struct student *p,int j)
{
int i,n;
struct student *q;
for(i=0;i<5;i++,p++)
if(p->classes[j]>=n)
{
n=p->classes[j];
q=p;
}
return(q);
}
void main()
{
int i,m[5];
struct student *p;
input(stu);
p=stu;
for(i=0;i<5;i++,p++)
{
m[i]=average(&stu[i]);
printf("The %s's average score is:%d\n",p->name,m[i]);
}
for(i=0;i<3;i++)
暨南大学本科实验报告专用纸(附页)
{
p=max(stu,i);
printf("The classes%d's max score is:%d %s %d %d %d %d\n",i+1,p->number,p->name,p->classes[0],p->classes[1],p->classes[2],p->average);
}
}
实验2的源程序如下:
#include<stdio.h>
#include<malloc.h>
#define NULL 0
#define LEN sizeof(struct student)
struct student
{
char num[10];
char name[10];
char sex;
int age;
struct student *next;
} ;
int n;
struct student *creat(void)
{
struct student *head;
struct student *p1,*p2;
n=0;
p1=p2=(struct student *)malloc(LEN);
scanf("%s %s %c %d",p1->num,p1->name,&p1->sex,&p1->age);
head=NULL;
while(p1->age!=0)
{
n=n+1;
if(n==1)
head=p1;
else
p2->next=p1;
p2=p1;
p1=(struct student *)malloc(LEN);
scanf("%s %s %c %d",p1->num,p1->name,&p1->sex,&p1->age);
}
p2->next=NULL;
暨南大学本科实验报告专用纸(附页)
return(head);
}
void print(struct student *head)
{
struct student *p;
printf("\nNow,These %d records are :\n",n);
p=head;
if(head!=NULL)
do { printf("%s %s %c %d\n",p->num,p->name,p->sex,p->age);
p=p->next;
}while(p!=NULL);
}
struct student *del(struct student *head ,int num)
{
struct student *p1,*p2;
if(head==NULL)
printf("\nlist null!\n");
else
{
p1=head;
while(num!=p1->age&&p1->next!=NULL)
{
p2=p1;
p1=p1->next;
}
if(num==p1->age)
{
if(p1==head)
head=p1->next;
else
p2->next=p1->next;
printf("delete:%d\n",num);
n=n-1;
}
else
printf("%d not been found!\n",num);
}
return(head);
}
void main()
{
暨南大学本科实验报告专用纸(附页)
struct student *head,*stu;
int del_num;
printf("input records:\n");
head=creat();
print(head);
printf("\ninput the deleted number:");
scanf("%d",&del_num);
while(del_num!=0)
{
head=del(head,del_num);
print(head);
printf("\ninput the deleted number:");
scanf("%d",&del_num);
}
}
(六) 实验步骤与调试
实验1:运行时未发生任何错误,结果正确。
实验2:运行时提示语法错误,原因是输入语句写为了“scanf("%s%s%d%d",p1->num,p1->name,p1->sex,&p1->age);”
将起改为“scanf("%s%s%d%d",p1->num,p1->name,&p1->sex,&p1->age);”,
成功运行,但是结果却错误,再检查,发现原因还是输入语句:“scanf("%s%s%d%d",p1->num,p1->name,&p1->sex,&p1->age);”
应该改为“scanf("%s%s%c%d",p1->num,p1->name,&p1->sex,&p1->age);”
运行后,结果正确。
暨南大学本科实验报告专用纸(附页)
(七) 实验结果与分析
实验1的结果如下:
实验2 的结果如下:
暨南大学本科实验报告专用纸(附页)
分析:
利用结构体可以很好的对各类数据进行组合,而且还很容易引用。对于学生的数据有多个,而且数据类型都不相同,首选可用结构体来存放。对结构体的变量成员的引用要注意引用的格式。它不同于普通变量的引用方式,它要有结构体名加一点再加变量名来引用。在输入时,也应注意输入的成员的类型。
利用链表对结构体的处理是一种很好的方法。它是线性存储的,可以动态的分配空间,根据需要开辟内存单元,减少对空间的浪费,而且对于数据的删除和添加,它并不需要利用额外的空间对以存放好的数据进行移动或交换。链表是利用指针来实现的操作的。
第二篇:C语言电子版实验报告样式
C语言程序设计 课程实验报告
系 (院): 信息工程学院 班 级: 学 号: 姓 名: 完成日期: 20xx年2-6月 指导教师: 徐永安
二○一三年六月
C语言程序设计实验内容安排
实验一、了解编程环境
主要内容:基于Visual C++6.0对C语言的兼容,了解Visual C++6.0--Win32 Console Application 的编程步骤,通过简单编程了解printf()、scanf()、getch()/getchar()的基本用途,了解基本编程规范。
实验二、顺序结构
主要内容:学会在程序中运用基本类型数据和表达式;重点掌握赋值语句和格式I/O语句在程序开发中的运用。
实验三、条件结构
主要内容:熟悉if语句和switch语句的语法规则及应用;学会编写分支结构的C程序。 实验四、循环结构
主要内容:训练循环设计技巧,重点训练for循环、while循环和do-while循环的构造技术,进一步加深对有关经典算法的理解,能灵活运用循环结构编写高质量的C程序。
实验五、数组
主要内容:掌握数值型数组和字符型数组各自的编程特点,积累有关经典算法,能在程序中灵活使用数组技术。
实验六、函数
主要内容:熟悉模块化设计方法在C语言中的实现,能进行正确的函数调用,并能实现函数嵌套调用,进一步积累程序调试经验,增强编写大型程序的能力。
实验七、指针
主要内容:练习指针变量、指向一维数组的指针变量、指向二维数组的指针变量在程序中的运用,练习编写返回指针值的函数,掌握指针在函数通信中的运用,能合理运用指针技术编写更为高效、紧凑的C程序。
实验八、结构
主要内容:学会在程序中运用结构变量和结构数组,掌握指向结构体的指针变量的定义和使用方法,掌握动态存储分配函数,熟练掌握链表操作。
实验九、文件
主要内容:学会数据文件的建立、读写和关闭操作。能在程序中使用数据文件实现相关算法。
备注:
(1)实验报告总量控制在10页以内,标题黑体小四,其它五号字体、单倍行距。
(2)提交程序全部工程的压缩文件。
(3)考虑Word文档实验报告的篇幅限制(10以内),可挑选实验二到九中的任意4个实验写Word文档实验报告。实验结果输出界面为黑底白字的,请做反色处理。
(以下是某个实验的文档格式,供大家参考)
实验五、数组应用
1、 实验目的
掌握数值型数组和字符型数组各自的编程特点,积累有关经典算法,能在程序中灵活使用数组技术。
2、 实验内容
输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。
3、设计思路
4、实现代码
#include<stdio.h>
void main()
{
char string[81]; //字符数组
int i,num=0;//统计单词个数
int word=0;//判别是否是单词的标志,word=0表示未出现单词,若出现单词word就置为1 char c;
gets(string); //键盘输入字符串
for(i=0;(c=string[i])!='\0';i++) //循环与数组结合,统计字符串中的单词数
{
if(c==' ')
word=0;
else if(word==0)
{
word=1;
num++;
}
}
printf("There are %d words in the line.\n",num);//输出结果
}
5、实验结果
6、实验体会
通过实验验证,将数组和循环相结合,能够有效提高数据处理效率。