c语言实训报告

时间:2024.4.29

《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"); 

    } 

}

运行结果:

说明: G:\实训\wode1\3AM`T{I`CFC_WA%GFF0O)O1.jpg

                          

 

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");

}

运行结果:

说明: C:\Users\王阳\Desktop\新建文件夹\汪洋\wangyang\0E%B5@OD)`X~UVQWQNGVC}W.jpg

                  

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);

   }

}

 

运行结果:

说明: G:\实训\wode1\M2FHL`AX_9J[YN$K{[3~DRB.jpg

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);   

}

运行结果:

说明: C:\Users\王阳\Desktop\新建文件夹\汪洋\wangyang\BSFXG02(5}SRJ{@$871$6`R.jpg

                                                               

 

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);

}

}

运行结果:

说明: C:\Users\王阳\Desktop\新建文件夹\汪洋\wangyang\]9(KLT)Z(@9WGXHMU76I8$I.jpg

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);

}

}

 


运行结果:

说明: G:\实训\wode1\4@0{`W_V%(LZ(A%~@G{2Z%3.jpg

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);

}

}

运行结果:

说明: C:\Users\王阳\Desktop\新建文件夹\汪洋\wangyang\~2`)9IF`2JVX)%{N$QKIQ70.jpg

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;

}

 

运行结果:

说明: G:\实训\wode1\CYNS%YPPF@34V2A3MAXUUIW.jpg

转眼之间,一周的实训时间很快过去了。一周时间不算长也不算短,你可以虚度也可以踏踏实实地走过来。而我,选择了后者!

通过一周的实训上机,我学到了很多平时在书本上学不到的知识。这不仅是知识性的,更多的是在与同学合作完成实训的过程中,我们一起研究,一起调试,一起改正直至最后成功完成每一个程序。当我们一起按下“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

更多相关推荐:
C语言实验报告范文

计算机科学与技术系C语言实验报告实验名称:指针及其应用日期:得分:指导老师:专业:班次:姓名:学号:实验目的(1)掌握变量的指针及其基本用法。(2)掌握一维数组的指针及其基本用法。(3)掌握指针变量作为函数的参…

C语言实训报告

C语言程序设计与数据结构实训报告课题名称通讯录管理系统专业软件技术开发方向班级软件G083学号姓名徐阳指导教师黄爽20xx年12月25日目录1课程设计目的12课程设计题目13课程设计报告内容14结论105结束语...

C语言实验报告标准格式

暨南大学本科实验报告专用纸课程名称高级语言程序设计成绩评定实验项目名称结构体和共用体指导教师张晓刚实验项目编号8060151108实验项目类型综合性实验地点C301学生姓名苟长弘学号20xx051282学院信息...

C语言实验报告书写格式及模板

大学学院实验报告专业名称实验室实验课程C实验名称姓名学号同组人员实验日期语言程序设计程序设计12345678

c语言实验报告模板完成版

高级语言程序设计学生实验报告专业计算机科学与技术学号姓名1实验一C程序的运行环境和使用方法1实验目的1了解所用的计算机系统的基本操作方法学会独立使用该系统2了解在该系统上如何编辑编译连接和运行一个C程序3通过运...

C语言实验报告范本

实验报告课程名称C语言程序设计实验项目顺序结构程序设计实验仪器计算机系别信息与通信工程学院专业通信班级学号通信120420xx010934学生姓名王浩鑫实验日期20xx年4月13日成绩指导教师一实验目的1234...

c语言实验报告范本

说明下面的模板中黑体字标明的部分是我加的注释大家要按注释来写报告实验项目名称符号函数的实现此条要求写清楚一实验目的熟练掌握ififelseifelseif语句格式及使用方法掌握if语句中的嵌套关系和匹配原则利用...

C语言实习报告

C语言课程实习报告所在院系经济管理学院班级学号083081学序号20xx1003628姓名胡雅雯程序已存档指导老师赵曼评分二零一零年一月十五日题目一担挑游戏简单计算机模拟棋盘对奕其中棋盘左上角坐标为11右下角坐...

C语言实验报告

安康学院电子与信息工程系实验报告1实验目的1掌握一维数组和二维数组的定义赋值和输入输出方法2掌握字符数组和字符串函数的使用3掌握与数组有关的算法特别是算法排序2实验内容及方案10Configuration1Wi...

c语言 实验报告 范例

程序设计基础实验报告选择结构程序设计实验报告实验题目选择结构程序设计实验目的1了解C语言表示逻辑量的方法以0代表假以非0代表真23456学会正确使用逻辑运算算符和逻辑表达式熟练掌握if语句的使用包括if语句的嵌...

C语言实验报告模板

中国地质大学江城学院C语言课程设计报告姓名班级学号2510110424指导教师周斌20xx年6月19日目录一实验题一2二实验题二2三实验题三3四实验题四5五实验题五6六实验题六81一实验题一1求一元二次方程ax...

C语言课程设计实习报告范本

C语言课程设计实习报告学生姓名萱冰伊寒学号22日期20xx年3月3日目录一程序分析与设计1二流程图1三源程序清单4四调试过程10五程序有待改进的地方10六本次实习的收获和建议11附录11C语言课程设计实习报告一...

c语言实训报告(40篇)