c语言课程设计报告

时间:2024.3.19

青岛农业大学

课程设计报告

                                   

题    目:       使用菜单选择趣味程序            

姓    名:              杨丽娜                

学    院:       理学与信息科学学院                          

专    业:          通信工程                

班    级:        2班                            

学    号:            20123239                 

指导教师:                                     

年月日


                      目   录

一   设计目的…………………………………………………………….1

二   课程设计的内容........................................2

三   课程设计的要求与数据..................................3

四   课程设计应完成的工作..................................4

五   总体设计(包含几大功能模块)...........................5

六   详细设计(各功能模块的具体实现算法——流程图)………….6

七   调试分析(包含各模块的测试用例,及测试结果)…………….7

八   总结………………………………………………………………...8

十   参考资料…………………………………………………………….9


一  设计目的

进一步加深、巩固所学专业课程(《C语言程序设计》)的基本理论知识,理论联系实际,进一步培养自己综合分析问题和解决问题的能力。掌握运用C语言独立地编写、调试应用程序和进行其它相关设计的技能。

结合实际深入理解高级语言程序设计的基本概念、原理及方法。运用所学的基础知识开发一个小型的程序,能根据问题的需要构造所需的数据结构,设计适合的算法,解决问题。掌握设计任务的具体要求,进行设计、调试软件的具体方法、步骤和技巧。对一个实际课题的软件设计有基本了解,拓展知识面,激发在此领域中继续学习和研究的兴趣,为学习后续课程做准备。

二  课程设计的内容

使用菜单选择趣味程序

设计目的:本程序旨在训练学生的编程能力,使用C语言最基本的知识,训练结构化程序设计的基本技术。

功能:设计分两步,首先设计一个含有多个菜单项的菜单演示程序,然后再为这些菜单项配上相应的功能。

要求:使用数字1—6来选择菜单项,其他输入则不起作用。其实是5道编程题:

1)FindNum  使用穷举法寻找满足下式中的i 的值(30+i)*6237=(10*i+3)*3564

2)FindRoot  求方程的根的程序

3)Detective  一辆汽车撞人后逃跑。4个目击者提供如下线索:

甲:牌照三、四位相同;    乙:牌号为31xxxx;

丙:牌照五、六位相同;    丁:三到六位是一个整数的平方

4)Bear

本题是一个笑话,话说有一只狗熊到玉米地里掰玉米,一边掰一边吃。第一天吃了一半,又拿走一个回去喂小狗熊。第二天又去吃了剩下的一半,走时仍然带一个回去喂小狗熊。以后每天都吃前一天剩下的一半,拿走一个。到第十天时,地里只剩下一个玉米。求地里一共有多少玉米。

5)Diamond

本题要求编制打印以下图案的程序,注意题目要求在左边留出一定空格

            *

           ***

          *****

         *******

          *****

           ***

            *

6)GoodBye!

  结束程序运行。

三  课程设计的要求与数据

1.用C语言实现系统;

2.使用数字1—6来选择菜单项,其他输入则不起作用;

四  课程设计应完成的工作

(1)编写算法;

(2)算法测试,并有具体的测试结果和结果分析;

(3)撰写课程设计报告。内容包括:

1)   封面扉页

2)   设计任务书

3)   目录

4)   总体设计方案(包括流程图)

5)   使用说明及运行实例(包括界面)

6)   成员设计内容简介

7)   项目源程序代码(注意注释的使用)

8)   指导教师评语

五  总体设计(包含几大功能模块)

  通过输入1-6来进行菜单选择,来选取自己需要的程序结果,从而得到想要的结果。

  详细设计(各功能模块的具体实现算法——流程图

使用菜单选择程序
    菜单是应用程序的界面,控制语句用来改变程序执行的顺序,是实现结构化程序设计的基础。设计一个比较实用的菜单,通过菜单选择不同的功能。
   设计分为两步:首先设计一个含有多个菜单项的菜单演示程序,然后再为这些菜单项配上相应的功能。
一、设计一个菜单程序
(1)菜单内客
程序运行后,给出6个菜单项的内容和输入提示。
   1.FindNum
   2.FindRoot
   3.Detective
   4.Bear
   5.Diamond
   6.Goodbye!
   Input 1-6:
(2)设计要求
使用数字1-6来选择菜单项,其他输人则不起作用。
二、增加菜单项的处理功能
     以设计的菜单为基础,增加菜单项的处理功能。
菜单项设计要求
     这其实是5道编程题,目的是锻炼使用控制语句的能力。
     (1)FindNum
         利用计算机的计算速度快的特点,把所有可能的数都试一下,从中找出符合条件的数。这就是所谓的穷举法。
     某位的数字只有0-9个数字,显然已经排除了为0的可能性,将1--9种可能性拿来试验,即可找到合适的数字。由此可见,就是寻找满足下式面的i值:
     (30+i)×6237=(10×i+3)×3564
   (2)FindRoot
     这里要求编制一个求方程ax2+bx+c=0的根的程序。一般将系数设计成float型,可以把变量设为double型,使用库函数sqrt求平方根,sqrt在头文件math.h中定义。假设
       disc=b×b-4×a×c
可以根据d大于、等于或小于零来决定求解方法。
       if(disc>0)
{//有两个不相等的实数解}
else if ( disc = = 0 )
{//有两个相等的实数解}
    else
     {//有两个不相等的虚数解}
(3)Detective
这是一道侦探题。一辆汽车憧人后逃跑。4个目击者提供如下线索:
   甲:牌照三、四位相同;    乙:牌号为31xxxx;
   丙:牌照五、六位相同;    丁:三一六位是一个整数的平方。
为了从这些线索中求出牌照号码,只要求出后四位再加上310000即可。这四位又是前两位相同,后两位也相同,互相又不相同并且是某个整数的平方的数。可以仍然使用穷举法,利用计算机的计算速度快的特点,把所有可能的数都试一下,从中找出符合条件的数。
因为后面4位数,1000的平方根>31,所以穷举实验时不需从1开始,而是从31开始寻找一个整数的平方。下面直接使用for语句格式,给出算法思想。{

   int i,a,b,c,d;long m;

   for(i=32;i<=99;i++)         /*穷举找出后四位号码*/

   {

      m=i*i;

      a=m%10;

      b=m/10%10;

      c=m/100%10;

      d=m/1000;

      if(a==b&&c==d)

      break;

   }

   printf("%ld\n",m+310000);

return 0;

}



   (4)Bear
本题是一个笑话,话说有一只狗熊到玉米地里掰玉米,一边掰一边吃。第一天吃了一半,又拿走一个回去喂小狗熊。第二天又去吃了剩下的一半,走时仍然带一个回去喂小狗熊。以后每天都吃前一天剩下的一半,拿走一个。到第十天时,地里只剩下一个玉米。求地里一共有多少玉米。
这里可以使用回溯算法。假设狗熊每次吃掉的为x2,则第10天时的x2=1,第9天地里剩下的玉米xl = (x2 + l) ×2,这也是狗熊在第8天时吃掉的玉米数量。因此可以使用如下算法描述:

{

       int day,x1,x2;

       day=9;

       x2=1;

       while(day>0)

       {x1=(x2+1)*2;   /*第1天玉米数是第2天玉米数加1后的2倍*/    

       x2=x1;

       day--;

       }

       printf("total=%d\n",x1);

       return 0;

}

(5)Diamond
本题要求编制打印以下图案的程序,注意题目还要求在左边留出一定空格。
                   *

           ***

          *****

         *******

          *****

           ***

            *

  (6)Goodbye!
这里除了输出一个简单的信息之外,还必须结束程序运行。

七  调试分析(包含各模块的测试用例,及测试结果)

  

7.1源程序

#include<stdio.h>

#include<stdlib.h>                       /*定义杂相函数及内存分配函数*/

#include<ctype.h>                       /*字符处理*/

#include<math.h>

int menu_select();

int FindNum();

int FindRoot();

int Detective();

int Bear();

int Diamond();

int GoodBye();

void main()      /*主函数*/

{

   for(;;)                            /*一直循环直到用break等终止,和while(1)有着同样的作用*/

   {

      switch(menu_select())

      {case 1:

           FindNum();

           system("pause");

           break;

       case 2:

           FindRoot();

           system("pause");

           break;

       case 3:

           Detective();

           system("pause");

           break;

       case 4:

           Bear();

           system("pause");

           break;

       case 5:

           Diamond();

           system("pause");

           break;

       case 6:

           printf("GoodBye!\n");

           system("pause");

           exit(6);

       }

   }

}

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

{

   char c;

   do{

      system("cls");

      printf("1.FindNum\n" );

      printf("2.FindRoot\n");

      printf("3.Detective\n");

      printf("4.Bear\n");

      printf("5.Diamond\n");

      printf("6.GoodBye\n");

      c=getchar();

   }while(c<'1'||c>'6');

   return(c-'0');

}

int FindNum()           /*找数字*/

{

  int i; 

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

           { 

        if((30+i)*6237==(i*10+3)*3564) 

               { 

            printf("The answer is %d\n",i); 

                   printf("3%d*6237=%d3*3564\n",i,i); 

                   break; 

               } 

           } 

   return 0;

   } 

int FindRoot()    /*找方程的根*/

{

       double a,b,c,disc,x1,x2,realpart,imagpart;           /*定义double型变量*/

       scanf("%lf%lf%lf",&a,&b,&c);

       printf("The equation");

       if(fabs(a)<=1e-6)

              printf("is not a equation\n");

       else

       {

              disc=b*b-4*a*c;

              if(fabs(disc)<=1e-6)

                     printf("has two eqaul roots:%8.4f\n",-b/(2*a));

              else

                     if(disc>1e-6)

                     {

                            x1=(-b+sqrt(-disc))/(2*a);

                            x2=(-b-sqrt(disc))/(2*a);

                            printf("has distinct real roots:%8.4fand%8.4f\n",x1,x2);

                     }

                     else

                     {

                            realpart=-b/(2*a);                   /*realpart是复根的实部*/

                            imagpart=sqrt(disc)/(2*a);           /*realpart是复根的虚部*/

                            printf("has complax roots\n");

                         printf("%8.4f+%8.4fi\n",realpart,imagpart); /*输出一个复数*/

                            printf("%8.4f+%8.4fi\n",realpart,imagpart); /*输出另一个复数*/

                     }

       }

       return 0;

}

int Detective()       /*找牌照*/

{

   int i,a,b,c,d;long m;

   for(i=32;i<=99;i++)         /*穷举找出后四位号码*/

   {

      m=i*i;

      a=m%10;

      b=m/10%10;

      c=m/100%10;

      d=m/1000;

      if(a==b&&c==d)

      break;

   }

   printf("%ld\n",m+310000);

return 0;

}

int Bear()         /*熊吃玉米的问题*/

{

       int day,x1,x2;

       day=9;

       x2=1;

       while(day>0)

       {x1=(x2+1)*2;   /*第1天玉米数是第2天玉米数加1后的2倍*/    

       x2=x1;

       day--;

       }

       printf("total=%d\n",x1);

       return 0;

}

int Diamond()          /*钻石*/

{

int i,j,k;

    for(i=0;i<=3;i++)                 /*控制循环次数,i由1变到3,共循环3次*/

    {

for(j=0;j<=2-i;j++)

        printf(" ");

            for(k=0;k<=2*i;k++)

                 printf("*");

         printf("\n");

         }

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

         {

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

          printf(" ");

         for(k=0;k<4-2*i;k++)

                printf("*");

         printf("\n");

         }

         return 0;

}

int GoodBye()          /*再见*/

{

       char a='G',b='o',c='o',d='d',e='B',f='y',g='e’,h=’!’; /*定义8个字符变量并初始化*/

       putchar(a);                          /*向显示器输出字母G*/

       putchar(b);                          /*向显示器输出字母o*/

       putchar(c);                          /*向显示器输出字母o*/

       putchar(d);                          /*向显示器输出字母d*/

       putchar(e);                          /*向显示器输出字母B*/

       putchar(f);                          /*向显示器输出字母y*/

       putchar(g);                          /*向显示器输出字母e*/

    putchar(h);                          /*向显示器输出符号!*/

       putchar('\n');                        /*向显示器输出一个换行值*/

       return 0;

}

7.2主要程序运行结果

1)当输入的菜单项为1时,输出结果如图a所示

图a

2)当输入的菜单项为2时有以下3种情况

 (1)输入a,b,c的值1,2,1,得到两个相等的实根,输出结果如图b①所示

                             图b①

(2)输入a,b,c的值1,2,2,得到两个共轭的复根,输出结果如图b②所示

                         图b②

(3)输入a,b,c的值2,6,1,得到两个不等的实根,输出结果如图b③所示

                            图b②

3)当输入的菜单项为3时,输出结果如图c所示

                             图b③

4)当输入的菜单项为4时,输出结果如图d所示

                            图d

5)当输入的菜单项为5时,输出结果如图e所示

                            图e

6)当输入的菜单项为6时,输出结果如图f所示

 

                                               图f                                        

八  总结

由于本课题中的许多知识点都没有学过都要靠自己到课外的资料中去查找。在用的时候难免出现这样那样的错误。如开始设计出来的菜单不是预想的那样,而是总个窗中出现混乱。解决的这个问题的办法是调整。一个系统的菜单和提示信息非常重要。如果没有这些用户根本不知道怎么用你设计的这个系统。在设计的调试过程中也无法顺利的完成调试工作。有了一个清晰简单的菜单和一些提示信息这后,调试过程完成的非常顺利。

回顾起此次课程设计,我感慨颇多,的确,从拿到题目到完成整个编程,从理论到实践,在整整两个礼拜的日子里,可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体……通过这次课程设计之后,一定把以前所学过的知识熟悉了,本次课程设计结束了,我们通过这次实践学到了许多知识。学到了设计一个简单的系统。要注意哪些方面。也使我们知道自己哪些方面做得还不够。这不仅是程序设计,更是锻炼我们处理问题的能力,同时也使我了解编写程序是件细心活,稍不留神就会出错,这就必须要求我们对待事情要认真!在编写程序的过程中,错误不断出现,不同的类型(如少写了一个符号,写错了字母,用错了函数等等)层出不穷,这考验我们待事细心,耐心,能不能坚持到底,不能半途而废。

但我们总结出了一点点的经验如下:

1、要对系统的功能和要求做出详细的分析,并合理分解任务。

2、把分解出来的子任务,做给一个相对独立的模块。

3、在设计一个模块之前,要简单构想一下总界面的显视情况。

4、针对构想出来的界面进行程序的编写。

九  参考资料

[1]谭浩强.  C程序设计(第三版) . 北京:清华大学出版社, 20##

[2]谭浩强.  C程序设计题解与上机指导(第三版) . 北京:清华大学出版社, 2005

[3]李春葆,张植民,肖忠付.C语言设计题典[M].北京:清华大学出版社,2002

[4]网上相关资料

更多相关推荐:
《C语言程序设计》课程设计报告(小组)

东莞理工学院C语言程序设计课程设计题目院系专业年级班别指导教师组长同组成员图书信息管理系统电子工程学院电子信息工程20xx2班侯家利黄培周20xx41301208邹日宙20xx41301211陈俊杰20xx41...

c语言课程设计报告

C语言程序设计课程设计学生姓名学号系院专业设计论文题目学生选课系统管理完成日期20xx年6月指导教师目录一实验目的二实验内容三总体设计四详细设计五运行结果六课程设计体会一实验目的1通过课程设计加深对结构化程序设...

C语言课程设计报告

河南理工大学计算机科学与技术学院课程设计报告20XX20XX学年第一学期课程名称C语言课程设计设计题目《小学算术运算测试》学生姓名学号专业班级计算机07-2班指导教师20XX年9月12日目录1.设计任务书21.…

C语言课程设计报告范例

C语言课程设计报告设计题目专业班级学号姓名任课老师时间目录一课程设计题目及所涉及知识点二课程设计思路及设计流程图三课程设计中遇到的难点及解决办法四小结五附录原程序2一课程设计题目及所涉及知识点一课程设计题目1基...

厦门理工学院11级C语言C语言程序设计课程设计报告

C语言程序设计课程设计报告20xx20xx学年第1学期题目专业班级姓名学号指导教师成绩计算机科学与技术系20xx年12月31日目录一课程设计的目的与要求1二方案实现与调试221掷骰子游戏222射击游戏323汽车...

C语言程序设计课程设计报告

C语言程序设计课程设计报告20xx20xx学年第1学期专业计算机科学与技术班级姓名学号指导教师成绩计算机科学与技术系20xx年12月31日目录一课程设计的目的与要求3二方案实现与调试321掷骰子游戏322汽车加...

c语言程序贪吃蛇课程设计报告

山东工商学院信电学院自动111班第一组贪吃蛇课程设计报告高级语言程序设计课程设计报告ExperimentDesigningreporter课程名称高级语言程序设计英文名称CProgramExperimentDe...

C语言课程设计报告-图书管理系统

课程设计报告图书馆管理系统目录1题目与要求22系统总体设计要给出必要的文字说明及必要的图示321功能需求分析明确选题的功能需求322系统功能模块划分要给出系统功能模块图43详细设计431重要数据的数据结构设计即...

C语言课程设计报告_运动会分数统计系统

C语言课程设计报告_运动会分数统计系统一.需求分析1问题描述运动会分数统计系统参加运动会有n个系,系编号为1n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1m,女子m+1m+w。不同的项目取前五名或前…

C语言课程设计报告---学籍信息管理系统

中国地质大学本科生课程论文封面1课程设计评语注1无评阅人签名成绩无效2必须用钢笔或圆珠笔批阅用铅笔阅卷无效3如有平时成绩必须在上面评分表中标出并计算入总成绩2目录课程设计评语2目录31课程论文题目42程序设计思...

《C语言程序设计》课程设计报告格式 (2)

C语言程序设计课程设计报告20xx20xx学年第1学期专业软件工程软件测试服务班级1班姓名学号陈家汀指导教师谢小竹成绩计算机与信息工程学院20xx年1月12日目录一课程设计的目的与要求页码二方案实现与调试页码2...

C语言程序设计基础课程设计报告

程序设计基础课程设计报告课程名称课程设计题目程序设计基础课程设计学生信息管理系统姓名系专业年级学号指导教师职称计算机科学技术系计算机网络技术讲师20xx年1月1日一设计题目及要求1题目学生信息管理系统2要求1建...

c语言程序设计课程设计报告(34篇)