C语言课程设计Word文件下载.docx

上传人:b****1 文档编号:4905462 上传时间:2023-05-04 格式:DOCX 页数:20 大小:67.61KB
下载 相关 举报
C语言课程设计Word文件下载.docx_第1页
第1页 / 共20页
C语言课程设计Word文件下载.docx_第2页
第2页 / 共20页
C语言课程设计Word文件下载.docx_第3页
第3页 / 共20页
C语言课程设计Word文件下载.docx_第4页
第4页 / 共20页
C语言课程设计Word文件下载.docx_第5页
第5页 / 共20页
C语言课程设计Word文件下载.docx_第6页
第6页 / 共20页
C语言课程设计Word文件下载.docx_第7页
第7页 / 共20页
C语言课程设计Word文件下载.docx_第8页
第8页 / 共20页
C语言课程设计Word文件下载.docx_第9页
第9页 / 共20页
C语言课程设计Word文件下载.docx_第10页
第10页 / 共20页
C语言课程设计Word文件下载.docx_第11页
第11页 / 共20页
C语言课程设计Word文件下载.docx_第12页
第12页 / 共20页
C语言课程设计Word文件下载.docx_第13页
第13页 / 共20页
C语言课程设计Word文件下载.docx_第14页
第14页 / 共20页
C语言课程设计Word文件下载.docx_第15页
第15页 / 共20页
C语言课程设计Word文件下载.docx_第16页
第16页 / 共20页
C语言课程设计Word文件下载.docx_第17页
第17页 / 共20页
C语言课程设计Word文件下载.docx_第18页
第18页 / 共20页
C语言课程设计Word文件下载.docx_第19页
第19页 / 共20页
C语言课程设计Word文件下载.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

C语言课程设计Word文件下载.docx

《C语言课程设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《C语言课程设计Word文件下载.docx(20页珍藏版)》请在冰点文库上搜索。

C语言课程设计Word文件下载.docx

并且重点的说明了系统设计及分模块的思想,设计的步骤、难点技术和解决方案。

关键词:

C语言;

课程设计;

目录

一、设计要求4

二、软件设计4

三、主要函数流程图5

四、源代码8

五、运行结果14

六、设计创新与关键技术15

七、学习心得16

参考文献18

一、设计要求

编写“输入”和“显示所有记录”“按成绩排序”“插入一条记录”“删除一条记录”“显示一条记录”“输出成绩统计信息”“成绩分析”函数,实现对数据的显示、排序、插入、删除,显示,统计,分析。

其中,“显示所有记录”通过循环输出,输出格式应注意;

按成绩排序由起泡法完成;

删除则需要先查找,比较,然后所有数据前移;

“成绩统计”则可以得到所有记录的最高、最低、平均分,并能够输出相关学生信息,分析函数则使用循环和switch语句完成各分数段学生数的统计。

二、软件设计

程序功能

(1)输入并显示所有记录

(2)按成绩排序

(3)插入一条记录

(4)删除一条记录

(5)显示一条记录

(6)输出成绩统计信息

(7)输出各分数段人数

用到的函数

main()函数

主函数

menu()函数

选择菜单

input()函数

输入若干条记录

print()函数

显示所有记录

sort 

()函数

按成绩排序

insert()函数

插入一条记录

delete()函数

查找并删除一条记录

reveal()函数

查找并显示一条记录

score()函数

输出统计成绩信息

analysis()函数

输出各分数段人数

主界面

请选择相应数字执行相应功能:

输入学生信息

输出学生信息

选择功能

1按成绩排序

2插入一条记录

3删除一条记录

4查找并显示一条记录

5输出成绩统计信息

6输出各分数段人数

7退出程序

三、主要函数流程图

main()

调用input()函数

调用print()函数

通过menu()函数输入选择

1

是否

调用

sort()函数

break

2

insert()

函数

3

4

Reveal()

5

score()

停止

sort()

for(i=0;

i<

n;

i++)

for(j=0;

j<

n-i-1;

j++)

stu[j].score<

stu[j+1].score

否是

stu[j].numstu[j+1].num

stu[j].namestu[j+1].name

stu[j].scorestu[j+1].score

delete()

输入需删除的学生的姓名s

i=0

当stu[i].name!

=s且i<

n时

i++

i==n

输出

Notfind!

for(j=i;

n-1;

stu[j+1]stu[j]

输出数据

reveal()

输入需查找的学生的姓名s

i==n

输出该学生信息

max=0;

min=0;

sum=0;

sum=sum+stu[i].score

stu[max].score<

stu[i].score

max=i

stu[min].score>

min=i

aver=1.0*sum/n

输出最高分、最低分、平均分

analysis()

a=0;

b=0;

c=0;

d=0;

e=0;

m=stu[i].score/10.0

m=1,2,3,4,5

e++

6

d++

7

c++

8

b++

a++

输出各分数段学生数

四、源代码

#include<

stdio.h>

string.h>

structstudent/*定义结构体数组*/

{

charnum[5];

charname[20];

intscore;

}stu[80];

voidmain()

intmenu();

voidinput(structstudentstu[],intn);

voidprint(structstudentstu[],intn);

voidsort(structstudentstu[],intn);

voidinsert(structstudentstu[],intn);

intdelete(structstudentstu[],intn);

voidreveal(structstudentstu[],intn);

voidscore(structstudentstu[],intn);

voidanalysis(structstudentstu[],intn);

intn;

printf("

Howmanystudents?

\n"

);

scanf("

%d"

&

n);

*************************************************\n"

input(stu,n);

print(stu,n);

switch(menu())

{

case1:

printf("

SortByScore\n"

sort(stu,n);

/*调用排序函数*/

printf("

Sortsucceed!

break;

case2:

InsertaRecord\n"

insert_a_record(stu,n);

/*调用插入函数*/

break;

case3:

DeleteaRecord\n"

n=delete_a_record(stu,n);

/*调用删除函数*/

case4:

RevealaRecord\n"

reveal_a_record(stu,n);

/*调用显示函数*/

case5:

Score\n"

score(stu,n);

/*调用成绩统计函数*/

case6:

AnalysisGrade\n"

case7:

Haveagoodluck!

Bye-bye!

}

}

intmenu()/*菜单*/

intc;

1.Sort\n"

2.InsertSomeRecord\n"

3.DeleteaRecord\n"

4.RevealaRecord\n"

5.Score\n"

6.Quit\n"

GiveyourChoice(1-6):

"

c);

return(c);

voidinput(structstudentstu[],intn)/*输入记录*/

inti;

for(i=0;

No."

%s"

stu[i].num);

name:

stu[i].name);

score:

stu[i].score);

voidprint(structstudentstu[],intn)/*输出记录*/

No.\tname\tscore\n"

%s\t%s\t%d\n"

stu[i].num,stu[i].name,stu[i].score);

voidsort(structstudentstu[],intn)/*按分数排序*/

inti,j,*p,*q,s;

chart[10];

for(j=0;

n-1-i;

if(stu[j+1].score>

stu[j].score)

strcpy(t,stu[j+1].num);

strcpy(stu[j+1].num,stu[j].num);

strcpy(stu[j].num,t);

strcpy(t,stu[j+1].name);

strcpy(stu[j+1].name,stu[j].name);

strcpy(stu[j].name,t);

p=&

stu[j+1].score;

q=&

stu[j].score;

s=*p;

*p=*q;

*q=s;

voidinsert(structstudentstu[],intn)/*插入一条记录*/

No.:

stu[n].num);

stu[n].name);

stu[n].score);

No.\tname\tscore\t\n"

n+1;

InsertSucceed!

intdelete(structstudentstu[],intn)/*删除一条记录*/

chars[20];

inti,j;

i=0;

Tellmeher(his)name:

s);

while(strcmp(stu[i].name,s)!

=0&

&

n)

i++;

if(i==n)

notfind!

else

for(j=i;

strcpy(stu[j].num,stu[j+1].num);

strcpy(stu[j].name,stu[j+1].name);

stu[j].score=stu[j+1].score;

DeleteSucceed!

voidreveal(structstudentstu[],intn)/*显示一条记录*/

Inputhis(her)name:

%s\n"

%d\n"

stu[i].score);

voidscore(structstudentstu[],intn)/*成绩统计求最高分最低分平均分*/

inti,max,min,sum;

floataver;

max=0;

sum=sum+stu[i].score;

if(stu[max].score<

stu[i].score)

max=i;

if(stu[min].score>

min=i;

aver=1.0*sum/n;

Thereare%drecords\n"

n);

Thehighestscore:

No.%s\nname%s\nscore

%d\n"

stu[max].num,stu[max].name,stu[max].score);

Thelowestscore:

No.%s\nname%s\nscore%d\n"

stu[min].num,stu[min].name,stu[min].score);

Theaveragescoreis%5.2f\n"

aver);

voidanalysis(structstudentstu[],intn)/*输出各分数段人数*/

inti,a,b,c,d,e,m;

a=0;

b=0;

c=0;

d=0;

e=0;

m=stu[i].score/10;

switch(m)

e++;

d++;

c++;

case8:

b++;

case9:

a++;

numderof90-100is:

a);

numderof80-90is:

b);

numderof70-80is:

c);

numderof60-70is:

d);

numderof0-60is:

e);

五、运行结果

以下例子是利用排序功能得到的结果

六、设计创新与关键技术

程序编写中遇到的问题及解决办法

在主函数中,调用menu()函数后无法将C的值返回,在老师的帮助下,经几次改正,先将C的类型改为整型,然后又修改了switch语句中case与数字之间的空格才最终完成menu()函数的返回与switch语句的调用。

在编写sort()函数时,主函数调用函数后排序后的结构体数组无法显示在屏幕上,经过很长时间的思考,才发现问题的所在,所以最终在sort()函数中加入了打印结构体数组的功能,才算赋予了sort()函数实际的意义。

在sort()函数中,利用起泡法排序将学生分数按从大到小的顺序排序,其间用到了结构体内部的交换,而课堂中这部分知识涉及较少,因此多方查找资料才完成这一功能的设计。

在编写insert()函数时,曾设想调用print()函数将插入完全的结构体数组输出,但最终无法实现,只能在函数中从新编写输出功能。

设计创新

在主函数中巧妙地运用switch语句,将menu()函数联系在一起,成功实现了选择的功能。

这样的设计使程序清晰易懂,一目了然,并为使用者提供了很多方便。

在delete_a_record()函数和reaveal_a_record()函数中都用到了查找的功能,其中

while(strcmp(stu[i].name,s)!

……

语句考虑充分,将可能发生的情况都包含在内,是一个很好的语句。

在sort()函数中,利用起泡法排序将学生分数按从大到小的顺序排序,涉及到了结构体内部的交换,

则用的恰到好处,将整个结构体的内容全部交换,正是最终目的所在。

七、学习心得

由于时间的限制与知识经验的不足,我编写的这个小程序并不完美,还存在很多瑕疵。

功能方面也不够强大,难以完成复杂繁多的学习生活中的所有任务。

例如insert()函数中只限于一个人的插入,而现实生活中会有很多种情况,不只一个人,也不只是学号简单的变成n+1。

同样delete_a_record()函数中也存在相同的问题。

因此这个程序还有很多需要完善的地方。

其实学习编程就是要学习一种思想,一种思维方法,首先要确定一种算法,如从1加到100,判断润年等,我认为这些算法都是一种思维方法。

画流程图就是在构建编写程序思路的过程,当画好一个流程图时编程思想也就出来了,程序也差不多了,再结合掌握的语言的方法规则,在计算机里实现就可以了。

任何程序只要有思维,有想法,那么实现程序时就不会觉得无从下手。

在这次编程练习中,我还深深体会到,良好的编程习惯是学好C语言的重要因素。

例如编写程序时用缩进的方式、写注释、程序写到一定的阶段时要做一下测试等。

这些工作可以帮我们在调试程序时有很大的帮助。

程序代码实现后,错误是难免的,还要锻炼自己的调试查错能力,良好的编程习惯可以使我们在调试时减小工作量和提高调试效率,有助于形成自己的编程风格。

在这次课程设计中,不仅巩固了这一学期来所学的C语言的知识,熟练掌握了查找,排序的方法,指针,结构体,数组,函数的运用,而且从互联网上和图书馆中学到了很多编程较深的知识,并且熟练掌握了在图书馆中检索图书的有效快捷的方法,真可谓是获益匪浅。

除此之外,通过这次的学习,更加增进了我和老师之间的亲密关系,加深了我很同学之间的友谊。

我本来是一个很沉默的人,但通过这次的锻炼我变得开朗了很多。

真希望以后还能有更多这样锻炼的机会。

参考文献

《C语程序设计》谭浩强清华大学出版社

《C程序设计题解上机指导》谭浩强清华大学出版社

《C语言程序设计》孙亚飞四川大学出版社

《妙趣横生的算法》杨峰清华大学出版社

《C语言宝典》迟致电子工业出版社

《C语言算法速查手册》程晓旭人民邮电出版社

XX知道

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 法律文书 > 辩护词

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2