C语言课程设计实验报告4297210.docx

上传人:b****3 文档编号:3385287 上传时间:2022-11-22 格式:DOCX 页数:25 大小:249.08KB
下载 相关 举报
C语言课程设计实验报告4297210.docx_第1页
第1页 / 共25页
C语言课程设计实验报告4297210.docx_第2页
第2页 / 共25页
C语言课程设计实验报告4297210.docx_第3页
第3页 / 共25页
C语言课程设计实验报告4297210.docx_第4页
第4页 / 共25页
C语言课程设计实验报告4297210.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

C语言课程设计实验报告4297210.docx

《C语言课程设计实验报告4297210.docx》由会员分享,可在线阅读,更多相关《C语言课程设计实验报告4297210.docx(25页珍藏版)》请在冰豆网上搜索。

C语言课程设计实验报告4297210.docx

C语言课程设计实验报告4297210

(此文档为word格式,下载后您可任意编辑修改!

《C语言课程设计》

课程设计报告

 

专业:

网络工程

班级:

网络10601

姓名:

缪军

指导教师:

汪北阳余法红

 

二00八年元月十五日

目录

系统摘要…………………………………………3

系统设计…………………………………………4

系统实现…………………………………………7

系统使用说明…………………………………………11

测试数据…………………………………………15

结论…………………………………………18

附录…………………………………………19

(一)

系统摘要

1.功能要求

在主函数中读入两个原始数据文件的内容,保存在对应的结构体数组中,并根据以上内容计算每个学生5门课的加权平均分(保留1位小数,4舍5入),并按平均分排列名次,平均分相同则名次并列。

然后显示菜单,利用菜单调用每个函数,完成如下功能:

1)用C语言创建一个数据文件,文件名为:

“MC0116”。

用来存放班级排名后的成绩,要求按以下形式存放。

名次

学号

姓名

英语

C语言

离散数学

线形代数

大学物理

密码学

平均成绩

1

01

缪军

96

95

94

93

95

95

94.7

3

02

陈军

90

84

91

78

92

68

85.1

16

03

曹军

69

90

81

86

82

64

79.1

9

04

胡均

92

87

89

58

92

71

83.3

18

05

武军

57

76

81

92

83

76

77.1

14

06

陶均

84

69

94

72

77

83

80.7

8

07

喻均

91

91

77

74

66

91

81.4

11

08

周均

93

82

78

75

64

93

80.4

19

09

吴军

94

76

75

74

84

59

77.8

6

10

张俊

82

94

84

84

87

67

83.7

10

11

王俊

86

92

79

82

89

61

82.3

22

12

李军

74

72

92

94

54

64

75.4

5

13

赵俊

76

78

93

93

79

82

83.6

15

14

郑君

93

73

81

85

74

73

80.0

20

15

钱均

67

81

82

67

76

79

75.8

24

16

欧均

81

84

75

61

59

84

74.2

13

17

汤俊

87

89

79

87

67

72

80.2

4

18

廖均

79

87

92

89

62

94

83.5

21

19

扬峻

77

64

84

51

94

81

76.3

2

20

孙俊

83

94

81

94

82

86

86.1

23

21

冯均

86

58

64

91

84

67

74.2

25

22

周君

93

76

62

57

89

62

73.9

7

23

曾俊

92

73

63

82

92

91

81.0

12

24

董均

59

94

84

84

91

72

81.0

17

25

高军

91

82

59

84

66

84

76.3

2)分别统计全班每门课的平均分和标准差,并计算个分数段的学生人数;

课程标准差的计算公式为:

Y=s^2=1n[(x1-m)^2+(x2-m)^2+...+(xn-m)^2]

3)用C语言创建一个数据文件,文件名为:

“KC0116”。

将文件中存放的数据以如下形式存放

 

编号

课程名称

平均分

标准差

优秀

良好

中等

及格

不及格

1

英语

82.9

21.8

10

7

4

2

2

2

C语言

81.6

20.0

7

8

7

2

1

3

离散数学

80.6

20.3

6

9

6

3

1

4

线性代数

79.5

25.1

6

9

5

2

3

5

大学物理

79.2

24.3

6

8

4

5

2

6

密码学

76.8

22.5

5

6

6

7

1

4)打印每名学生成绩条,结果存放到用C语言创建的一个数据文件中,文件名为:

“cj0116”。

成绩条格式自定。

5)屏幕上显示所有存在不及格的课程的学生的名单(含学号、不及格的课程名称、课程的学分及成绩)。

6)屏幕上显示优等生名单(含学号、6门课程成绩、平均分、名次)。

(二)系统设计

准备工作:

编写两个记事本文件作为原始数据源。

本程序中建立两个文件,第一个中的内容是全班同学的5功课的成绩(英语,C语言,数学,大学物理,线性代数),保存在D盘下,其完整的路径名为D:

\wl0116.txt.第二个中的内容是所有的五门功课的属性(编号,名称,学分),同样保存在D盘下内,起完整的路径名为D:

\wl01kc.txt.

1.系统功能模块框架图

2.菜单结构图。

3.数据结构说明

*学生结构体*

structstudent

{

longnum;*学号*

charname[20];*姓名*

intscore[N];*各科分数构成的一维数组*

doubleave;*每名学生所有科目的加权平均分*

intt;*名次*

}st[M];

structsubject

{

intnum;*课程编号*

intexcellent;*成绩优秀*

intgood;*成绩良好*

intmid;*成绩中等*

intpass;*成绩及格*

intfail;*不及格*

charkc[30];*课程名称*

floatxuefen;*课程学分*

doubleave;*课程平均分*

doublebzc;*课程标准差*

}course[N];

整个系统的设计,可以将所有数据划分到两个结构体中,一个与学生有关,一个与课程有关。

数据的引入,可以从两个文件中读入,一个是学生成绩表,一个是课程与学分相关。

然后,将数据进行

(1)加权平均;

(2)标准差处理,排出每个学生在班级的名次。

最后,写出文件。

(三)系统实现

(一).部分函数的实现过程:

1.读入数据函数ReadDat1()和ReadDat2()

用函数打开目标文件,通过文件指针指向目标文件,然后调用库函数(fscanf,fgets)将数据读入到定义的结构体当中。

第一步用fgets函数将文件中的的第一行的字符串读入到数组中,然后用一个for循环控制每个人的变化,将各种数据按照不同的类型规格赋值给结构体。

2.求平均分和标准差:

   求五门功课的平均分,用一个for循环控制着科目的变化,然后在内部再一个for循环控制人的变化将全班的人的某门功课的成绩累加起来,再除以总人数即得平均分,类似的即可求的各门课的标准差。

3.求每个人的加权平均成绩:

   首先用for循环得到五门课程的学分的总和,然后再通过for循环控制每个人的不断变化,把每个人的每门成绩乘以各门课的学分,将其累加起来,再除以学分的和即得各个人的加权平均成绩

4.排名次:

    首先用for循环控制各个人的变化,每一次将其名次赋值为1,然后将其平均成绩通过for循环于其他人进行比较,若小就将其自加1,最终即可得名次。

5.统计各分数段的人数:

 首先通过两个for循环检查每个人的每门课程,再通过switch语句判断起属于的类型。

6.C语言创建全班同学成绩单的数据文件和全班成绩分析:

 首先通过函数建立一个新的文件,for循环控制将分数输出到指定的文件中

(二)程序调试过程中的要点和难点:

在程序调试过程中,经常出现警告,这是因为数据类型不一致导致而成的。

由于不小心输入法的改变,容易造成一些不易发现的问题,比如在英文输入中的引号与在中文输入中的引号就是又区别的,应该保持在英文输入的环境中编辑此程序。

难点是,各个函数运行,要注意先后顺序。

因为一个函数的运行,需要上一个函数运行的结果为数据。

另外,还注意主函数的编写,是各个函数相互联系在一起。

(四)系统使用说明

源代码编写完成后,可以存放在记事本中,保存起来。

然后,选择打开方式为TC环境,打开运行程序。

在打开的界面上会显示如下菜单界面:

A在光标处输入:

2在屏幕上显示未及格学生名单;

B在光标处输入:

3在屏幕上显示优等生名单;

C在光标处输入:

4显示成绩分布(一个“=”代表一个人);

D在光标处输入:

5查询成绩

a在光标处输入:

1安学号查寻

b在光标处输入:

2按姓名查寻

E在光标处输入:

0退出界面;

F在光标处输入:

1进入子菜单选项

在光标处输入:

1创建班级名次文档到D盘;

在光标处输入:

2创建课程成绩文档到D盘;

在光标处输入:

3在屏幕上显示每个学生的成绩条;

在光标处输入:

5返回主菜单;

在光标处输入:

0退出编辑界面;

(五)测试数据

1.两个原始数据

(1)学生成绩表

名次

学号

姓名

英语

C语言

离散数学

线形代数

大学物理

密码学

平均成绩

1

01

缪军

96

95

94

93

95

95

94.7

3

02

陈军

90

84

91

78

92

68

85.1

16

03

曹军

69

90

81

86

82

64

79.1

9

04

胡均

92

87

89

58

92

71

83.3

18

05

武军

57

76

81

92

83

76

77.1

14

06

陶均

84

69

94

72

77

83

80.7

8

07

喻均

91

91

77

74

66

91

81.4

11

08

周均

93

82

78

75

64

93

80.4

19

09

吴军

94

76

75

74

84

59

77.8

6

10

张俊

82

94

84

84

87

67

83.7

10

11

王俊

86

92

79

82

89

61

82.3

22

12

李军

74

72

92

94

54

64

75.4

5

13

赵俊

76

78

93

93

79

82

83.6

15

14

郑君

93

73

81

85

74

73

80.0

20

15

钱均

67

81

82

67

76

79

75.8

24

16

欧均

81

84

75

61

59

84

74.2

13

17

汤俊

87

89

79

87

67

72

80.2

4

18

廖均

79

87

92

89

62

94

83.5

21

19

扬峻

77

64

84

51

94

81

76.3

2

20

孙俊

83

94

81

94

82

86

86.1

23

21

冯均

86

58

64

91

84

67

74.2

25

22

周君

93

76

62

57

89

62

73.9

7

23

曾俊

92

73

63

82

92

91

81.0

12

24

董均

59

94

84

84

91

72

81.0

17

25

高军

91

82

59

84

66

84

76.3

(2)课程与学分相关

编号

课程名称

平均分

标准差

优秀

良好

中等

及格

不及格

1

英语

82.9

21.8

10

7

4

2

2

2

C语言

81.6

20.0

7

8

7

2

1

3

离散数学

80.6

20.3

6

9

6

3

1

4

线性代数

79.5

25.1

6

9

5

2

3

5

大学物理

79.2

24.3

6

8

4

5

2

6

密码学

76.8

22.5

5

6

6

7

1

2.测试结果

(1)学生名次表

(2)学生个人成绩单

(3)不及格学生名单

(4)优秀学生名单情况

(六)结论

1.通过对这一课题的设计和实现,我对TC3.0环境进行了深一步的了解,并逐渐开始熟练tc3.0环境的工作界面,以及对每一个快捷键的熟悉。

并认识到,熟悉这些快捷键,极为便捷编写程序,但是还要更加熟悉。

2.编程时要养成良好的风格,注意相同内容的缩进和对齐。

这样做,可以使程序代码出错的情况下,可以快速并且便捷的查找到错误的行,利于很好的修改。

3.通过这次编程我们深深的感受到对代码的变量命名,代码内注释格式,甚至嵌套中行缩进的长度和函数间的空行数字都有明确规定,良好的编写习惯,不但有助于代码的移植和纠错,也有助于不同人员之间的协作。

4.这个程序设计主要涉及到了C语言中的结构体、指针及文件操作等内容,只有充分掌握了C语言中的结构体、指针及文件操作等内容,才有可能组织好这些代码,使之符合运算逻辑,得到理想的结果。

5.善于总结,也是学习能力的一种体现,每次完成一个编程任务,完成一段代码,都应当有目的的跟踪该程序的应用状况,随时总结,找到自己的不足,这样所编写的程序才能逐步提高,生活就是这样,汗水预示着结果也见证着收获。

劳动是人类生存生活永恒不变的话题。

通过实际动手做,我们才真正领略到“艰苦奋斗”这一词的真正含义,我们想说,编程确实有些辛苦,但苦中也有乐,在这个团队的任务中,一起的工作可以让我们有说有笑,相互帮助,配合默契。

对我们而言,知识上的收获重要,精神上的丰收是可喜的。

挫折是一份财富,经历是一份拥有。

这次实际操作必将成为我们人生旅途上一个非常美好的回忆!

6.回顾起此次课程设计,至今仍感慨颇多,的确,自从拿到题目到完成整个编程,从理论到实践,在整整半个月的日子里,可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。

通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。

在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对一些前面学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体,指针……通过这次课程设计之后,我把前面所学过的知识又重新温故了一遍。

 

同时,在汪老师和余老师的身上我学得到很多实用的知识,在此表示感谢!

同时,对给过我帮助的所有同学和指导老师再次表示忠心的感谢!

(七)附录

程序全部代码:

#defineM25

#defineN6

#include"stdio.;

doubleave;

doublebzc;

}course[N];

*读取\\wl0116.txt*

voidread1()

{inti,j;

charstr1[100];

FILE*fp;

if((fp=fopen("d:

\\wl0116.txt","r"))==NULL)

{printf("Cannotopenthefile!

\n");

exit(0);

}

fgets(str1,100,fp);

for(i=0;i

{fscanf(fp,"%ld%s",&st[i].num,st[i].name);

for(j=0;j

{fscanf(fp,"%d",&st[i].score[j]);}

}

fclose(fp);}

*读取\\wl01kc.txt*

voidread2()

{

FILE*fp=fopen("d:

\\wl01kc.txt","r");

intk;

charstr2[100];

if(fp==NULL)

{printf("Cannotopenthefile!

\n");

exit(0);}

fgets(str2,100,fp);

for(k=0;k

{

fscanf(fp,"%d%s%f",&course[k].num,course[k].kc,&course[k].xuefen);

}

fclose(fp);

}

voidjaquan()

{

doubles=0,sum;

inti,j;

for(i=0;i

s=s+course[i].xuefen;

for(i=0;i

{sum=0;

for(j=0;j

sum=sum+(st[i].score[j])*(course[j].xuefen);

st[i].ave=(int)(sum*10.0s+0.5)10.0;}

}

voidmingci()

{

inti,j,t;

for(i=0;i

{t=1;

for(j=0;j

if(st[i].ave

t++;

st[i].t=t;}

}

*计算课程平均分和优劣分布*

voidave()

{

doubles;

inti,j;

for(j=0;j

{s=0;course[j].excellent=0;course[j].good=0;

course[j].mid=0;course[j].pass=0;

course[j].fail=0;

for(i=0;i

{

switch(st[i].score[j]10)

{case10:

case9:

course[j].excellent++;break;

case8:

course[j].good++;break;

case7:

course[j].mid++;break;

case6:

course[j].pass++;break;

default:

course[j].fail++;}

s+=st[i].score[j];}

course[j].ave=sM;}

}

voidbzcha()

{inti,j;

doubles;

for(j=0;j

{s=0;

for(i=0;i

s+=(st[i].score[j]-course[j].ave)*(st[i].score[j]-course[j].ave);

course[j].bzc=sqrt(sN);}

}

*创建班级成绩排名*

voidwritefile1()

{

FILE*fp;

inti,j;

if((fp=fopen("d:

\\mc0116.txt","w"))==NULL)

{printf("fail!

\n");

exit(0);

}

fprintf(fp,"名次学号姓名英语C语言离散线性物理密码学***平均成绩\n");

for(i=0;i

{fprintf(fp,"%3d%10ld%10s",st[i].t,st[i].num,st[i].name);

for(j=0;j

fprintf(fp,"%6d",st[i].score[j]);

fprintf(fp,"....%4.1f\n",st[i].ave);

}

fclose(fp);

}

*创建班级课程成绩分布*

writefile3()

{

FILE*fp;

inti;

if((fp=fopen("d:

\\kc0116.txt","w"))==NULL)

{printf("Failetobuildthefile!

\n");

exit(0);}

fprintf(fp,"编号课程名称平均分标准差优秀良好中等及格不及格\n");

for(i=0;i

fprintf(fp,"%4d%10s%8.1f%8.1f%6d%6d%6d%4d%4d\n",i+1,course[i].kc,course[i].ave,course[i].bzc,

course[i].excellent,course[i].good,course[i].mid,course[i].pass,course[i].fail);

fclose(fp);

}

voidwritefile4()

{

FILE*fp=fopen("d:

\\cjt0116.txt","w");

inti,j;

if(fp==NULL){printf("Failetobuildanewfile!

\n");exit(0);}

for(i=0;i

{

fprintf(fp,"\n学号姓名英语C语言离散线性物理密码学***平均成绩\n%8ld%8s",st[i].num,st[i].name);

printf("\n学号姓名英语C语言离散线性物理密码学***平均成绩\n%8ld%8s",st[i].num,st[i].name);

for(j=0;j

{fprintf(fp,"%6d",st[i].score[j]);printf("%6d",st[i].score[j]);}

fprintf(fp,"....%4.1f\n",st[i].ave);printf("....%4.1f\n",st[i].ave);

fprintf(fp,"*****************************");

printf("*****************************\n");

}

fclose(fp);

}

voidread5()

{

inti,j;

printf("未及格学生信息:

\n学号课程名称学分成绩\n");

for(i=0;i

for(j=0;j

if(st[i].score[j]<60)

printf("%8ld%8s%8.1f%6d\n",st[i].num,course[j].kc,course[j].xuefen,st[i].score[j

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

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1