C语言课程设计报告学习和掌握C程序设计方法培养抽象思维逻辑思维的能力和良好的程序设计风格.docx
《C语言课程设计报告学习和掌握C程序设计方法培养抽象思维逻辑思维的能力和良好的程序设计风格.docx》由会员分享,可在线阅读,更多相关《C语言课程设计报告学习和掌握C程序设计方法培养抽象思维逻辑思维的能力和良好的程序设计风格.docx(47页珍藏版)》请在冰豆网上搜索。
C语言课程设计报告学习和掌握C程序设计方法培养抽象思维逻辑思维的能力和良好的程序设计风格
《C语言程序设计》课程设计
成果报告
学生学号:
学生姓名:
学院:
理学院
专业班级信息与计算科学
专业课程:
C语言程序设计
指导教师:
课程设计报告书
课程设计目的:
学习和掌握C程序设计方法,培养抽象思维、逻辑思维的能力和良好的程序设计风格
课程设计时间:
课程设计地点:
课程设计单位:
计算机学院
课程设计指导教师评分表
课程设计题目
1、猜数字小游戏
2、显示月历
3、简单计算器
4、宿舍查询系统
本组组长
本组成员
本人分工
第1题分工:
程序设计编写
第2题分工:
主函数和判断星期几函数编写
第3题分工:
主函数、四则运算、其他运算编写
第4题分工:
主函数,查询,文件读写的编写
评分项目及分值要素
成绩评定
项目
最高分
评分要素
成绩
1.学习态度
20
上机出勤及端正的学习态度、认真刻苦程度,工作量饱满程度等
2.软件设计质量
30
采用的算法、设计方案,设计结果,界面友好等方面进行综合评定
3.答辩过程
20
能简明扼要地阐述设计的主要内容,能准确流利地回答各种问题
4.设计报告书写
10
内容按要求步骤书写,条理清晰,表述清楚、措词得当
5.实际动手能力
20
熟练使用开发工具,能够迅速准确的进行调试、纠错和运行;组长全面负责,承担复杂的模块设计分值就高
总成绩
等级
评语
指导教师:
职称:
____________
1猜数游戏
1.1设计目标
设计一个猜数字小游戏,计算机随机在1到100随机产生一个数,请
才,如果猜对了提示正确信息;否则告诉所猜的数是大还是小,同时提示下一次猜数的范围,知道猜对结束,最后给出游戏者所猜测的次数。
要求,程序以菜单方式工作。
1.2课题分析与设计
1、课题分析
编写该小游戏,主要分主函数和被调用函数,被调用函数包括一个菜单函数和一个执行函数,执行函数中涉及调用随机数,循环体的设计以及对循环次数的计数。
该题中所有数据类型均为整型。
2、详细设计
头文件:
#include
#include
#include
主函数设计:
voidmain()//主函数
{
intn;
do
{
showmenu();
printf("请选择要完成的操作\n");
scanf("%d",&n);
switch(n)//switch从菜单界面选择操作序号
{
case1:
start();break;//调用执行函数
case2:
break;
default:
printf("请输入正确的序号");break;
}
}while(n!
=2);
printf("谢谢使用本系统,下次再见!
");
}
确定整个程序的主体框架,多次猜数dowhile循环体的实现,注意循环条件,列出所需调用的函数,注意头文件的书写。
接着分别编写所需的菜单函数showmenu()和执行函数start()菜单函数主要用printf语句输出游戏的用户操作界面,注意换行。
执行函数主要是获取玩家输入的数字和系统产生的随机数进行比较判断,涉及随机数函数调用,多次循环用dowhile判断给出猜数范围,并用参数i记录循环次数。
3、程序流程
猜数游戏设计流程(如图1)
图1猜数游戏算法流程图
1.3程序清单
#include
#include
#include
voidshowmenu()//菜单函数
{
printf("☆☆☆☆☆☆☆☆☆欢迎使用猜数游戏☆☆☆☆☆☆☆☆☆\n");
printf("1.开始游戏\n");
printf("2.退出系统\n");
printf("☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n");}
voidstart()//执行函数
{
intm,n,x=1,y=100,i=0;//i计数,赋初值0,x,y用于提示范围
printf("1-100范围内猜数游戏开始!
\n");
printf("请输入你猜的数字:
\n");
srand(time(NULL));//设置随机种子
m=rand()%100+1;//生成1-100的一个随机数
do//循环体,判断所猜数与随机数的大小关系
{
scanf("%d",&n);
if(m>n)
{
x=n+1;
printf("你猜的数太小了,请继续猜,再输入一个数吧%d-%d\n",x,y);
}
elseif(m{
y=n-1;
printf("你猜的数太大了,请继续猜,再输入一个数吧%d-%d\n",x,y);
}
i++;
}while(n!
=m);
printf("恭喜你,猜对了!
\n");
printf("你共猜了%d次!
\n",i);//
}
voidmain()//主函数
{
intn;
do
{
showmenu();
printf("请选择要完成的操作:
\n");
scanf("%d",&n);
switch(n)//switch从菜单界面选择操作序号
{
case1:
start();break;//调用执行函数
case2:
break;
default:
printf("请输入正确的序号");break;
}
}while(n!
=2);
printf("谢谢使用本系统,下次再见!
");
}
1.4测试
1、测试用例
执行程序,选择1开始,第一次猜56,太大;第二次猜34,太大;第三次猜28,太大;第四次猜20,太小;第五次猜26,太大;第六次猜23,太小;第七次猜24,正确。
一共猜了七次,输出正确提示及猜测次数。
(测试结果如图1-2,1-3.)
2、测试结果
(1)运行程序
图2猜数游戏测试图
(2)开始游戏
图3猜数游戏运行图
3、测试结果分析
输入正确的数字操作序号,系统提示游戏开始,给定范围,多次执行循环,最终猜对正确值,给出猜测次数。
在起先测试过程中,会遇到猜对以后,仍出现太大的提示,提示给出猜对的提示,检查发现实在ifelse语句中的elseif语句下省略m2显示月历
2.1设计目标
设计一个程序实现月历的显示,要求:
1)输入年月信息,在屏幕上输出该月的日历;
2)输出日历时,以月份和星期做表头;
3)系统以菜单方式工作。
2.2课题分析与设计
1、课题分析
该题涉及循环和格式化输出。
主要难点是判断某年是否为闰年,某月有多少天,以及该月第一天星期几的判断。
由起始年份1900年1月1日,星期一,sumday初值赋1,计算到某年某月经历的天数,从而由sumday%7判断星期几。
2、详细设计
主函数设计,给出执行菜单:
voidmain()//主函数
{
intn;
do
{showmenu();//显示菜单函数
printf("请输入您要完成的操作:
\n");
scanf("%d",&n);
switch(n)//判断执行操作序号
{case1:
start();break;
case2:
break;
default:
printf("请输入正确的操作序号!
\n");break;}
}while(n!
=2);
printf("谢谢使用本系统,下次再见!
\n");//结束
}
根据sumday值计算星期几:
intmonth(y,m)//定义月份函数,输出该月的天数
{
intmon[12]={31,28,31,30,31,30,31,31,30,31,30,31};
if((y%4==0&&(y%100)!
=0||y%400==0)&&m==2)
return29;//闰年二月29天
else
returnmon[m-1];//返回值为该月的实际天数
}
intsum(y,m)//计算从1900.1.1到某年某月经历的天数
{
ints,sumday,i,j,count=0;
s=y-1900;
for(i=1900;i{
if(i%4==0&&(i%100)!
=0||i%400==0)count++;//count闰年数
}
sumday=365*(s-count)+366*count+1;
for(j=1;jsumday+=month(y,j);
returnsumday;
}
通过主函数下对菜单函数和执行函数的调用,格式化输出月份信息,其中最重要的也是比较麻烦的是确定该月第一天是星期几,该月一共有多少天的判断。
3、程序流程(如图4)
图4月历显示算法流程图
2.3程序清单
#include
intmonth(y,m)//定义月份函数,输出该月的天数
{
intmon[12]={31,28,31,30,31,30,31,31,30,31,30,31};
if((y%4==0&&(y%100)!
=0||y%400==0)&&m==2)
return29;//闰年二月29天
else
returnmon[m-1];//返回值为该月的实际天数
}
intsum(y,m)//计算从1900.1.1到某年某月经历的天数
{
ints,sumday,i,j,count=0;
s=y-1900;
for(i=1900;i{
if(i%4==0&&(i%100)!
=0||i%400==0)count++;//count记录闰年数
}
sumday=365*(s-count)+366*count+1;
for(j=1;jsumday+=month(y,j);
returnsumday;
}
intshowmenu()//菜单函数
{
printf("☆☆☆☆☆☆☆☆☆☆欢迎使用月历查询系统☆☆☆☆☆☆☆☆☆☆\n");
printf("1、开始查询.\n");
printf("2、退出系统.\n");
printf("☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n");
}
intstart(y,m)
{
intt,i;
printf("请输入您要查询的年份和月份:
\n");
scanf("%d%d",&y,&m);
printf("☆☆☆☆☆☆☆☆☆☆☆☆☆%d年%d月☆☆☆☆☆☆☆☆☆☆☆☆☆\n",y,m);
t=sum(y,m)%7;
printf("星期一星期二星期三星期四星期五星期六星期日\n");//格式化输出
for(i=1;i//循环的次数为该月的天数加上第一天的星期数减1
{
if(i-t<0)
printf("");
//第一天的星期前显示为空
else
printf("%3d",i-t+1);
//格式化输出保证日期和星期对齐
if(i%7==0)
printf("\n");
//每逢星期日换行
}
printf("\n");
}
voidmain()//主函数
{
intn;
do
{showmenu();//显示菜单函数
printf("请输入您要完成的操作:
\n");
scanf("%d",&n);
switch(n)//判断执行操作序号
{
case1:
start();break;
case2:
break;
default:
printf("请输入正确的操作序号!
\n");break;
}
}while(n!
=2);
printf("谢谢使用本系统,下次再见!
\n");//结束
}
2.4测试
1、测试用例
运行程序,输入1,开始,输入20166,显示2016年6月的日历。
循环显示菜单,输入2,退出系统。
通过反复多次输入年份月份的测试,调整输出格式,以保证输出函数格式对齐、美观。
程序能够达到预期的效果。
2、测试结果
(1)运行程序
图5显示月历测试图
(2)开始查询
图6月历输出图
3、测试结果分析
在测试过程中发现日期没有跟星期对齐,通过调整输出格式,调整对齐。
在选择判断的时候,参量定义位置不当,影响循环显示的效果。
对dowhile和for循环的灵活使用,能够快速简便地解决问题。
细节方面值得留意,一不小心,就会使整个程序无法运行。
3简单计算器
3.1设计目标
设计程序实现一个简单计算器,要求:
1)能完成任意两个数的四则运算(加、减、乘、除);
2)能完成三角函数运算(sin(x)、cos(x)、tan(x)、sin_1(x)、cos_1(x)、tan_1(x));
3)能完成对数运算(lnx、log10(x));
4)其他运算(ex、平方根计算、xy);
5)系统以菜单方式工作,每个功能的运算用二级菜单实现,例如:
加、减、乘、除的选择需用二级菜单提示。
3.2课题分析与设计
1、课题分析
该题主要设计循环和数学函数的调用。
首先写一个主菜单,通过主菜单引出二级菜单,二级菜单下分别调用各个子函数运算,循环选择是否继续该菜单下的运算。
最后通过主函数调用菜单和执行函数。
2、详细设计
首先设计主函数体,完成主体设计思路:
voidmain()//主函数
{
intn;
do
{
showmenu();//显示一级菜单函数
printf("请输入您要完成的操作:
\n");
scanf("%d",&n);
switch(n)//用户选择要操作的运算
{
case1:
start1();break;//分别调用相应函数
case2:
start2();break;
case3:
start3();break;
case4:
start4();break;
case5:
break;
default:
printf("请输入正确的操作序号!
\n");break;
}
}while(n!
=5);
printf("谢谢使用!
\n");//结束程序
}
showmenu()为主菜单函数,然后再分别设计二级菜单和相应函数:
voidstart1()//四则运算的二级菜单
{
intn,m;
do
{
printf("☆☆☆☆☆☆☆四则运算☆☆☆☆☆☆☆\n");
printf("1、加法运算.\n");
printf("2、减法运算.\n");
printf("3、乘法运算.\n");
printf("4、除法运算.\n");
printf("☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n");
printf("请选择您要完成的运算:
\n");
scanf("%d",&n);
switch(n)
{
case1:
jia();break;//调用加法函数
case2:
jian();break;//调用减法函数
case3:
cheng();break;//调用乘法函数
case4:
chu();break;//调用除法函数
default:
printf("请输入正确的操作序号!
\n");break;
}
printf("继续四则运算请按1,返回上一级菜单请按2.\n");//选择是否继续执行四则运算
scanf("%d",&m);
}while(m!
=2);
}
调用加减乘除运算函数:
floatjia()//定义加法运算函数
{
floatx,y;
printf("请输入两个数:
\n");
scanf("%f%f",&x,&y);
printf("%g+%g=%g\n",x,y,x+y);
}
floatjian()//定义减法运算函数
{
floatx,y;
printf("请输入两个数:
\n");
scanf("%f%f",&x,&y);
printf("%g-%g=%g\n",x,y,x-y);
}
floatcheng()//定义乘法运算函数
{
floatx,y;
printf("请输入两个数:
\n");
scanf("%f%f",&x,&y);
printf("%g*%g=%g\n",x,y,x*y);
}
floatchu()//定义除法运算函数
{
floatx,y;
printf("请输入两个数:
\n");
scanf("%f%f",&x,&y);
printf("%g/%g=%g\n",x,y,x/y);
}
然后再完成对应功能函数的定义,并在主函数下完成调用。
此处不一一赘述。
3、程序流程(如图)
图7简单计算器算法流程图
3.3程序清单
#include
#include
#definepai3.1415926//规定圆周率的值,以便完成角度制和弧度制的转换
voidshowmenu()//一级菜单函数
{
printf("***********欢迎使用简单计算器************\n");
printf("1、四则运算.\n");
printf("2、三角函数运算.\n");
printf("3、对数运算.\n");
printf("4、其他运算.\n");
printf("5、退出系统.\n");
printf("******************************************\n");
}
floatjia()//定义加法运算函数
{
floatx,y;
printf("请输入两个数:
\n");
scanf("%f%f",&x,&y);
printf("%g+%g=%g\n",x,y,x+y);
}
floatjian()//定义减法运算函数
{
floatx,y;
printf("请输入两个数:
\n");
scanf("%f%f",&x,&y);
printf("%g-%g=%g\n",x,y,x-y);
}
floatcheng()//定义乘法运算函数
{
floatx,y;
printf("请输入两个数:
\n");
scanf("%f%f",&x,&y);
printf("%g*%g=%g\n",x,y,x*y);
}
floatchu()//定义除法运算函数
{
floatx,y;
printf("请输入两个数:
\n");
scanf("%f%f",&x,&y);
printf("%g/%g=%g\n",x,y,x/y);
}
voidstart1()//四则运算的二级菜单
{
intn,m;
do
{
printf("☆☆☆☆☆☆☆四则运算☆☆☆☆☆☆☆\n");
printf("1、加法运算.\n");
printf("2、减法运算.\n");
printf("3、乘法运算.\n");
printf("4、除法运算.\n");
printf("☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n");
printf("请选择您要完成的运算:
\n");
scanf("%d",&n);
switch(n)
{
case1:
jia();break;//调用加法函数
case2:
jian();break;//调用减法函数
case3:
cheng();break;//调用乘法函数
case4:
chu();break;//调用除法函数
default:
printf("请输入正确的操作序号!
\n");break;
}
printf("继续四则运算请按1,返回上一级菜单请按2.\n");//选择是否继续执行四则运算
scanf("%d",&m);
}while(m!
=2);
}
voidsinx()//定义正弦运算函数
{
doublex,y;
printf("请输入一个角度:
\n");
scanf("%lf",&x);
y=sin(x*pai/180);//角度制转化为弧度制求余弦值
printf("sin(%.0f)=%.2f",x,y);
}
voidcosx()//定义余弦运算函数
{
doublex,y;
printf("请输入一个角度:
\n");
scanf("%lf",&x);
y=cos(x*pai/180);
printf("cos(%.0f)=%.2f\n",x,y);
}
voidtanx()//定义正切运算函数
{
doublex,y;
printf("请输入一个角度:
\n");
scanf("%lf",&x);
y=tan(x*pai/180);
printf("tan(%.0f)=%.2f\n",x,y);
}
voidarcsinx()//定义反正弦运算函数
{
doublex,y;
printf("请在-1~1之间输入一个数:
\n");
scanf("%lf",&x);
y=asin(x);
printf("sin_1(%.0f)=%.2f\n",x,y);
}
voidarccosx()//定义反余弦运算函数
{
doublex,y;
printf("请在-1~1之间输入一个数:
\n");
scanf("%lf",&x);
y=acos(x);
printf("cos_1(%.0f)=%.2f\n",x,y);
}
voidarctanx()//定义反正切运算函数
{
doublex,y;
printf("请输入一个数:
\n");
scanf("%lf",&x);
y=atan(x*pai/180);
printf("tan_1(%.0f)=%.2f\n",x,y);
}
voidstart2()
{
intn,m;
do//循环显示三角函数的二级菜单
{
printf("☆☆☆☆☆☆☆三角函数☆☆☆☆☆☆☆\n");
printf("1、sin(x).\n");
printf("2、cos(x).\n");
printf("3、tan(x).\n");
printf("4、sin_1(x).\n");
printf("5、cos_1(x).\n");
pr