C语言实训指导.docx
- 文档编号:6823477
- 上传时间:2023-01-10
- 格式:DOCX
- 页数:15
- 大小:17.73KB
C语言实训指导.docx
《C语言实训指导.docx》由会员分享,可在线阅读,更多相关《C语言实训指导.docx(15页珍藏版)》请在冰豆网上搜索。
C语言实训指导
C语言实训教案
实训任务描述
●学生成绩管理系统功能介绍
●链表操作
✧链表节点定义
✧链表初始化
✧链表数据显示
✧冒泡法排序
●文件操作
✧文件操作基本步骤
✧添加数据
✧读取数据
✧查找数据
✧修改数据
主要功能介绍
请输入相应序号选择相关功能:
1:
录入数据
2:
显示包括删除数据在内的全部数据
3:
显示未删除数据
4:
搜索数据
5:
修改数据
6:
删除数据
7:
显示各种统计信息
0:
退出
7
请选择相应功能的序号:
1:
查询各科平均分
2:
查询每个学生的总分和平均分(由高到低排列)
3:
查询各科不及格学生的学号和姓名
4:
各科成绩按从高到低排列
程序评分标准
程序子项目
分数
完成日期
主界面
5
周二
录入数据
10
显示所有数据
10
显示未删除数据
10
搜索数据
10
修改数据、删除数据
10
统计—查询各科平均分
5
周三
统计—查询每个学生总分、平均分
10
统计—查询各科不及格学生学号和名称
10
统计—各科成绩从高到低排列
10
功能扩充
20
周四
上交文件
●源代码—放在一个专门目录
●可执行文件--文件名称为:
scalMgr.exe
●实训报告—文件名称为:
C语言实训报告_1119_学号_姓名.doc
链表操作
程序示例1:
链表初始化和打印程序示例
#include
#include
//链表节点定义
typedefstructnode
{
intn;
structnode*next;
}NODE;
//主程序
intmain(intargc,char*argv[])
{
NODE*head,*last,*p;
//初始化链表
inti;
p=(NODE*)malloc(sizeof(NODE));
p->n=9;
p->next=NULL;
head=p;
last=p;
for(i=2;i<9;i++)
{
p=(NODE*)malloc(sizeof(NODE));
p->n=10%i;
p->next=NULL;
last->next=p;
last=p;
}
//打印链表
p=head;
while(p!
=NULL)
{
printf("%d\n",p->n);
p=p->next;
}
system("PAUSE");
return0;
}
程序示例2:
冒泡法排序程序示例
#include
#include
//链表节点定义
typedefstructnode
{
intn;
structnode*next;
}NODE;
intmain(intargc,char*argv[])
{
NODE*head,*hhead,*last,*p,*q,*pre,*t=NULL;//新加了几个变量用于排序操作
//初始化链表
inti;
p=(NODE*)malloc(sizeof(NODE));
p->n=9;
p->next=NULL;
head=p;
last=p;
for(i=2;i<9;i++)
{
p=(NODE*)malloc(sizeof(NODE));
p->n=10%i;
p->next=NULL;
last->next=p;
last=p;
}
//冒泡法排序
hhead=(NODE*)malloc(sizeof(NODE));
hhead->next=head;
head=hhead;
while(t!
=head->next->next)
{
pre=head;
p=pre->next;
q=p->next;
while(q!
=t)
{
if(p->n>q->n)
{
p->next=q->next;
q->next=p;
pre->next=q;
}
pre=pre->next;
p=pre->next;
q=p->next;
}
t=p;
}
//交换前两个节点位置
if(head->n>head->next->n)
{
p=head->next;
head->next=head->next->next;
p->next=head;
head=p;
}
//打印链表
head=head->next;//新加行
p=head;
free(hhead);//新加行
while(p!
=NULL)
{
printf("%d\n",p->n);
p=p->next;
}
system("PAUSE");
return0;
}
文件操作
文件操作基本步骤
●定义FILE指针变量
●fopen
●fread/fwrite
●fclose
读写函数语法
intfwrite(&a,2,2,fp);
intfread(&a,2,2,fp);
程序示例3:
简单数据读写
#include
intmain()
{
FILE*fp;
inta[5]={0,1,2,3,4};
intb[5];
inti;
fp=fopen("c:
\\maozh.dat","wb");
fwrite(a,20,1,fp);
fclose(fp);
fp=fopen("e:
\\maozh.dat","rb+");
i=0;
while(!
feof(fp))
{
fread(&b[i],4,1,fp);
i++;
}
fclose(fp);
for(i=0;i<=4;i++)
{
printf("%d\n",b[i]);
}
system("PAUSE");
return0;
}
程序示例4:
结构体数据读写
#include
intmain()
{
FILE*fp;
structstu
{
intsno;
charsname[10];
intage;
intwgt;
};
structstu*s1,*s2,*s3,*s4;
s1=(structstu*)malloc(sizeof(structstu));
s2=(structstu*)malloc(sizeof(structstu));
s3=(structstu*)malloc(sizeof(structstu));
s4=(structstu*)malloc(sizeof(structstu));
s1->sno=1;
strcpy(s1->sname,"maozh");
s1->age=30;
s1->wgt=80;
s2->sno=2;
strcpy(s2->sname,"gaofang");
s2->age=15;
s2->wgt=50;
fp=fopen("e:
\\maozh.dat","w");
fwrite(s1,sizeof(structstu),1,fp);
fwrite(s2,sizeof(structstu),1,fp);
fclose(fp);
fp=fopen("e:
\\maozh.dat","rb");
fread(s3,sizeof(structstu),1,fp);
fread(s4,sizeof(structstu),1,fp);
printf("%d,%s,%d,%d\n",s3->sno,s3->sname,s3->age,s3->wgt);
printf("%d,%s,%d,%d\n",s4->sno,s4->sname,s4->age,s4->wgt);
fclose(fp);
system("PAUSE");
return0;
}
程序示例5:
文件拷贝代码
#include
intmain(intargc,char*args[])
{
FILE*fp1;
FILE*fp2;
inta;
fp1=fopen(args[1],"rb");
fp2=fopen(args[2],"wb");
while(!
feof(fp1))
{
fread(&a,2,1,fp1);
fwrite(&a,2,1,fp2);
}
fclose(fp1);
fclose(fp2);
return0;
}
程序示例6:
对文件添加新数据
#include
intmain()
{
FILE*fp;
structstu
{
intsno;
charsname[10];
intage;
intwgt;
};
structstu*s1,*s2,*s;
s1=(structstu*)malloc(sizeof(structstu));
s2=(structstu*)malloc(sizeof(structstu));
s=(structstu*)malloc(sizeof(structstu));
s1->sno=3;
strcpy(s1->sname,"何卓锦");
s1->age=60;
s1->wgt=70;
s2->sno=4;
strcpy(s2->sname,"郑蔡滨");
s2->age=63;
s2->wgt=65;
fp=fopen("e:
\\maozh.dat","ab");
fwrite(s1,sizeof(structstu),1,fp);
fwrite(s2,sizeof(structstu),1,fp);
fclose(fp);
//与程序4相比,以下改为使用循环显示数据
fp=fopen("e:
\\maozh.dat","rb");
fread(s,sizeof(structstu),1,fp);
while(!
feof(fp))
{
printf("%d,%s,%d,%d\n",s->sno,s->sname,s->age,s->wgt);
fread(s,sizeof(structstu),1,fp);
}
fclose(fp);
system("PAUSE");
return0;
}
程序示例7:
查找
//以下新加行是与程序6对比
#include
intmain()
{
intsn;//新加行
FILE*fp;
structstu
{
intsno;
charsname[10];
intage;
intwgt;
};
//structstu*s1,*s2,*s;
structstu*s;//新加行
//s1=(structstu*)malloc(sizeof(structstu));
//s2=(structstu*)malloc(sizeof(structstu));
s=(structstu*)malloc(sizeof(structstu));
/*注释掉********************************************/
s1->sno=3;
strcpy(s1->sname,"何卓锦");
s1->age=60;
s1->wgt=70;
s2->sno=4;
strcpy(s2->sname,"郑蔡滨");
s2->age=63;
s2->wgt=65;
fp=fopen("e:
\\maozh.dat","ab");
fwrite(s1,sizeof(structstu),1,fp);
fwrite(s2,sizeof(structstu),1,fp);
fclose(fp);
/*注释掉**************************************************/
fp=fopen("e:
\\maozh.dat","rb");
fread(s,sizeof(structstu),1,fp);
printf("输入要查询的号码:
\n");//新加行
fflush(stdin);//新加行
scanf("%d",&sn);//新加行
while(!
feof(fp))
{
if(sn==s->sno)//新加行
printf("%d,%s,%d,%d\n",s->sno,s->sname,s->age,s->wgt);
//如果查找的sno不重复,此处可以加上break,跳出循环
fread(s,sizeof(structstu),1,fp);
}
fclose(fp);
system("PAUSE");
return0;
}
程序示例8:
修改文件指定数据
注意事项:
●打开文件时,用rb+选项
●使用程序7的方法查找指定数据。
●找到数据后,使用fseek()函数,回退读写指针至需要修改的数据位置之前
✧fseek语法:
fseek(fp,-sizeof(int)*2,SEEK_CUR);
✧SEEK_SET或0:
文件开头
✧SEEK_CUR或1:
文件当前位置
✧SEEK_END或2:
文件结尾
●使用fwrite()函数修改数据
#include
intmain()
{
intsn,sa;
FILE*fp;
structstu
{
intsno;
charsname[10];
intage;
intwgt;
};
//structstu*s1,*s2,*s;
structstu*s;
//s1=(structstu*)malloc(sizeof(structstu));
//s2=(structstu*)malloc(sizeof(structstu));
s=(structstu*)malloc(sizeof(structstu));
/*
s1->sno=3;
strcpy(s1->sname,"何卓锦");
s1->age=60;
s1->wgt=70;
s2->sno=4;
strcpy(s2->sname,"郑蔡滨");
s2->age=63;
s2->wgt=65;
fp=fopen("e:
\\maozh.dat","ab");
fwrite(s1,sizeof(structstu),1,fp);
fwrite(s2,sizeof(structstu),1,fp);
fclose(fp);
*/
//修改之前的数据
fp=fopen("e:
\\maozh.dat","rb");
fread(s,sizeof(structstu),1,fp);
while(!
feof(fp))
{
printf("%d,%s,%d,%d\n",s->sno,s->sname,s->age,s->wgt);
fread(s,sizeof(structstu),1,fp);
}
fclose(fp);
fp=fopen("e:
\\maozh.dat","rb+");
fread(s,sizeof(structstu),1,fp);
printf("输入要修改的学号:
");
fflush(stdin);
scanf("%d",&sn);
printf("输入要修改的年龄数值:
");
fflush(stdin);
scanf("%d",&sa);
while(!
feof(fp))
{
if(sn==s->sno)
{
fseek(fp,-sizeof(int)*2,SEEK_CUR);
fwrite(&sa,sizeof(int),1,fp);
break;
}
fread(s,sizeof(structstu),1,fp);
}
fclose(fp);
//修改之后的数据
fp=fopen("e:
\\maozh.dat","rb");
fread(s,sizeof(structstu),1,fp);
while(!
feof(fp))
{
printf("%d,%s,%d,%d\n",s->sno,s->sname,s->age,s->wgt);
fread(s,sizeof(structstu),1,fp);
}
fclose(fp);
system("PAUSE");
return0;
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 指导