c语言200例 64

news2024/9/27 12:07:35

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

今天带领大家来学习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 10

int 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. 内存释放:在程序结束前释放动态分配的内存,以防止内存泄漏。

优化结果

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2169936.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在线聊天室项目(Vue3 + SpringBoot)

目录 项目描述 技术栈选型 项目开发过程文档 项目页面效果 项目源码地址 项目描述 1. 网页在线聊天室&#xff0c;实现了群组系统和好友系统&#xff0c;因此项目可以在公共群组&#xff0c;私有群组和私人之间进行聊天。 2. 项目主要使用Websocket实时通信技术实现聊天&…

Arch Linux 安装步骤

仅做学习记录&#xff0c;有错漏之处欢迎批评指正&#xff01; 上一节&#xff1a;用U盘制作安装镜像 文章目录 二、安装系统2.1 使用U盘启动安装系统2.2 连接网络Wi-Fi方式&#xff08;1&#xff09;开启iwd内置的DHCP客户端&#xff08;2&#xff09;启动iwd并连接Wi-Fi 2.3 …

C++冷门知识点1

1.特殊情况汇总&#xff1a; 负数&#xff0c;空指针&#xff0c;叶节点&#xff0c;INT_MAX和INT_MIN 2.双指针法(快慢指针&#xff0c;头尾指针)&#xff0c;三数指针法(链表逆序那块) 3.一定要注意极端情况 2.e后边可以跟负数&#xff0c;但是不能跟小数 3.string的push_bac…

Navicat数据库管理工具实现Excel、CSV文件导入到MySQL数据库

1.所需要的工具和环境 navicat等第三方数据库管理工具云服务器中安装了 1Panel面板搭建的mysql数据库 2.基于 1Panel启动mysql容器 2.1 环境要求 安装前请确保您的系统符合安装条件&#xff1a; 操作系统&#xff1a;支持主流 Linux 发行版本&#xff08;基于 Debian / Re…

【Wireshark笔记】通过Wireshark检测和分析TCP重传

通过Wireshark检测和分析TCP重传 在网络通信中&#xff0c;TCP重传&#xff08;TCP Retransmission&#xff09;是一种非常重要的现象&#xff0c;特别是在分析网络性能和故障排查时。重传数据包会影响网络性能&#xff0c;导致延迟增加&#xff0c;甚至引发网络拥塞等问题。为…

Java刷题:最小k个数

目录 题目描述&#xff1a; 思路&#xff1a; 具体实现 整体建立一个大小为N的小根堆 通过大根堆实现 完整代码 力扣链接&#xff1a;面试题 17.14. 最小K个数 - 力扣&#xff08;LeetCode&#xff09; 题目描述&#xff1a; 设计一个算法&#xff0c;找出数组中最小的…

【Java 问题】基础——异常

接上文 异常 39.Java 中异常层级结构?40.异常的处理机制&#xff1f;41.三道经典异常处理代码题 39.Java 中异常层级结构? Java的异常是分为多层的。 Throwable 是 Java 语言中所有错误或异常的基类。 Throwable 又分为 Error 和 Exception &#xff0c;其中Error是系统内部…

从‘盲管’到‘智网’,漫途精准构建排水管网监测方案

在城市错综复杂的基础设施网络中&#xff0c;排水管网作为城市的“血脉”&#xff0c;其高效、稳定运行直接关系到城市生活的安宁与财产的安全。面对日益频繁的雨季挑战与气候变化的不确定性&#xff0c;传统“盲管”管理模式已难以满足现代城市治理的需求。 漫途排水管网监测…

本地Docker部署高颜值跨平台照片管理软件lmmich并远程上传图片

文章目录 前言1.关于Immich2.安装Docker3.本地部署Immich4.Immich体验5.安装cpolar内网穿透6.创建远程链接公网地址7.使用固定公网地址远程访问 前言 本篇文章介绍如何在本地搭建lmmich图片管理软件&#xff0c;并结合cpolar内网穿透实现公网远程访问到局域网内的lmmich&#…

Python新手学习过程记录之基础环境:环境变量、版本区分、虚拟环境

https://img-blog.csdnimg.cn/img_convert/0604267530a515112e51dfc80d0b0ee7.png 刚开始接触Python并学习一门开发语言,可能就会遇到一些棘手的问题,比如电脑上不知不觉已经安装了多个python版本,python3.8/3.10/3.11,甚至一些软件中也集成有python解释器&#xff1b;那么我编…

c语言:知识补充

c语言中编译开始会对#define&#xff0c;#include等内容做预处理&#xff0c;可以用#define写一些简单函数&#xff0c;方便使用 #include <stdio.h> #include <stdlib.h>#define MAX(A, B) ((A) > (B) ? (A) : (B))int main(){printf("%d\n", MAX(…

【Java 集合】List接口 —— ArrayList 与 LinkedList 详解

List接口继承自Collection接口&#xff0c;是单列集合的一个重要分支。 在List集合中允许出现重复的元素&#xff0c;所有的元素是以一种线性方式进行存储的&#xff0c;在程序中可以通过索引&#xff08;类似于数组中的元素角标&#xff09;来访问集合中的指定元素。另外&…

onload_tcpdump命令抓包报错Onload stack [7,] already has tcpdump process

最近碰到Onload 不支持同时运行多个 tcpdump 进程的报错&#xff0c;实际上使用了ps查询当时系统中并没有tcpdump相关进程存在。需要重启服务器本机使用onload加速的相关进程后才能使用onload_tcpdump正常抓包&#xff0c;很奇怪&#xff0c;之前确实没遇到这样的问题&#xff…

生成速度提升70%,32K版本上新,讯飞星火API全新升级!

从“通用”到“真正有用”&#xff0c;大模型应用价值正在释放&#xff01;在C端&#xff0c;AI会议、AI绘图、AI音乐、AI PPT、AI视频等新兴应用层出不穷。在B端&#xff0c;大模型在智能客服、智能营销、知识问答等场景中的应用效果开始显现。 对于绝大多数AI开发者和中小型…

easyExcel使用模版填充excel,合并单元格

一、最终效果 二、制作模版 1、制作填充模版 模版在代码中保存的位置 2、Controller /*** 下载模板*/ RequestMapping(value "exportData") public void exportData(KqKqb kqKqb,HttpServletResponse response, HttpServletRequest request) throws IOExceptio…

大模型时代,程序员能保住头发吗?

10月24日&#xff0c;位于安徽合肥的奥林匹克体育中心&#xff0c;正在举行一场大型科技峰会&#xff0c;奔涌而入的人潮&#xff0c;很快就将主会场挤了个满。这是科大讯飞主办的第六届世界声博会暨2023全球1024开发者节的现场。自2017年以来&#xff0c;这家公司每年都会在10…

如何选择高品质SD卡

如何选择高品质SD卡 SD卡&#xff08;Secure Digital Memory Card&#xff09;是一种广泛使用的存储器件&#xff0c;因其快速的数据传输速度、可热插拔的特性以及较大的存储容量&#xff0c;广泛应用于各种场景&#xff0c;例如在便携式设备如智能手机、平板电脑、运动相机等…

修改timeout问题

1. vad超时时间为10s&#xff0c;10s会出现一个空识别。 解决办法一&#xff1a; 修改/usr/aispeech/conf/duiPlus.cof中的的vad下面的timeout为100000 传给duiPlusNew的vad.timeout要增加&#xff0c;暂时设置为100000&#xff0c;注意单实例配置、多实例配置只需要设置子实例…

【算法】DFS 系列之 穷举/暴搜/深搜/回溯/剪枝(上篇)

【ps】本篇有 9 道 leetcode OJ。 目录 一、算法简介 二、相关例题 1&#xff09;全排列 .1- 题目解析 .2- 代码编写 2&#xff09;子集 .1- 题目解析 .2- 代码编写 3&#xff09;找出所有子集的异或总和再求和 .1- 题目解析 .2- 代码编写 4&#xff09;全排列 II…

PostgreSQL 17 发布了!非常稳定的版本

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 作者&#xff1a;IT邦德 中国DBA联盟(ACDU)成员&#xff0c;10余年DBA工作经验&#xff0c; Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主&#xff0c;全网粉丝10万 擅长主流Oracle、My…