筛选算法设计技术的应用Word文档格式.docx
- 文档编号:17437347
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:20
- 大小:112.55KB
筛选算法设计技术的应用Word文档格式.docx
《筛选算法设计技术的应用Word文档格式.docx》由会员分享,可在线阅读,更多相关《筛选算法设计技术的应用Word文档格式.docx(20页珍藏版)》请在冰豆网上搜索。
typedefstructnode
{
charid[10];
charname[20];
intscore[MAXCOURSE];
intsum;
doubleaverage;
structnode*next;
}Student;
2、主要数据结构及其解释
在此次程序设计中用了链表来实现对数据的处理,并设计了菜单界面如图,根据switch语句来对用户的选择:
3、模块关系图;
4、所有函数的简要说明;
1)计算平均分和总分Count_Score();
将输入的数据计算出学生的平均分和总分。
2)按姓名查找Sift_Out();
通过输入学生的姓名找到学生的成绩。
3)显示某分数段学生信Total_Score();
首先选择你要某科目的成绩并输入成绩的范围,按条件输出学生成绩。
4)姓名模糊筛选Obscure_name();
通过你输入的某科字的字符串比较,若学生名字中含有该字符串则输出该学生的信息。
5)筛选某科优秀学生成绩Super_Student();
首先输入你要的优秀成绩科目,在打印出该科目的所有优秀学生成绩。
6)判断是否为素数Isprime();
5、所有源代码;
/*
*/
#include<
stdio.h>
stdlib.h>
string.h>
#defineMAXID10
#defineMAXNAME20
#defineMAXCOURSE3
/*学生数据结构*/
/*头指针*/
Student*head=NULL;
/*课程名称*/
charClassName[MAXCOURSE][20]={"
数学"
"
英语"
计算机"
};
/*菜单*/
intMenu()
intx;
system("
cls"
);
do{
printf("
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"
***********筛选算法设计技术的应用*************\n"
||1-初始化||\n"
||2-输入学生信息||\n"
||3-计算所有学生的总分和平均分||\n"
||4-打印全部学生信息||\n"
||5-筛选某总分范围的学生信息||\n"
||6-按学号或姓名筛选||\n"
||7-姓名模糊筛选||\n"
||8-筛选某科优秀学生成绩||\n"
||9-判断是否为素数||\n"
||0-退出||\n"
fflush(stdin);
\n请输入命令编号:
"
scanf("
%d"
&
x);
if(x<
0||x>
10)
输入错误,请重新输入:
\n"
}while(x<
9);
returnx;
}
/*初始化*/
Student*Init()
inti;
Student*head;
head=(Student*)malloc(sizeof(Student));
head->
next=NULL;
returnhead;
/*检查学号*/
charCheck_ID(char*s)
if(strlen(s)==0||strlen(s)>
MAXID)return0;
for(i=0;
i<
strlen(s);
i++)
{
if(s[i]>
'
0'
&
&
s[i]<
9'
)return1;
}
return0;
/*检查分数*/
intCheck_Score(ints)
if(s>
=0&
s<
=100)return1;
/*检查学号是否相同*/
charIs_SameID(char*s)
Student*p=head->
next;
while(p!
=NULL)
if(strcmp(s,p->
id)==0)return1;
p=p->
/*输入学生信息*/
voidInput_Score(Student*p)
/*学号*/
\n请输入学号:
do
gets(p->
id);
if(!
Check_ID(p->
id))
输入错误!
请重新输入学号:
}
elseif(Is_SameID(p->
{
printf("
学号已存在!
}while(!
(Check_ID(p->
id)&
!
Is_SameID(p->
id)));
/*姓名*/
请输入姓名:
name);
//输入成绩
i<
MAXCOURSE;
i++)
请输入%s成绩:
"
ClassName[i]);
p->
score[i]);
if(!
Check_Score(p->
score[i]))
输入成绩错误!
}while(!
score[i]));
p->
average=-1;
sum=-1;
/*输出学生成绩信息*/
voidOutput_Score(Student*p)
\n姓名:
%s,学号:
%s\n"
p->
name,p->
%s成绩:
%d"
ClassName[i],p->
总分:
%d平均分:
%.2f\n"
sum,p->
average);
/*输出链表*/
voidOutput_List()
Student*p;
p=head->
Output_Score(p);
/*计算个人平均分和总分*/
voidCount_Score()
sum=p->
sum+p->
score[i];
average=p->
sum*1.00/MAXCOURSE;
/*筛选某总分范围的学生信息*/
voidTotal_Score()
intmin,max,temp;
输入你要查询的总分范围(min~max):
%d%d"
&
min,&
max);
if(min>
max)
temp=max;
max=min;
min=temp;
while(min<
0||max>
300)
请重新输入:
if(min<
=p->
sum&
sum<
=max)
/*按学号查找*/
Student*Search_ID(char*id)
Student*p=head->
if(strcmp(p->
id,id)==0)break;
returnp;
/*按姓名查找节点*/
Student*Search_Name(char*name)
name,name)==0)break;
/*按学号筛选*/
voidSift_Out()
charstr[15];
请输入要筛选的学生的学号:
getchar();
gets(str);
Check_ID(str))
Check_ID(str));
//判断是否为学号还是姓名
p=Search_ID(str);
if(p==NULL)
此学号不存在!
else
/*姓名模糊筛选*/
voidObscure_name()
intm,n,len;
请输入你要筛选名字中的某个字:
%s"
len=strlen(name);
m=0;
n=0;
while(p->
name[m]!
='
\0'
name[n]!
)
if(p->
name[m]==name[n])
m++;
n++;
m=m-n+1;
n=0;
if(n>
=len)
break;
/*筛选某科优秀学生成绩*/
voidSuper_Student()
intflag=0;
charx;
**************************************\n"
||||\n"
||a.显示数学优秀学生信息||\n"
||b.显示英语优秀学生信息||\n"
||c.显示计算机优秀学生信息||\n"
*************************************\n"
请选择你要进行的操作:
%c"
switch(x)
case'
a'
:
while(p!
=NULL)
if(80<
score[0])
{Output_Score(p);
flag=1;
b'
score[1]>
=80)
c'
score[2]>
default:
输入无效!
if(flag==0)
该科目不存在优秀的学生。
/*头插法插入节点*/
voidInsert_Before()
Student*s=(Student*)malloc(sizeof(Student));
Input_Score(s);
s->
next=head->
next=s;
//判断是否为素数
voidIsprime()
intj,min,i,max,k;
请输入素数最小范围和最大范围:
%d%d"
for(i=(min+1);
=max;
k=i-1;
for(j=2;
j<
=k;
j++)
if(i%j==0)
if(j>
k)
i);
/*主函数*/
intmain()
intx,n,flag=0;
Student*q;
while(!
flag)
x=Menu();
case1:
//初始化
head=Init();
初始化成功!
!
case2:
输入序号:
n);
while(n!
=-1)
Insert_Before();
case3:
//计算个人平均分和总分
Count_Score();
计算平均分和总分成功!
case4:
//打印出所有成绩
Output_List();
case5:
//筛选某总分范围的学生信息
Total_Score();
case6:
//按学号或姓名筛选
Sift_Out();
case7:
//姓名模糊筛选
Obscure_name();
case8:
//筛选某科优秀学生成绩
Super_Student();
case9:
Isprime();
case0:
flag=1;
\n按任意键继续...."
实验结果记录以及与预期结果比较以及分析
记录每次实验结果以及分析情况
初始化
输入学生成绩
计算平均分总分
打印学生成绩
筛选某总分范围的学生信息
按学号筛选
姓名模糊筛选
筛选某科优秀学生成绩
判断是否为素数
总结以及心得体会
每次的实验都让我受益非浅,这次课程设计更使我有了更大的收获。
明白了字符串的很多操作算法的编写和理解,并且查阅了大量的资料,对字符串的相关知识有了很大的了解,尤其是对模糊查找的理解。
其实我觉得编写程序,调试,遇到问题耐心的查错,总会有解决办法的,比较困难的错误其实是能够运行之后结果不稳定,有时候对,有时候错,这样的问题往往是程序设计的算法的问题,虽然这次程序没有太复杂的算法,但是一些小的地方没有考虑到,往往会给运行结果造成很多难以解释的错误。
我觉得我的程序在经过很多种情况的测试后,基本上能满足我自己的要求了,可能还有很多不完善的地方,但是确实收获了很多东西,希望在今后的学习中更上一层楼。
指导老师评阅意见
指导老师:
年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 筛选 算法 设计 技术 应用