计算机三级数据库C语言编程题

2024-12-01 19:50:38
推荐回答(5个)
回答1:

完整正确程序:
#include
#include
FILE *fin, *fout;
char xx[100][11];
int n = 100;
int yy[10];

void ReadDat();
void CountRs();

void main(void)
{
char namein[]="in.dat",nameout[]="out.dat";
int i;

fin = fopen(namein,"r");
(void) ReadDat();
fclose(fin);
(void) CountRs();

fout = fopen(nameout,"w");
for (i=0;i<10;i++) fprintf(fout, "%d\n",yy[i]);
fclose(fout);
printf("\007Output in %s\n",nameout);
exit(0);
}

void ReadDat(){
int i;
for (i=0;i<100;i++){
fscanf(fin,"%10s",&xx[i][0]);
};
}

void CountRs(){
int e[10];
int i,j;
int sum;
for (i=0;i<10;i++) yy[i]=0;

for (j=0;j<100;j++){
sum = 0;
for (i=0;i<10;i++) {
sscanf(&xx[j][i],"%1d",&e[i]);
sum = sum + e[i];
};
if (sum > 5){
for (i=0;i<10;i++){
yy[i] = yy[i] + e[i];
};
};
};
}
=======================
for(i=o;i<10;i++) yy[i]=0; 累加器,存每人得票数,初始化为0.
for(i=0;i<100;i++)
{
cnt=0; // 用于判断单张票是否选满5人的累加器,初始化为0
for(j=0;j<10;j++)
if(xx[i][j]=='1') cnt++; // 单张票10个侯选人选了几人
if(cnt>5) // 单张票选多于5人则做
{
for(j=0;j<10;j++)
if(xx[i][j]=='1') yy[j]++; //第i张票,第j人被选(为1),则给第j人的得票累加器加1(yy[j]++);
}

回答2:

void CountRS(void)
{
int i,j;
int cnt;
for(i=0;i<10;i++) /*这个循环用于初始化数组,以免后面的yy[i]++;操作出现错误值*/
yy[i]=0;
for(i=0;i<100;i++)
{
cnt=0;/*用于统计每位参选人的得票数,每次对下一位参选人统计之前要归0*/
for(j=0;j<10;j++)
if(xx[i][j]=='1')/*xx[i]是代表不同的选票,下面的xx[i][j]则是不同的选民的投票结果,如果xx[i][j]为1则cnt++;*/
cnt++;
if(cnt>5)/*如果得票数大于5,则计算该候选人的得票数,并保存到对应的yy[i]中*/
{
for(j=0;j<10;j++)
if(xx[i][j]=='1')
yy[j]++;/*个人感觉这里应该是yy[i],代表第i号候选人,不理解这里为什么是j*/
}
}
}

回答3:

这样写吧!
比你写那个简便多了。运算也要快些。
#include
#include
FILE *fin, *fout;
char xx[100][11];
int n = 100;
int yy[10];

void ReadDat();
void CountRs();

void main(void)
{
char namein[]="in.dat",nameout[]="out.dat";
int i;

fin = fopen(namein,"r");
(void) ReadDat();
fclose(fin);
(void) CountRs();

fout = fopen(nameout,"w");
for (i=0;i<10;i++) fprintf(fout, "%d\n",yy[i]);
fclose(fout);
printf("\007Output in %s\n",nameout);
exit(0);
}

void ReadDat(){
int i;
for (i=0;i<100;i++){
fscanf(fin,"%10s",&xx[i][0]);
};
}

void CountRs(){
int e[10];
int i,j;
int sum;
for (i=0;i<10;i++) yy[i]=0;

for (j=0;j<100;j++){
sum = 0;
for (i=0;i<10;i++) {
sscanf(&xx[j][i],"%1d",&e[i]);
sum = sum + e[i];
};
if (sum > 5){
for (i=0;i<10;i++){
yy[i] = yy[i] + e[i];
};
};
};
}
=======================
for(i=o;i<10;i++) yy[i]=0; 累加器,存每人得票数,初始化为0.
for(i=0;i<100;i++)
{
cnt=0; // 用于判断单张票是否选满5人的累加器,初始化为0
for(j=0;j<10;j++)
if(xx[i][j]=='1') cnt++; // 单张票10个侯选人选了几人
if(cnt>5) // 单张票选多于5人则做
{
for(j=0;j<10;j++)
if(xx[i][j]=='1') yy[j]++; //第i张票,第j人被选(为1),则给第j人的得票累加器加1(yy[j]++);
}

回答4:

你少了文件操作
int tmp=0,yy[10]={0,0,0,0,0,0,0,0,0,0};
FILE *fp;
fp=fopen("in.dat","rb+");
for(i=0;i<=9;i++)
{for(j=0;j<=9;j++)
{
tmp=fgetc();
if(tmp=="1")yy[j]++;
}
}
fclose(fp);
fp=fopen("out.dat","w");
for(i=0;i<10;i++)
{
fprintf(fp,"%d\t",yy[i]);
}
fclose(fp);

回答5:

挺好的,好像没问题,把几个o改成0就可以了
输出是
int i;
FILE *fp;
fp=fopen("OUT.DAT","w");
for(i=0;i<10;i++){
fprintf(fp,"%d\t",yy[i]);
fclose(fp);