厦门理工学院C语言课程设计报告

更新时间:2024-02-01 14:28:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

《C语言程序设计》 课程设计报告

(2012— 2013学年 第 2 学期)

专 业: 班 级: 姓名学号: 指导教师: 成 绩:

计算机科学与技术系

2013 年 6 月 27 日

1

目 录

一. 课程设计的目的与要求(含设计指标) ................................................................................ 3

1.实验目的 ................................................................................................................................ 3 2.设计要求 ................................................................................................................................ 3 3.课程设计报告(按《C语言程序设计课程设计报告》格式要求完成) ........................ 3 4.检查标准 ................................................................................................................................ 4 二. 方案实现与调试 ........................................................................................................................ 4

2.1 题目:①掷骰子游戏: ...................................................................................................... 4 2.1.1算法描述及实验步骤 ...................................................................................................... 4 2.1.2调试过程及实验结果 ...................................................................................................... 6 2.2题目:③计算存款本息之和: ......................................................................................... 7 2.2.1算法描述及实验步骤 ...................................................................................................... 7 2.2.2调试过程及实验结果 ...................................................................................................... 8 2.3题目:④肇事逃逸: ......................................................................................................... 9 2.3.1算法描述及实验步骤 ...................................................................................................... 9 2.3.2调试过程及实验结果 .................................................................................................... 11 2.4题目:⑥汽车加油: ....................................................................................................... 11 2.4.1算法描述及实验步骤 .................................................................................................... 11 2.4.2调试过程及实验结果 .................................................................................................... 13 2.5题目:⑧大优惠: ........................................................................................................... 13 2.5.1算法描述及实验步骤 .................................................................................................... 14 2.5.2调试过程及实验结果 .................................................................................................... 15 2.6题目:⑨金币: ............................................................................................................... 15 2.6.1算法描述及实验步骤 .................................................................................................... 16 2.6.2调试过程及实验结果 .................................................................................................... 16 2.7提高题:毕业设计论文管理系统设计: ....................................................................... 17 2.7.1算法描述及实验步骤 .................................................................................................... 18 2.7.2调试过程及实验结果 .................................................................................................... 21 三.课程设计分析与总结 ............................................................................................................. 22 四. 源程序清单 .............................................................................................................................. 22

①掷骰子游戏: ..................................................................................................................... 22 ③计算存款本息之和 ............................................................................................................. 24 ④肇事逃逸 ............................................................................................................................. 25 ⑥汽车加油 ............................................................................................................................. 26 ⑧大优惠 ................................................................................................................................. 28 ⑨金币..................................................................................................................................... 29 提高题:毕业设计论文管理系统设计 ................................................................................. 29 五. 设计日志与教师评价 .............................................................................................................. 38

2

(报告正文部分的格式):

(要求:正文部分一律用五号字,宋体,单倍行距。一级大标题靠左,四号,宋体,加粗。二级大标题靠左,小四,宋体,不加粗。) 课程设计的内容如下:

一. 课程设计的目的与要求(含设计指标)

1.实验目的

C语言是一种编程灵活,特色鲜明的程序设计语言。C语言除了学习必须的基本知识,如概念,方法和语法规则之外,更重要的是进行实训,以提高学习者的动手和编程能力,这是学习语言的最终目的。结合多年来的教学经验,根据学生的学习情况,为配合教学过程,使“项目教学法”能在本质上促使学生有更大进步,特编写了该《C语言程序设计任务书》,以在实训过程中给学生提供帮助。达到如下目的:

1. 在课程结束之前,让学生进一步了解C程序设计语言的编程功能; 2. 让学生扎实掌握C程序设计语言的相关知识;

3. 通过一些有实际意义的程序设计,使学生体会到学以致用,并能将程序设计的知识

与专业知识有效地结合,更全面系统地了解行业知识。

2.设计要求

根据实验内容的要求自由选定题目。编写程序要求遵循如下基本要求: ? 模块化程序设计 ? 锯齿型书写格式 ? 必须上机调试通过

3.课程设计报告(按《C语言程序设计课程设计报告》格式要求完成)

1、设计目的

2、总体设计(程序设计组成框图、流程图)

3、详细设计、模块功能说明(如函数功能、入口及出口参数说明,函数调用关系描述等)。

4、调试与测试:调试方法,测试结果的分析与讨论,测试过程中遇到的主要问题及采取的解决措施。

5、源程序清单和执行结果:源程序中应有足够的注释。

3

4.检查标准

1、学生必须编写可运行的程序,对教师的提问能熟练地当面解释清楚,回答的问题和程序运行的结果作为评分的主要衡量标准;(课程设计当周的周三开始逐一检查)

2、按照本文后要求须提交电子内容的清单提交相关内容。

二. 方案实现与调试

2.1 题目:①掷骰子游戏:

两人玩骰子,游戏规则如下:

1) 两人轮流掷骰子,每次掷两个,每人最多掷10次。 2) 将每人每次的分值累加计分

3) 当两个骰子点数都为6时,计8分;当两个点数相等且不为两个6时,计

7分;当两个点数不一样时,计其中点数较小的骰子的点数。 4) 结束条件:当双方都掷10次或经过5次后一方累计分数多出另一方的30%

及以上。最后显示双方分数并判定优胜者。

2.1.1算法描述及实验步骤

4

开始 随机数输入num1,num2 是 num1=num2? 否 num1=num2=6? 是 否 是 num1>num2? 否 sum1+=8 sum1+=7 sum1+=num2 sum1+=sum1 输出得分sum1 结束

5

开始 随机数输入num3,num4 是 num3=num4? 否 num3=num4=6? 是 否 是 num3>num4? 否 sum2+=8 sum2+=7 sum2+=num4 sum2+=sum3 输出得分sum2 结束

2.1.2调试过程及实验结果

问题:需要手动输入骰子点数

6

解决方法:引入#include 头文件,使用srand( (unsigned)time( NULL ) ); num1=rand()%6+1;来实现随机数 执行结果:

2.2题目:③计算存款本息之和:

以“存款利率”为关键字上网搜索目前我国整存整取不同期限我国的银行存款利率,只计算一年、三年和五年三种期限。 问题:

1) 要求输入存钱的本金和期限,求到期能从银行得到的利息与本金合计。 2)假设存款期限为三十年本金为10万,比较一年、三年和五年滚存三十年后

的本息金额。

2.2.1算法描述及实验步骤

7

开始 输入money,输入year 是 year=1? year=3? 是 否 money=money*1.0300 money=money*1.0425^3 money=money*1.0475^5 输出money 结束

2.2.2调试过程及实验结果

问题:滚利问题

解决方法:上网查询后,了解每一个期限才能滚利一次。

8

执行结果:

2.3题目:④肇事逃逸:

某部闽DT的出租车交通肇事逃逸,现场无人看清后面的四位数字,但三位目击群众提供信息如下:

1) 车牌号后两位相同; 2) 车牌号前两位相同;

3) 车牌号是一个整数的平方。

请编程查出肇事逃逸车辆的车牌号。

2.3.1算法描述及实验步骤

9

开始 输入i=34 sum sum=i*i num/1000=num00/100&&num000/10==num000? 否 是 输出num i++ 是 i<=100? 否 结束 10

2.3.2调试过程及实验结果

问题:无。 解决方法:无。 运行结果:

2.4题目:⑥汽车加油:

一辆汽车加满油后可行驶n公里。旅途中有若干个加油站。设计一个有效算法,指出应在哪些加油站停靠加油,使沿途加油次数最少。输入:第一行有2 个正整数N和K(1 <= N <= 100,1 <= K< = 100),表示汽车加满油后可行驶N公里,且旅途中有K个加油站。接下来的1 行中,有K+1 个整数,表示第K个加油站与第K-1 个加油站之间的距离。第0 个加油站表示出发地,汽车已加满油。第K+1 个整数表示第K个加油站与目的地的距离。输出:将编程计算出的最少加油次数输出。如果无法到达目的地,则输出 No Solution。(注意:No和Solution之间有一个空格)。

例如:输入:8 8

3 2 3 6 5 4 2 7 2 输出:5

2.4.1算法描述及实验步骤

11

开始 输入可行公里数和加油站数N,K 输入各个加油站的距离a[i] 是 a[i]>N? 否 j=0 i=0 No Solution 否 i<=k? 是 s=s+a[i] s>N? 输出最少加油次数j j=j+1 s=a[i] 结束 12

i=i+1

2.4.2调试过程及实验结果

问题:无。 解决方法:无 运行结果:

2.5题目:⑧大优惠:

中国移动推出最新的手机资费优惠方案,按照这个方案Tom的手机每天消费1元,每消费K元就可以获赠1元,一开始Tom有M元,问最多可以用多少天?

输入的测试数据为一行,实例包括2个整数M, K(2 <= K <= M <= 1000)。输出一个整数,表示M元可以用的天数。

13

2.5.1算法描述及实验步骤

开始 输入m,k 否 2<=k<=m<=1000 是 否 m!=0 是 day%k=0? 否 是 m=m+1 day=day-1 输出day m=m-1 day=day+1 结束

14

2.5.2调试过程及实验结果

问题:无。 解决方法:无。 运行结果:

2.6题目:⑨金币:

国王用金币奖励他忠诚的侍从。第一天侍从工作结束后,国王奖励了他一个金币;接着的两天侍从工作中(第二天,第三天)的每一天,国王奖励了他两个金币;接着的三天侍从工作中(第四天,第五天,第六天)的每一天,国王奖励了他三个金币;接着的四天侍从工作中(第七天,第八天,第九天,第十天)的每一天,国王奖励了他四个金币。这种奖励的模式将是固定不变的,即在N天侍从工作中的每一天,国王将奖励他N个金币;接着的N+1天的侍从工作中的每一天,国王将奖励他N+1个金币。

15

2.6.1算法描述及实验步骤

开始 输入day i=1 num=0 day>=0 是 num=i^2 num=num+day*(i-1) day=day-1 输入day i=i+1 结束

2.6.2调试过程及实验结果

遇到问题:无。 解决方法:无。

16

运行结果:

2.7提高题:毕业设计论文管理系统设计:

功能:实现我学院的学生毕业设计论文管理,论文的基本信息包括:年级、专业、班级、学生学号、学生姓名、论文题目、指导老师姓名、提交日期、论文简介(50字内)等。 基本要求:

1设计简单的菜单,能够进行系统功能选择。 2实现信息的录入功能。

3在已有信息的基础上添加新的记录。 4删除指定学号的记录。 5修改指定学号的记录 6实现信息的浏览功能 7按学号查询功能 8按学生姓名查询 9 按班级查询功能

10 其他功能:根据题目,自行设计若干查询统计功能;

17

2.7.1算法描述及实验步骤

开始 显示提示 进入菜单 录入 增加 显示 查询 修改 删除 退出 学号 姓名 班级 结束 功能描述: 录入功能:

进入录入功能,首先进入输入学生人数输入窗口

,输入人数后进入论文信息录入,输入完毕后按回车,如图(1)所

示。

18

图(1)

增加:

致,但不会覆盖原有的信息。 显示:示

,显示出目前所录入的所有学生的论文信息,如图(2)所在原有的记录上添加学生论文信息,录入步骤与录入功能一

图(2)

查询:

A.

图(3)所示

通过输入学号查找学生论文信息,显示结果如

19

图(3)

B.C.

通过输入学生姓名查找相应学生的论文信息,步骤与A一致 通过输入班级来查找学生的论文信息,步骤与A一致

修改:

进入修改,如图(4)

输入要修改学生的序号即可

图(4)

删除:

输入要删除的学生的序号

即可删除该同

学的论文信息,如图(5),然后按y确认,按n取消。

20

图(5)

退出:

退出程序。

2.7.2调试过程及实验结果

出现问题:在子模块删除中的确认输入y/n中,无法自动转换为小写字母。 解决:使用toupper(getch())=='Y'转换 运行结果:

21

三.课程设计分析与总结

二十六个字母,十个阿拉伯数字,外加一些常用字符,简单得掉渣,地球人都懂,可一组合成C语言,强大而神秘,那些字符如毛毛虫般在屏幕上蠕动,还看着,老眼便昏花,恨不得拿出杀虫剂,几下狂喷,看你行还是我强。只不过,这不是毛毛虫的一生,化蛹成蝶才是毛毛虫一生追求,生命最美丽的时刻。当程序运行出正确答案,当程序可以实现论文系统的时候,字符不在是字符,字符已经脱text成exe了。

刚上机的第一天,恍若又回到了刚接触到C语言的时候,除了int除了char,其他基本是它认识我,我不认识它,甚至连头文#include都忘了怎么写,还要翻书才能忆起。五天的C语言课程设计,把已经遗忘百分之九十以上的基本操作又重新熟悉了一遍,上手很快,毕竟有学过,基础要求六题的训练把除了指针外的之前所教过的编程重新要回来了。提高题是瓶颈,看了课本,真正要做出来不劲要把薄弱的指针重新学习一遍,还得学习新的知识,链表,文件等的课本剩余的章节。看了一会儿书,发现光靠看书,凭我的本事,看完余下的书是很容易,关键是要在这么短的时间内把这些内容理解并灵活运用,那是根本完成不了的任务。很显然,时间已经来不及了。果断放弃,用结构体,函数拼凑成相对较简单的方法来实现毕业论文系统的设计。一步一步来,竟发现自己敲了到目前为止最长的代码:三百多行的代码。敲的过程,每一步都小心翼翼的,有时候为了找一个bug,要花上好些时候,熬得自己头发都快变白了,但当解决了bug之后,那种说不出的愉快在心头涌起。

总之,这次课程设计学到了两点:一是把C语言简单的编程在学一遍;二是,指针、链表等的章节必须课后要花时间再学,因为下个学期还有数据结构。

四. 源程序清单

①掷骰子游戏:

#include #include

#include //使用当前时钟做种子 void main() {

int i;

int num1,num2,num3,num4,sum1=0,sum2=0;

srand( (unsigned)time( NULL ) );

for(i=1;i<=10;i++)

22

num1=rand()%6+1; num2=rand()%6+1; if(num1==num2) { if(num1==6&&num2==6)

sum1+=8;

else sum1+=7;

} else { if(num1>num2)

sum1+=num2; else sum1+=num1;

}

num3=rand()%6+1; num4=rand()%6+1; if(num3==num4) { if(num3==6&&num4==6)

sum2+=8; else sum2+=7;

} else { if(num3>num4)

sum2+=num4;

else sum2+=num3;

23

{

}

printf(\第%d次掷出点数为:%d %d A总得分:%d\\nB第%d次掷出点数

为:%d %d B总得分:%d\\n\ if(i>=5&&((float)(sum1-sum2)/sum2>=0.3||(float)(sum2-sum1)/sum1>=0.3))

break;

}

if(sum1>sum2)

printf(\获胜!\\n\

else if(sum1

printf(\获胜!\\n\

else

printf(\平局!\\n\

}

③计算存款本息之和

#include #include void main() { int i,year,all,j; float money;

printf(\请输入存款金额:\

scanf(\

printf(\请输入存款期限:\ scanf(\

printf(\请输入要存款的年限:\ scanf(\

switch(year)

24

{

case 1:money=money*1.0300;printf(\年后本息金额

为:%f\\n\

case 3:money=money*pow(1.0425,3);printf(\年后本息金额

为:%f\\n\

case 5:money=money*pow(1.0475,5);printf(\年后本息金额

为:%f\\n\ }

printf(\年后本息金额为:%f\\n\}

if(year==1) { } { } { }

for(i=2;i<=(all/5);i++) money=money*pow(1.0475,5); if(year==5)

for(i=2;i<=(all/3);i++) money=money*pow(1.0425,3); if(year==3) for(i=2;i<=all;i++) money=money*1.0300;

④肇事逃逸

#include

25

void main() { }

if(((num/1000)==(num00/100))&&((num000/10)==(num000))) }

printf(\该车牌号为:闽DT%d\\n\

int i,num;

for(i=34;i<100;i++) {

num=i*i;

⑥汽车加油

#include #include #define M 1000 void main() {

int N,K,a[M],i,e;

int times(int b,int c,int d[M]); do{

printf(\请输入加满油后可行驶公里数和加油站数:\scanf(\if(K>100||K<1||N>100||N<1) printf(\输入有误请重新输入\\n\

}while(K>100||K<1||N>100||N<1); {

printf(\请输入各加油站间的距离:\

26

for(i=0;i<=K;i++)

scanf(\

e=times(N,K,a); if(e!=0)

printf(\最少加油次数为:%d\\n\

}

}

int times(int b,int c,int d[M]) { int i,s=0,j=0; for(i=0;i<=c;i++) { if(d[i]>b) {

printf(\

break; } else { for(i=0;i<=c;i++) { s=s+d[i]; if(s>b) { j++; s=d[i];

}

}

}

27

}

} return j;

⑧大优惠

#include void main() {

int m,k,i,day=1;

printf(\请输入m,k (2<=k<=m<=1000) :\

loop:scanf(\ }

28

if(k>m||k<2||m>1000) { } else

while(m!=0) { } day--;

printf(\可用天数为:%d\\n\

if(day%k==0)

m++;

printf(\输入有误,请重新输入:\goto loop;

m--; day++;

⑨金币

#include #include void main() { }

int sum(int day) { }

int s=0,i;

for(i=1;day>=0;i++) { }

s=s+day*(i-1); return s;

s+=pow(i,2); day=day-i; int day,num; int sum(int day);

printf(\请输入工作天数:\scanf(\num=sum(day);

printf(\共奖励金币:%d\\n\

提高题:毕业设计论文管理系统设计

#include #include #include

29

#include #define M 1000 #define N 20

/*学生论文信息结构体*/ typedef struct { char num[5]; char grade[N]; char discipline[N]; char Class[N]; char number[N]; char studentName[N]; char thesisName[50]; char teacherName[N]; char date[N]; char introduction[100]; }Student;

Student stud[M]; int length; int menu();

int enter(Student t[]); int add(Student t[],int n); void list(Student t[],int n); void find(Student t[]);

void searchnumber(Student t[],int n);

void searchstudentName(Student t[],int n); void searchClass(Student t[],int n); void out(Student t[],int c[],int n); int searchNum(Student t[],int n); void update(Student t[],int n); int delete(Student t[],int n);

/*主函数*/ void main() { system(\清屏*/ for(;;)/*无限循环*/ { switch(menu()) { case 1:length=enter(stud);break; /*录入学生论文信息*/ case 2:length=add(stud,length);break; /*增加学生论文信息*/

30

case 3:list(stud,length);break; /*显示全部学生论文信息*/ case 4:find(stud);break; /*查找学生论文信息*/ case 5:update(stud,length);/*修改学生论文信息*/ case 6:length=delete(stud,length);break; /*删除学生论文信息*/ case 7:exit(0); /*如返回值为6则程序结束*/ } } }

/*菜单*/ int menu() { char s[80]; int c; printf(\按任意键进入菜单......\\n\ getchar(); system(\ printf(\菜单*********************\\n\ printf(\ 1.录入学生论文信息\\n\ printf(\ 2.增加学生论文信息\\n\ printf(\ 3.显示学生论文信息\\n\ printf(\ 4.查找学生论文信息\\n\ printf(\ 5.修改学生论文信息\\n\ printf(\ 6.删除学生论文信息\\n\ printf(\ 7.退出\\n\ printf(\ do { printf(\输入你的选择(1~7):\ scanf(\ c=atoi(s); if(c<1||c>7) { printf(\输入有误,请重新输入:\ } }while(c<1||c>7); return c; }

/*录入学生信息*/ int enter(Student t[]) { int i,n; system(\

31

printf(\请输入学生人数\\n\ scanf(\ system(\ printf(\请输入学生论文信息,录完一个按回车\\n\ printf(\ printf(\序号 年级 专业 班级 学号 姓名 论文题目\\n\\n\\n\\n指导老师 日期 内容简介\\n\\n\\n\\n\ printf(\ for(i=0;i

/*增加学生论文信息*/ int add(Student t[],int n) { int i,j; system(\ printf(\请输入要增加的学生人数\\n\ scanf(\ system(\ printf(\请输入学生论文信息,录完一个按回车\\n\ printf(\ printf(\序号 年级 专业 班级 学号 姓名 论文题目\\n\\n\\n\\n指导老师 日期 内容简介\\n\\n\\n\\n\ printf(\ for(i=n;i

/*显示所有学生论文信息*/ void list(Student t[],int n) {

32

int i; system(\ printf(\**************\\n\ printf(\序号 年级 专业 班级 学号 姓名 论文题目\\n\ printf(\ for(i=0;i

/*查找学生论文信息*/ void find(Student t[]) { int i; system(\ printf(\按学号查找\\n\ printf(\按姓名查找\\n\ printf(\按班级查找\\n\ printf(\返回\\n\ scanf(\ switch(i) { case 1:searchnumber(stud,length);break; case 2:searchstudentName(stud,length);break; case 3:searchClass(stud,length);break; case 4:break; } }

/*按学号查找*/

void searchnumber(Student t[],int n) { char s[N]; int i,c[M];

33

system(\

printf(\请输入学号:\ scanf(\ for(i=0;i

/*按姓名查找*/

void searchstudentName(Student t[],int n) { char s[N]; int i,c[M]; system(\

printf(\请输入姓名:\ scanf(\ for(i=0;i

/*按班级查找*/

void searchClass(Student t[],int n) { char s[N]; int i,c[M]; system(\

printf(\请输入班级:\ scanf(\ for(i=0;i

/*信息输出*/

void out(Student t[],int c[],int n) { int i; printf(\**************\\n\ printf(\序号 年级 专业 班级 学号 姓名 论文题目\\n\

34

printf(\ for(i=0;i

/*序号查找*/

int searchNum(Student t[],int n) { char s[N]; int c=-1,i; scanf(\ for(i=0;i

/*修改学生论文信息*/

void update(Student t[],int n) { int i; system(\ printf (\请输入想要修改的序号:\ i=searchNum(t,n); if(i==-1) printf(\无记录!\\n\ else { printf (\请输入新的资料\\n\ printf(\ printf(\序号 年级 专业 班级 学号 姓名 论文题目\\n\\n\\n\\n指导老师 日期 内容简介\\n\\n\\n\\n\ printf(\

35

scanf(\t[i].studentName,t[i].thesisName,t[i].teacherName,t[i].date,t[i].introduction); } getchar(); }

/*删除学生论文信息*/ int delete(Student t[],int n) { char s[N]; int i,j; system(\ printf(\请输入删除序号\\n\ i=searchNum(t,n); if(i==-1) printf(\无记录!\\n\ else { printf(\**************\\n\ printf(\序号 年级 专业 班级 学号 姓名 论文题目\\n\ printf(\ printf(\.Class,t[i].number,t[i].studentName,t[i].thesisName); printf(\指导老师 日期 简介\\n\ printf(\ printf(\ printf(\***********\\n\ printf(\你确定要删除这个记录吗?(y/n)\\n\ if(toupper(getch())=='Y') { for(j=i+1;j

36

strcpy(t[j-1].studentName,t[j].studentName); strcpy(t[j-1].thesisName,t[j].thesisName); strcpy(t[j-1].teacherName,t[j].teacherName); strcpy(t[j-1].date,t[j].date); strcpy(t[j-1].introduction,t[j].introduction); } n--; } }

getchar(); return n;

}

37

五. 设计日志与教师评价

记录每天的主要设计内容、遇到的问题、解决方法及效果,等。 2013-6-24: 发现问题: ①掷骰子游戏:只能手动输入,不能自动生成随机数 ③计算存款本息之和:存款利率问题,滚利问题 完成题目: ④肇事逃逸⑧大优惠 2013-6-25: 解决问题: ①掷骰子游戏:引入#include 头文件,使用srand( (unsigned)time( NULL ) ); num1=rand()%6+1;来实现随机数 ③计算存款本息之和:3年与5年是每个期限滚一次利 发现问题:无 完成问题: ①骰子游戏③计算存款本息之和 2013-6-26: 完成题目:⑥汽车加油 ⑨金币 发现问题:提高题很有难度。 2013-6-27 完成题目:提高题 发现问题:在子模块删除中的确认输入y/n,无法自动转换小写字母。 解决问题:使用toupper(getch())==’Y’转换 2013-06-28 提高题小修小改,完成实验报告。 设计 日志 38

(注:指导教师评语和成绩所在表格另起一页) 指导教 师 评 语 课程设计 成 绩

指导教师签字 年 月 日 39

本文来源:https://www.bwwdw.com/article/4bdw.html

Top