《C程序设计》实训
报告书
课程名称 C程序设计实训 ,
任 务 书
实训(习)题目:
1.建立链表(链表的结点类型与成员个数等由学生自己定义)
2. 杨辉三角形
3. 数制转换
4. 抓交通肇事犯
5. 捕鱼和分鱼
6. 求100到1000之间有多少个其数字之和为5的整数。
7. 求素数
8. 百钱百鸡问题
9. 奇数平方的一个有趣性质
10. 回文数的形成
实训(习)目的及要求:
1. 通过本实训,培养上机动手能力,使学生巩固《C程序设计》课程学习的内容,掌握工程软件设计的基本方法,培养自己独立分析问题与解决问题的能力,强化上机动手能力,闯过编程关。
2. 为后续各门计算机课程的学习打下坚实基础。
3. 至少完成实训题目中5道题(自选)。
4. 实训报告中每个题目必须包括三部分内容:问题分析与算法设计、源程序代码和运行结果。
5. 实训(习)个人总结字数不少于400字。
实训(习)设备:
计算机
实训(习)内容及过程:
1. 杨辉三角形
在屏幕上显示杨辉三角形,行数由用户输入确定。
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
解:程序如下:
#include <stdio.h>
main()
{ int i,j,n=0,a[17][17]={1};
while(n<1 || n>16)
{ printf("请输入杨辉三角形的行数:");
scanf("%d",&n);
}
for(i=1;i<n;i++)
{ a[i][0]=1; /*第一列全置为一*/
for(j=1;j<=i;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j]; /*每个数是上面两数之和*/
}
for(i=0;i<n;i++) /*输出杨辉三角*/
{ for(j=0;j<=i;j++)
printf("%5d",a[i][j]);
printf("\n");
}
}
运行结果:
2. 数制转换
将任一整数转换为二进制形式。
输入:8
输出:1000
输入:235
输出:11101011
解:程序如下:
解:程序如下:
#include "stdlib.h"
void main()
{
int n,x=0,a[100];
printf("请输入转换的数:\n");
scanf("%d",&n);
while(n)
{
a[x++]=n%2;
n/=2;
}
--x;
while(x>=0)
printf("%d",a[x--]);
printf("\n");
}
运行结果:
3. 抓交通肇事犯
一辆卡车违反交通规则,撞人后逃跑。现场有三人目击事件,但都没有记住车号,只记下车号的一些特征。甲说:牌照的前两位数字是相同的;乙说:牌照的后两位数字是相同的,但与前两位不同; 丙是数学家,他说:四位的车号刚好是一个整数的平方。请根据以上线索求出车号。
答案:7744
解:程序如下:
#include <math.h>
main()
{
long i,j;
long g,s,b,q,z;
for (i=0000;i<=9999;i++)
{
g=i%10;
s=i%100/10;
b=i%1000/100;
q=i%10000/1000;
z=q*1000+b*100+s*10+g;
if (q==b && g==s && sqrt(z)==(long)(sqrt(z)))
printf("the car number is:%ld",i);
}
}
运行结果:
4. 捕鱼和分鱼
A、B、C、D、E五个人在某天夜里合伙去捕鱼,到第二天凌晨时都疲惫不堪,于是各自找地方睡觉。日上三杆,A第一个醒来,他将鱼分为五份,把多余的一条鱼扔掉,拿走自己的一份。B第二个醒来,也将鱼分为五份,把多余的一条鱼扔掉,保持走自己的一份。C、D、E依次醒来,也按同样的方法拿走鱼。问他们合伙至少捕了多少条鱼?
答案:3121
解:程序如下:
#include<stdio.h>
void main()
{
int n,i,x,flag=1;
for(n=6;flag;n++)
{
for(x=n,i=1&&flag;i<=5;i++)
if((x-1)%5==0) x=4*(x-1)/5;
else flag=0;
if(flag) break;
else flag=1;
}
printf("Total number of fish catched=%d\n",n);
}
运行结果:
5. 求100到1000之间有多少个其数字之和为5的整数。
答案:104,113,122,131,140,203,212,221,230,302,311,320,401,410,500
解:程序如下:
#include <stdio.h>
int main()
{
int i,a,b,c;
for(i=100;i <1000;i++)
{
a=i%10;
b=i/10%10;
c=i/100;
if((a+b+c)==5)
printf( "%d ",i);
}
}
运行结果:
6. 求素数
求素数表中1~1000之间的所有素数
解:运行程序:
#include<stdio.h>
int main()
{
int n1,nm,i,j,flag,count=0;
do{
printf("Input START and END=?");
scanf("%d%d",&n1,&nm);
}while(!(n1>0&&n1<nm));
printf("………..PRIME TABLE(%d–%d)…………\n",n1,nm);
if(n1==1||n1==2)
{
printf("%4d",2);
n1=3;count++;
}
for(i=n1;i<=nm;i++)
{
if(!(i%2))continue;
for(flag=1,j=3;flag&&j<i/2;j+=2)
if(!(i%j))flag=0;
if(flag) printf(++count%15?"%4d":"%4d\n",i);
}
}
运行结果:
7. 百钱百鸡问题
中国古代数学家张丘建在他的《算经》中提出了著名的“百钱买百鸡问题”:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何?
答案:
Follwing are possible plans to buy 100 fowls with 100 Yuan.
1: cock=0 hen=25 chicken=75
2: cock=4 hen=18 chicken=78
3: cock=8 hen=11 chicken=81
4: cock=12 hen=4 chicken=84
解:程序如下:
#include<stdio.h>
int main()
{
int x,y,z,j=0;
printf("Folleing are possible plans to buy 100 fowls with 100 Yuan.\n");
for(x=0;x<=20;x++)
for(y=0;y<=33;y++)
{
z=100-x-y;
if(z%3==0&&5*x+3*y+z/3==100)
printf("%2d:cock=%2d hen=%2d chicken=%2d\n",++j,x,y,z);
}
}
运行结果:
8. 奇数平方的一个有趣性质
编程验证“大于1000的奇数其平方与1的差是8的倍数”。(验证到3000即可)
答案:
最后十个数的运算结果如下:
解:程序如下:
#include<stdio.h>
int main()
{
long int a;
for(a=1001;a<=3000;a+=2)
{
printf("%ld:",a);
printf("(%ld*%ld-1)/8",a,a);
printf("=%ld",(a*a-1)/8);
printf("+%ld\n",(a*a-1)%8);
}
}
运行结果:
9. 回文数的形成
任取一个十进制整数,将其倒过来后与原来的整数相加,得到一个新的整数后重复以上步聚,则最终可得到一个回文数。请编程验证。
解:程序如下:
#include<stdio.h>
#define MAX 2147483647
long re(long int);
int nonres(long int s);
int main()
{
long int n,m;
int count=0;
printf("Please enetr a number optionaly:");
scanf("%ld",&n);
printf("The generation process of palindrome:\n");
while(!nonres((m=re(n))+n))
{
if(m+n>=MAX)
{
printf(" input error,break.\n");
break;
}
else
{
printf("[%d]:%ld+%ld=%ld\n",++count,n,m,m+n);
n+=m;
}
}
printf("[%d]:%ld+%ld=%ld\n",++count,n,m,m+n);
printf("Here we reached the aim at last!\n");
}
long re(long int a)
{
long int t;
for(t=0;a>0;a/=10)
t=t*10+a%10;
return t;
}
int nonres(long int s)
{
if(re(s)==s) return 1;
else return 0;
}
运行结果:
转眼之间,一周的实训时间很快过去了。一周时间不算长也不算短,你可以虚度也可以踏踏实实地走过来。而我,选择了后者!
通过一周的实训上机,我学到了很多平时在书本上学不到的知识。这不仅是知识性的,更多的是在与同学合作完成实训的过程中,我们一起研究,一起调试,一起改正直至最后成功完成每一个程序。当我们一起按下“Enter”键的瞬间,那是一种激动与喜悦交错在一起的复杂感情。渐渐地,这种感情在潜移默化中慢慢转化成我们之间的默契。
默契是提高工作效率的催化剂,到后来的几天时间里,我们在编程的时候几乎可以说到了心有灵犀的地步
在学习《C语言程序设计》这门课程的前期,由于接触的东西新而且内容量大。学起来胡里糊涂的,可以说根本不知道在学些什么,没有针对性和目的性。可是,这一周的实训时间,正巧填补了我们前段时间上机缺少的空白。在上机实训期间,老师布置的C课程设计任务书中的每一题都具有很高的针对性和实际性。让我把一学期下来的内容都熟悉与复习了一遍。正所谓“温故而知新”,这周的实训安排对我们是如临甘雨,对知识的充分掌握起了促进性的作用。
最后我想说的是,学西C语言的过程是一个系统而长期的过程。这次实训唤起了我对学习C的热情。在将来的学习过程中,我会以在这次实训得到的经验为基础,向一个专业程序员的目标进军!
第二篇:c语言 实训报告
防灾科技学院
实训报告书
专 业 计算机科学与技术
系 别 灾害信息工程系
报告题目 计算机科学与技术认识实习(C语言)
报告人 班 级
指导教师 带队教师
实习时间 实习单位
教务处监制
目 录
1 实训目的... 3
2 实训要求... 4
3 实训内容... 4
4 《学生成绩管理系统》的设计与实现... 4
4.1 设计题目... 4
4.2 需求分析... 4
4.3 数据结构... 4
4.4 数据文件... 5
4.5 系统模块图... 5
4.6 系统流程图... 5
4.7 系统实现... 6
5 《贪吃蛇游戏》的设计与实现... 14
5.1 设计题目... 14
5.2 需求分析... 14
5.3 数据结构... 14
5.4 数据文件... 15
5.5 系统模块图... 15
5.6 系统流程图... 16
5.7 系统实现... 16
6 实训总结... 19
7参考文献... 20
1 实训目的
首先,通过实习,使学生学会为实际应用涉及的数据选择适当的逻辑结构、存储结构及相应的算法,从而能让学生对C语言程序设计这门课能有一个更深刻的理解和认识;再者,实习相对于平时实验课来说,要完成的是一个难度较大的可执行综合性程序,培养学生处理复杂问题的能力,从而极大的提高学生的编程能力以及撰写文档的能力;并且本实习内容是当前社会最热门且尚处于研究阶段的课题之一,希望能通过实习,实际做到理论和实践紧密结合,同时也为后续课程打下坚实的基础知识。
2 实训要求
实习要求每个学生从实习项目集合中至少选择2个实习项目并参照相关实习资料独立操作,能正确分析现实生活中的问题,并抽象成数学模型,进行模块分析和编程,认真完成软件设计的全部过程,并完成实习报告。
首先根据所选项目进行需求分析和算法分析,根据项目实现的功能进行数据分析,设计相应的数据结构,同时为贯彻“程序设计=算法+数据结构”的思想,要求学生完成流程图的设计,然后根据流程图写出课程实习代码并上机调试,设计的功能应相对完善,每个学生须独立完成程序构思、基本结构设计、变量设计、函数设计、文件操作等任务。在设计中要综合运用所学内容,顺利调试通过并运行所编写的程序,最后完成课程实习报告,报告书应图文结合,须包含用户需求分析、系统模块图、流程图、数据结构设计、界面设计、功能模块实现与测试、设计的算法及主要程序代码等内容,并结合自己的实习情况写出实习总结。
3 实训内容
本次实习所选择的题目是《学生成绩管理系统》和《贪吃蛇游戏》。在实习过程中完成了《学生成绩管理系统》和《贪吃蛇游戏》的需求分析、系统功能模块的设计、系统流程图的设计、数据结构设计、界面设计以及代码的实现与测试。
4 《学生成绩管理系统》的设计与实现
4.1 设计题目
使用C语言,在vc6.0环境下,实现一个简单实用的基于文件的小型学生成绩管理系统,并实现成绩的储存,查询,添加,删除,排序等基本操作,以方便成绩的管理。
4.2 需求分析
以某班不超过30人,进行3科考试为准。编程实现如下要求:
(1) 录入每个学生的学号、姓名和各科考试成绩。
(2) 计算每门课程和每个学生的总分和平均分。
(3) 按每个学生的总分由高到低或由低到高排出名次表。
(4) 按学号、姓名由小到大排出成绩表。
(5) 按学号、姓名查询学生排名和考试成绩。
(6) 按成绩分类并输出统计结果
(7) 将每个学生的记录信息写入文件,并能读取出来。
4.3 数据结构
typedef structure student
{
long num;
char mane[MAX_LEN];
float score[COURSE_NUM];
float sum;
float aver;
}
4.4 数据文件
#include <stdio.h> #include <stdlib.h> #include <string.h>
4.5 系统模块图
4.6 系统流程图
4.7 系统实现
1、主函数
int main() /*主函数*/
{
char ch;
int n,i;
STU sturecord[STU_NUM];
float sumofcourse[COURSE_NUM],averofcourse[COURSE_NUM];
printf("输入学生人数(n<%d):",STU_NUM);
scanf("%d",&n);
while(1)
{
ch=menu();
switch(ch)
{
case 1:readscore(sturecord,n);break;
case 2:aversumofeverycourse(sturecord,sumofcourse,averofcourse,n);
for(i=0;i<COURSE_NUM;i++)
{
printf("科目%d:总分=%.0f,平均分=%.0f\n",i+1,sumofcourse[i],averofcourse[i]);
}
break;
case 3:aversumofeverystudent(sturecord,n);break;
case 4:sortbyscore(sturecord,n,descending);
printscore(sturecord,n);
break;
case 5:sortbyscore(sturecord,n,ascending);
printscore(sturecord,n);
break;
case 6:assortbynum(sturecord,n);
printscore(sturecord,n);
break;
case 7:sortbyname(sturecord,n);
printscore(sturecord,n);
break;
case 8:searchbynum(sturecord,n);
break;
case 9:searchbyname(sturecord,n);
break;
case 10:statisticanalysis(sturecord,n);
break;
case 11:printscore(sturecord,n);
break;
case 12:writetofile(sturecord,n);
break;
case 13:n=readfromflie(sturecord);
break;
case 0:printf("结束程序");
break;
default:printf("错误");
break;
}
}
return 0;
}
2、菜单函数
int menu(void) /*菜单函数*/
{
int itemselected;
printf("\n\t\t\t学生成绩管理系统\n");
printf("\t\t\t1.输入成绩\n");
printf("\t\t\t2.计算每科的总分和平均分\n");
。。。。。。。。
scanf("%d",&itemselected);
return itemselected;
}
3、读入函数
void readscore(STU stu[],int n) /*输入n个学生的各门课成绩*/
{
int i,j;
for (i=0;i<n;i++)
{
scanf("%ld%s",&stu[i].num,&stu[i].name);
for (j=0;j<COURSE_NUM;j++)
{
scanf("%f",&stu[i].score[j]);
}
}
}
4、计算函数
void aversumofeverystudent(STU stu[],int n) /*计算学生各门课程的总分和平均分*/
{
int i,j;
for (i=0;i<n;i++)
{
stu[i].sum=0;
for (j=0;j<COURSE_NUM;j++)
{
stu[i].sum+=stu[i].score[j];
}
stu[i].aver=stu[i].sum/COURSE_NUM;
printf("学生%d:总分=%.0f,平均分=%.0f\n",i+1,stu[i].sum,stu[i].aver);
}
}
5、计算函数
void aversumofeverycourse(STU stu[],float sum[],float aver[],int n) /*计算总分和平均分*/
{
int i,j;
for (j=0;j<COURSE_NUM;j++)
{
sum[j]=0;
for (i=0;i<n;i++)
{
sum[j]+=stu[i].score[j];
}
aver[j]=sum[j]/n;
}
}
6、排序函数
void sortbyscore(STU stu[],int n,int (*compare)(float a,float b) /*排列数组sum的元素值*/
{
int i,j,k,t;
float temp1;
long temp2;
char temp3[MAX_LEN];
for (i=0;i<n-1;i++)
{
k=i;
for (j=i+1;j<n;j++)
{
if((*compare)(stu[j].sum,stu[k].sum))
k=j;
}
if (k!=i)
{
for (t=0;t<COURSE_NUM;t++)
{
temp1=stu[k].score[t];
stu[k].score[t]=stu[i].score[t];
stu[i].score[t]=temp1;
}
temp1=stu[k].sum;
stu[k].sum=stu[i].sum;
stu[i].sum=temp1;
temp1=stu[k].aver;
stu[k].aver=stu[i].aver;
stu[i].aver=temp1;
temp2=stu[k].num;
stu[k].num=stu[i].num;
stu[i].num=temp2;
strcpy(temp3,stu[k].name);
strcpy(stu[k].name,stu[i].name);
strcpy(stu[i].name,temp3);
}
}
}
7、排序函数 int ascending(float a,float b) /*升序排序*/
{
return a<b;
}
8、排序函数 int descending(float a,float b) /*降序排序*/
{
return a>b;
}
9、排序函数 void assortbynum()
6中(*compare)(stu[j].sum,stu[k].sum)改为stu[j].sum<stu[k].sum即可
10、排序函数
void sortbyname(STU stu[],int n) /*交换法实现名字按字典顺序排序*/
{
int i,j,t;
float temp1;
long temp2;
char temp3[MAX_LEN];
for (i=0;i<n-1;i++)
{
for (j=i+1;j<n;j++)
{
if(strcmp(stu[j].name,stu[i].name)<0)
for (t=0;t<COURSE_NUM;t++)
{
temp1=stu[i].score[t];
stu[i].score[t]=stu[j].score[t];
stu[j].score[t]=temp1;
}
temp1=stu[i].sum;
stu[i].sum=stu[j].sum;
stu[j].sum=temp1;
temp1=stu[i].aver;
stu[i].aver=stu[j].aver;
stu[j].aver=temp1;
temp2=stu[i].num;
stu[i].num=stu[j].num;
stu[j].num=temp2;
strcpy(temp3,stu[i].name);
strcpy(stu[i].name,stu[j].name);
strcpy(stu[j].name,temp3);
}
}
}
11、查询函数
void searchbynum(STU stu[],int n) /*按学号查找结果*/
{
long number;
int i,j;
printf("输入你想要查找的学号");
scanf("%ld",&number);
for (i=0;i<n;i++)
{
if (stu[i].num==number)
{
printf("%ld\t%s\t",stu[i].num,stu[i].name);
for (j=0;j<COURSE_NUM;j++)
{
printf("%.0f\t",stu[i].score[j]);
}
printf("%.0f\t%.0f\n",stu[i].sum,stu[i].aver);
return;
}
}
printf("\n没找到\n");
}
12、查询函数
void searchbyname(STU stu[],int n) /*按名字查找成绩表*/
{
char x[MAX_LEN];
int i,j;
printf("请输入你想要查找的名字");
scanf("%s",x);
for (i=0;i<n;i++)
{
if (strcmp(stu[i].name,x)==0)
{
printf("%ld\t%s\t",stu[i].num,stu[i].name);
for (j=0;j<COURSE_NUM;j++)
{
printf("%.0f\t",stu[i].score[j]);
}
printf("%.0f\t%.0f\n",stu[i].sum,stu[i].aver);
return;
}
}
printf("\n没找到\n");
}
13、统计函数
void statisticanalysis(STU stu[],int n) /*统计个分数段人数及百分比*/
{
int i,j,total=0,t[6];
for (j=0;j<COURSE_NUM;j++)
{
printf("各分数段比例:\n");
for (i=0;i<6;i++)
{
t[i]=0;
}
for (i=0;i<n;i++)
{
if(stu[i].score[j]>=0 && stu[i].score[j]<60)
t[0]++;
else if(stu[i].score[j]<70)
t[1]++;
else if(stu[i].score[j]<80)
t[2]++;
else if(stu[i].score[j]<90)
t[3]++;
else if(stu[i].score[j]<100)
t[4]++;
else if(stu[i].score[j]==100)
t[5]++;
}
for (total=0,i=0;i<=5;i++)
total+=t[i];
if (total!=n)
{
printf("不正确");
break;
}
for(i=0;i<=5;i++)
{
if(i==0)
printf("<60\t%d\t%.2f%%\n",t[i],(float)t[i]/n*100);
else if(i==5)
printf("%d\t%d\t%.2f%%\n",(i+5)*10,t[i],(float)t[i]/n*100);
else
printf("%d-%d\t%d\t%.2f%%\n",(i+5)*10,(i+5)*10+9,t[i],(float)t[i]/n*100);
}
}
}
14、打印函数
void printscore(STU stu[],int n) /*打印学生成绩*/
{
int i,j;
printf("学号\t姓名\t数学\t英语\t物理\t总分\t平均分\n");
for(i=0;i<n;i++)
{
printf("%ld\t%s\t",stu[i].num,stu[i].name);
for(j=0;j<COURSE_NUM;j++)
{
printf("%.0f\t",stu[i].score[j]);
}
printf("%.0f\t%.0f\n",stu[i].sum,stu[i].aver);
}
}
15、输出函数
void writetofile(STU stu[],int n) /*输出学生信息到文件中*/
{
FILE *fp;
if((fp=fopen("student.txt","w"))==NULL)
{
printf("打开文件失败");
exit(0);
}
fwrite(stu,sizeof(STU),n,fp);
fclose(fp);
}
16、读取函数
int readfromflie(STU stu[]) /*文件中读取学生信息*/
{
FILE *fp;
int i;
if((fp=fopen("student.txt","r"))==NULL)
{
printf("打开文件失败");
exit(0);
}
for(i=0;!feof(fp);i++)
{
fread(&stu[i],sizeof(STU),1,fp);
}
fclose(fp);
printf("总共有学生%d.\n",i-1);
return i-1;
}
5 《贪吃蛇游戏》的设计与实现
5.1 设计题目
贪吃蛇是一款经典的休闲游戏,一条蛇在密闭的围墙内,随机出现一个食物,通过控制方向键操作小蛇不停的朝着食物前进,直到吃掉食物。每吃一个食物,小蛇都会长长一截,随之难度增大;当小蛇头撞到墙或自己时,小蛇死亡。
5.2 需求分析
(1) 用上、下、左、右键控制游戏区蛇的运动方向,使之吃食而使身体变长;
(2) 用户可以调节蛇的运行速度来选择不同的难度;
(3) 游戏分多个难度级别;
(4) 用户可自选颜色;
(5) 记录成绩前五名的游戏玩家;
(6) 增加背景音乐;
(7) 提高障碍物和游戏级别。
5.3 数据结构
typedef enum /*表示方向*/
{
left,right,up,down
}DIR;
typedef struct /*表示坐标*/
{
int x;
int y;
}COOR;
struct FOOD /*表示食物信息*/
{
COOR crd; /*食物坐标*/
int flag; /*食物状态,0表示被吃啦*/
}food;
struct SNAKE /*蛇的信息*/
{
COOR crd[SIZEMAX]; /*每节蛇坐标*/
int node; /*当前节数*/
DIR dir; /*前进方向*/
}snake;
5.4 数据文件
<stdio.h> <stdlib.h> <graphics.h> <conio.h> <time.h>
5.5 系统模块图
5.6 系统流程图
5.7 系统实现
1.主函数:
void main()
{
init();
while(1)
{
while(!kbhit())
{
if (!food.flag)
setfoodcrd();
showfood();
showsnake();
judgeslod();
judgefood();
snakemove();
Sleep(speed);
}
changeskdir();
}
}
2.初始化:
void init() /*初始化*/
{
initgraph(640,480);
srand(time(NULL));
food.flag=0;
snake.crd[0].x=0+SNAKELEN;
snake.crd[0].y=0;
snake.crd[1].x=0;
snake.crd[1].y=0;
snake.node=2;
snake.dir=right;
}
3.随机产生食物:
void setfoodcrd() /*随即生成食物*/
{
food.crd.x=rand()%(600/SNAKELEN)*SNAKELEN;
food.crd.y=rand()%(480/SNAKELEN)*SNAKELEN;
food.flag=1;
}
4.画食物:
void showfood() /*画食物*/
{
rectangle(food.crd.x,food.crd.y,food.crd.x+SNAKELEN,food.crd.y+SNAKELEN);
}
5.画蛇:
void showsnake() /*画蛇*/
{
int i;
for(i=snake.node-1;i>=0;i--)
rectangle(snake.crd[i].x,snake.crd[i].y,snake.crd[i].x+SNAKELEN,snake.crd[i].y+SNAKELEN);
setcolor(BLACK);
rectangle(snake.crd[snake.node].x,snake.crd[snake.node].y,snake.crd[snake.node].x+SNAKELEN,snake.crd[snake.node].y+SNAKELEN);
setcolor(RED);
rectangle(snake.crd[snake.node-1].x,snake.crd[snake.node-1].y,snake.crd[snake.node-1].x+SNAKELEN,snake.crd[snake.node-1].y+SNAKELEN);
}
6.蛇移动:
void snakemove() /*蛇移动*/
{
int i;for(i=snake.node;i>0;i--)
{
snake.crd[i].x=snake.crd[i-1].x;
snake.crd[i].y=snake.crd[i-1].y;
}
switch(snake.dir)
{
case up:snake.crd[0].y-=SNAKELEN;break;
case down:snake.crd[0].y+=SNAKELEN;break;
case left:snake.crd[0].x-=SNAKELEN;break;
case right:snake.crd[0].x+=SNAKELEN;
}
showsnake();
}
void changeskdir() /*改变蛇的方向*/
{
char key;
key=getch();
switch(key)
{
case'w': case'W': if(snake.dir!=down) snake.dir=up; break;
case's': case'S': if(snake.dir!=up) snake.dir=down; break;
case'a': case'A': if(snake.dir!=right) snake.dir=left; break;
case'd': case'D': if(snake.dir!=left) snake.dir=right; break;
}
}
8.判断蛇是否死亡:
void judgeslod() /*判蛇是否死亡*/
{
int i;
if(snake.crd[0].x<0||snake.crd[0].x>=640||snake.crd[0].y<0||snake.crd[0].y>=480)
gameover();
for(i=snake.node-1;i>0;i--)
{if(i=snake.crd[0].x==snake.crd[i].x&&snake.crd[0].y==snake.crd[i].y)
gameover;}
}
9.判断蛇是否吃到食物:
void judgefood() /*判断蛇是否吃到食物*/
{
if(snake.crd[0].x==food.crd.x&&snake.crd[0].y==food.crd.y)
{
snake.node++;
setcolor(BLACK);
rectangle(food.crd.x,food.crd.y,food.crd.x+SNAKELEN,food.crd.y+SNAKELEN);
setcolor(RED);
food.flag=0;
}
}
6 实训总结
通过这九天的学习,我学到了许多真正的实用的c语言编程技巧。通过对《学生成绩管理系统》和《贪吃蛇游戏》的编写,也让我学到了许多的有用的东西。例如:结构体的定义;数组的定义及应用;顺序查找方法;函数调用;数组名作为函数参数;数组元素作为函数参数;文件的读写操作;菜单项的制作和选择。。。。。。培养了我的结构化程序、模块化程序设计的方法和能力。
除这些外,最让我受益的是学会了利用vc和easyz库绘图,可以做出许多好看的图象,提高了兴趣,还有学习和掌握了C语言中的图形处理函数及其应用,提高了基本的分析问题和利用计算机求解问题的能力,通过提交课程实习报告,提高了专业文档书写的能力。
通过这次实训,也使我们发现了许多问题。
在实训中,我们认识到自己还有很多的知识没学好,基础知识没理清,而且许多东西还要去翻书,去上网搜索。而且遇到一些小错误运行不出来,就会烦躁不安,觉得有些自暴自弃或者抱怨项目的变态,以后要克服,尽量保持一颗良好的心态,学好C语言,也学好用C语言编写一个按要求的系统。
还有就是对于未来,近程就是下学期,我觉得我还有许多方面需要提高。
首先我要继续学习好C语言的基础知识,然后能在电脑上熟练的运用。然后每天都能写一些程序,上网时候多看一些优秀的教程和优秀的代码。遇到问题时多和同学讨论,并且多弄出几套方案,多锻炼自己结局问题的能力和与同学合作的能力。
总之,这一切都成为我记忆里面的一个篇章,更是在C语言编程上的一个里程碑。
7参考文献
[1] 谭浩强.《C++程序设计设计实践指导》(第1版)[M].清华大学出版社.2005.7
[2] 谭浩强.《C++程序设计题解与上机指导》.清华大学出版社.2005.
[3] 苏小红. 《C语言程序设计》.高等教育出版社.2011.4
[4] 丰继林. 《C语言实训教程》。清华大学出版社.2013.1.1