C语言程序设计 如题(初学者的题目,请用最基础的知识编写,谢谢) 红抱酬蟹 wx 11o94o9126

2024-11-23 07:25:14
推荐回答(1个)
回答(1):

//WX: wlfryq (第二个是字母L)

#include 
#include 
#include 

typedef struct
{
char name[20];
int count;
int No;
}MAN;

MAN* man=NULL;
int man_all=0;
int man_target=0;

int find(char* source, char* target)
{
int i=0,j=0;
int source_len=strlen(source);
int target_len=strlen(target);
for(i=0;i<=source_len-target_len;i++)
{
if(source[i]==target[0])
{
int k;
for(k=i,j=0;k {
if(source[k]!=target[j])
{
j=-1;
break;
}
}
if(j==-1)
{
return 0;
}
else
{
return 1;
}
}
}
return 0;
}

int main()
{
printf("请输入候选人的总个数:");
scanf("%d",&man_all);
man=(MAN*)malloc(sizeof(MAN)*man_all);
int i,j;
char name[20];
for(i=0;i {
printf("\n请输入第%d个候选人的姓名:",i+1);
scanf("%s",man[i].name);
man[i].count=0;
man[i].No=100+i+1;
}
printf("\n候选人信息如下:\n\n");
for(i=0;i {
printf("%s(编号:%d)\n",man[i].name,man[i].No);
}
printf("\n请输入要选举的人数:");
scanf("%d",&man_target);

int ticket_bad=0, ticket=0;
printf("\n请输入有多少个投票人:");
scanf("%d",&ticket);

char temp[50];
for(i=0;i {
printf("\n请输入第%d(共%d张)张选票信息,候选人之间用空格间隔:",i+1,ticket);
fflush(stdin);
gets(temp);
int space_count=0;
for(j=0;j {
if(temp[j]==' ')
{
space_count++;
}
}
if(space_count>=man_target)
{
printf("\n选票中候选人个数大于要选举的人数, 无效票!");
ticket_bad++;
continue; 
}
for(j=0;j {
if(find(temp,man[j].name)==1)
{
man[j].count++;
}
}
printf("\n当前得票信息:");
for(j=0;j {
printf("%s:%d票  ",man[j].name,man[j].count);
}
}

//SORT
MAN m;
for(i=0;i {
for(j=0;j {
if(man[j].count {
m=man[j];
man[j]=man[j+1];
man[j+1]=m;
}
}
}
printf("\n\n最终得票为: 有效票:%d  无效票\n\n",ticket-ticket_bad,ticket_bad);
for(i=0;i {
printf("%s(编号:%d): %d票\n",man[i].name,man[i].No,man[i].count);;
}
return 0;
}