c语言课程设计报告563413.docx
- 文档编号:24558316
- 上传时间:2023-05-28
- 格式:DOCX
- 页数:23
- 大小:181.34KB
c语言课程设计报告563413.docx
《c语言课程设计报告563413.docx》由会员分享,可在线阅读,更多相关《c语言课程设计报告563413.docx(23页珍藏版)》请在冰豆网上搜索。
c语言课程设计报告563413
(此文档为word格式,下载后您可任意编辑修改!
)
C语言程序设计
课程设计报告
课程设计题目:
专业:
姓名:
学号:
指导老师:
成绩:
年月
目录
1.实践1:
猜数游戏2
1.1题目2
1.2设计思路2
1.3程序框图2
1.4程序(附录)2
1.5调试过程2
2.实践2:
数组3
2.1题目3
2.2设计思路3
2.3程序框图3
2.4程序(附录)3
2.5调试过程3
3.实践3:
函数4
3.1题目4
3.2设计思路4
3.3程序框图4
3.4程序(附录)4
3.5调试过程4
4.实践4:
结构体5
4.1题目5
4.2设计思路5
4.3程序框图5
4.4程序(附录)5
4.5调试过程5
5.课程总结5
5.1任务完成情况6
5.2能力提高情况6
5.3存在问题及努力方向6
5.4意见与建议6
6.附录6
6.1实践1程序清单6
6.2实践2程序清单6
6.3实践3程序清单6
6.4实践4程序清单6
1.实践1:
猜数游戏
1.1题目
1.题目:
猜数游戏
程序1编程先由计算机“想”一个1~100之间的数请人猜,如果人猜对了,则计算机给出提示“Right!
”,否则提示“Wrong!
”,并告诉人所猜的数是大还是小,然后结束游戏。
要求每次运行程序时机器所“想”的数不能都一样。
程序2编程先由计算机“想”一个1~100之间的数请人猜,如果人猜对了,则结束游戏,并在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”的水平;否则计算机给出提示,告诉人所猜的数是太大还是太小,直到人猜对为止。
程序3编程先由计算机“想”一个1~100之间的数请人猜,如果人猜对了,则结束游戏,并在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”的水平;否则计算机给出提示,告诉人所猜的数是太大还是太小,最多可以猜10次,如果猜了10次仍未猜中的话,结束游戏。
程序4编程先由计算机“想”一个1~100之间的数请人猜,如果人猜对了,在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”的水平,则结束游戏;否则计算机给出提示,告诉人所猜的数是太大还是太小,最多可以猜10次,如果猜了10次仍未猜中的话,则停止本次猜数,然后继续猜下一个数。
每次运行程序可以反复猜多个数,直到操作者想停止时才结束。
2.目标:
此次试验重点在于循环变量的用法和随机函数的使用,能够熟练的调用函数循环函数,能接受整型变量(int)和输入(输出)函数(printf),限制小于0和大于100的整数输入,格式要求逻辑合理,规范美观。
1.2设计思路
1.使用MicrosoftVisualC++6.0来编写程序。
2.使用用srand(time(NULL))调用随机函数,用if-else语句,while语句和for语句调用循环函数,实现0到10次循环。
1.3程序框图
1.4程序(附录)
程序代码放在报告最后以附录形式提交
1.5调试过程
调试时,先随意输入了一个数如输入23,而随机数显示为60,故结果猜错,则会显示数小了,重来一次,已猜过一次;经过重复调试,程序符合要求。
而调试时也出了一点小问题,函数的总体变量和局部变量定义出错,经过细心查找书本,查看程序,最总得以解决。
2.实践2:
数组
2.1题目
1.题目:
数组编程
1.学生成绩统计(一维数组)
从键盘输入一个班(全班最多不超过30人)学生某门课的成绩,当输入成绩为负值时,输入结束,分别实现下列功能:
(1)统计不及格人数并打印不及格学生名单;
(2)统计成绩在全班平均分及平均分之上的学生人数,并打印这些学生的名单;
(3)以直方图方式统计各分数段的学生人数及所占的百分比。
形式如下:
分数段学生人数图形
<603(10%)***
60-698(…)********
70-797(…)*******
80-898(…)********
>=904(…)****
2.成绩排名次(二维数组)
某班期末考试科目为数学(MT)、英语(EN)和物理(PH),有最多不超过30人参加考试。
考试后要求:
(1)计算每个学生的总分和平均分;
(2)按总分成绩由高到低排出成绩的名次;
(3)打印出名次表,表格内包括学生编号、各科分数、总分和平均分;
(4)任意输入一个学号,能够查找出该学生在班级中的排名及其考试分数
2.目标:
1.此次试验使用一维数组,二维数组和结构体来统计学生统计不及格人数,不及格学生名单,平均分及平均分之上的学生人数和名次表,它限制小于0和大于100的整数输入,格式要求用直方图的形式。
2.2设计思路
1.解题思路:
使用二维数组score[30][5]来存放姓名,学号等,再用结构体函数记录输入成绩的学生变量,计算总分、平均分,调用函数比较学生成绩,得出排名,再根据数组定义对应存放各变量的位置,最后得到名次表和直方图。
2.使用MicrosoftVisualC++6.0编程,调用一维、二维数组和结构体,及判断语句(if-else)实现循环,从而调用函数实现目的。
2.3程序框图
1
NO
Yes
Wrong
Yes
2
2.4程序(附录)
2.5调试过程
1.程序一调试时,随意输入学生人数,如5人,结果如下,经过反复调试,确认程序无误。
调试也出现了一点下问题------调试窗口不美观,经过多次调整,才解决问题。
2.程序二调试时,随意输入30名学生学号,姓名,分数,结果如下,经过多次反复调试,确认程序无误,调试时由于程序较长,出现一些细节错误,经过反复检查,才解决。
3实践3:
函数
3.1题目函数编程
1.题目:
1.将实践二
(1)的程序利用函数的思想进行修改。
要求函数参数中包含一维数组。
2.掷骰子游戏
编写程序模拟掷骰子游戏。
已知掷骰子游戏的游戏规则为:
每个骰子有6面,这些面包含1、2、3、4、5、6个点,投两枚骰子之后,计算点数之和。
如果第一次投的点数和为7或11,则游戏者获胜;如果第一次投的点数和为2、3或12,则游戏者输;如果第一次投的点数和为4、5、6、8、9或10,则将这个和作为游戏者获胜需要掷出的点数,继续投骰子,直到赚到该点数时算是游戏者获胜。
如果投掷7次仍未赚到该点数,则游戏者输。
【思考题】将游戏规则改为:
计算机想一个数作为一个骰子掷出的点数(在用户输入数据之前不显示该点数),用户从键盘输入一个数作为另一个骰子掷出的点数,再计算两点数之和。
其余规则相同,然后请读者重新编写该程序。
2.目标:
此次试验使用随机函数生成随机数(1-6)代表掷出色子的点数,用while语句和if-else语句来实现循环使之符合色子掷出不同点数的不同结果。
支持#include
#include
3.2设计思路
1.此次试验使用随机函数生成随机数(1-6)代表掷出色子的点数,使用int定义整型变量,用if-else语句来控制色子不同点数的情况(判断输出),最后输出结果。
2.使用MicrosoftVisualC++6.0编程;用srand((unsigned)time(NULL))调用随机函数,有if-else语句判断输出。
3.3程序框图
3.4程序(附录)
3.5调试过程
程序调试结果如下,经过多次反复调试,确认程序无误。
调试时也并非一帆风顺,出现了一些错误-----随机函数使用出错,导致无法生成随机数,经过查找书本,翻看课件和网络查找等手段,才能正确使用该函数。
4.实践4:
结构体
4.1题目
1.题目:
结构体编程
在屏幕上模拟显示一个数字式时钟
按如下方法定义一个时钟结构体类型:
structclock
{
inthour;
intminute;
intsecond;
};
typedefstructclockCLOCK;
然后编写时钟模拟显示程序
2.目标:
利用结构体函数全局定义变量,使用voidUpdate和voidDisplay的函数功能显示时钟并达到与计算机时间同步的目的。
能接受整型变量(int)、voidUpdate和voidDisplay函数的输入(输出),格式要求时间显示清晰准确,规范合理。
4.2设计思路
1,使用结构图全局定义函数,用voidUpdate(void)函数实现时、分、秒时间的更新,用voidDisplay(void)函数控制时、分、秒显示的位置,用for语句实现空语句的循环,起延时作用Update(),Display()和Delay()实现和计算机时间同步,再输出结果。
4.3程序框图
4.4程序(附录)
4.5调试过程
调试过程如下,经过多次反复调试,确认程序无误。
在调试过程终于到多个问题,如:
不会处理时间的更新,执行时产生的时间与计算机时间有误差,换算成格林威治时间时出现错误等。
经过参考指导老师的程序,翻查书本和上网了解才解决问题。
5.课程总结
经过半学期的实践课程,然我对C语言产生了浓厚的兴趣,使我初步了解了C语言的基础,也能独立初步完成编程操作,但目前作为初学者,无法实现较复杂的编程,有些较为复杂的程序更是看不懂,各方面有待提高。
C语言作为现代大学生最重要的课程之一,用途广泛,更使我认识到了独立思考,实践操作的重要性。
C语言的学习不仅重理论,更重实践。
而学好C语言的一大方法便是“实践”,在C语言实践过程中遇到的种种问题,及解决问题的方法,更是锻炼了学生的实践能力,使我们不仅是学习理论,更学习了实践,今后一定要理论和实践有机结合,加上独立思考和不懈努力的学好C语言,为撬开编程的大门不懈努力。
总体来说老师授课很有水平,不过老师以后在上实践课的时候也进行更多的实践操作,让我们更好地理解,这样理论课也将变得更有趣。
6.附录
6.1实践1程序清单
#include
#include
#include
intmain()
{
while
(1)
{
intx;inti=0;
inty;intn=1;
intm=9;
srand(time(NULL));
while(i==0)
x=rand()%100+1;
printf("请输入一个1~100之间的整数\n");
while(n<=10)
{
scanf("%d",&y);
if(x==y)
{
printf("您猜了%d次,终于猜对了\n",n);break;
}
else
{
if(x { printf("您猜的数太大了\n"); printf("您已经猜了%d次\n",n); printf("您还有%d次机会\n",m); } else { printf("您猜的数太小了\n"); printf("您已经猜了%d次\n",n); printf("您还有%d次机会\n",m); } } n++; m--; } printf("正确答案是%d\n",x); } return0; } 6.2实践2程序清单 1. #include intmain() { intsum;intscore[30]; intn=1;intj=1; inta=0,b=0,c=0,d=0,e=0; floatq,w,s,r,t; printf("请输入学生人数: "); scanf("%d",&sum); if(sum<31&&sum>0) { for(n=1;n<=sum;n++) { printf("请输入第%d个同学的分数: ",n); scanf("%d",&score[n]); } } n=1; while(n<=sum) { if(score[n]<60)e++; elseif(score[n]>59&&score[n]<70)d++; elseif(score[n]>69&&score[n]<80)c++; elseif(score[n]>79&&score[n]<90)b++; elseif(score[n]>89&&score[n]<101)a++; elsebreak; n++; } q=(e/sum)*100;w=(d/sum)*100; s=(c/sum)*100;r=(b/sum)*100; t=(a/sum)*100; printf("分数段学生人数图形\n"); printf("<60%d(%.f%%)",e,q); n=1; for(n=1;n<=e;n++) printf("*"); printf("\n"); printf("60-69%d(%.f%%)",d,w); n=1; for(n=1;n<=d;n++) printf("*"); printf("\n"); printf("70-79%d(%.f%%)",c,s); n=1; for(n=1;n<=c;n++) printf("*"); printf("\n"); printf("80-89%d(%.f%%)",b,r); n=1; for(n=1;n<=b;n++) printf("*"); printf("\n"); printf(">=90%d(%.f%%)",a,t); n=1; for(n=1;n<=a;n++) printf("*"); printf("\n"); return0; } 2 #include #include #defineNUM30 intmain() { structstudent {intID; charNAME[9]; intMT; intEN; intPH; intALL; doubleAVE; }stu[30],t; inta,b,c,d,i=0,j; for(a=0;a { printf("输入第%d个同学的姓名数学分数英语分数物理分数\n”); printf("姓名: "); scanf("%s",stu[a].NAME); if(0==strlen(stu[a].NAME)) break; printf("\n数学分数: "); do { scanf("%d",&stu[a].MT); if(stu[a].MT>100||stu[a].MT<0) printf("\n请重新输入数学分数: "); }while((stu[a].MT>100)||(stu[a].MT<0)); printf("\n英语分数: "); do {scanf("%d",&stu[a].EN); if(stu[a].EN>100||stu[a].EN<0) printf("\n请重新输入英语分数: "); }while((stu[a].EN>100)||(stu[a].EN<0)); printf("\n物理分数: "); do {scanf("%d",&stu[a].PH); if(stu[a].PH>100||stu[a].PH<0) printf("\n请重新输入物理分数: "); }while((stu[a].PH>100)||(stu[a].PH<0)); printf("第%d个同学的总分平均分\n",a+1); stu[a].ALL=(stu[a].MT+stu[a].EN+stu[a].PH); stu[a].AVE=(stu[a].MT+stu[a].EN+stu[a].PH)/3; printf("%d%-8.1f",stu[a].ALL,stu[a].AVE); printf("\n"); stu[a].ID=a+1; getchar(); } c=a; for(b=0;b { for(d=0;d { if(stu[d].AVE {t=stu[d]; stu[d]=stu[d+1]; stu[d+1]=t; } } } printf("学号姓名数学分数英语分数物理分数总分平均\n"); while(i { printf("%5d%s%5d%5d%5d%-8.1f\n",stu[i].ID,stu[i].NAME,stu[i].MT, stu[i].EN,stu[i].PH,stu[i].ALL,stu[i].AVE); i++; } while (1) { printf("输入学号: "); scanf("%d",&j); printf("%5d%s%5d%5d%5d%-8.1f",stu[j-1].ID,stu[j-1].NAME, stu[j-1].MT,stu[j-1].EN,stu[j-1].PH,stu[j-1].ALL,stu[j-1]. AVE); } return0; } 6.3实践3程序清单 #include #include #include #include enumstatus{CONTINUE,WON,LOST}; voidmain() { while (1) { intstatus=CONTINUE; inti=0,j=0,add,k,newadd; srand((unsigned)time(NULL)); while(i==0) i=rand()%7; printf("骰子1: %d\n",i); while(j==0) j=rand()%7; printf("骰子2: %d\n",j); add=i+j; if(add==11&&add==7) status=WON; if(add==2&&add==3&&add==12) status=LOST; if(status==WON) printf("两个色子的和为%d.您赢了! \n",add); else if(status==LOST) printf("两色子的和为%d.您输了! \n",add); else { printf("两色子的和为%d.CONTINUE! \n",add); for(k=1;k<=7;k++) { i=0; j=0; printf("\n重新投掷第%d次\n",k); while(i==0) i=rand()%7; printf("骰子1: %d\n",i); while(j==0) j=rand()%7; printf("骰子2: %d\n",j); newadd=i+j; printf("重新投掷第%d次的总数: %d\n",k,newadd); if((i+j)==add) { status=WON; break; } } if(status==WON) printf("两色子的和为%d.您赢了! \n",add); else printf("两色子的和为%d.您输了! \n",add); } getch(); } } 6.4实践4程序清单 #include #include #include structclock { inthour;intminute;intsecond; }clock; voidUpdate(void) { c.second++; if(c.second==60){c.second=0;c.minute++;} if(c.minute==60){c.minute=0;c.hour++;} if(c.hour==24){c.hour=0;} voidDisplay(void) { printf("我的时钟: %2d: %2d: %2d\t\t计算机时钟: ",c.hour, c.minute,c.second); } voidDelay(void) { longt; for(t=0;t<;t++) { } } intmain() { longi; structtm*ptr;//定义时间结构体指针ptr time_tlt;/*定义变量lt为time_t数据类型的变量time_t 在time.h中定义 lt=time(NULL);/*g获取当前计算机时间*/ /*对时针、分针、秒针赋初始值为计算机当前时 间*/ ptr=gmtime(<);//换算成格林威治时间 c.hour=ptr->tm_hour+8; //时针(东八区)同步,并换算成北京时间 c.minute=ptr->tm_min;//分针同步 c.second=ptr->tm_sec;//秒针同步 for(i=0;i<100000;i++) { lt=time(NULL);Display();Update(); printf(ctime(<));/*printcurrentcomputertime*/ Delay();/*模拟延时1秒*/ } return0; } Yes
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计 报告 563413