• 统计选票练习题


     1 # include <stdio.h>
     2 # include <string.h>
     3 /*
     4 题目:3个候选人,每个选民只能投票选一人,要求编写一个统计选票的程序,先后输入被选人的名字,最后输出各人得票的结果
     5 解题思路:每个候选人的名字和得票 组成一个结构体变量。3个候选人就需要一个结构体数组。定义一个结构体数组arr,每个元素中的得票初始化为0.
     6             投票输入候选人名字,候选人的得票+1,一直循环,直至投票结束。最后输出候选人的姓名和得票的结果。用for循环来解决这个问题
     7 程序编写:.....
     8 2018年3月23日(星期五)
     9 */
    10 # define N 3    //一共有3个候选人
    11 # define J 4   //一共有4个选民,每人投一张选票
    12 void input(struct student * arr);
    13 void input1(char (*p)[20]);
    14 void input2(struct student * arr,char (* arr1)[20]);
    15 struct student     //声明结构体
    16 {
    17     char name[20];//名字
    18     int  conut;  //得票数
    19 };
    20 
    21 int main(void)
    22 {
    23     struct student arr[N];  //定义结构体数组arr
    24 
    25     struct student * p = arr; // 定义一个struct student 指针p 使p指向arr数组的首元素地址。
    26 
    27     char arr1[J][20];
    28 
    29 //    char (*p1)[J] = &arr1;    
    30 
    31     input(p);   //调用input 函数初始化3个候选人的信息。
    32     printf("华丽***********************分割线
    ");
    33     input1(arr1);  //调用inptu1 函数来初始化10张选票的信息
    34     input2(p,arr1);  //调用input2 函数计算选票,然后输出每个候选人的信息
    35 
    36     return 0;
    37 }
    38 
    39 void input(struct student * arr)
    40 {
    41 
    42     int i = 0;
    43     do
    44     {
    45         printf("请输入备选人的信息
    姓名 初始票数
    ");
    46         scanf("%s%d",arr[i].name,&arr[i].conut);
    47         ++i;
    48     }
    49     while(i < N);
    50 }
    51 
    52 void input1(char (*p)[20])
    53 {
    54     int i = 0;
    55     do
    56     {
    57         printf("请输入%d张选票的信息
    姓名
    ",J);
    58         scanf("%s",p+i);
    59         ++i;
    60     }
    61     while(i < J);
    62 }
    63 
    64 void input2(struct student * arr,char (* arr1)[20])
    65 {
    66     int i,j;
    67     for(i = 0;i < J;++i)
    68     {
    69         for(j = 0;j < N;++j)
    70         {
    71             if(strcmp(*(arr1+i),arr[j].name) == 0)//写成:if(strcmp(arr1+i,arr[j].name) == 0) 是错误的,arr1 是个二级指针,虽然地址相同但类型不同
    72                 arr[j].conut++;                      //必须降低维度,使指针指向里层首元素的首地址,即要将二级指针转化成一级指针才能正确的打印字符串
    73         }
    74 
    75     }
    76     for(i = 0;i < N;++i)
    77     {
    78         printf("%s %d票
    ",arr[i].name,arr[i].conut);
    79     }
    80 }
  • 相关阅读:
    python之异常处理
    python之面向对象深入探测
    python之模块
    php的core问题
    cookie 和session 的区别
    OSI的七层模型和TCP/IP的五层模型
    解释HTTP中Get和Post。它们有什么区别,哪个使用时更加安全?
    进程和线程的区别
    几个算法小题目--桶排序
    链表的两道小练习-链表翻转与链表中间值
  • 原文地址:https://www.cnblogs.com/wangchaomahan/p/9597844.html
Copyright © 2020-2023  润新知