C语言程序设计 实验报告
班级:
姓名:
吉林大学珠海学院计算机系
(一) 实验目的:
熟悉C++的一些重要性质,
(二) 实验内容和要求:
(三) 实验原理(画程序的流程图或N-S图):
(四) 源程序:
(五) 实验步骤与调试:
主要是写出对源程序的语法错误以及逻辑错误的进行发现、修正以及调试的步骤。
(六) 实验结果与分析
写出最终逻辑正确的程序在各种实验数据下的实验结果以及进行简单的结果分析。
第二篇:C语言实验报告标准格式
暨南大学本科实验报告专用纸
课程名称 高级语言程序设计 成绩评定
实验项目名称 结构体和共用体 指导教师 张晓刚
实验项目编号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 的结果如下:
暨南大学本科实验报告专用纸(附页)
分析:
利用结构体可以很好的对各类数据进行组合,而且还很容易引用。对于学生的数据有多个,而且数据类型都不相同,首选可用结构体来存放。对结构体的变量成员的引用要注意引用的格式。它不同于普通变量的引用方式,它要有结构体名加一点再加变量名来引用。在输入时,也应注意输入的成员的类型。
利用链表对结构体的处理是一种很好的方法。它是线性存储的,可以动态的分配空间,根据需要开辟内存单元,减少对空间的浪费,而且对于数据的删除和添加,它并不需要利用额外的空间对以存放好的数据进行移动或交换。链表是利用指针来实现的操作的。