C语言课程设计小学生数学测试软件.docx
《C语言课程设计小学生数学测试软件.docx》由会员分享,可在线阅读,更多相关《C语言课程设计小学生数学测试软件.docx(19页珍藏版)》请在冰点文库上搜索。
C语言课程设计小学生数学测试软件
《程序设计综合训练》
设 计 报 告
专业:
软件工程(师范)
班级:
14软件4ZS
学号:
**********
********
***********
成 绩:
计算机工程学院
2014年12月
一、程序的具体分工
二、课题要求
三、课题分析与设计
四、选题背景
五、程序介绍
六、源程序代码与调试
七、流程图
八、结语
九、参考书目
一、程序的具体分工
第一部分包括主函数、第二部分add函数,sub函数,mul函数的被调函数由我(庞佳玲)完成。
二、课题要求
1)可选择题型(+,-,×);
2)两个数随机产生,若选择加减运算,则产生两位数,且被减数大于减数,若选择乘法运算,则产生一位数;
3)每次在输入答案后应判断对错,若答案错误,应给出正确答案;
4)最后给出评分。
三、课题分析与设计
小学生数学测试软件是通过switch函数对add,sub,mul函数进行函数调用,进行各自的函数功能,其中由rand()函数产生随机数。
四、选题背景
C语言是目前世界上流行、使用最广泛的高级程序设计语言。
1972年,C语言在美国贝尔实验室里问世,后来又被多次改进,并出现了多种版本。
80年代初,美国国家标准化协会(ANSI),根据C语言问世以来各种版本对C语言的发展和扩充,制定了ANSIC标准。
目前,在微机上广泛使用的C语言编译系统有MicrosoftC、TurboC、VisualC++等,这些C语言版本不仅实现了ANSIC标准,而且在此基础上各自作了一些扩充,使之更加方便、完美。
C语言是一种结构化语言。
它层次清晰,便于按模块化方式组织程序,易于调试和维护。
C语言的表现能力和处理能力极强。
它不仅具有丰富的运算符和数据类型,便于实现各类复杂的数据结构。
它还可以直接访问内存的物理地址,进行位(bit)一级的操作。
由于C语言实现了对硬件的编程操作,因此C语言集高级语言和低级语言的功能于一体。
既可用于系统软件的开发,也适合于应用软件的开发。
此外,C语言还具有效率高,可移植性强等特点。
因此广泛地移植到了各类各型计算机上,从而形成了多种版本的C语言。
为了将本学期所学C语言知识应用于实际,加深对C语言的理解与掌握,我院开设了C语言课程设计这门课程。
而我们小组选取了小学生测试软件这个课题,以此来锻炼我们编写程序的能力。
五、程序介绍
小学生数学测试软件由5个函数组成,包括main主函数,rand()函数,add函数,sub函数,mul函数,divl函数。
main主函数对add函数,sub函数,mul函数进行调用。
rand()函数产生随机数,其产生的随机数值范围0~65535。
add函数执行加法运算。
sub函数执行减法运算。
mul函数执行乘法运算。
六、源程序代码与调试
代码:
#include
#include
#include
#include
#include
#defineLENsizeof(structstudent)
structstudent{intnum;
charname[50];
intscore;
doublezhengquelv;
structstudent*next;
};
intno=0;
doublezong=0;
intdefeng()
{inti,yes=0,jia,jian,chen,chu,a,b,c;
printf("数学测试系统\n");
printf("请在类型后输入选择完成的题目个数:
\n");
printf("加法:
");scanf("%d",&jia);
printf("减法:
");scanf("%d",&jian);
printf("乘法:
");scanf("%d",&chen);
printf("除法:
");scanf("%d",&chu);
printf("注意:
除法保留整数\n");
zong=jia+jian+chen+chu;
for(i=1;i<=jia;i++)//加法
{srand((unsigned)time(NULL));
a=rand()%100;
b=rand()%100;
printf("%d+%d=",a,b);
scanf("%d",&c);
if(c==a+b)
{yes++;printf("true\n");}
else
{no++;printf("wrong%d\n",a+b);}
}
for(i=1;i<=jian;i++)//减法
{srand((unsigned)time(NULL));
a=rand()%100;
b=rand()%100;
while(a
{a=rand()%100;
b=rand()%100;}
printf("%d-%d=",a,b);
scanf("%d",&c);
if(c==a-b)
{yes++;printf("true\n");}
else
{no++;printf("wrong%d\n",a-b);}
}
for(i=1;i<=chen;i++)//乘法
{srand((unsigned)time(NULL));
a=rand()%100;
b=rand()%100;
printf("%d*%d=",a,b);
scanf("%d",&c);
if(c==a*b)
{yes++;printf("true\n");}
else
{no++;printf("wrong%d\n",a*b);}
}
for(i=1;i<=chu;i++)//除法
{srand((unsigned)time(NULL));
a=rand()%100;
b=rand()%100;
while(a
{a=rand()%100;
b=rand()%100;}
printf("%d/%d=",a,b);
scanf("%d",&c);
if(c==a/b)
{yes++;printf("true\n");}
else
{no++;printf("wrong%d\n",a/b);}
}
returnyes;
}
voidpaixu(structstudent*head)//链表排序
{
structstudent*i,*j,h;
for(i=head;i->next;i=i->next)
for(j=i->next;j->next;j=j->next)
{
if(i->num>j->num)
{
h.num=i->num;
i->num=j->num;
j->num=h.num;
strcpy(h.name,i->name);
strcpy(i->name,j->name);
strcpy(j->name,h.name);
h.score=i->score;
i->score=j->score;
j->score=h.score;
h.zhengquelv=i->zhengquelv;
i->zhengquelv=j->zhengquelv;
j->zhengquelv=h.zhengquelv;
}
}
}
main()
{FILE*file;
structstudent*p1,*p2,*head;
chara[]="学号姓名成绩正确率\n";
if((file=fopen("C:
\\Users\\user\\Desktop\\学生成绩表.txt","r+"))==NULL){//打开文件
printf("打开文件失败");
exit(0);
}
p1=p2=(structstudent*)malloc(LEN);//创建链表
head=p1;
printf("请输入学号:
");
scanf("%d",&p1->num);
while(p1->num){
printf("请输入学生姓名:
");
scanf("%s",p1->name);
p1->score=defeng();
p1->zhengquelv=p1->score/zong*100;
p1->score=p1->zhengquelv/100*160;
p1=(structstudent*)malloc(LEN);
p2->next=p1;
p2=p1;
printf("\n题目完成\n");
Sleep(500);
system("cls");
printf("请输入学号(输入零结束):
");
scanf("%d",&p1->num);
}
p2->next=NULL;
printf("成绩批改完毕\n");
Sleep(1000);
system("cls");
printf("排序中……\n");
Sleep(1000);
paixu(head);
printf("排序完成\n");
fclose(file);
if((file=fopen("C:
\\Users\\user\\Desktop\\学生成绩表.txt","w+"))==NULL){
printf("打开文件失败");
exit(0);
}
fputs(a,file);//写入文件
puts(a);
while(head->next){
fprintf(file,"%d%-6s%d%.2f\n",head->num,head->name,head->score,head->zhengquelv);
printf("%d%-6s%d%.2f\n",head->num,head->name,head->score,head->zhengquelv);
head=head->next;
}
fclose(file);
}
}
#include
#include
#include
#include
#include
#defineLENsizeof(structstudent)
structstudent{intnum;
charname[50];
intscore;
doublezhengquelv;
structstudent*next;
};
intno=0;
doublezong=0;
intdefeng()
{inti,yes=0,jia,jian,chen,chu,a,b,c;
printf("数学测试系统\n");
printf("请在类型后输入选择完成的题目个数:
\n");
printf("加法:
");scanf("%d",&jia);
printf("减法:
");scanf("%d",&jian);
printf("乘法:
");scanf("%d",&chen);
printf("除法:
");scanf("%d",&chu);
printf("注意:
除法保留整数\n");
zong=jia+jian+chen+chu;
for(i=1;i<=jia;i++)//加法
{srand((unsigned)time(NULL));
a=rand()%100;
b=rand()%100;
printf("%d+%d=",a,b);
scanf("%d",&c);
if(c==a+b)
{yes++;printf("true\n");}
else
{no++;printf("wrong%d\n",a+b);}
}
for(i=1;i<=jian;i++)//减法
{srand((unsigned)time(NULL));
a=rand()%100;
b=rand()%100;
while(a
{a=rand()%100;
b=rand()%100;}
printf("%d-%d=",a,b);
scanf("%d",&c);
if(c==a-b)
{yes++;printf("true\n");}
else
{no++;printf("wrong%d\n",a-b);}
}
for(i=1;i<=chen;i++)//乘法
{srand((unsigned)time(NULL));
a=rand()%100;
b=rand()%100;
printf("%d*%d=",a,b);
scanf("%d",&c);
if(c==a*b)
{yes++;printf("true\n");}
else
{no++;printf("wrong%d\n",a*b);}
}
for(i=1;i<=chu;i++)//除法
{srand((unsigned)time(NULL));
a=rand()%100;
b=rand()%100;
while(a
{a=rand()%100;
b=rand()%100;}
printf("%d/%d=",a,b);
scanf("%d",&c);
if(c==a/b)
{yes++;printf("true\n");}
else
{no++;printf("wrong%d\n",a/b);}
}
returnyes;
}
voidpaixu(structstudent*head)//链表排序
{
structstudent*i,*j,h;
for(i=head;i->next;i=i->next)
for(j=i->next;j->next;j=j->next)
{
if(i->num>j->num)
{
h.num=i->num;
i->num=j->num;
j->num=h.num;
strcpy(h.name,i->name);
strcpy(i->name,j->name);
strcpy(j->name,h.name);
h.score=i->score;
i->score=j->score;
j->score=h.score;
h.zhengquelv=i->zhengquelv;
i->zhengquelv=j->zhengquelv;
j->zhengquelv=h.zhengquelv;
}
}
}
main()
{FILE*file;
structstudent*p1,*p2,*head;
chara[]="学号姓名成绩正确率\n";
if((file=fopen("C:
\\Users\\user\\Desktop\\学生成绩表.txt","r+"))==NULL){//打开文件
printf("打开文件失败");
exit(0);
}
p1=p2=(structstudent*)malloc(LEN);//创建链表
head=p1;
printf("请输入学号:
");
scanf("%d",&p1->num);
while(p1->num){
printf("请输入学生姓名:
");
scanf("%s",p1->name);
p1->score=defeng();
p1->zhengquelv=p1->score/zong*100;
p1->score=p1->zhengquelv/100*160;
p1=(structstudent*)malloc(LEN);
p2->next=p1;
p2=p1;
printf("\n题目完成\n");
Sleep(500);
system("cls");
printf("请输入学号(输入零结束):
");
scanf("%d",&p1->num);
}
p2->next=NULL;
printf("成绩批改完毕\n");
Sleep(1000);
system("cls");
printf("排序中……\n");
Sleep(1000);
paixu(head);
printf("排序完成\n");
fclose(file);
if((file=fopen("C:
\\Users\\user\\Desktop\\学生成绩表.txt","w+"))==NULL){
printf("打开文件失败");
exit(0);
}
fputs(a,file);//写入文件
puts(a);
while(head->next){
fprintf(file,"%d%-6s%d%.2f\n",head->num,head->name,head->score,head->zhengquelv);
printf("%d%-6s%d%.2f\n",head->num,head->name,head->score,head->zhengquelv);
head=head->next;
}
fclose(file);
}
调试:
1菜单函数执行结果:
进入程序后进入程序主菜单
错误时的程序结果
七、流程图
八、结语
通过这次课程设计,经过共同努力,完成了《小学生数学测试软件》这一课程设计,在这过程中也加深了对课本的认识和了解。
同时,我们也会去查资料,学会了我对很多的函数有了新的认识,也学会了运用多种函数,我也明白了写软件的基本过程和基本方法。
写软件的过程中我又学到了曾经自己不知道的函数或是自己不会的函数的用法。
这次课程设计课总的来说让我受益匪浅。
在软件的设计过程中遇到了很多的困难,我们也学会了在困难中解决问题。
这次的程序设计过程中,我们受益匪浅,也让我们体会到了失败时的焦急和难受,成功时的兴奋与喜悦。
同时我也知道了专业课的重要性。
九、参考书目
[1]谭浩强,C程序设计教程,清华大学出版社,2007年
[2]赵永哲,李雄飞,戴秀英编著,《C语言程序设计》,科学出版社,2003年
[3]夏宽理,赵子正编著,《C语言程序设计》,中国铁道出版社,2006年
[4]谭浩强编著,《C程序设计》,清华大学出版社,1991年
[5]GaryJ.Bronson,AFirstBookofANSIC(FourthEdition),PublishingHouseofElectronicsIndustry,2006.
[6]AlKelley,IraPohl,ABookonC:
ProgramminginC(FourthEdition),ChinaMachinePress,2004.
[7]BrianW.Kernighan,DennisM.Ritchie,TheCProgrammingLanguage,ChinaMachinePress,2006.
计算机工程学院课程设计评定意见
指导教师评语
成绩:
签名:
年 月 日