C语言程序设计课程设计报告 c语言程序课程设计的总结

时间:2023-08-21 04:59:58 文档下载 投诉 投稿

      《C语言程序设计》

      课程设计报告

      2011— 2012学年  1 学期)

            计算机科学与技术   

                               

      姓名学号                       

      指导教师                     

                               

      计算机科学与技术系

       2011 年12月31日

      

      一、课程设计的目的与要求………………………………………………3

      二、方案实现与调试 ……………………………………………………3

      2.1 骰子游戏…………………………………………………………3

      2.2 汽车加油……………………………………………………………6

      2.3 大优惠………………………………………………………………8

      

      2.4 金币…………………………………………………………………9

      2.5小型通讯录设计…………………………………………………12

      三、课程设计分析与总结…………………………………………………14

      附录 程序清单…………………………………………………………14

      

      一、课程设计的目的与要求(含设计指标)

      (1)实验目的

      C语言是一种编程灵活,特色鲜明的程序设计语言。C语言除了学习必须的基本知识,如概念,方法和语法规则之外,更重要的是进行实训,以提高学习者的动手和编程能力,这是学习语言的最终目的。结合多年来的教学经验,根据学生的学习情况,为配合教学过程,使“项目教学法”能在本质上促使学生有更大进步,特编写了该《C语言程序设计任务书》,以在实训过程中给学生提供帮助。达到如下目的:

      1.在课程结束之前,让学生进一步了解C程序设计语言的编程功能;

      2.让学生扎实掌握C程序设计语言的相关知识;

      3.通过一些有实际意义的程序设计,使学生体会到学以致用,并能将程序设计的知识与专业知

      识有效地结合,更全面系统地了解行业知识。

      (2)设计要求

      根据实验内容的要求自由选定题目。编写程序要求遵循如下基本要求:

      模块化程序设计

      锯齿型书写格式

      必须上机调试通过

      二、方案实现与调试

      2.1掷骰子游戏

      2.1.1 题目内容的描述

      两人玩骰子,游戏规则如下:

      1)    两人轮流掷骰子,每次掷两个,每人最多掷10次。

      2)    将每人每次的分值累加计分

      3)    当两个骰子点数都为6时,计8分;当两个点数相等且不为两个6时,计7分;当两个点数不一样时,计其中点数较小的骰子的点数。

      4)    结束条件:当双方都掷10次或经过5次后一方累计分数为另一方的两倍。最后显示双方分数并判定优胜者。

      2.1.2输入数据类型、格式和内容限制和输出数据的说明

      输入数据类型:整型数

      格式:srand(time(0));输入数= rand()%6+1;

      内容限制:产生最多十次随机数

      输出数据说明:掷骰子的获胜者

      2.1.3主要模块的算法描述

      2.1.4调试过程及实验结果

      

      出现的问题:每次循环产生的随机数相同。解决方法:把随机函数移到for循环前。

      执行结果截图:

      2.2汽车加油

      

      2.2.1题目内容的描述

      一辆汽车加满油后可行驶n公里。旅途中有若干个加油站。设计一个有效算法,指出应在哪些加油站停靠加油,使沿途加油次数最少。输入:第一行有2 个正整数N和K(1 <= N <= 100,1 <= K< = 100),表示汽车加满油后可行驶N公里,且旅途中有K个加油站。接下来的1 行中,有K+1 个整数,表示第K个加油站与第K-1 个加油站之间的距离。第0 个加油站表示出发地,汽车已加满油。第K+1 个整数表示第K个加油站与目的地的距离。输出:将编程计算出的最少加油次数输出。如果无法到达目的地,则输出 No Solution。(注意:No和Solution之间有一个空格)。

      例如:输入:8 8

      3 2 3 6 5 4 2 7 2

      输出:5

      2.2.2输入数据类型、格式和内容限制和输出数据的说明

      输入数据类型:整型数

      格式:sacnf(格式控制字符串,地址列表);

      内容限制:1 <= N <= 1001 <= K< = 100

      输出数据说明:最少加油次数

      2.2.3主要模块的算法描述

      2.2.4调试过程及实验结果

      出现的问题:会重复出现No Solution.解决方法:添加break语句。

      执行结果截图:

      2.3大优惠

      2.3.1题目内容的描述

      中国移动推出最新的手机资费优惠方案,按照这个方案Tom的手机每天消费1元,每消费K元就可以获赠1元,一开始TomM元,问最多可以用多少天?

      

      输入的测试数据为一行,实例包括2个整数M, K2 <= K <= M <= 1000)。输出一个整数,表示M元可以用的天数。

      2.3.2输入数据类型、格式和内容限制和输出数据的说明

      输入数据类型:整型数

      格式:sacnf(“格式控制字符串”,地址列表);

      内容限制:2 <= K <= M <= 1000

      输出数据说明:M元可以用的天数

      2.3.3主要模块的算法描述

      2.3.4调试过程及实验结果

      出现的问题:当输入不符合条件的数时会停止程序无法再次输入。解决方法:在输入时添加do-while循环。

      执行结果截图:

      2.4金币

      2.4.1题目内容的描述

      国王用金币奖励他忠诚的侍从。第一天侍从工作结束后,国王奖励了他一个金币;接着的两天侍从工作中(第二天,第三天)的每一天,国王奖励了他两个金币;接着的三天侍从工作中(第四天,第五天,第六天)的每一天,国王奖励了他

      三个金币;接着的四天侍从工作中(第七天,第八天,第九天,第十天)的每一天,国王奖励了他四个金币。这种奖励的模式将是固定不变的,即在N天侍从工作中的每一天,国王将奖励他N个金币;接着的N+1天的侍从工作中的每一天,国王将奖励他N+1个金币。

      要求在给定的天数时,你的程序能够统计国王总共奖励了侍从多少金币。

      2.4.2输入数据类型、格式和内容限制和输出数据的说明

      输入数据类型:整型数

      格式:sacnf(“格式控制字符串”,地址列表);

      输出数据说明:共奖励了侍从多少金币数

      2.4.3主要模块的算法描述

      2.4.4调试过程及实验结果

      出现的问题:天数不刚好,金币数变多结果出错。解决方法:在程序末尾加个减去多算金币的算法。

      执行结果截图:

      2.5小型通讯录设计

      2.5.1题目内容的描述

      功能:实现简单的通讯录信息管理,基本信息包括编号、姓名、电话、手机、邮编、地址和关系(如朋友、亲友、同事、同学等)

      基本要求:

      1设计简单的菜单,能够进行系统功能选择。

      2实现信息的录入功能。

      3在已有信息的基础上添加新的记录。

      4删除指定编号的记录。

      5修改指定编号的记录

      6实现信息的浏览功能

      7按编号查询功能

      8按手机号排序功能

      2.5.2系统功能说明

      此程序有输入、显示、查找、删除、修改、按序号排序的功能。

      2.5.3输入数据类型、格式和内容限制和输出数据的说明

      输入数据类型:整型数

      格式:sacnf(“格式控制字符串”,地址列表);

      2.5.4系统主要模块的算法描述

      2.5.5调试过程及实验结果

      出现的问题:执行程序时运行速度过快。解决方法:在每个函数末尾加getchaar();

      执行结果截图:

      三、课程设计分析与总结

      附录:源程序清单

      1.掷骰子游戏.c

      #include<stdio.h>

      #include<stdlib.h>

      #include<time.h>

      void main()

      {

          int a,e=0,f=0,g,h,l,m;

          int point1(int x,int y);

          int point2(int i, int j);

          srand(time(0));

          for(a=0;a<10;a++)

          {

              if(a==5)

              {

                  if(e==f*2||f==e*2) break;

              }

              g=rand()%6+1;/*产生1~6的随机数*/

              h=rand()%6+1;

              l=rand()%6+1;

              m=rand()%6+1;

              e=e+point1(g,h);/*计算总分数*/

              f=f+point2(l,m);

          }

          printf("甲的总分:%d\n乙的总分:%d\n",e,f);

          if(e>f)printf("甲获胜\n");

          else if(e==f)printf("甲乙平手\n");

          else printf("乙获胜\n");

      }

      int point1(int x,int y)

      {

          int n=0;

          printf("甲:%d %d\n",x,y);

          /*判断每次得分*/

      if(x==y)

          {

              if(x==6) n=8;

              else n=7;

          }

          else if(x>y) n=y;

          else n=x;

          return n;

      }

      int point2(int i, int j)

      {

          int z=0;

          printf("乙:%d %d\n",i,j);

          if (i==j)

          {

              if(i==6) z=8;

              else z=7;

          }

          else if(i>j) z=j;

          else z=i;

          return z;

      }

      2.汽车加油.c

      #include<stdio.h>

      #include<math.h>

      #define M 1000

      void main()

      {

          int N,K,a[M],i,e;

          int times(int b,int c,int d[M]);

          do{

              printf("请输入加满油后可行驶公里数和加油站数:");

              scanf("%d%d",&N,&K);

              if(K>100||K<1||N>100||N<1)

              printf("输入有误请重新输入\n");

          }while(K>100||K<1||N>100||N<1);

          {

              printf("请输入各加油站间的距离:");

              for(i=0;i<=K;i++)

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

              e=times(N,K,a);

              if(e!=0)

              printf("最少加油次数为:%d\n",e);

          }

         

      }

      int times(int b,int c,int d[M])

      {

          int i,s=0,j=0;

          for(i=0;i<=c;i++)

          {

              if(d[i]>b)

              {

              printf("No Solution\n");

              break;

              }

              else

              {

                  for(i=0;i<=c;i++)

                  {

                      s=s+d[i];

                      if(s>b)

                      {

                          j++;/*计算加油次数*/

                          s=d[i];

                      }

                  }

              }

          }

          return j;

         

      }

      3.大优惠.c

      #include<stdio.h>

      void main()

      {

          int day(int a,int b);

          int K,M,D;

          do{

              printf("请输入K和M:");

              scanf("%d%d",&K,&M);

              if(K>M||K>1000||K<2||M>1000||M<2)

                  printf("输入有误,请重新输入\n");

          }while(K>M||K>1000||K<2||M>1000||M<2);

          {

              D=day(K,M);

              printf("可用天数:%d\n",D);

          }

      }

      int day(int a,int b)

      {

          int i=0;

          for(;b>0;b--)

          {

              i=i+1;

              if(i%a==0) b++;

          }

          return i;

      }

      4.金币.c

      #include<stdio.h>

      void main()

      {

          int a,b;

          int sum(int d);

          printf("请输入工作天数:");

          scanf("%d",&a);

          b=sum(a);

          printf("共奖励金币:%d\n",b);

      }

      int sum(int d)

      {

          int s=0,t;

          for(t=1;d>=0;t++)

          {

              s=s+t*t;

              d=d-t;

          }

          s=s+d*(t-1);

          return s;

      }

      5.小型通讯录.c

      #include<stdio.h>

      #include<stdlib.h>

      #include<string.h>

      #include<ctype.h>

      #define M 50

      typedef struct

      {

          char num[7];  /*序号*/                   

          char name[10]; /*姓名*/ 

          char tele[10]; /*电话*/ 

          char mobile[10]; /*手机号*/ 

          char post[10]; /*邮编*/ 

          char address[15]; /*地址*/ 

          char relation[15]; /*关系*/ 

      }ADD;

      int enter(ADD t[]);/*输入记录*/ 

      void list(ADD t[],int n); /*显示记录*/ 

      void search(ADD t[],int n); /*查找记录*/ 

      int delete(ADD t[],int n); /*删除记录*/ 

      int add(ADD t[],int n); /*添加记录*/ 

      void modify(ADD t[],int n); /*修改记录*/ 

      void sort(ADD t[],int n); /*按手机号排序*/ 

      void print(ADD temp); /*显示单条记录*/ 

      int find(ADD t[],int n,char *s) ; /*查找函数*/ 

      int menu_select();/*主菜单函数*/ 

      main()

      {

          ADD adr[M]; /*定义结构体数组*/ 

          int length; /*保存记录长度*/ 

          system("cls"); /*清屏*/ 

          for(;;)/*无限循环*/ 

      {

              switch(menu_select())

              {

      

                case 0:length=enter(adr);break; /*输入记录*/ 

                case 1:list(adr,length);break; /*显示全部记录*/ 

                case 2:search(adr,length);break; /*查找记录*/ 

                case 3:length=delete(adr,length);break; /*删除记录*/ 

                case 4:length=add(adr,length); break; /*添加记录*/ 

                case 5:modify(adr,length);break; /*修改记录*/ 

      

                case 6:sort(adr,length);break; /*按手机号排序*/ 

                case 7:exit(0); /*如返回值为7则程序结束*/ 

              }

          }

      }

      menu_select()

      {

          char s[80];

          int c;

      

          printf("按任意键进入菜单......\n");

          getchar();

          system("cls");

          printf("********************菜单*********************\n");

          printf("            0.输入记录\n");

          printf("            1.显示全部记录\n");

          printf("            2.查找记录\n");

          printf("            3.删除记录\n");

          printf("            4.插入记录\n");

          printf("            5.修改记录\n");

          printf("            6.按手机号排序\n");

          printf("            7.退出\n");

          printf("**********************************************\n");

          do

          {

              printf("\n 输入你的选择(0~7):");

              scanf("%s",s);

              c=atoi(s);

          }while(c<0||c>7);

          return c;

      }

      int enter(ADD t[])

      {

          int i,n;

          system("cls");

          printf("\n请输入序号\n");

          scanf("%d",&n);

          printf("请输入记录\n");

          printf(" 序号    姓名    电话    手机号    邮编    地址    关系\n");

          printf("-----------------------------------------------------

      -----------------\n");

          for(i=0;i<n;i++)

          {

              scanf("%s%s%s%s%s%s%s",t[i].num,t[i]. name,t[i].tele,t[i].mobile,t[i].post,t[i].address,t[i].relation);

              printf("------------------------------------------------------------------\n");

          }

          getchar();

          return n;

      }

      

      void list(ADD t[],int n)

      {

          int i;

          system("cls");

          printf("\n\n************************************插入**********************************\n");

          printf(" 序号    姓名    电话    手机号    邮编    地址    关系\n");

          printf("---------------------------------------------------------------------------\n");

          for(i=0;i<n;i++)

      

          printf("%-7s%-10s%-10s%-10s%-10s%-15s%-15s\n",t[i].num,t[i].name,t[i].tele,t[i].mobile,t[i].post,t[i].address,t[i].relation);

          if((i+1)%10==0)

          {

              printf("按任意键继续...\n");

              getchar();

          }

          printf("***********************************结束***********************************\n");

          getchar();

      }

      void search(ADD t[],int n)

      {

          char s[20];

          int i;

          system("cls");

          printf("请输入查找序号\n");

          scanf("%s",s);

          i=find(t,n,s);

          if(i>n-1)

          {

              getchar();

              printf("没找到\n");

          }

          else

          {

              getchar();

              print(t[i]);

          }

      }

      void print(ADD temp)

      {

          system("cls");

          printf("\n\n**********************************************************************\n");

          printf("序号    姓名    电话    手机号    邮编    地址    关系\n");

          printf("-----------------------------------------------------------------------\n");

          printf("%-7s%-10s%-10s%-10s%-10s%-15s%-15s\n",temp.num,temp.name,temp.tele,temp.mobile,temp.post,temp.address,temp.relation);

          printf("***********************************结束********************************\n");

      }

      int find(ADD t[],int n,char *s)

      {

          int i;

          for(i=0;i<n;i++)

          {

              if(strcmp(s,t[i].num)==0)

              return i;

          }

          getchar();

          return i;

      }

      int delete(ADD t[],int n)

      {

          char s[20];

          int ch=0;

          int i,j;

          printf("请输入删除序号\n");

          scanf("%s",s);

          i=find(t,n,s);

          if(i>n-1)

              printf("没找到无法删除\n");

          else

          {

              print(t[i]);

              printf("你确定要删除这个记录吗(1/0)\n");

              scanf("%d",&ch);

              if(ch==1)

              {

                  for(j=i+1;j<n;j++)

                  {

                      strcpy(t[j-1].num,t[j].num);

                      strcpy(t[j-1].name,t[j].name);

                      strcpy(t[j-1].tele,t[j].tele);

                      strcpy(t[j-1].mobile,t[j].mobile);

                      strcpy(t[j-1].post,t[j].post);

                      strcpy(t[j-1].address,t[j].address);

                      strcpy(t[j-1].relation,t[j].relation);

                  }

                  n--;

              }

          }

          getchar();

          return n;

      }

      int add(ADD t[],int n)

      {

          ADD temp;

          int i,j;

          char s[20];

          printf("请输入记录\n");

          printf("**********************************************************************\n");

          printf("序号    姓名    电话    手机号    邮编    地址    关系\n");

      

          printf("------------------------------------------------------------------------\n");

          scanf("%s%s%s%s%s%s%s",temp.num,temp.name,temp.tele,temp.mobile,temp.post,temp.address,temp.relation);

          printf("-----------------------------------------------------------------------\n");

          printf("请输入插入位置的序号\n");

          scanf("%s",s);

          i=find(t,n,s);

          for(j=n-1;j>=i;j--)

          {

              strcpy(t[j+1].num,t[j].num);

              strcpy(t[j+1].name,t[j].name);

              strcpy(t[j+1].tele,t[j].tele);

              strcpy(t[j+1].mobile,t[j].mobile);

              strcpy(t[j+1].post,t[j].post);

              strcpy(t[j+1].address,t[j].address);

              strcpy(t[j+1].relation,t[j].relation);

          }

          strcpy(t[i].num,temp.num);

          strcpy(t[i].name,temp.name);

          strcpy(t[i].tele,temp.tele);

          strcpy(t[i].mobile,temp.mobile);

          strcpy(t[i].post,temp.post);

          strcpy(t[i].address,temp.address);

          strcpy(t[i].relation,temp.relation);

          n++;

          getchar();

          return n;

      }

      void modify(ADD t[],int n)

      {

          char s[20];

          int i;

          printf ("请输入想要修改的序号:");

          scanf("%s",s);

          i=find(t,n,s);

          if(i>n-1)

              printf("没找到");

          else

          {

              printf ("请输入新的资料\n");

              printf(" num    name    tele    mobile    post    address    relation\n\n");

              scanf("%s%s%s%s%s%s%s",t[i].num,t[i].

      name,t[i].tele,t[i].mobile,t[i].post,t[i].address,t[i].relation);

          }

      }

      void sort(ADD t[],int n)

      {

          int i,j,flag;

          ADD temp;

          for(i=0;i<n;i++)

          {

              flag=0;

              for(j=0;j<n-1;j++)

              if((strcmp(t[j].mobile,t[j+1].mobile))>0)

              {

                  flag=1;

                  strcpy(temp.num,t[j].num);

                  strcpy(temp.name,t[j].name);

                  strcpy(temp.tele,t[j].tele);

                  strcpy(temp.mobile,t[j].mobile);

                  strcpy(temp.post,t[j].post);

                  strcpy(temp.address,t[j].address);

                  strcpy(temp.relation,t[j].relation);

                  strcpy(t[j].num,t[j+1].num);

                  strcpy(t[j].name,t[j+1].name);

                  strcpy(t[j].tele,t[j+1].tele);

                  strcpy(t[j].mobile,t[j+1].mobile);

                  strcpy(t[j].post,t[j+1].post);

                  strcpy(t[j].address,t[j+1].address);

                  strcpy(t[j].relation,t[j+1].relation);

                  strcpy(t[j+1].num,temp.num);

                  strcpy(t[j+1].name,temp.name);

                  strcpy(t[j+1].tele,temp.tele);

                  strcpy(t[j+1].mobile,temp.mobile);

                  strcpy(t[j+1].post,temp.post);

                  strcpy(t[j+1].address,temp.address);

                  strcpy(t[j+1].relation,temp.relation);

              }

              if(flag==0)break;

          }

          getchar();

          printf("排序成功\n");

      }

【C语言程序设计课程设计报告 c语言程序课程设计的总结】相关文章:

个人自查报告范文 纪检监察教育整顿个人自查报告范文08-21

自查报告范文精选 教师个人自查报告范文精选08-21

2023年个人自查报告范文 2023年个人自查自纠报告08-21

个人自查报告范文汇总 个人自查报告范文汇总表08-21

个人自查报告范文 医务个人自查报告范文08-21

学生成绩管理系统c语言课程设计报告 学生成绩管理系统c语言课程设计报告一只学废狗08-21

C语言程序设计课程设计报告 c语言程序课程设计的总结08-21

C语言课程设计报告——贪吃蛇源程序 c语言课程设计贪吃蛇报告书08-21

c语言课程设计报告书 c语言课程设计报告书模板08-21

C语言课程设计报告 C语言课程设计报告书08-21

c语言课程设计设计报告 c语言课程设计总结报告08-21

c语言课程设计报告 C语言课程设计报告格式08-21

C语言课程设计报告 C语言课程设计报告模板08-21