|
发表于 2013-6-21 16:40:33
|
显示全部楼层
继续努力!
#include <stdio.h>
#include <string.h>
#include<stdlib.h> //杂项说明的头文件
struct vote
{
char name[10];
int cnt;
};
int main(void)
{
struct vote *p;
int num1;
int num2;
int i;
int j;
char temp[10];
int cnt;
char name[10];
int sign = 1;
printf("候选人数:");
scanf("%d", &num1);
p = (struct vote *)calloc( num1, sizeof( struct vote ) ); //我觉得这种动态分配比较好,刚才你才定义了person[2] ,内存不足
printf("投票人数:");
scanf("%d", &num2);
getchar(); //这里不应该吸收掉换行符?加上吧 ……
for (i=0; i<num1; ++i)
{
printf("请输入第%d个候选人姓名:", i+1);
scanf("%s", p[i].name);
p[i].cnt = 0;
}
printf("\n");
printf("候选人:");
for (i=0; i<num1; ++i)
printf("%s ", p[i].name);
printf("\n");
printf("\n");
printf("开始:\n");
for (i=0; i<num2; ++i)
{
printf("路人%d,你选谁:", i+1);
scanf("%s", temp);
for (j=0; j<num1; ++j)
if (strcmp(temp, p[j].name) == 0)
p[j].cnt++;
}
printf("\n");
printf("得票结果:\n");
for (i=0; i<num1; ++i)
printf("%s\t%d\n", p[i].name, p[i].cnt);
for (i=1; i<num1; ++i)
{
for (j=0; j<num1-i; ++j) //这个是冒泡法
{
if (p[j].cnt < p[j+1].cnt)
{
strcpy(name, p[j].name);
strcpy(p[j].name, p[j+1].name);
strcpy(p[j+1].name, name);
cnt = p[j].cnt;
p[j].cnt = p[j+1].cnt;
p[j+1].cnt = cnt;
}
}
}
printf("得票排行榜:\n");
for (i=0; i<num1; ++i)
printf("%s\t%d\n", p[i].name, p[i].cnt);
printf("\n");
for (i=0;i<num1;++i)
{
if (p[i].cnt==p[i+1].cnt)
++sign;
}
if (1==sign)
printf("冠军是:%s\t%d\n\n", p[0].name, p[0].cnt);
else
{
if (num1==sign)
printf("该死!为什么都一样!\n");
else
{
printf("有%d人并列第一!\n", sign);
for (i=0;i<sign;++i)
printf("%s\t%d\n", p[i].name, p[i].cnt);
}
}
return 0;
}
//这个是我的修改 。。{:1_1:} |
|