当前位置: 首页 > news >正文

c语言200例 64

大家好,欢迎来到无限大的频道。

今天带领大家来学习c语言。

题目要求:

	 设计一个进行候选人的选票程序。假设有三位候选人,在屏幕上输入要选择的候选人姓名,
有10次投票机会,最后输出每个人的得票结果。好的,我们可以设计一个简单的选票程序,允许用户为三个候选人投票。以下是问题分析及解题思路,并最终给出 C 语言解决方案。

问题分析

  • 我们需要对三个候选人进行投票,每位候选人有一个唯一的名称。
  • 用户有 10 次投票机会,在每次投票时输入一个候选人的姓名。
  • 在所有投票完成后,程序需要统计并输出每个候选人获得的票数。

解题思路

  1. 定义候选人:我们需要一个字符数组来存储每个候选人的名称,另一个整数数组来存储每个候选人的票数。
  2. 初始化票数:在程序开始时,将所有候选人的票数初始化为 0。
  3. 进行投票:使用循环让用户进行投票,输入候选人的姓名,如果输入合法,则票数加 1。
  4. 输出结果:在投票结束后,输出每个候选人的得票结果。

C 语言实现

以下是实现该程序的 C 语言代码:

#include <stdio.h>
#include <string.h>#define CANDIDATE_COUNT 3
#define VOTE_COUNT 10int main() {char candidates[CANDIDATE_COUNT][20] = {"Alice", "Bob", "Charlie"};int votes[CANDIDATE_COUNT] = {0, 0, 0};char input[20];printf("请投票,您可以选择以下候选人(输入候选人姓名):\n");for (int i = 0; i < CANDIDATE_COUNT; i++) {printf("%s\n", candidates[i]);}// 进行投票for (int i = 0; i < VOTE_COUNT; i++) {printf("投票 %d/%d 请输入候选人姓名: ", i + 1, VOTE_COUNT);scanf("%s", input);// 统计票数int found = 0;for (int j = 0; j < CANDIDATE_COUNT; j++) {if (strcmp(input, candidates[j]) == 0) {votes[j]++;found = 1;break;}}if (!found) {printf("无效的候选人姓名,请重新输入。\n");i--; // 重新进行这次投票}}// 输出投票结果printf("\n投票结果:\n");for (int i = 0; i < CANDIDATE_COUNT; i++) {printf("%s: %d 票\n", candidates[i], votes[i]);}return 0;
}

运行结果如下

在这里插入图片描述

代码说明

  1. 使用 char candidates[CANDIDATE_COUNT][20] 数组存储候选人姓名。
  2. 使用 int votes[CANDIDATE_COUNT] 数组初始化候选人票数为 0。
  3. 通过循环,用户输入候选人姓名进行投票,若输入无效则要求重新输入。
  4. 最后输出每位候选人的得票情况。

问题优化

  1. 候选人数由用户决定:在程序开始时询问用户输入候选人数。
  2. 候选人姓名由用户决定:用户输入每位候选人的姓名。
  3. 使用数字选举候选人:用户通过输入对应的候选人数字进行投票,而不需要输入姓名。

优化后的 C 语言代码

#include <stdio.h>
#include <stdlib.h>int main() {int candidate_count;// 询问用户输入候选人数printf("请输入候选人人数: ");scanf("%d", &candidate_count);// 动态分配内存以存储候选人姓名和票数char **candidates = malloc(candidate_count * sizeof(char *));int *votes = malloc(candidate_count * sizeof(int));// 初始化每个候选人的姓名和票数for (int i = 0; i < candidate_count; i++) {candidates[i] = malloc(20 * sizeof(char)); // 假设每个名字最大为20个字符printf("请输入第 %d 位候选人的姓名: ", i + 1);scanf("%s", candidates[i]);votes[i] = 0; // 初始化票数为0}printf("\n请根据编号投票,您可以选择以下候选人:\n");for (int i = 0; i < candidate_count; i++) {printf("%d. %s\n", i + 1, candidates[i]);}int vote_count = 10; // 投票次数for (int i = 0; i < vote_count; i++) {int choice;printf("投票 %d/%d 请输入候选人编号 (1-%d): ", i + 1, vote_count, candidate_count);scanf("%d", &choice);// 统计票数if (choice >= 1 && choice <= candidate_count) {votes[choice - 1]++;} else {printf("无效的候选人编号,请重新输入。\n");i--; // 重新进行这次投票}}// 输出投票结果printf("\n投票结果:\n");for (int i = 0; i < candidate_count; i++) {printf("%s: %d 票\n", candidates[i], votes[i]);}// 释放动态分配的内存for (int i = 0; i < candidate_count; i++) {free(candidates[i]);}free(candidates);free(votes);return 0;
}

运行结果如下

在这里插入图片描述

代码说明

  1. 动态内存分配:使用 malloc 动态分配存储候选人姓名和票数的内存,这样可以根据用户输入的候选人数调整内存大小。
  2. 获取候选人数和姓名:用户在程序开始时输入候选人数,然后输入每位候选人的姓名。
  3. 使用数字进行投票:用户在投票时根据候选人的编号(1到候选人数)进行投票。
  4. 输入验证:验证用户输入的编号是否在有效范围内,若无效则提示并重试。
  5. 内存释放:在程序结束前释放动态分配的内存,以防止内存泄漏。

优化结果

通过这些改进,程序变得更加灵活和用户友好,用户可以自定义候选人及其数量,并通过简单的数字输入进行投票。

相关文章:

  • 深入解析:Kubernetes 如何使用 etcd 作为配置中心和注册中心
  • MacOS Sequoia安装geant4.10.07
  • 赵长鹏今日获释,下一步会做什么?币安透露2024年加密货币牛市的投资策略!
  • 教师工作量|基于springBoot的教师工作量管理系统设计与实现(附项目源码+论文+数据库)
  • 【漏洞复现】数字通云平台智慧政务 login 存在登录绕过漏洞
  • C++ 标准模板库(STL)之集合(set)
  • GO Fsnotify学习与使用
  • 前端必知必会-jQuery 遍历 - 后代
  • 音视频生态下Unity3D和虚幻引擎(Unreal Engine)的区别
  • Excel 获取某列不为空的值【INDEX函数 | SMALL函数或 LARGE函数 | ROW函数 | ISBLANK 函数】
  • Three.js动画与交互
  • win10文件共享设置 - 开启局域网文件共享 - “您没有权限访问,请与网络管理员联系请求访问权限”解决方案
  • 抖店电商怎么使用云账户解决资金提现?
  • 公网IP和内网IP比较
  • 第八章 实战:构建Tomcat镜像及发布
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • 10个确保微服务与容器安全的最佳实践
  • CentOS7简单部署NFS
  • dva中组件的懒加载
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • IOS评论框不贴底(ios12新bug)
  • Java IO学习笔记一
  • java8-模拟hadoop
  • JSONP原理
  • Laravel核心解读--Facades
  • Mithril.js 入门介绍
  • mysql中InnoDB引擎中页的概念
  • Python利用正则抓取网页内容保存到本地
  • SegmentFault 2015 Top Rank
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • tweak 支持第三方库
  • vue-router的history模式发布配置
  • Vue学习第二天
  • 大型网站性能监测、分析与优化常见问题QA
  • 简单数学运算程序(不定期更新)
  • 聊聊hikari连接池的leakDetectionThreshold
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 微信支付JSAPI,实测!终极方案
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • Python 之网络式编程
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • #pragma once与条件编译
  • #微信小程序(布局、渲染层基础知识)
  • (06)Hive——正则表达式
  • (14)Hive调优——合并小文件
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (十八)三元表达式和列表解析
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • .[hudsonL@cock.li].mkp勒索加密数据库完美恢复---惜分飞
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .htaccess配置重写url引擎
  • .NET开发人员必知的八个网站
  • /bin/bash^M: bad interpreter: No such file ordirectory
  • /etc/motd and /etc/issue