《C课程设计报告》word版
《《C课程设计报告》word版》由会员分享,可在线阅读,更多相关《《C课程设计报告》word版(36页珍藏版)》请在装配图网上搜索。
1、 《C语言程序设计》 课程设计报告 (2012— 2013学年 第 3 学期) 专 业: 软件工程 班 级: 姓名学号: 指导教师: 成 绩: 软件工程系 2013 年06月24日 目 录 一、课程设计的目的与要求(含设计指标) 1 二、方案实现与调试 1 2.1掷骰子游戏 1 2.2射击游戏 3 2.3 计算存款本
2、息之和 6 2.4 肇事逃逸 8 2.5礼炮 10 2.6汽车加油 12 2.7排考场座位问题 14 2.8大优惠 17 2.9金币 18 2.10缩印 21 三、课程设计分析与总结 23 一、课程设计的目的与要求(含设计指标) (一)、实验目的 C语言是一种编程灵活,特色鲜明的程序设计语言。C语言除了学习必须的基本知识,如概念,方法和语法规则之外,更重要的是进行实训,以提高学习者的动手和编程能力,这是学习语言的最终目的。结合多年来的教学经验,根据学生的学习情况,为配合教学过程,使“项目教学法”能在本质上促使学生有更大进步,特编写了该《C语言程序设计
3、任务书》,以在实训过程中给学生提供帮助。达到如下目的: 1. 在课程结束之前,让学生进一步了解C程序设计语言的编程功能; 2. 让学生扎实掌握C程序设计语言的相关知识; 3. 通过一些有实际意义的程序设计,使学生体会到学以致用,并能将程序设计的知识与专业知识有效地结合,更全面系统地了解行业知识。 (二)、设计要求 根据实验内容的要求自由选定题目。编写程序要求遵循如下基本要求: l 模块化程序设计 l 锯齿型书写格式 l 必须上机调试通过 二、方案实现与调试 2.1掷骰子游戏 • 题目内容的描述 : 两人玩骰子,游戏规则如下: 1) 两人轮流掷骰子,每次掷两个,每人
4、最多掷10次。 2) 将每人每次的分值累加计分 3) 当两个骰子点数都为6时,计8分;当两个点数相等且不为两个6时,计7分;当两个点数不一样时,计其中点数较小的骰子的点数。 4) 结束条件:当双方都掷10次或经过5次后一方累计分数多出另一方的30%及以上。最后显示双方分数并判定优胜者。 •输入数据类型、格式和内容限制和输出数据的说明 输入数据类型、格式和内容限制:无 输出数据:获胜方及分数 •主要模块的算法描述 开始 初始化 随机取数,比较甲乙方大小 并将获得的分数加起来 当累加分数为5次时候,比较甲是否大于1.3倍的乙 甲获胜 乙是否大于1.3倍的甲 乙获
5、胜 随机取数,比较甲乙方大小 并将获得的分数加起来 当累加分数为10次时候,比较甲是否大于1.3倍的乙 甲获胜 乙是否大于1.3倍的甲 乙获胜 Y Y Y Y N N N N 平局 结束 2.1.4调试过程及实验结果 实验结果: 调试过程: 1.在printf中忘记加%d导致运行没有结果, 2.没有弄清楚全局变量和局部变量,导致出错, 3.对于子函数的定义没有弄明白,以及指针的定义。 2.2射击游戏 •2.2.1题目内容的描述 : 在程序运行时屏幕上方第一行随机出现一个 符号,要求游戏者输入一个1-80之间的整数,当用户输入
6、一个整数后,一个*立即从屏幕底端的该整数列向上移动,若移动到屏幕的顶端能撞上 符号,则游戏者获胜;若没有撞上,则要求再输入一个整数,共允许输入5次,如果一直没有撞上,则认为游戏者输。 提示: 1)输入 符号可以采用printf("%c",'\1') 2)显示*号向上移动:输出一些空行;输出*号;以循环的方式增加延时(for(i=0;i<100000;i++););clrscr()清屏重新绘制*号。 •2.2.2输入数据类型、格式和内容限制和输出数据的说明: 输入数据类型、格式和内容限制:输入一个整数 输出数据的说明:无 •2.2.
7、3系统主要模块的算法描述 开始
初始化h=20,i=1
x随机取数,输入y
h>0
i 8、及实验结果
实验结果
调试过程:清屏不会调用,只需1. #include 9、格式和内容限制和输出数据的说明
输入数据类型、格式和内容限制:输入本金和期限
输出数据:本息金额
•2.3.3系统主要模块的算法描述:
开始
输入本金和期限
计算一年滚存到期能从银行得到的利息与本金合计
计算三年滚存到期能从银行得到的利息与本金合计
计算五年滚存到期能从银行得到的利息与本金合计
输出结果
结束
•2.3.4调试过程及实验结果
调试过程:刚开始没有弄明白本息的算法导致出错
实验结果:
2.4 肇事逃逸
•2.4.1题目内容的描述
某部闽DT的出租车交通肇事逃逸,现场无人看清后面的四位数字,但三位目击群众提供信息如下:
1) 车 10、牌号后两位相同;
2) 车牌号前两位相同;
3) 车牌号是一个整数的平方。
请编程查出肇事逃逸车辆的车牌号
•2.4.2输入数据类型、格式和内容限制和输出数据的说明
•2.4.3系统主要模块的算法描述
.初始化m=31,i=j=0
k=i*1000+i*100+j*10+j
i!=j&&m*m==k
输出车牌号
结束
j++
j<10
i<10
i++
开始
m<=100
m++
N
N
Y
Y
N
Y
N
N
•2.4.4调试过程及实验结果
实验结果:
2.5礼炮
•题目内容的描述 :
鸣放礼炮起 11、源于英国。据说400多年前英国海军用的是火炮。当战舰进入友好国家的港口之前,或在公海上与友好国家的舰船相遇时,为了表示没有敌意,便把船上大炮内的炮弹统统放掉,对方的海岸炮舰船也同样做以表示回报。这种做法以后就逐渐成为互致敬意的一种礼仪。由于当时最大的战舰装有大炮21门,所以鸣炮21响就成了一种最高礼节。
有四艘战舰ABCD开始鸣放礼炮各21响,已知A战舰每隔5秒放一次,B战舰每隔6秒放一次, C战舰每隔7秒放一次, D战舰每隔8秒放一次.假设各炮手对时间掌握非常准确,请问观众共可以听到几次礼炮声?
•输入数据类型、格式和内容限制和输出数据的说明:
输入数据类型、格式和内容限制:无
输 12、出数据为:观众共可以听到的礼炮声次数
•主要模块的算法描述
开始
初始化a=0,b=0,c=0,d=0,count=0 a=0,b=0,c=0,d=0,count=0a=0,b=0,c=0,d=0,count=0a=0,b=0,c=0,d=0,count=0
a<=5*20||b<=6*20||c<=7*20||d<=8*20
a%5==0||b%6==0||c%7==0||d%8==0
count++
a<=5*20
a++
b<=6*20
b++
c<=7*20
c++
d<=8*20
d++
输出count
结束
N
N
N
N
13、
N
Y
Y
Y
Y
Y
Y
•调试过程及实验结果
实验结果:
2.6汽车加油
•2.6.1题目内容的描述 :
一辆汽车加满油后可行驶n公里。旅途中有若干个加油站。设计一个有效算法,指出应在哪些加油站停靠加油,使沿途加油次数最少。输入:第一行有2 个正整数N和K(1 <= N <= 100,1 <= K< = 100),表示汽车加满油后可行驶N公里,且旅途中有K个加油站。接下来的1 行中,有K+1 个整数,表示第K个加油站与第K-1 个加油站之间的距离。第0 个加油站表示出发地,汽车已加满油。第K+1 个整数表示第K个加油站与目的地的距离。输出 14、:将编程计算出的最少加油次数输出。如果无法到达目的地,则输出 No Solution。(注意:No和Solution之间有一个空格)。
•2.6.2输入数据类型、格式和内容限制和输出数据的说明:
输入数据类型、格式和内容限制:输入汽车加满油后可行驶多少公里,旅途中有多少个加油站,每个相邻加油站的距离
输出数据的说明:输出的最少加油次数
•2.6.3系统主要模块的算法描述 :
开始
输入汽车加满油后可行驶多少公里和旅途中有多少个加油站
输入每个相邻加油站的距离
a[i]>n
输出 No Solution
初始化m=0,t=0,i=0
i 15、++;
m>n
t++; m=a[i];
输出最少加油次数
结束
Y
N
N
Y
N
Y
•2.6.4调试过程及实验结果
实验结果:
调试过程: 巧妙计算加油次数
for(i=0;i 16、下:
请输入选项(1-4)
1 设定考场座位
2 取消考场座位
3 显示某座位考生信息
4 查找学生座位
1) 选择1,用户输入准考证号,随机产生该学生座位的行号和列号,要求一个考生只有一个座位,已有考生的位置上不能再安排新的考生;
2) 取消某人的考场座位;
3) 输入行号列号,输出该考生的准考证号;
4) 输入某学生的准考证号,输出该学生的座位。
•2.7.2输入数据类型、格式和内容限制和输出数据的说明
输入数据类型、格式和内容限制:输入选项(1-4)
输出数据的说明:准考证号,学生的座位
•2.7.3系统主要模块的算法描述
考号的座位已取消a[n][ 17、m]=0;
该考号是否有座位
开始
输入n
n=1
n=2
n=3
n=4
输入考号
该考号是否有座位
是
否
该考号已经有座位
随机取数安排座位
输入考号
是否有该座位
否
是
a[n][m]=0;
初始化a[9][9]={0}
该考号已取消
该座位为空
输入行号和列号
输出准考证号
输入考号
无考试信息
输出行号和列号
是
否
结束
•2.7.4调试过程及实验结果
实验结果
调试过程:
二维数组不会调用参数,解决方法二维数组在定义时为void set(int (*a)[9])
2.8大 18、优惠
•2.8.1题目内容的描述
中国移动推出最新的手机资费优惠方案,按照这个方案Tom的手机每天消费1元,每消费K元就可以获赠1元,一开始Tom有M元,问最多可以用多少天?
输入的测试数据为一行,实例包括2个整数M, K(2 <= K <= M <= 1000)。输出一个整数,表示M元可以用的天数。
•2.8.2输入数据类型、格式和内容限制和输出数据的说明
输入数据类型、格式和内容限制:输入刚开始有多少元以及每消费多少元可以获赠1元
输出数据:最多可以用多少天
•2.8.3系统主要模块的算法描述
开始
初始化i=1
Please input K and M(2 < 19、= K <= M <= 1000)
M>0
i++; M=M-1;
i%K==0
M=M+1
输出可用天数
结束
N
Y
YY
N
•2.8.4调试过程及实验结果
2.9金币
•2.9.1题目内容的描述:
国王用金币奖励他忠诚的侍从。第一天侍从工作结束后,国王奖励了他一个金币;接着的两天侍从工作中(第二天,第三天)的每一天,国王奖励了他两个金币;接着的三天侍从工作中(第四天,第五天,第六天)的每一天,国王奖励了他三个金币;接着的四天侍从工作中(第七天,第八天,第九天,第十天)的每一天,国王奖励了他四个金币。这种奖励的模式将是固定不变的,即在N天侍从工作中的每一 20、天,国王将奖励他N个金币;接着的N+1天的侍从工作中的每一天,国王将奖励他N+1个金币。
要求在给定的天数时,你的程序能够统计国王总共奖励了侍从多少金币。
•2.9.2输入数据类型、格式和内容限制和输出数据的说明
输入数据类型、格式和内容限制:给定的天数
输出数据:国王总共奖励了侍从多少金币
•2.9.3系统主要模块的算法描述
开始
初始化i=1,m=0
输入工作的天数
t>i
t=t-i;
;
m=m+i*i;
i++;
输出国王总共奖励了侍从的金币
结束
N
Y
m=m+t*i;
•2.9.4调试过程及实验结果
2.10缩 21、印
•2.10.1题目内容的描述
你想把一张560×400的图像放到一张216×280的页面中,并且要使图像最大,你会怎么做?你可以将图像旋转90度,然后压缩50%,图像现在的大小变为200×280。这样就可以放入页面中!
1)输入:输入数据包含四个用空格隔开的正整数A,B,C和D,表示图像 大小是A×B,页面大小是C×D。所有的数据都小于1000。
2)输出:如果图像不需要压缩(可能需要旋转)则输出100%。如果图像需要被压缩则输出最小压缩比(可能需要旋转)。我们假定没有图像会被压缩到1%以下,所有结果为一个整型的百分比,从1%到100%。
•2.10.2输入数据类型、格式 22、和内容限制和输出数据的说明
输入数据类型、格式和内容限制:输入图片相素和页面大小
输出数据的说明:压缩比例
•2.10.3系统主要模块的算法描述 开始
初始化i=1
输入图片相素和页面大小
a<1000&&b<1000&&c<1000&&d<1000
输入错误!
i<=100
a/i<=c&&b/i<=d
i++
break
n=100/i;
t=a;a=b;b=t;i=1
i<=100
a/i<=c&&b/i<=d
i++
break
m=100/i;
输出比例
结束
N
N
N
N
N
Y
Y
Y
Y
Y
• 23、2.10.4调试过程及实验结果
三、课程设计分析与总结
附录:源程序清单
1. 掷骰子游戏
#include 24、
return x;
}
void main()
{
int a1[10],a2[10],b1[10],b2[10],i,x=0,y=0; //x,y分别计算甲乙得分
srand((unsigned)time(NULL));
for(i=0;i<5;i++)//执行五次比较结果
{
a1[i]= rand() % 6 + 1;
a2[i]= rand() % 6 + 1;
b1[i]= rand() % 6 + 1;
b2[i]= rand() % 6 + 1;
printf("甲方%d",a1[i]);
printf("% 25、d\n",a2[i]);
printf("乙方%d",b1[i]);
printf("%d\n",b2[i]);
x=compare(a1[i],a2[i]);
y=compare(b1[i],b2[i]);
}
if(x>=1.3*y)
{
printf("甲方获胜,得分为%d",x);
}
if(y>=1.3*x)
{
printf("乙方获胜,得分为%d",y);
}
else
{
for(i=5;i<10;i++)//执行十次比较结果
{
a1[i]= rand() % 6 + 1; 26、
a2[i]= rand() % 6 + 1;
b1[i]= rand() % 6 + 1;
b2[i]= rand() % 6 + 1;
printf("甲方%d",a1[i]);
printf("%d\n",a2[i]);
printf("乙方%d",b1[i]);
printf("%d\n",b2[i]);
x=compare(a1[i],a2[i]);
y=compare(b1[i],b2[i]);
}
if(x>=1.3*y)
{
printf("甲方总分% 27、d\n",x);
printf("乙方总分%d\n",y);
printf("甲方获胜,得分为%d",x);
}
if(y>=1.3*x)
{
printf("甲方总分%d\n",x);
printf("乙方总分%d\n",y);
printf("乙方获胜,得分为%d",y);
}
else
{
printf("甲方总分%d\n",x);
printf("乙方总分%d\n",y);
printf("双方平局");
}
}
}
2. 射击游戏
#include < 28、stdio.h>
#include 29、 j=h;
while(j>0)
{
printf("\n");
j--;
}
for(k=1;k 30、 l++;
}while(l<5);
printf("游戏结束 再见了.....%c\n",'\1');
}
3. 计算存款本息之和
#include 31、0475*5,x/5);
printf("一年滚存到期能从银行得到的利息与本金合计为%f\n",a[0]);
printf("三年滚存到期能从银行得到的利息与本金合计为%f\n",a[1]);
printf("五年滚存到期能从银行得到的利息与本金合计为%f\n",a[2]);
}
4. 肇事逃逸
#include 32、i*1000+i*100+j*10+j;
if(i!=j&&m*m==k)
{
printf("肇事逃逸车辆的车牌号为%d,\n",k);
}
}
}
}
return 0;
}
5. 礼炮
#include 33、f(a<=5*20)
a++;
if(b<=6*20)
b++;
if(c<=7*20)
c++;
if(d<=8*20)
d++;
}
printf("观众共可以听到%d次礼炮声\n",count);
return 0;
}6.汽车加油
#include 34、("%d",&n);
printf("旅途中有多少个加油站\n");
scanf("%d",&k);
printf("每个相邻加油站的距离");
for(i=0;i 35、ntf("最少加油次数为%d\n",t);
}
7. 排考场座位问题
#include 36、printf("学生系统\n\n\t\t操作选单\t\n\n");
printf("\t\t1设定考场座位\t\n");
printf("\t\t2取消考场座位\t\n");
printf("\t\t3显示某座位考生信息\t\n");
printf("\t\t4查找学生座位\t\n");
printf("\t\t0退出程序\t\n");
printf("*******************************************\n");
for(i=0;i<10;i++)
{
37、printf("\n请输入选项:");
scanf("%d",&n);
switch(n)
{
case 1:set(a);break;
case 2:delet(a);break;
case 3:look(a);break;
case 4:find(a);break;
case 0:printf("祝你考试顺利!\n");exit(0);break;
default:printf("输入错误!\n");
}
}
}
void set(int (*a)[ 38、9])//设定考场座位
{
int b,j,k,n,m,t=0;
printf("请输入考号:");
scanf("%d",&b);
srand((unsigned)time(NULL));
j=rand()%8+1;
k=rand()%8+1;
for(n=1;n<9;n++)
{
for(m=1;m<9;m++)
{
if(a[n][m]==b)
{
printf("该考号已经有座位了,座位是第%d行第%d列\n",n,m);
t=1;
}
}
}
if(t==0)
39、 {
a[j][k]=b;
printf("你的座位第%d行第%d列\n",j,k);
}
}
void delet(int (*a)[9])//取消考场座位
{
int b,n,m,t=0;
printf("请输入考号:");
scanf("%d",&b);
for(n=1;n<9;n++)
{
for(m=1;m<9;m++)
{
if(a[n][m]==b)
{
a[n][m]=0;
printf("该考号的座位已取消!\n");
t= 40、1;
}
}
}
if(t==0)
{
printf("该座位为空!\n");
}
}
void look(int (*a)[9])//显示某座位考生信息
{
int n,m;
printf("请输入行号和列号:");
scanf("%d%d",&n,&m);
printf("考生的准考证号为%d\n",a[n][m]);
}
void find(int (*a)[9])//查找学生座位
{
int b,n,m,t=0;
printf("请输入考号:");
scanf("%d",&b) 41、;
for(n=1;n<9;n++)
{
for(m=1;m<9;m++)
{
if(a[n][m]==b)
{
printf("你的座位第%d行第%d列\n",n,m);
t=1;
}
}
}
if(t==0)
{
printf("无考试信息\n");
}
}
8. 大优惠
#include 42、 scanf("%d%d",&K,&M);
if(2<=K&&K<=M&&M<=1000)//输入范围
{
while(M>0)
{
i++;//累计天数
M=M-1;//剩余钱数
if(i%K==0) M=M+1;//奖励钱数
}
printf("可用天数%d\n",i);
}
else
printf("Input is error");
}
9.金币
#include 43、
printf("输入工作的天数\n");
scanf("%d",&t);
do
{
t=t-i;
m=m+i*i;
i++;
}while(t>i);
m=m+t*i;
printf("国王总共奖励了侍从%d金币",m);
}
10.缩印
#include 44、)
{
for(i=1;i<=100;i++)//直接压缩
{
if(a/i<=c&&b/i<=d)
break;
}
n=100/i;
t=a;a=b;b=t;
for(i=1;i<=100;i++)//旋转压缩
{
if(a/i<=c&&b/i<=d)
break;
}
m=100/i;
if(n<1||m<1)
printf("压缩小于1%\n");
else
if(n>m)//比较两种压缩百分
printf("直接压缩%d%%\n",n);
else
printf("旋 45、转压缩%d%%\n",m);
}
else
printf("输入错误!\n");
}
- 34 -
设计
日志
6月24日
了解设计报告内容,把要做的题全部都了解一下。做了《礼炮代码》这题;
6月25日
今天弥补昨天的题量做了三道,《肇事逃逸》,《 掷骰子游戏》《计算存款本息之和》
6月26日
今天做了五道题《射击游戏》《汽车加油》《大优惠》《金币》《缩印》做到还算顺利
6月27日
终于把最后一道《排考场座位问题》做完了,收获很大。
(注:指导教师评语和成绩所在表格另起一页)
指导教师
评 语
课程设计
成 绩
指导教师签字
年 月 日
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。