合肥电子商务开发网站建设,不建网站如何做淘宝客,滨州做网站公司,工程公司安全考试大家好#xff0c;欢迎来到无限大的频道。
今天带领大家来学习c语言。
题目要求#xff1a; 设计一个进行候选人的选票程序。假设有三位候选人#xff0c;在屏幕上输入要选择的候选人姓名#xff0c;
有10次投票机会#xff0c;最后输出每个人的得票结果。好的#xff…大家好欢迎来到无限大的频道。
今天带领大家来学习c语言。
题目要求 设计一个进行候选人的选票程序。假设有三位候选人在屏幕上输入要选择的候选人姓名
有10次投票机会最后输出每个人的得票结果。好的我们可以设计一个简单的选票程序允许用户为三个候选人投票。以下是问题分析及解题思路并最终给出 C 语言解决方案。问题分析
我们需要对三个候选人进行投票每位候选人有一个唯一的名称。用户有 10 次投票机会在每次投票时输入一个候选人的姓名。在所有投票完成后程序需要统计并输出每个候选人获得的票数。
解题思路
定义候选人我们需要一个字符数组来存储每个候选人的名称另一个整数数组来存储每个候选人的票数。初始化票数在程序开始时将所有候选人的票数初始化为 0。进行投票使用循环让用户进行投票输入候选人的姓名如果输入合法则票数加 1。输出结果在投票结束后输出每个候选人的得票结果。
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;
}运行结果如下 代码说明
使用 char candidates[CANDIDATE_COUNT][20] 数组存储候选人姓名。使用 int votes[CANDIDATE_COUNT] 数组初始化候选人票数为 0。通过循环用户输入候选人姓名进行投票若输入无效则要求重新输入。最后输出每位候选人的得票情况。
问题优化
候选人数由用户决定在程序开始时询问用户输入候选人数。候选人姓名由用户决定用户输入每位候选人的姓名。使用数字选举候选人用户通过输入对应的候选人数字进行投票而不需要输入姓名。
优化后的 C 语言代码
#include stdio.h
#include stdlib.hint 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;
}运行结果如下 代码说明
动态内存分配使用 malloc 动态分配存储候选人姓名和票数的内存这样可以根据用户输入的候选人数调整内存大小。获取候选人数和姓名用户在程序开始时输入候选人数然后输入每位候选人的姓名。使用数字进行投票用户在投票时根据候选人的编号1到候选人数进行投票。输入验证验证用户输入的编号是否在有效范围内若无效则提示并重试。内存释放在程序结束前释放动态分配的内存以防止内存泄漏。
优化结果
通过这些改进程序变得更加灵活和用户友好用户可以自定义候选人及其数量并通过简单的数字输入进行投票。