c语言组数游戏程序设计实习报告

时间:2024.4.7


                                   

C程序设计实习报告

题目:组数游戏

学    院:      机电学院     

              专    业: 机械设计制造及自动化

              姓    名:           

              班级学号:           

              指导教师:      

目录

第一章:题目要求

     1.1:要求

     1.2:提示

第二章:需求分析
第三章:概要分析

3.1:系统结构图

3.2:软件运行开发平台

3.3:设计思想

第四章:详细设计

4.1:主函数

4.2:结构体

4.3:各功能模块函数

4.3.1:输入存储模块

4.3.2:位数变化模块

4.3.3:排序模块

4.3.4:返回原值模块

4.3.5:输出模块

第五章:测试、结果分析

5.1:程序运行

5.2:文本文件

第六章:总结

参考文献

附录

第一章 题目要求

1.1 要求:

设有n个正整数(n<=20),将它们连成一排,组成一个最大的多位数。并将输入数据添0后的数字、数位、添0个数存入到文件中。程序输入:n,程序输出:n个数连成的多位数。

1.2 提示:

设计思路:

可以将问题这样变化一下:

比如输出的是123、2、33、1006、12这样几个数字。

先找出最大数字的位数为4位,再将所有的数字变成4位数:1230、20##、3300、1006、1200

然后进行排序:3300、20##、1230、1200、1006

这样将后面加上的0去掉然后连接起来的数就是最大的多位数。即:

332123121006

第二章 需求分析

根据题目要求,由于需要输入数据添0后的数字、数位、添0个数存入到文件中,所以应提供文件的输入与输出等操作;程序中需要得到最大的多位数,要得到最大数需要进行计算数位、添加0、排序、去0等操作。

第三章 概要分析

3.1   系统结构图

根据题目要求,该系统的结构图如图(3.1)所示:

c语言组数游戏程序设计实习报告

图(3.1)

3.2   程序开发运行平台

程序运行与开发平台: Microsoft Visual c++ 6.0

3.3   设计思想

   根据题目要求,可以将系统分为输入存储、数位变化、排序、去0、输出五个模块,输入模块主要是完成数据的输入,并将数据存储到文件中,数位变化模块主要是将所有的数据全变成位数相同的数,便于比较,排序是重要的步骤,它完成了数字从大到小的排列,为输出做准备,去0操作是将原数值计算出来,输出模块只要将去0操作后的数据顺序输出就可得到题目要求的数值。各个模块之间比较独立,都由主函数一一调用,结构清晰。模块之间主要通过数位变化及添加0的个数相互传递信息,结构严谨。

第四章 详细设计

4.1  主函数

主函数设计要求简洁,能实现各模块功能的调用,它分为数据输入储存、位数计算、位数变化、排序、去0操作、输出操作。它的程序如下,程序流程图如图(4.1.1)所示:

main()                                  

{

   input_num();

   add_zero();

   sort_num();

   delete_zero();

   printf_num();

                                          

4.2  结构体

输入的数据个数为n,因为输入数据中,每个数据要用到的数字信息有:数字大小、数字位数、将要添加0的个数。这三个信息构成一个整体,故选择使用结构体比较合适。而输入数据中n<=20,故可以建立20个结构体ZHANG。结构体程序如下:

typedef struct            

{

    int num;

    int digit;

    int zero;

}ZHANG;           

ZHANG a[20];

4.3   各功能模块函数设计

4.3.1  输入及存储模块

在结构体中,对程序的数据结构进行了分析与选择,选用结构体,并定义了结构体成员。int num;int digit;int zero;由于n为变量,为了便于其它函数的调用,因此n要在函数外定义。即 int n。输入函数中需要输入数字个数n,然后循环输入每个数字,所以根据以上分析可以得到数据输入程序为:

void input_num()     

{

 int i;

printf("input n:");

 scanf("%d",&n);                                   

 for(i=0;i

{                                                

printf("input the %d number:",(i+1));

 scanf("%d",&(a[i].num));

}

}                                        

算法流程图如图(4.3.1)所示

c语言组数游戏程序设计实习报告     

图(4.3.1)

为了方便后面计算,输入函数中还要包含计算数据的位数功能,计算数字的位数可以用累除10的方法进行计算。即:

While (b[i].num!=0)

{

     r+=1;

     b[i].num/=10;

     }

return  r;

为了便于添加0的操作,需要再输入是就先找出最大的数,即数位最长的数。防止函数过于复杂,计算数位的功能可以包含在下述函数中,即:

        int getdigit(int a)      

 {

        int r=0;

        for(;a!=0;)   

           {

           r+=1;

           a/=10;                      

                } 

    return r;

}                                    

   算法如图(4.3.2)所示 :                 

c语言组数游戏程序设计实习报告

图(4.3.2)

在结构体成员digit中记录输入数据的位数可以通过以下语句实现。即: 

a[i].digit= getdigit(a[i].num);

if(a[i].num>max.num)

      max=a[i];

输入模块中还要求将输入的数字、添0个数、数位保存到文本zhangqy.txt中。所以可以在输入数据后调用一个load函数将这些数据保存到文件中。load函数程序如下:

void load()            

{

      FILE *fp;

      int i;

      if ((fp=fopen("zhangqy.txt","r"))==NULL)

      {

           printf("\nCannot open this file\n");

           return;

      }

      for (i=0;i

      {

           fscanf(fp,"%d%d%d",&a[i].num,a[i].digit,

            a[i].zero);                                   

      }

      fclose(fp);

}

其算法流程图如图(4.3.3)所示

c语言组数游戏程序设计实习报告

  图(4.3.3)

综上所述,输入及保存模块的完整程序如下:

void input_num()     

{

    int i;

    printf("input n:");

    scanf("%d",&n);

    for(i=0;i

      {

        printf("input the %d number:",(i+1));

        scanf("%d",&(a[i].num));

        a[i].digit= getdigit(a[i].num);

        if(a[i].num>max.num)

        max=a[i];

        save();

      } 

}                

输入及存储模块的算法流程图如图(4.3.4)所示:

c语言组数游戏程序设计实习报告

c语言组数游戏程序设计实习报告

图(4.3.4) 

4.3.2   添0操作(位数变化模块)

要实现位数的变化,只需要在数据后添加0即可,添加0即数据乘以10,欲达到最大位数,就要每个数据乘以若干个10,模块一中已经计算出了每个数字的位数,且最大位数也知道。所以要实现位数变化即简单了很多。即:

while(a[i].digit

      { 

          a[i].num*=10;

          a[i].digit+=1;

}

由于在程序后面还涉及到去0操作,所以必须要在结构体中记录下添加了多少个0。即zero的值。即:a[i].zero+=1;

题目要求将添加0后的数字、数位、添加0的个数存入到文件中,所以可 以在添加0后调用一个save函数完成此功能。save函数的程序如下,它的算法流程图如图(4.3.5)所示:

void save()          

{

FILE *fp;

    int i;

    if((fp=fopen("zhangqy.txt","w"))==NULL)

    {

         printf("\n Can not open file\n");

        return;

    }

        for(i=0;i

fprintf(fp,"数字:%d 数位:%d 添0个数:%d\n",a[i].num,a[i].digit,a[i].zero);

        fclose(fp);

}

综上所述,模块二的程序如下:

void add_zero()      

{                                                    

     int i;                          

     load();

    for(i=0;i

    {

      while(a[i].digit

      {                                    

          a[i].num*=10;

          a[i].digit+=1;

          a[i].zero+=1;

      } 

    }

           for(i=0;i

           printf("数字:%d数位:%d添0个数:%d\n",a[i].num,a[i].digit,a[i].zero);

           save();

     

}  

c语言组数游戏程序设计实习报告

  图(4.3.5)

模块二的算法流程图如图(4.3.6)所示:

c语言组数游戏程序设计实习报告

图(4.3.6)

4.3.3     排序模块   

     将扩大的数字进行排序时,选用选择排序法,即在n个数中找到最大的一个数使它与a[0]互换位置,然后从剩下的n-1个数中,再找到一个最大数使它与a[1]互换位置,依次类推,直到剩下最后一个数为止。在比较时通常需要设一个数据,将值进行传递,达到交换的目的。故模块三的程序如下,算法流程图(4.3.7)所示:

c语言组数游戏程序设计实习报告

                             c语言组数游戏程序设计实习报告

图(4.3.7)

     

      printf("顺序为:");               

      for(i=0;i

      printf("%d",a[i].num);

      printf("\n");

}          

4.3.4    返回原值模块(去0操作)

此操作的目的是将所有乘以10若干次的数值返回原值,这就需要用到结构体中记录的乘以10的次数,也就是zero的值,可以将现在的数字累除以10,相应的zero的值也减去1,同时将zero的值与0进行比较,如果大于0则继续除,如果小于或等于0则程序运行停止。程序如下:

void delete_zero()      

    int i;

    for (i=0;i

    while(a[i].zero>0)

    {

         a[i].num/=10;

        a[i].digit-=1;

        a[i].zero-=1;

    }

       for(i=0;i

       printf("数字:%d数位:%d添0个数:%d\n",a[i].num,a[i].digit,a[i].zero);

}          

去0模块的算法流程图如图(4.3.8)所示:

c语言组数游戏程序设计实习报告  

                               c语言组数游戏程序设计实习报告

                    图(4.3.8)

4.3.5   输出模块(输出最大数字)

将模块四中返回的原值连续输出就是最大数值,程序如下:

void printf_num()      

{

    int i;

    printf("最大数:");

    for(i=0;i

    printf("%d",a[i].num);

    printf("\n");

}         

第五章 运行结果分析

5.1   程序运行

程序运行结果如图(5.1.1)所示:

  

                     图(5.1.1)

5.2    文本文件

文本文件的存储如图(5.2.1)所示:

图(5.2.1)

第六章 总结

学习心得体会:

在短短一周的实习期间使我获取了不少新知识也巩固了许多老知识。取得了不少成果。通过认真编写程序和实习报告,描述实习操作和心得体会,总结在这次实习中的业务收获,作出自我评价。我们基本掌握并学会C语言程序设计的各个知识点。掌握结构体和指针的联合使用,学会文件的读入与输出等操作方法,认真编写实习日志和实习体会。并通过各种途径查找所需资料,拓宽视野,培养自学能力。

一周的实习,我体会到了老师和同学们的热心帮助,无论面对学习中多大的困难,同学们都会帮助你,老师也会帮助你,大家就像兄弟姐妹一样。我们不会的地方就去问学习比较好一些的同学,或者去问老师,老师和同学们总是那么的热心,只要你还不明白,不论你问多少次,老师和同学们都会耐心地给你细心的讲解,直到讲会为止。

在计算机机房里同学们积极的对C语言进行巩固与实习,老师热心的讲解同学们提出的问题和实习过程中应该注意的事项。在我们实习结束后每一个同学都把自己组里的成果展示给老师和大家,告诉大家编程的原理、方法等,使同学们既有动手能力,又能提高语言表达能力。这次实习是有益的,它不仅让我们学习到了C语言的知识,更让我们学习到了同学们之间的那种团结精神,为我以后踏入社会工作准备了很多良好的知识与经验。

通过这几节课,我们集思广益,多练习,多思考。进行检查错误的时候认真仔细,不放过每一个小的环节。这也告诉我们不管做什么事情都要认认真真,这样才能把事情做到最好。

参考文献

[1]:作者:谭浩强   书名:C语言程序设计  清华大学出版社出版  20##年7月第3版;

[2]:作者:张冬梅 刘远兴 陈晶 王媛妮  书名:C语言课程设计与学习指导  中国铁道出版社出版 20##年7月第1版

[3]:书名:全国计算机等级考试——公共基础知识    高等教育出版社出版   20##年5月第1版

附录(系统源程序)

程序如下:

 #include "stdio.h"

typedef struct             /*定义结构体类型*/

{

    int num;

    int digit;

    int zero;

}ZHANG;           

ZHANG a[20];

void load();

void save();

int n;

ZHANG max;

int getdigit(int a)        /*计算各个数字的位数,并返回r值*/

{

    int r=0;

    for(;a!=0;)   

  {

    r+=1;

    a/=10;

  } 

    return r;

}                    

void load()              /*加载,将函数中计算的数据加载到磁盘*/

{

  FILE *fp;

  int i;

  if ((fp=fopen("zhangqy.txt","r"))==NULL)

  {

       printf("\nCannot open this file\n");

       return;

  }

  for (i=0;i

  {

       fscanf(fp,"%d%d%d",&a[i].num,a[i].digit,

        a[i].zero);

  }

  fclose(fp);

}

void save()            /*将输入的数据保存到文件中*/

{

  FILE *fp;

    int i;

  if((fp=fopen("zhangqy.txt","w"))==NULL)

  {

       printf("\n Can not open file\n");

      return;

  }

      for(i=0;i

        fprintf(fp,"数字:%d 数位:%d 添0个数:%d \n",a[i].num,a[i].digit,

       a[i].zero);

      fclose(fp);

}

   

void input_num()      /*数据输入及找出输入数据中的最大值并将数据保存到文件*/

{

    int i;

    printf("input n:");

    scanf("%d",&n);

    for(i=0;i

  {

        printf("input the %d number:",(i+1));

        scanf("%d",&(a[i].num));

        a[i].digit= getdigit(a[i].num);

        if(a[i].num>max.num)

        max=a[i];

        save();

  } 

}                   

void add_zero()       /*添加0操作,并用zero在结构体中记录下各个数字添加0的次数并将改变后的数据

                         保存到文件中*/

{

     int i;

   load();

     for(i=0;i

  {

      while(a[i].digit

    { 

          a[i].num*=10;

          a[i].digit+=1;

          a[i].zero+=1;

    } 

  }

         for(i=0;i

           printf("数字:%d数位:%d添0个数:%d\n",a[i].num,a[i].digit,a[i].zero);

           save();

   

}           

void sort_num()                /*数字排序,用选择排序法对添0后的数字排序并输出*/

{

    int i,j,k;

    ZHANG t;

    for(i=0;i

  {

       k=i;

        for(j=i+1;j

        if(a[j].num>a[k].num)

        k=j;

        t=a[i];

        a[i]=a[k];

        a[k]=t;

  }

      printf("顺序为:");

      for(i=0;i

      printf("%d",a[i].num);

      printf("\n");

}          

void delete_zero()        /*去0操作,将zero的值与0比较,变回原输入数据*/

{

    int i;

    for (i=0;i

    while(a[i].zero>0)

  {

       a[i].num/=10;

        a[i].digit-=1;

        a[i].zero-=1;

  }

     for(i=0;i

       printf("数字:%d数位:%d添0个数:%d\n",a[i].num,a[i].digit,a[i].zero);

}          

void printf_num()        /*输出数据*/

{

    int i;

    printf("最大数:");

    for(i=0;i

    printf("%d",a[i].num);

    printf("\n");

}             

main()              /*主函数,由主函数调用各个函数*/

{

   input_num();

   add_zero();

   sort_num();

   delete_zero();

   printf_num();

}

更多相关推荐:
网游公司实习报告

目录前言21公司简介22实习收获321在学习中成长322在工作中蜕变7第1页前言四年的大学时光匆匆而过我也即将结束自己的大学生活跨入这个竞争激烈的社会为了使自己能尽快的适应新的工作和生活做好从学院人向职业人的转...

游戏实习专题总结

——谈谈我的第一次游戏黄露37号10学前502班两个星期的游戏实习转眼间就结束了,脑海里却还浮现着刚入幼儿园的情景。总的来说,在幼儿园的这两周实习中,让我得到了一次较全面、系统的锻炼,也学到了许多书本上所学不到…

网络公司实习报告

实习报告学院名称:专业班级:学号:学生姓名:实习地点:实习日期:公司年月日******************************xxxxxxxxxx一、实习目的:初踏社会,心情比较激动、还有些许紧张。激动…

关于~~公司从事游戏美术岗位的实习报告

关于在××公司从事游戏美术岗位的实习报告一、实习单位及岗位简介(一)实习单位的简介(公司详细介绍)公司致力于美术外包,并为电影长片、电视动画剧和计算机游戏等平台提供专业的动画和3D服务。从Concept设计到建…

俄罗斯方块游戏开发实习报告

本科中期实习报告姓名学号专业软件工程院系指导教师完成日期20xx年12月25日西安财经学院教务处制俄罗斯方块小游戏开发实习报告俄罗斯方块是个老幼皆宜的小游戏它的实现由四块正方形的色块组成然后存储在一个数组的元素...

网络游戏开发实训报告

湖北民族学院信息工程学院实训报告课程网络游戏开发实训题目基于VC++的网络五子棋游戏系别计算机系专业数字媒体姓名**学号**指导教师**20**年6月25日一、实训目的1.掌握网络游戏程序设计的相关知识2.理解…

毕业实习报告-

河南理工大学河南理工大学毕业实习报告实习单位实习时间20xx年3月9号至20xx年3月27号学院系电气工程与自动化学院专业电子信息科学与技术学生姓名学号20xx年3月25日1河南理工大学目录1实习目的32实习单...

经济管理课程实习报告

溜溜溜冰场班级07热工02班姓名胡帆学号20xx10610202指导老师冯炳右时间20xx年12月25日景德镇陶瓷学院目录一项目简介和背景3二项目设想3三市场营销分析3四管理体系5五财务分析52溜冰场可行性报告...

20xx实习报告

中国石油大学华东计通学院软件编程实践实习报告题目我的20xx20xx年7月一题目介绍包括题目背景简介系统达到目标等20xx是一款比较流行的数字游戏最早于20xx年3月20日发行原版20xx首先在GitHub上发...

大学生社会实践报告_连连看游戏开发

大学生社会实践报告论文报告题目连连看游戏DIY的姓名学院班级学号批阅教师成绩批阅时间南京农业大学20xx年5月23日南京农业大学学生社会实践考核表学院理学院班级填表时间20xx523为了提高我们理论联系实际的能...

实习报告-五子棋

信息工程学院20xx年毕业实习报告班级计科XX姓名XXX实习地点XXXXXX实习时间12周19周一实习目的1夯实专业基础提高动手能力2把专业知识应用于实践找出专业薄弱环节加强巩固3了解就业单位的计算机技术的应用...

实习报告修订版

郑州轻工业学院实习报告学生姓名学号专业班级实习单位无线互联3G学院杭州校区实习时间20xx71220xx721校外指导教师雷芳校内指导教师李勇成绩目录1实习背景12实习内容121实习过程122实习内容123主要...

游戏实习报告(32篇)