c语言200例 64

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

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

题目要求:

复制代码
	 设计一个进行候选人的选票程序。假设有三位候选人,在屏幕上输入要选择的候选人姓名,
有10次投票机会,最后输出每个人的得票结果。

好的,我们可以设计一个简单的选票程序,允许用户为三个候选人投票。以下是问题分析及解题思路,并最终给出 C 语言解决方案。

问题分析

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

解题思路

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

C 语言实现

以下是实现该程序的 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 语言代码

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

优化结果

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

相关推荐
青桔柠薯片3 分钟前
I²C 总线协议学习总结:从开漏逻辑到读写事务的工程视角
c语言·开发语言·学习
生信研究猿12 分钟前
leetcode 101.对称二叉树(不会做)
算法·leetcode·职场和发展
重生之我是Java开发战士13 分钟前
【笔试强训】Week1:点击消除,数组中两个字符串的最小距离,dd爱框框,腐烂的苹果,大数乘法
java·开发语言·算法
枫叶林FYL13 分钟前
【自然语言处理 NLP】前沿架构与多模态 选择性状态空间模型与并行扫描算法:从原理到实现
算法·自然语言处理·架构
牧瀬クリスだ19 分钟前
优先级队列——堆
java·开发语言·数据结构
WolfGang00732123 分钟前
代码随想录算法训练营 Day29 | 动态规划 part02
算法·动态规划
样例过了就是过了24 分钟前
LeetCode热题100 跳跃游戏 II
c++·算法·leetcode·贪心算法·动态规划
rit843249925 分钟前
基于NSGA-II的多目标优化算法(MATLAB实现)
开发语言·算法·matlab
香蕉鼠片25 分钟前
第三大的数
数据结构·算法·leetcode
汀、人工智能26 分钟前
[特殊字符] 第28课:相交链表
数据结构·算法·链表·数据库架构··相交链表