c语言程序设计 求高手解答 在线等 满意有加分

设有代号为’a’,’b’,’c’的三个足球先生候选人,根据投票者在选票上对他们编号的填写顺序分别记分5,3,2。 请编程从键盘上输入投票人数及投票结果,统计他们的得分,并输出哪位当选足球先生。注意:若同一张票上写有两个相同的代号,则显示“此票无效”,若最终前两名得分相同应显示“重新投票”,否则显示三个候选者得分并输出“祝贺X当选冠军!”。

#include<stdio.h>
#include<conio.h>
struct houxuanren{
int id;
int point; //定义结构体变量表示候选人包含的信息,包括编号和得分//
}
main()
{
int i=0,j=0,k,temp=0;
char x,y,z;
struct houxuanren hxr[3];
for(i=0;i<3;i++){
hxr[i].id=i;
hxr[i].point=0;
}
printf("请输入投票总人数\n");
scanf("%d",&k);
printf("请输入投票\n");
getchar();
for(i=1;i<=k;i++){
scanf("%c%c%c",&x,&y,&z);
getchar();

if(x!=y&&x!=z&&y!=z){ //判断输入的投票中不能有重复的编号//

hxr[0].point+=(x=='a'?5:(y=='a'?3:(z=='a'?2:0))); //第一个候选人的得分情况和算法//
hxr[1].point+=(x=='b'?5:(y=='b'?3:(z=='b'?2:0))); //第二个候选人的得分情况和算法//
hxr[2].point+=(x=='c'?5:(y=='c'?3:(z=='c'?2:0))); //第三个候选人的得分情况和算法//
printf(" point: %d %d %d\n",hxr[0].point,hxr[1].point,hxr[2].point);
continue;
}
printf("此票作废\n");

}
for(i=0;i<3;i++){
if(temp<hxr[i].point){ //表示I个候选人的得分情况并进行最大值的比较和赋值//
temp=hxr[i].point;
j='a'+i;
}
printf("people %c point %d\n",'a'+hxr[i].id,hxr[i].point);
}
if(((hxr[0].point==hxr[1].point)&&hxr[0].point>hxr[2].point&&hxr[1].point>hxr[2].point)
||( (hxr[0].point==hxr[2].point)&&hxr[0].point>hxr[1].point&&hxr[2].point>hxr[1].point)
||((hxr[1].point==hxr[2].point)&&hxr[1].point>hxr[0].point&&hxr[2].point>hxr[0].point))

printf("重新投票\n"); //若有前两名得分相同进行重新投票//
else{
printf("获胜者是 people %c\n",j);
}
getch();
}
以上是源代码
但是老师要求投票信息从文本文档中调入 结果输出到另一个文本文档中
应该怎么改
例如
从d盘1.txt中读取 输入到2.txt中 1.txt内容为
a b c
c a b
b a c
这种格式的
求解答

用两个文件指针来处理就行了,把所有的scanf和printf都改成fscanf和fprintf即可,getchar()改成fgetc()。
但1.txt的内容必须是
3
abc
cab
bac
这样才行,不让无法知道有几个人投票

#include<stdio.h>
#include<conio.h>

#include <stdlib.h> //加上这个头文件

struct houxuanren{
int id;
int point; //定义结构体变量表示候选人包含的信息,包括编号和得分//
}
main()
{
int i=0,j=0,k,temp=0;
char x,y,z;
struct houxuanren hxr[3];

//加上文件处理
FILE *fp1,*fp2;
if((fp1=fopen("D:/1.txt","r"))==NULL)
{
printf("open 1.txt error\n");
exit(1);
}
if((fp2=fopen("D:/2.txt","w"))==NULL)
{
printf("open 2.txt error\n");
exit(1);
}

for(i=0;i<3;i++){
hxr[i].id=i;
hxr[i].point=0;
}
//printf("请输入投票总人数\n");

fscanf(fp1,"%d",&k); //从文件中读数据

//printf("请输入投票\n");
//getchar();

fgetc(fp1); //处理换行符

for(i=1;i<=k;i++){
fscanf(fp1,"%c%c%c",&x,&y,&z); //从文件中读数据
fgetc(fp1); //处理换行符
//getchar();

if(x!=y&&x!=z&&y!=z){ //判断输入的投票中不能有重复的编号//

hxr[0].point+=(x=='a'?5:(y=='a'?3:(z=='a'?2:0))); //第一个候选人的得分情况和算法//
hxr[1].point+=(x=='b'?5:(y=='b'?3:(z=='b'?2:0))); //第二个候选人的得分情况和算法//
hxr[2].point+=(x=='c'?5:(y=='c'?3:(z=='c'?2:0))); //第三个候选人的得分情况和算法//
fprintf(fp2," point: %d %d %d\n",hxr[0].point,hxr[1].point,hxr[2].point); //输出到文件
continue;
}
fprintf(fp2,"此票作废\n"); //输出到文件

}
for(i=0;i<3;i++){
if(temp<hxr[i].point){ //表示I个候选人的得分情况并进行最大值的比较和赋值//
temp=hxr[i].point;
j='a'+i;
}
fprintf(fp2,"people %c point %d\n",'a'+hxr[i].id,hxr[i].point); //输出到文件
}
if(((hxr[0].point==hxr[1].point)&&hxr[0].point>hxr[2].point&&hxr[1].point>hxr[2].point)
||( (hxr[0].point==hxr[2].point)&&hxr[0].point>hxr[1].point&&hxr[2].point>hxr[1].point)
||((hxr[1].point==hxr[2].point)&&hxr[1].point>hxr[0].point&&hxr[2].point>hxr[0].point))

//输出到文件
fprintf(fp2,"重新投票\n"); //若有前两名得分相同进行重新投票//
else{
//输出到文件
fprintf(fp2,"获胜者是 people %c\n",j);
}
getch();
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-01-12
查一下 fscanf()和fopen()还有freopen() 用着三个就能实现了
第2个回答  2012-01-12
1.txt里面的内容
4
a b c
b a c
c a b
a b c
#include<iostream>
#include<stdio.h>
using namespace std;
struct
{
char tick[3];
}m[100][4];

int main()
{
freopen("D:\\1.txt","r",stdin);
freopen("D:\\2.txt","w",stdout);
int x,j,i,a2=0,b2=0,c2=0; //x投票人数 a b c分别代表三个候选人 a2 b2 c2分别是他们的得分
int max;
char w;
bool ok[100]={false};
int score[3]={5,3,2};
cout<<"请输入投票人数"<<endl;
cin>>x;
cout<<"请参加投票的人开始投票"<<endl;
for(i=0;i<x;i++)
{
cout<<"第"<<i+1<<"个:";
puts("");
for(j=0;j<3;j++)
{
scanf("%s",m[i][j].tick);

}

}
for(i=0;i<x;i++)
{
if(m[i][0].tick[0]==m[i][1].tick[0]
||m[i][0].tick[0]==m[i][2].tick[0]
||m[i][1].tick[0]==m[i][2].tick[0])
{

cout<<"第"<<i+1<<"张票无效";
puts("");
ok[i]=false;
}
else
{
ok[i]=true;
}
}
for(i=0;i<x;i++)
{
if(!ok[i])continue;
for(j=0;j<3;j++)
{
if(m[i][j].tick[0]=='a')
{
a2+=score[j];
}
else if(m[i][j].tick[0]=='b')
{
b2+=score[j];
}
else
{
c2+=score[j];
}
}
}
printf("a得分:%d\n",a2);
printf("b得分:%d\n",b2);
printf("c得分:%d\n",c2);

max=a2;
w='a';
if(max<b2) {max=b2; w='b';}
if(max<c2) {max=c2; w='c';}
int cnt=(max==a2)+(max==b2)+(max==c2);
if(cnt>1)
{
puts("重新投票");
}
else
{
printf("祝贺%c当选冠军!\n",w);
}
return 0;
}
第3个回答  2012-01-12
#include<iostream>
using namespace std;
char input;

ifstream in("d:\\1.txt");
in>>input;//读取一个字符

ofstream out("d:\\1.txt");
out<<"输出答案"<<endl;
相似回答