语言基础实训
报告书
设计题目: C语言基础实训报告
班 级:
设 计 人:
指导教师对课程设计的评语
课程设计成绩
教师评语:
指导教师签字 :
20##年 月 日
目录
1.项目一名称:学生成绩排名. 4
1.1实训目的:. 4
1.2实训内容:. 4
1.3程序流程:. 4
1.4程序代码: 5
2.项目二名称:按条件实现学生成绩排名. 7
2.1实训目的:. 7
2.2实训内容:. 7
2.3程序流程:. 7
2.4程序代码: 8
3.项目三名称:数组优化学生成绩排名. 9
3.1实训目的:. 9
3.2 实训内容:. 9
3.3程序流程:. 9
3.4程序代码:. 10
4.项目四名称:学生成绩单制作. 11
4.1实训目的:. 11
4.2实训内容:. 11
4.4程序代码: 11
5.项目五名称:学生成绩排序文件管理. 15
5.1实训目的:. 15
5.2实训内容:. 15
5.4程序流程:. 16
6.项目六名称:设计和编写学生成绩管理系统的系统主菜单. 20
6.1实训目的:. 20
6.2实训内容:. 20
6.3程序代码. 20
7.项目七:学生成绩管理项目实现. 22
7.1.实训目的:. 22
7.2实训内容:. 22
7.3程序代码. 22
8.实训心得: 29
1.项目一名称:学生成绩排名
1.1实训目的:
(1)熟悉变量、数组定义、使用、输入、输出等基本操作;
(2)进行选择、循环结构程序设计练习;
(3)掌握冒泡法排序的算法。
1.2实训内容:
(1)定义一个数组a[11],用以存放学生的成绩。
(2)从键盘输入10个学生及成绩;
(3)采用冒泡法,将学生成绩按照从高到低进行排序;
(4)再输入一个学生的成绩,将此成绩按照排序规律插入原学生成绩数组;
(5)将排好序的成绩单进行反序存放,即原来是从高到低,现在改为从低到高排列。
1.3程序流程:
1.4程序代码:
#include<stdio.h> //头文件
void main() //主函数
{int a[11]; //定义一维数组
int i,j,t,b;
printf("input 10 numbers :\n");
for(i=1;i<=10;i++) //输入十个学生成绩
scanf("%d",&a[i]); *在scanf中不能用‘\n’
printf("\n");
for(j=1;j<10;j++) //冒泡法对十个学生的成绩由高到低排序
for(i=1;i<=10-j;i++)
if(a[i]<a[i+1])
{t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
printf("the sorterd number :\n");//输出排序后的结果
for(i=1;i<11;i++)
printf("%d ",a[i]);
printf("\n");
scanf("%d",&b);//再插入一个学生的成绩
if (a[1]>b) //插入法排序
a[0]=b;
else
{for(i=1;i<=11;i++)
if(a[i]<b)
{ for(j=10;j>=i;j--)
a[j-1]=a[j];
a[i]=b;
break;
}
}
for(j=0;j<10;j++)
for(i=0;i<10-j;i++) //再次用冒泡法使成绩由低到高排序排序
if (a[i]>a[i+1])
{t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
printf("the scorted numbers :\n");
for(i=0;i<11;i++)
printf("%d ",a[i]);
printf("\n");
}
2.项目二名称:按条件实现学生成绩排名
2.1实训目的:
(1)复习数组,选择、循环结构程序设计;
(2)掌握函数的定义、调用、声明,以及参数的两种传递方式。
2.2实训内容:
(1)在函数中进行10个学生成绩从高到低排名 sort(int a[10]);
(2)改进第一步的函数为sort(int a[],int n),进行n个学生成绩从高到低排名;
(3)改进第二步的函数为sort(int a[],int n, char style), 将n个学生成绩从高到低排名,排名方式;
(4)根据sort()函数的style参数进行,如style为‘a’按升序排,style为‘d’按降序排。(a:ascending 升,d:descending 降);
(5)尝试用三种方法排序:冒泡法、选择法,插入法排序。
2.3程序流程:
2.4程序代码:
#include<stdio.h> //头文件
#define N 10 *学会使用宏定义
void main()
{void sort(int array[],int n );//sort函数的声明
int a[N];
int i;
printf("input 10 scores:\n");//输入十个学生的成绩
for(i=0;i<N;i++)
scanf("%d",&a[i]);
sort(a,N); //在主函数中调用sort函数
printf("the sorted array:\n");
for(i=0;i<N;i++)
printf("%d ",a[i]);
printf("\n");
}
void sort(int array[],int n) //sort函数的定义
{int i,j,k,t;
for(i=0;i<N-1;j++) //选择法排序
{k=i;
for(j=i+1;j<N;j++)
if(array[j]<array[k])
k=j;
t=array[k];array[k]=array[i];array[i]=t;
}
}
3.项目三名称:数组优化学生成绩排名
3.1实训目的:
(1)熟悉变量的指针和指向变量的的指针变量的概念和使用;
(2)熟悉数组的指针和指向数组的的指针变量的概念和使用。
3.2 实训内容:
(1)定义一个数组stu[10]存放10个学生的成绩,从键盘输入数据,要求用指针实现;
(2)将数组stu[10]的内容输出到屏幕上,要求用指针实现;
(3)将成绩数组按照从高到低进行排序,要求用指针实现;
(4)将第三步内容放在函数中实现,在主函数中调用实现排序,用指针实现,输出排序后的成绩单;
(5)采用指针方法,输入字符串“student score ”,复制该字符串并输出(复制字符串采用库函数或用户自定义函数)。
3.3程序流程:
3.4程序代码:
#include <stdio.h> //头文件
void main()
{void sort(int *x,int n);//用指针实现
int i,*p,a[10];
printf("input 10 scores:\n");
p=a;
for(i=0;i<10;i++)
scanf("%d",p++);
p=a;
sort(p,10); //在主函数中调用sort函数
printf("排序后的结果:\n");
for(p=a,i=0;i<10;i++)
{ printf("%d ",*p);p++;}
}
void sort(int *x,int n) //排序函数的定义
{
int i,j,t,k;
for(i=0;i<n-1;i++)
{k=i;
for(j=i+1;j<n;j++)
if ( *(x+j)>*(x+k) )
k=j;
if(k!=i)
{t=*(x+i);
*(x+i)=*(x+k);
*(x+k)=t;}
}
}
4.项目四名称:学生成绩单制作
4.1实训目的:
(1)掌握结构体变量及数组的定义、赋值、初始化、输入、输出;
(2)结构体数组的操作。
4.2实训内容:
(1)定义一个结构体数组,存放10个学生的学号,姓名,math、Chinese、English三门课的成绩;
(2)从键盘输入10个学生的以上内容;
(3)输出单门课成绩最高的学生的学号、姓名、以及该门课程的成绩;
(4)输出三门课程的平均分数最高的学生的学号、姓名及其平均分;
(5)将10个学生按照平均分数从高到低进行排序,输出结果,格式如下所示:
number name math Chinese English average
103 tom 90 90 100 95
101 alice 90 80 70 80
4.4程序代码:
#include <stdio.h>
# define N 3 //宏定义
struct student //定义结构体数组
{
char num[7];
char name[8];
float Chinese;
float English;
float Math;
float aver;
} stu[N],stud;
void main() //主函数
{int i,j,n;float max;
printf("请输入3个学生的各项成绩:\n"); //输入学生的相关信息
for(i=0;i<N;i++)
{printf("请输入学生的学号:\n");
scanf("%s",stu[i].num);
printf("请输入学生的姓名:\n");
scanf("%s",stu[i].name);
printf("请输入语文成绩:\n");
scanf("%f",&stu[i].Chinese);
printf("请输入英语成绩:\n");
scanf("%f",&stu[i].English);
printf("请输入数学成绩:\n");
scanf("%f",&stu[i].Math);
stu[i].aver=(stu[i].Chinese+stu[i].English+stu[i].Math)/3;
printf("平均分为:%f\n",stu[i].aver);
}
printf("数学成绩最高的为:\n"); //计算数学成绩最高分
max=stu[0].Math;
for(i=1;i<N;i++)
{if(stu[i].Math >=max)
{max=stu[i].Math;
n=i;
}
}
printf("学号:%s姓名:%s 数学成绩:%f",stu[n].num,stu[n].name,max);
printf("\n");
printf("语文成绩最高的为:\n");//计算数学成绩最高分
max=stu[0].Chinese;
for(i=1;i<10;i++)
{if(stu[i].Chinese>= max)
{max=stu[i].Chinese;
n=i;
}
}
printf("学号:%s姓名:%s 语文成绩:%f",stu[n].num,stu[n].name,max);
printf("\n");
printf("英语成绩最高的为:\n");//计算英语成绩最高分
max=stu[0].English;
for(i=1;i<N;i++)
{
if(stu[i].English>=max)
{
max=stu[i].English;
n=i;
}
}
printf("学号:%s姓名:%s 英语成绩:%f",stu[n].num,stu[n].name,max);
printf("\n");
printf("平均成绩最高的为:\n"); //计算平均成绩最高分
max=stu[0].aver;
for(i=1;i<N;i++)
{
if(stu[i].aver>=max)
{
max=stu[i].aver;
n=i;
}
}
printf("学号:%s姓名:%s 平均成绩:%f",stu[n].num,stu[n].name,max);
printf("\n");
printf("按平均成绩由高到低排列:\n"); for(i=0;i<N-1;i++)
for(j=0;j<N-1-i;j++)
{
if(stu[j].aver>=stu[j+1].aver) //用冒泡法实现平均成绩由高到低排序
{ stud=stu[j];
stu[j]=stu[j+1];
stu[j+1]=stud;
}
}
printf(" 学号 姓名 语文 英语 数学 平均分\n");
for(j=0;j<N;j++)
printf("%s %s %f %f %f %f\n",stu[i].num,stu[j].name,
stu[j].Chinese,stu[j].English,stu[j].Math,stu[j].aver);
}
5.项目五名称:学生成绩排序文件管理
5.1实训目的:
(1)掌握文件指针的概念和运用;
(2)掌握文件的相关操作:打开、读、写、关闭;
(3)掌握文件的定位操作。
5.2实训内容:
(1)定义一个结构体数组,存放10个学生的学号,姓名,三门课的成绩;
(2)从键盘输入10个学生的以上内容,存入文件stud.dat,关闭文件;
(3)打开stud.dat文件,将数据读出,查看是否正确写入,关闭文件;
(4)打开文件stud.dat文件,读出数据,将10个学生按照平均分数从高到低进行排序,分别将结果输出到屏幕上和另一文件studsort.dat中;
(5)从studsort.dat 文件中读取第2,4,6,8,10个学生的数据。
5.3程序流程:
5.4程序流程:
#include <stdio.h>
#define N 3 //宏定义
char p1[20]={"stud.dat"};
char p2[20]={"studsort.dat"};
FILE *fp;
struct student_type //定义结构体数组
{ char name[10];
char num[20];
int math; Eng; Chin; ave;
}stud[N],h;
void input()//给结构体赋初值
{
printf("请输入学生信息:\n\n");
for(int i=0;i<N;i++)
{
printf("\n请输入第%d个学生信息:\n",i+1);
printf("姓名:");
scanf("%s",stud[i].name);
printf("学号:");
scanf("%s",stud[i].num);
getchar();
printf("数学:");
scanf("%d",&stud[i].math);
printf("英语:");
scanf("%d",&stud[i].Eng);
printf("语文:");
scanf("%d",&stud[i].Chin);
}
}
void output()//输出学生信息
{
for(int i=0;i<N;i++)
{printf("name:%s\nnumber:%s\nmath:%d\nEnglish:%d\nChinese:%d\n\n",stud[i].name,stud[i].num,stud[i].math,stud[i].Eng,stud[i].Chin);
}
}
void save(char s[])//将数据写进文件
{
int i;
if((fp=fopen(s,"wb"))==NULL)
{printf("cannot open file\n");
return;
}
for(i=0;i<N;i++)
if(fwrite(&stud[i],sizeof(struct student_type),1,fp)!=1)
printf("file write error\n");
}
void display(char s[])//打开文件stud.dat
{
int i;
if((fp=fopen(s,"rb"))==NULL)
{
printf("cannot open file\n");
return;
}
for(i=0;i<N;i++)
{
if((fread(&stud[i],sizeof(struct student_type),1,fp))!=1)
{
printf("file read error\n");
}
}
}
void sort()//根据学生成绩排序
{
int i,j;
display(p1);
for (i=0;i<N;i++)
{
stud[i].ave=(stud[i].math+stud[i].Eng+stud[i].Chin)/3.0; //计算平均分
}
for (i=0;i<N;i++)
for (j=0;j<N-i-1;j++)
if(stud[j].ave<stud[j+1].ave) //对平均分排序
{
h=stud[j];
stud[j]=stud[j+1];
stud[j+1]=h;
}
printf("来自文件stud.dat,排序结果!\n");
printf("number name math English Chinese average\n");
for (i=0;i<N;i++)
for (j=0;j<N-i-1;j++)
if(stud[j].ave<stud[j+1].ave)
{
h=stud[j];
stud[j]=stud[j+1];
stud[j+1]=h;
}
for (i=0;i<N;i++)
{
printf("%s%14s%14d%14d%14d%18f\n",stud[i].num,stud[i].name,stud[i].math,stud[i].Eng,stud[i].Ch in,stud[i].ave);
}
printf("\n");
save(p2);
fclose(fp);
fclose(fp);
}
void read()//输出文件studsort.dat中读取第2,4,6,8,10个学生的数据
{
printf("来自文件studsort.dat,排序结果!\n");
display(p2);
printf("number name math English Chinese average\n");
for (int i=1;i<N;i=i+2)
{
printf("%s%14s%14d%14d%14d%18f\n",stud[i].num,stud[i].name,stud[i].math,stud[i].Eng,stud[i].Chin,stud[i].ave);
}
fclose(fp);
}
//主函数
void main()
{ input();//给结构体赋初值
save(p1);//将数据写进文件
fclose(fp);//关闭文件
display(p1);//打开文件stud.dat
fclose(fp);//关闭文件
output();//输出学生信息
sort();//根据学生成绩排序
read();//输出文件studsort.dat中读取第2,4,6,8,10个学生的数据
}
6.项目六名称:设计和编写学生成绩管理系统的系统主菜单
6.1实训目的:
(1)掌握结构化程序设计的方法,自顶向下,逐步细化;
(2)设计系统框架结构,理顺主模块和各个模块之间的调用顺序和关系。
6.2实训内容:
(1)编写主菜单,包括1输入、2插入、3排序、4查找、5删除、6输出、7退出等7个功能的菜单项,程序执行则首先显示这7个菜单项目,当用户按下功能序号时可以执行相应的功能。
(2)每一个功能编写一个相应的空函数,名称为input、insert、sort、find、delete、output、quit,由主函数来调用。
(3)为了测试调用成功与否,每个空函数里加上语句显示当前被调用的函数的名称
(4)每执行完一次某个菜单功能后,还要返回主菜单,等待用户再选择菜单项。
6.3程序代码:
int menu_select() //主菜单函数
{ int x;
printf("***********************************\n");
printf("*1、学生信息输入 2、学生信息插入 *\n");
printf("*3、学生成绩,学号排序 4、学生成绩查询 *\n");
printf("*5、学生信息删除 6、学生信息输出 *\n");
printf("*7、退出程序 *\n");
printf("***********************************\n");
do
{
printf("\n请输入1-7之间的任意数字进入功能选项:\n");
scanf("%d",&x);
}
while(x>7||x<0);
return(x);
}
void input() //输入函
{
}
int insert() //插入学生信息函数定义
{
}
void savesort() //排序函数
{
}
void findstu() //查找函数
{
}
void deletestu() //删除函数
{
}
7.项目七:学生成绩管理项目实现
7.1.实训目的:
(1)掌握结构化程序设计的方法,自下而上,编码实现各模块功能;
(2)掌握各个模块之间的调用顺序和关系。
7.2.实训内容:
(1)输入:函数input把20学生的学名号、姓、性别、年龄、四科成绩以及平均成绩和总成绩放在一个结构体数组中,学生的学号、姓名、四科成绩由键盘输入,然后计算出平均成绩和总成绩放在结构体对应的域中,并把原始数据放入student.dat。
(2)输出:函数output 输出全部学生的记录,从文件中读出学生的信息,并从屏幕上输出。
(3)插入:insert 函数输入一个学生的记录,按学号的先后顺序插入该学生的全部内容。
(4)删除:delete函数输入一个学生的学号或姓名,找到该学生并删除该学生的全部内容。
(5)排序:sort函数对所有学生按要求排序(1.学号 2.总成绩 ),并输出。
(6)查找:find函数输入一个学生的学号或姓名,找到该学生并输出该学生的全部内容。要求能查询多次
(7)综合调试,完成项目
7.3 程序代码
#include<stdio.h> //头文件的开始
#include<stdlib.h>
struct Student1 //学生结构体
{
long int number;
char name[15],sex[5];
int age;
float score[4];
double total;
double averge;
};
struct Student //结点结构体
{
struct Student1 stu;
struct Student *next;
};
void Caidan(struct Student *p); //菜单函数
int print(); //主菜单输出函数
void Input(struct Student *p); //数据输入函数
void Insert(struct Student *p); //插入函数
void Sort(struct Student *p); //排序总函数
void Sort1(struct Student *p); //学号排序函数
void Sort2(struct Student *p); //成绩排序函数
void Find(struct Student *p); //查找函数
void Delet(struct Student *p); //删除函数
void Display(struct Student *p); //从函数中读取输出函数
void Display1(struct Student *p); //输出函数
void out(); //退出函数
void Write(struct Student *,char s[]); //写函数
void Read(struct Student *,char s[]); //读函授
/*主函数开始*/
int main()
{ struct Student *p=NULL; //定义结点指针
for(;;) //死循环控制菜单
Caidan(p);
return 0;
} //主函数结束
void Caidan(struct Student *p) //菜单函数
{ int n;
n=print(); //调用菜单输出函数
switch(n) //用switch做菜单选择
{
case 1: Input(p);break; //输入1调用Input函数
case 2:Insert(p);break; //输入2调用Insert函数
case 3: Sort(p);break; //输入3调用Sort函数
case 4:Find(p);break; //输入4调用Find函数
case 5:Delet(p);break; //输入5调用Delet函数
case 6:Display(p);break; //输入6调用Display函数
case 7:out();break; //输入7调用Out函数
}
} //菜单函数结束
int print() //菜单输出函数
{
int n;
printf("********************目录**********************\n");
printf("** 1.输入 **\n");
printf("** 2.插入 **\n");
printf("** 3.排序 **\n");
printf("** 4.查找 **\n");
printf("** 5.删除 **\n");
printf("** 6.输出 **\n");
printf("** 7.退出 **\n");
printf("**********************************************\n");
printf("请从1--7选择:");
scanf("%d",&n);
return n;
}
void Input(struct Student *p) //数据输入函数
{ int count=0,N; //定义计数器count和要输入的学生个数变量N
struct Student *a;
printf("请输入要录入的学生个数");
scanf("%d",&N);
printf("请输入学号、姓名、性别、年龄和四科成绩\n");
for(count=0;count<N;count++) //用循环来控制内存空间的分配,并录入数据
{ if(count==0)
a=p=calloc(1,sizeof(struct Student));
if(count!=0)
{ p->next=calloc(1,sizeof(struct Student));
p=p->next;
}
if(count==N-1)
p->next=NULL;
scanf("%ld %s %s %d %f%f%f%f",&p->stu.number,p->stu.name,p->stu.sex,
&p->stu.age,&p->stu.score[0],&p->stu.score[1],&p->stu.score[2],&p->stu.score[3]);
p->stu.total=p->stu.score[0]+p->stu.score[1]+p->stu.score[2]+p->stu.score[3];
p->stu.averge=p->stu.total/4.0;
}
Sort1(a); //调用排序函数
Write(a,"stu.dat"); //调用写入函数
} //数据输入函数结束
void Write(struct Student *p,char s[]) //文件写入函数
{ FILE *fp;
struct Student *a;
if((fp=fopen(s,"wb"))==NULL) //以二进制写的方式打开文件
{ printf("error!!");
exit(0);
}
do
{ if(fwrite(p,sizeof(struct Student),1,fp)!=1)
printf("write error!!");
a=p;
p=p->next;
free(a); //内存释放
}while(p!=NULL);
fclose(fp); //关闭文件
} //文件的写函数结束
void Read(struct Student *p,char s[]) //文件的读函数
{ FILE *fp;
struct Student *a,*b;
if((fp=fopen(s,"rb"))==NULL) //以二进制读的方式打开文件
{ printf("read open error!");
exit(0);
}
a=p=calloc(1,sizeof(struct Student)); //分配内存空间
do
{ if(fread(p,sizeof(struct Student),1,fp)!=1) //读到内存
printf("read error!!");
b=p->next;
if(b!=NULL)
{ p->next=calloc(1,sizeof(struct Student));
p=p->next;
}
}while(b!=NULL);
} //结束
void Display(struct Student *p) //从文件中读并输出到文件
{ struct Student *a;
p=Read(p,"stu.dat");
printf("学号 姓名 性别 年龄 高数 语文 英语 体育 总成绩 平均成绩\n");
do
{printf("%-5ld %-5s %-5s %-4d %-4.2f %-4.2f %-4.2f %-4.2f %-4.2lf %-4.2lf\n",p->stu.number,p->stu.name,
p->stu.sex,p->stu.age,p->stu.score[0],p->stu.score[1],p->stu.score[2],p->stu.score[3],p->stu.total,p->stu.averge);
a=p;
p=p->next;
free(a);
}while(p!=NULL);
} //文件结束
void Display1(struct Student *p) //输出函数
{ struct Student *a;
printf("学号 姓名 性别 年龄 高数 语文 英语 体育 总成绩 平均成绩\n");
do
{ printf("%-5ld %-5s %-5s %-4d %-4.2f %-4.2f %-4.2f %-4.2f %-4.2lf %-4.2lf\n",p->stu.number,p->stu.name,
p->stu.sex,p->stu.age,p->stu.score[0],p->stu.score[1],p->stu.score[2],p->stu.score[3],p->stu.total,p->stu.averge);
a=p;
p=p->next;
}while(p!=NULL);
} //函数结束
void Insert(struct Student *p) //插入函数
{ int n,i,count;
struct Student *a,*c,*t,*head;
printf("请输入要插入学生的个数:");
scanf("%d",&n);
head=Read(p,"stu.dat");
for(i=0;i<n;i++)
{ a=calloc(1,sizeof(struct Student));
scanf("%ld %s %s %d %f %f %f %f",&a->stu.number,a->stu.name,a->stu.sex,
&a->stu.age,&a->stu.score[0],&a->stu.score[1],&a->stu.score[2],&a->stu.score[3]);
a->stu.total=a->stu.score[0]+a->stu.score[1]+a->stu.score[2]+a->stu.score[3];
a->stu.averge=a->stu.total/4.0;
a->next=NULL;
count=0;
p=head;
do
{ if(a->stu.number<p->stu.number)
{ if(count==0)
{ a->next=p;
head=a;
}
else
{ t=c->next;
c->next=a;
a->next=t;
}
break;
}
c=p;
p=p->next;
count++;
}while(p!=NULL);
if(p==NULL)
{ c->next=a;
a->next=NULL;
}
}
Display1(head);
Write(head,"stu.dat");
} //函数结束
void Sort1(struct Student *p) //学号排序
{
int n=0,i,j;
struct Student1 t;
struct Student *p1,*a;
a=p;
do
{ p=p->next;
n++;
}while(p!=NULL);
p=a;
for(i=0;i<n-1;i++)
{ p=a;
for(j=0;j<n-1-i;j++)
{ p1=p->next;
if(p->stu.number>p1->stu.number)
{ t=p->stu;
p->stu=p1->stu;
p1->stu=t;
}
p=p1;
}
}
}
void Sort2(struct Student *p) //按成绩排序函数
{ int n=0,i,j;
struct Student1 t;
struct Student *p1,*a;
a=Read(p,"stu.dat");
p=a;
do
{ p=p->next;
n++;
}while(p!=NULL);
p=a;
for(i=0;i<n-1;i++)
{ p=a;
for(j=0;j<n-1-i;j++)
{ p1=p->next;
if(p->stu.total>p1->stu.total)
{ t=p->stu;
p->stu=p1->stu;
p1->stu=t;
}
p=p1;
}
}
Display1(a);
} //函数结束
void Sort(struct Student *p) //总排序函数
{ printf("按学号排序:\n");
Display(p);
printf("按总成绩排名:\n");
Sort2(p);
}
void out() //退出函数
{exit(0);} //函数结束
void Find(struct Student *p) //查找函数
{ long int num;
int n=0;
struct Student *a;
p=Read(p,"stu.dat");
printf("请输入要查询的学号:");
scanf("%ld",&num);
do
{if(num==p->stu.number)
{printf("学号 姓名 性别 年龄 高数 语文 英语 体育 总成绩 平均成绩\n");
printf("%-5ld%-5s %-5s %-4d %-4.2f %-4.2f %-4.2f %-4.2f %-4.2lf %-4.2lf\n",p->stu.number,p->stu.name,
p->stu.sex,p->stu.age,p->stu.score[0],p->stu.score[1],p->stu.score[2],p->stu.score[3],p->stu.total,p->stu.averge);
n=1;}
a=p;
p=p->next;
free(a);
}while(p!=NULL);
if(n==0)
printf("没有你要查找的学生信息。\n");
}
void Delet(struct Student *p)
{ long int num;
int n=0;
struct Student *a,*head;
head=p=Read(p,"stu.dat");
printf("请输入要删除学生的学号:");
scanf("%ld",&num);
do
{ if(num==p->stu.number)
{ if(n==0)
{ head=p->next;
free(p);
break;
}
else
{ a->next=p->next;
free(p);
break;
}
}
a=p;
p=p->next;
}while(p!=NULL);
Display1(head);
Write(head,"stu.dat");}
8.实训心得:
认识与接触C语言已经有差不多一年了,从上第一堂课老师就强调C语言的重要性,在上第一堂课之前我不了解什么是C我也不知道我是否能够学好他,在慢慢的接触后,我认识C语言是一门比较复杂与困难的学科。刚刚接触到C语言,完全弄不了解,不清楚为什么要这样写、有什么规则、格式、更别说什么函数的字符。在通过为期两周的C语言程序设计实训,我又增长了知识,实训期间及编写实训报告的过程中,自己学到了许多知识,为更好的从实训中吸取经验,以促进今后的学习,自己对实训作了总结,总结如下:
首先,实训的两周时间里,对于之前C语言的知识又进行了一遍系统性的复习,我认为这次复习是更加完善的,因为此次复习是在一次理论和实践相结合的复习。因此此次实训在学到知识的同时,更锻炼了自己的动手能力。其次,之前对于C语言的学习是基于Turbo C++的环境,而此次实训又熟悉了VC++6.0的编译环境,在实训的过程中能够利用所学的基本知识,解决简单的程序设计问题,通过每天的编写相关程序代码、反复调试、与同学不断地讨论及查阅相关资料。自己的编程能力有了一定程度的提高。此外,在实训的过程中克服了自己性子急的毛病,锻炼了自己的耐性。同时培养了自己独立思考的团结合作的意识使自身有了很大程度的提高。最后,在编写实训的报告中自己也发现了些许的小问题,不过通过耐心的再调试过程,最终自己成功完成了本次实训报告的编写。
实训周过后,接下来还会面对学习生活中更多新的挑战,通过两周的实训的锻炼,我增强了信心,锻炼了自己,相信自己有足够的勇气迎接未来更多的挑战。