C语言编程高手请来解决1道tc程序题 要求用input.txt读入数据,output.txt输出

题目大概是:输入学生学号(字符串)和成绩,要求用菜单选择输出1、成绩排名2、学生优良统计3、最高最低分人数,各分数段人数,4、清屏,5、退出
刚学 自己打了一些,不加文本输入输出编译通过,加了就不会了。。。
#include <stdio.h>
#define n 3
char a[n][10];
int b[n],k,i;
int pm(),yl(),tj(),quit(),clr();
void process();
int *options[]={(int*) pm,(int*)yl,(int*)tj,(int*)clr,(int*)quit};
void main()
{
int l;
FILE *fp;
fp=fopen("input.txt", "r");
for(i=0;i<n;)
{printf("Please input the student's number:\n");
fscanf(fp,"%s",a[i]);
printf("Please input the student's score:\n");
fscanf("%d",&b[i]);
if(b[i]>100 || b[i]<0)
continue;
i++;
}
k=strlen(a[0])-1;
for(;;) {
l=menu();
process(options[l]);
getch();
}}
int menu()
{
char ch;
do{
printf("\n");
printf("1.Ranking\n");
printf("2.Check and evaluate\n");
printf("3.Statistics\n");
printf("4.Clrscr\n");
printf("5,Quit\n");
printf("Please select a number:");
ch=getche();
printf("\n\n");
}
while(!strchr("12345",ch));
return(ch-49);
}
void process(p)
int(*p)();
{
(*p)( );
}
pm()
{
char c[10],d[n][10];
int e[n],j,s;
for(i=0;i<n;i++)
{strcpy(d[i],a[i]);
e[i]=b[i];}
for(i=0;i<n-1;i++)
for(j=0;j<n-i-1;j++)
{
if(e[j]>e[j+1])
{ s=e[j]; e[j]=e[j+1]; e[j+1]=s;
strcpy(c,d[j]); strcpy(d[j],d[j+1]); strcpy(d[j+1],c);} }
printf("Number");
for(j=0;j<(k+2);j++){printf(" ");} printf("Score\n");
for(i=0;i<n;i++)
{ printf("%s",d[i]); for(j=0;(j<k+8);j++){printf(" ");} printf("%d\n",e[i]);}
return 0;}
yl()
{
int s;
for(i=0;i<n;i++)
{
s=b[i]/10;
switch(s)
{
case 10: printf("No.%s,Perfect,%d\n",a[i],b[i]);break;
case 9: printf("No.%s,Perfect,%d\n",a[i],b[i]);break;
case 8: printf("No.%s,Well,%d\n",a[i],b[i]); break;
case 7: printf("No.%s,middle,%d\n",a[i],b[i]); break;
case 6: printf("No.%s,Pass,%d\n",a[i],b[i]); break;
default: printf("No.%s,Not Pass,%d\n",a[i],b[i]);break;
}}return 0;}
tj(){
char m1[10],m2[10];
int max=0,min=101,sum=0;
float average;
int s,r=0,w=0,x=0,y=0,z=0;
for(i=0;i<=n;i++)
{
s=b[i]/10;
switch(s)
{ case 10:w=w+1; break;
case 9:w=w+1; break;
case 8:x=x+1; break;
case 7:y=y+1; break;
case 6:z=z+1; break;
default:r=r+1; break;
} }
for(i=0;i<n;i++)
{ if(b[i]>max)
{
max=b[i];
strcpy(m1,a[i]);
}
if (b[i]<min)
{
min=b[i];
strcpy(m2,a[i]);
}
sum=sum+b[i];
}
average=sum/n;
printf("Not Pass=%d\nPass=%d\nMiddle=%d\nWell=%d\nPerfect=%d\n",r,z,y,x,w);
printf("average=%5.2f\nmax=%d,No.%s\nmin=%d,No.%s\n",average,max,m1,min,m2);
return 0; }
clr()
{
clrscr();return 0;}
quit()
{exit(0);return 0;}

求完善。。。
? ? ? ? ? ? ? ?
{
int l;
FILE *fp;
fp=fopen("input.txt", "r");
for(i=0;i<n;)
{printf("Please input the student's number:\n");
fscanf(fp,"%s",a[i]);
printf("Please input the student's score:\n");
fscanf("%d",&b[i]);
if(b[i]>100 || b[i]<0)
continue;
i++;
} ? ? ? ? ? 开头输入部分。还有输出部分。
就是把文本和这个程序结合一起不会。。

第1个回答  2011-04-30
fp=fopen("input.txt", "r");
这一句应该是fp=fopen("C:\\Documents and Settings\\Administrator\\桌面\\input.txt", "r");
其中“C:\\Documents and Settings\\Administrator\\桌面\\input.txt”这个写的应该是你input.txt这个文件的目录,并且‘\’斜线应该写两个,即‘\\’。
第2个回答  2011-04-27
代码长了。。。看着头疼。。。你把你要加的地方做个注释啊。。。。这样可以减轻我们的痛苦。。。追问

就是把文本和这个程序结合一起不会。。

追答

fp=fopen("input.txt", "r");
你这个input.txt存不存在?里面有没有内容?不存在是无法编译的。。。你加一句
if(fp==NULL)
{printf("The file is not exit!!!");
return 0
}

本回答被网友采纳
第3个回答  2011-04-28
我表示,却是看得头疼。。。。
第4个回答  2011-05-04
第一题:
#include "stdio.h"
float *Grade(float *num,int i) //用来冒泡排序 num传入数组指针,i传入数组个数
{
int j,k;
float temp;
for (j=0;j<i;j++)
for (k=0;k<i-j;k++)
{
if (num[k]<num[k+1])
{
temp=num[k];
num[k]=num[k+1];
num[k+1]=temp;
}
}
return num;
}
void main()
{
float num[100];
int i=0,j=0,iavg=0; //i=数组个数,j=循环,iavg=高于平均成绩人数
float avg=0,sum=0; //avg=平均成绩,sum=总成绩
printf("请输入成绩,按Ctrl+D结束:");
while (scanf("%f",&num[i])) //循环输入成绩
{
sum+=num[i];
i++;
}
avg=sum/i;
printf("平均分为%.1f\n",avg);
Grade(num,i);
printf("所有学生的成绩为:");
for (j=0;j<i;j++)
{
printf("%.1f ",num[j]);
if (num[j]>avg)
iavg++;
}
printf("\n高于平均人数的有%d人\n",iavg);
}
第二题:
#include "stdio.h"
int digit(int i,int *dinum)
{
int j=0,k=0;
while (i=0) //计算位数
{
dinum[k]=i%10; //将数字存入数组
i=i/10;
j++;k++;
}
return j;
}
void main()
{
int inum,dinum[10],i,j; //inum=整数 dinum=存各个数字的数组 i,j=循环需要
printf("请输入整数:");
scanf("%d",&inum);
j=digit(inum,dinum);
printf("该整数为 %d 位\n",j);
printf("数字分别为:");
for (i=j-1;i>=0;i--)
{
printf("%d ",dinum[i]);
}
}
第三题:
#include "stdio.h"
int fun(int *a)
{
int i=1,j=0;
for (i;i<1000;i++)
{
if ((i%7==0||i%11==0)&&!(i%7==0&&i%11==0))
{
a[j]=i;
j++;
}
}
return j;
}
void main()
{
int a[500],i,j;
j=fun(a);
for (i=0;i<j;i++)
{
printf("%d ",a[i]);
if (i%15==0)
printf("\n");
}
以上代码均在VC6.0中编译通过,现在1点了。后面的题以后再说
另外,站长团上有产品团购,便宜有保证
相似回答