C语言课程设计 投票程序系统设计讲课稿.docx

上传人:b****4 文档编号:3990278 上传时间:2022-11-27 格式:DOCX 页数:15 大小:40.25KB
下载 相关 举报
C语言课程设计 投票程序系统设计讲课稿.docx_第1页
第1页 / 共15页
C语言课程设计 投票程序系统设计讲课稿.docx_第2页
第2页 / 共15页
C语言课程设计 投票程序系统设计讲课稿.docx_第3页
第3页 / 共15页
C语言课程设计 投票程序系统设计讲课稿.docx_第4页
第4页 / 共15页
C语言课程设计 投票程序系统设计讲课稿.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

C语言课程设计 投票程序系统设计讲课稿.docx

《C语言课程设计 投票程序系统设计讲课稿.docx》由会员分享,可在线阅读,更多相关《C语言课程设计 投票程序系统设计讲课稿.docx(15页珍藏版)》请在冰豆网上搜索。

C语言课程设计 投票程序系统设计讲课稿.docx

C语言课程设计投票程序系统设计讲课稿

 

C语言课程设计投票程序系统设计

 

中国地质大学

本科生课程论文封面

课程名称C语言课程设计

教师姓名邵老师

本科生姓名常堃

本科生学号20091001079

本科生专业应用化学

所在院系材化学院

类别:

C.本科生

日期:

2011年7月6日

 

课程设计评语

对课程论文的评语:

平时成绩:

课程论文成绩:

总成绩:

评阅人签名:

注:

1、无评阅人签名成绩无效;

2、必须用钢笔或圆珠笔批阅,用铅笔阅卷无效;

3、如有平时成绩,必须在上面评分表中标出,并计算入总成绩。

1.课程论文题目

投票程序

[要求]

设有代号为‘a’,‘b’,‘c’的三个足球先生候选人,根据投票者在选票上对他们编号的填写顺序分别记分5,3,2。

请编程从键盘上输入投票人数及投票结果,统计他们的得分,并输出哪位当选足球先生。

注意:

若同一张票上写有两个相同的代号,则显示“此票无效”,若最终前两名得分相同应显示“重新投票”,否则显示三位候选人得分并输入“祝贺X当选冠军”。

例如:

投票人数:

5

请参加投票的人开始投票:

abc

cab

caa此票无效

cba

bca

三位候选人得分:

a:

12

b:

13

c:

15

祝贺c当选冠军 

[提示]

数据结构可用结构体数组,结构体成员包括代号、得分。

或者采用二维数组,行方向对应一张投票,列方向对应各候选人得分。

2.程序设计思路

根据题目要求,首先要输入投票者人数,再输入投票者的选票,而选票不是都有效,若同一张票上写有两个相同的代号,则此票无效,所以要将有效的选票选出来,然后对选票进行统计得分,最终来比较得分,若有得分相同,则重新来选,最后得分最多的获胜,最终成为足球先生。

 

但是此程序还不够完善,可以增加以下程序,增强其功能:

1.记录废票数目,以便废票太多,影响选举公正。

2.若出现a,b,c以外的投票,应当将该票记为无效。

3.若出现最终前两名得分相同,应该还可以运行程序,使其重新投票,重新计票,直至最后选出足球先生。

3.功能模块图

足球先生评选程序

输入选票信息

输出结果

统计选票

输入选票信息:

输入对足球先生候选人的选票

输出结果:

输出最后足球先生的获得者

统计选票:

对选票进行统计

4.数据结构设计

要输入投票人数,将其定义为re,选票信息可以用一个p[100][3]的数组来存放,re来控制投票信息数组的行数。

最开始定义一个全局变量m=3,来表示候选者人数。

这样来控制数列数,达到控制输入的目的。

每输入一行,就开始判断是否一张票上写有两个相同代号,或者是出现‘a’,‘b’,‘c’以外的投票结果,如果出现这种情况,就将票作废,并记录作废票数。

定义变量v记录作废票数。

判断完毕后,若出现废票,就将其中的票府赋值为‘0’。

返回投票人数re,留到后续函数使用。

5.算法设计

1、主函数:

主函数只提供输入、处理和输出部分函数调用:

【程序】

#include

#include

intstart(charp[][3]);                /****输入函数****/

voidcount(inta,charp[][3],intpp[]);      /***统计函数***/

intresult(inta,intb,intc);               /***输出函数***/

intm;     /*****全局变量*****/

voidmain()                  /*****主函数*****/

{     

       inta;

        m=3; 

     intpp[3]={0,0,0};  

    do

       {

              charp[100][3]={{0}};

    /******p[100][3]赋初值,清空******/

         a=start(p);

         count(a,p,pp);    

         /******计算得分******/

       }

          while(result(pp[0],pp[1],pp[2]));

/*****若m=2循环,直至选出足球先生*****/

}

2、各功能模块设计

(1)  输入模块

【分析】

要输入投票人数,将其定义为re,选票信息可以用一个p[100][3]的数组来存放,re来控制投票信息数组的行数。

最开始定义一个全局变量m=3,来表示候选者人数。

这样来控制数列数,达到控制输入的目的。

每输入一行,就开始判断是否一张票上写有两个相同代号,或者是出现‘a’,‘b’,‘c’以外的投票结果,如果出现这种情况,就将票作废,并记录作废票数。

定义变量v记录作废票数。

判断完毕后,若出现废票,就将其中的票府赋值为‘0’。

返回投票人数re,留到后续函数使用。

 

【程序】

      intstart(charp[][3])

 {

         intre,i,j,v=0;

         printf("请输入投票人数\n");

         scanf("%d",&re);

          /******a为投票人数******/       

      printf("请参加投票的人开始投票\n");

      getchar();

       /******输入时以回车结束******/

       for(i=0;i

       {

        intflag=0;

        for(j=0;j

           scanf("%c",&p[i][j]);

            getchar(); 

       /******输入选举投票******/

       if(p[i][0]==p[i][1]||p[i][1]==p[i][2]||p[i][0]==p[i][2])

        flag=1;

   /******判断一张票上是否写有两个相同代号******/

       for(j=0;j

       {

       if(p[i][j]!

='a'&&p[i][j]!

='b'&&p[i][j]!

='c')

        flag=1;

       }

 /******判断是否有a,b,c以外的字母******/

        if(flag)

        {

           printf("此票无效\n");

           v++;

           for(j=0;j

           p[i][j]=0;

        }

      /******若有以上情况,显示"此票无效",忽略此票,并记录废票数******/        

       }

        printf("作废票数是%d票\n",v);

         returnre;

 }

(2)  统计模块

【分析】

功能上要求分别统计a,b,c三个人的得分,因而用x,y,z来存放,每一票中分别统计得分,根据投票者在选票上对他们编号的填写顺序分别记分5,3,2,将如果出现废票,直接跳过不计,将最后结果分别放入x,y,z.。

引用主函数中的数组pp[3],将统计的x,y,z分别赋值到pp[0],pp[1],pp[2]中,这样就可以带回主函数中。

 

【程序】 

voidcount(inta,charp[][3],intpp[])

 {    

     intb=a,i;

     intx=0,y=0,z=0;

/******'a','b','c'分别代表三个候选人xyz分别是他们的得分******/

     for(i=0;i

     {       

         if(p[i][0]=='a')

          x+=5;

          elseif(p[i][1]=='a')

           x+=3;

           elseif(p[i][2]=='a')

               x+=2;

          if(p[i][0]=='b')

           y+=5;

          elseif(p[i][1]=='b')

             y+=3;

           elseif(p[i][2]=='b')

              y+=2;

          if(p[i][0]=='c')

             z+=5;

             elseif(p[i][1]=='c')

              z+=3;

              elseif(p[i][2]=='c')

                z+=2;   

           if(p[i][0]=='0')

            continue;

     }           

             pp[0]=x;

             pp[1]=y;

             pp[2]=z;

 }

(3)输出模块

【分析】

功能上要求比较三位候选人的最后得分,三人得分分别为x,y,z。

定义

max,将最高分赋值到max中。

只有一位最高分时,输出三位候选人得分,显示“祝贺某人当选冠军”。

       如果有两位最高分,则显示“请重新投票”,接着,令m=2,改变全局变量,只剩下两位候选者,显示三位候选人得分,重新投票统计。

如果两位候选人分数还相同,则再次循环,若不同,则显示两人得分,

并显示“祝贺某人当选冠军”。

 

【程序】 

intresult(inta,intb,intc)

{

      intx,y,z,max=0,s=0,l=0;

      chark;

         x=a;y=b;z=c;

         max=x;

         k='a';

         if(max

            {

             max=y;

              k='b';

            }

         if(max

            {

             max=z;

             k='c';

            }

          if(max==x&&max==y||max==x&&max==z||max==y&&max==z)

             {

               printf("请重新投票\n");

     /******若最高票数有两人相同,提示重新投票******/

               l=1;

             }

          if(m==3)

           printf("三位候选人得分:

\n");

          else

           printf("两位候选人得分:

\n");

                if(l)

                    m=2;

               if(x>0)

                  printf("a:

%d\n",x);

               if(y>0)

                  printf("b:

%d\n",y);

               if(z>0)

                  printf("c:

%d\n",z);

              if(!

l)

             printf("祝贺%c当选冠军\n",k);   

            /******输出最后结果******/               

            returnl;

如果l返回主程序,若l为真值,则代表最后两位候选人分数还相同,主程序的do,while循环,可以再次统计票数,再次比较得分,直到选出最后的足球先生。

6.程序代码

#include

#include

 

intstart(charp[][3]);

voidcount(inta,charp[][3],intpp[]);

intresult(inta,intb,intc); 

intm; 

voidmain()

{

       inta;

        m=3; 

     intpp[3]={0,0,0};  

    do

       {

              charp[100][3]={{0}};

    /******p[100][3]赋初值,清空******/

         a=start(p);

         count(a,p,pp);

         /******计算得分******/

            }

          while(result(pp[0],pp[1],pp[2])); 

intstart(charp[][3])

       {

              intre,i,j,v=0;

         printf("请输入投票人数\n");

         scanf("%d",&re);

          /******a为投票人数******/ 

      printf("请参加投票的人开始投票\n");

      getchar();

       /******输入时以回车结束******/ 

     for(i=0;i

       {

        intflag=0;

        for(j=0;j

                     scanf("%c",&p[i][j]);

            getchar(); 

       /******输入选举投票******/

       if(p[i][0]==p[i][1]||p[i][1]==p[i][2]||p[i][0]==p[i][2])

        flag=1;

   /******判断一张票上是否写有两个相同代号******/

       for(j=0;j

             {

       if(p[i][j]!

='a'&&p[i][j]!

='b'&&p[i][j]!

='c')

                    flag=1;

             }

             /******判断是否有a,b,c以外的字母******/

             if(flag)

             {

         printf("此票无效\n");

           v++;

           for(j=0;j

                           p[i][j]=0;

             }

 /******若有以上情况,显示“此票无效”,忽略此票,并记录废票数******/        

             }

             printf("作废票数是%d票\n",v);

                    returnre; 

 }

 voidcount(inta,charp[][3],intpp[])

 {   

  intb=a,i;

     intx=0,y=0,z=0;

    /******'a','b','c'分别代表三个候选人xyz分别是他们的得分******/

     for(i=0;i

       {       

         if(p[i][0]=='a')

          x+=5;

          elseif(p[i][1]=='a')

           x+=3;

           elseif(p[i][2]=='a')

               x+=2;

          if(p[i][0]=='b')

           y+=5;

          elseif(p[i][1]=='b')

             y+=3;

           elseif(p[i][2]=='b')

              y+=2;

          if(p[i][0]=='c')

             z+=5;

             elseif(p[i][1]=='c')

              z+=3;

              elseif(p[i][2]=='c')

                z+=2;   

         if(p[i][0]=='0')

                     continue;

       }

           

             pp[0]=x;

             pp[1]=y;

             pp[2]=z;       

 } 

intresult(inta,intb,intc)

{

      intx,y,z,max=0,s=0,l=0;

      chark;

         x=a;y=b;z=c;

         max=x;

         k='a';

         if(max

              {

             max=y;

              k='b';

              }

         if(max

              {

             max=z;

             k='c';

              }

          if(max==x&&max==y||max==x&&max==z||max==y&&max==z)

               {

               printf("请重新投票\n");

     /******若最高票数有两人相同,提示重新投票******/

               l=1;

               }

               if(m==3)

                      printf("三位候选人得分:

\n");

               else

                      printf("两位候选人得分:

\n");

                if(l)

                    m=2;

                           if(x>0)

                  printf("a:

%d\n",x);

                           if(y>0)

                  printf("b:

%d\n",y);

                           if(z>0)

                  printf("c:

%d\n",z); 

              if(!

l)

                             printf("祝贺%c当选冠军\n",k);              

            /******输出最后结果******/               

            returnl;

}

7.程序运行结果

1、主函数运行,输入选票信息

3、统计选票,输出结果

8.编程中遇到的困难及解决方法

在编程的过程中,很容易出现一个问题,就时少大括号“}”的问题。

这是,error只有一个,但是错误的地方很多,且都在括号处。

按照计算机所指出的错误位置寻找是不容易找出错误的。

直到整个程序看了一遍后才会发现是一个大括号的问题。

通常少的是“{”或者“}”,错误位置会出现在缺少括号位置之后的其他大括号出现的地方。

只要这种情况发生后,往前找是否有大括号缺失就可以将问题很快解决了。

在帮同学修改程序的过程中,也遇到过一个问题。

在头文件后定义了子函数,可是之后忘了编写子函数,在纠错时,有的是不会发现错误的,但是连接过程中就会报告出错。

我觉得在以后的编程过程中,最好用什么函数写什么函数,后者在写完一个子函数后再在头文件底下声明。

9.总结心得及良好建议

此次实习为期一周,我学到了很多,也知道了很多的不足。

通过老师的精心指导带领下,我不仅获得了很多新知识,还好好复习了一下以前学的知识。

在这之前,我们已经对C语言这门课程学习了一个学期,对其有了一定的了解,但是也仅仅是停留在学习了解的范围,对里面的好多东西还是很陌生,并不是很熟练,有着许多欠缺,更多的在运用起来的时候还是感到很不好动手。

C语言课堂上许多关于C语言的语法规则,听起来十分枯燥无味,也不容易记住,死记硬背是不可取的。

然而要使用C语言这个工具解决实际问题,又必须掌握它。

通过多次上机练习,对于语法知识有了感性的认识,加深对它的理解,在理解的基础上就会自然而然地掌握C语言的语法规定。

对于一些内容自己认为在课堂上听懂了,但上机实践中会发现原来理解的偏差,更加巩固了学过的知识,而且在设计的时候学要系统的知识,也是一个较大的挑战,某一方面知识的欠缺都将影响到整个程序的设计。

我所编的虽然只是一个小程序,但是每一步的编的过程,让我懂得很多。

重温一下C语言,因为过了计算机二级,因而编

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1