欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 运维知识 > windows >内容正文

windows

C语言选民投票系统

发布时间:2024/1/18 windows 76 豆豆
生活随笔 收集整理的这篇文章主要介绍了 C语言选民投票系统 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

提示:本文仅是对个人学习经历的一个记录

前言

作为一个小白,关于我的学习经历,我想在此做一个记录。

本文关于用C语言实现选民投票系统。

PS:目前作者在学习C语言结构体部分的内容,所以代码是基于C语言结构体部分知识编写的。


 一、结构体是什么?

        在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。

看下面一段示例代码:

struct Student //struct:告知系统是一个结构体 { //Student:结构体名称,编程习惯要大写开头int num;char name[];char sex;int age; //成员列表double score;char sdd[32]; }; //分号不能忘

 以上就是定义一个名称为Student的结构体,至于如何用可以参考后面的说明!

二、选民投票系统详解

        题目:有5个选民,3个候选者,每个选民只能投一票,投错姓名按弃票处理。 要求:编程输入候选者名单,记录每个候选者票数,选民弃票数,最后输出候选者成员名单,中选着姓名和票数。

        1、初始化候选者名单

        2、唱票环节,记录每位候选者票数,同时记录弃票数

        3、输出候选者及其票数列表

        4、投票结束,输出当选者结果

三、实现步骤

1、代码如下:

#include <stdio.h> #include <string.h>/*author: nopddata: 2023.01.14funDescription: Ballot system */struct Candidate//候选者结构体 {char name[32];int tickrts; };int main() {int i,j;int voter = 5;//记录选民人数char nameTmp[32];//用来临时记录选民选择的候选者姓名int abstain = 0;//记录弃票数int mark;//用于标记struct Candidate checked;//当选者struct Candidate list[3];//候选者列表int len = sizeof(list)/sizeof(list[0]);//计算候选者人数//初始化候选者for( i=0;i<len;i++){printf("请输入第%d个候选人姓名:\n",i+1);scanf("%s",list[i].name);list[i].tickrts = 0;//初始化候选者票数}//唱票环节for( j=0;j<5;j++){mark = 0;//先让标记等于0memset(nameTmp,'\0',sizeof(nameTmp));//每次使用后清空保存的姓名puts("请输入您所投人的姓名:");scanf("%s",nameTmp);for( i=0;i<len;i++){//记录选票if( strcmp(nameTmp,list[i].name)==0){list[i].tickrts++;mark = 1;//标记为1}}if( mark==0){//标记为0,也就是没变时,记录弃票数puts("没有此候选人,弃票!");abstain++;}}for( i=0;i<len;i++){//输出所有候选者及其票数printf("候选人 %s 共 %d 票。\n",list[i].name,list[i].tickrts);}checked = list[0];//先让当选者默认为第一个候选者for( i=0;i<len;i++){//比较选票更新checkedif( checked.tickrts<list[i].tickrts){checked = list[i];}}//输出结果printf("本次投票共%d人投票,有效票数:%d 票,弃票数:%d 票。\n",voter,voter-abstain,abstain);printf("票数最高者是:%s ,共 %d 票,当选!!",checked.name,checked.tickrts);return 0; }

2、运行结果:


 四、代码解析 

        代码很简单,注释也很详细,就不对代码流程进行解释了,这里对其中用到的一些知识点进行说明。

1、在C语言中struct用于创建一个结构体。struct 语句为程序定义了一个带有多个成员的新的数据类型。

struct Candidate//候选者结构体

2、 定义一个结构体变量checked,由于本文中checked用于指向结构体Candidate中的 tickrts,故这段代码可以简单看成 int checked,方便理解。

struct Candidate checked;//当选者

3、定义一个结构体变量 ,它与数值型数组几乎是一模一样的,只不过需要注意的是,结构体数组的每一个元素都是一个结构体类型的变量,都包含结构体中所有的成员项。定义结构体数组的方法很简单,同定义结构体变量是一样的,只不过将变量改成数组。或者说同普通数组的定义是一模一样的,如下:定义了一个结构体数组,共有 3个元素,每个元素都是一个结构体变量,都包含所有的结构体成员。

struct Candidate list[3];//候选者列表

4、sizeof( )的用法可以看我前一篇文章:C语言实现冒泡排序

int len = sizeof(list)/sizeof(list[0]);//计算候选者人数

 5、memset函数原型 void *memset(void *str, int c, size_t n);用法是:有三个参数,第1个参数是目标字符串,第2个参数是要替换成的字符,第3个参数是要替换的大小,也就是位数。没有返回值。总结就是可以把目标字符串的前多少位替换成选定的字符。这里是用于把临时存放名字的变量初始化。

memset(nameTmp,'\0',sizeof(nameTmp));//每次使用后清空保存的姓名

6、strcmp函数原型 intstrcmp(const char *s1,const char *s2);用法是:有两个参数,第1个参数是一个字符串,第2个参数也是一个字符串,如果s1 = s2,函数返回0,如果s1 < s2,函数返回 -1,如果s1 > s2,函数返回1;不过这个函数的源码是有问题的,至于是什么问题以后再说,感兴趣的同学可以自己去搜一搜这个函数的源码去看。这里是用于作为 if 语句成立的判断条件。

if( strcmp(nameTmp,list[i].name)==0)


总结

        以上就是今天要讲的内容,本文仅仅简单介绍了基于C语言中结构体部分的知识实现选民投票。对我而言,这是我的第二篇文章,写的不是很好,我不是很满意,以后我会对其继续修改,让它能够实现更多的功能,流程更合理,结构更简单。如有错漏,望批评指正。让我们共同进步吧!!

总结

以上是生活随笔为你收集整理的C语言选民投票系统的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。