本帖最后由 残冬Nightmare 于 2012-5-27 13:56 编辑
问题是这样子的...在WIN-TC下可以运行:77:...但是在平均分和最大值最小值那里有问题:82:..说什么不可移动的指针(地址常数)赋值在 *** 函数中..我们不学指针变量..怎么才能改过来呢?求高手帮忙啊:84:...我把所有源代码都贴上来..
[mw_shl_code=c,true]#include <stdio.h>
#include <stdlib.h>
#define NUM 10
typedef struct info{ /*学生学分信息的结构类型*/
char class_number[20]; /*班级*/
char number[20]; /*学号*/
char name[20]; /*姓名*/
char score[NUM]; /*分数*/
}INFO;
void displayMenu();
int input (INFO s[], int n);
void output_all (INFO s[], int n);
int add (INFO s[], int n);
void output_number (INFO s[], int n);
void output_class (INFO s[], int n);
void modify (INFO s[], int n);
int delete (INFO s[], int n);
void maxmin (INFO s[], int n);
void average (INFO s[], int n);
main() /*主函数*/
{
INFO s[NUM];
int choice ;
int n=0;
do{
displayMenu();
scanf("%d",&choice);
switch(choice)
{
case 1:n=input(s,n);break;
case 2:output_all(s,n);break;
case 3:n=add(s,n);break;
case 4:output_number(s,n);break;
case 5:output_class(s,n);break;
case 6: modify(s,n);break;
case 7:n=delete(s,n);break;
case 8:maxmin(s,n);break;
case 9:average(s,n);break;
}
clrscr();
} while(choice!=0);
printf("\n\n Thank you for using!!");
getch() ;
}
void displayMenu() /*显示菜单*/
{
printf("\n===============MENU===============\n");
printf("\n1.........Input all student's information.........\n");
printf("\n2.........Output all student's information.........\n");
printf("\n3.........Add a student's information.........\n");
printf("\n4.........Search by number.........\n");
printf("\n5.........Search by class.........\n");
printf("\n6.........Modify a student's information.........\n");
printf("\n7.........Delete a student's information.........\n");
printf("\n8.........Max and min score.........\n");
printf("\n9.........Average score.........\n");
printf("\n0.........Exit.........\n");
printf("\nEnter your choice(0~9):");
}
int input(INFO s[],int n) /*输入成绩信息*/
{
int i,j,a;
clrscr();
printf("Enter total number of students:");
scanf("%d",&a);
n=a;
for(i=0;i<a;i++)
{
printf("Please input the student's class_number(example:110551):");
scanf("%s",&s.class_number);
printf("Please input the student's number(example:11055101):");
scanf("%s",&s.number);
printf("Please input the student's name(not more than 15 letters):");
scanf("%s",&s.name);
for(j=0;j<10;j++)
{
printf("Please input the score(not more than 100):");
scanf("%s",&s[j].score);
}
printf("\n");
}
printf("\nAll the informations have been saved!\n");
getch();
return n;
}
void output_all(INFO s[],int n) /*浏览学生成绩信息*/
{
int i,j;
clrscr();
for (i=0;i<n;i++)
{
printf("\nclass\tnumber\tname\n");
printf("\n%s\t%s\t%s\n",s.class_number,s.number,s.name);
printf("Score:");
for(j=0;j<10;j++)
{
printf("\n%s\n",s[j].score);
}
}
getch();
}
int add(INFO s[],int n) /*添加某位学生的成绩信息*/
{
int i,j,a;
clrscr();
printf("How many students do you want to add?");
scanf("%d" ,&a);
for(i=n;i<a+n;i++)
{
printf("Please input the student's class_number(example:110551):");
scanf("%s",&s.class_number);
printf("Please input the student's number:");
scanf("%s",&s.number);
printf("Please input the student's name(not more than 15 letters):");
scanf("%s",&s.name);
for(j=0;j<10;j++)
{
printf("Please input the score(not more than 100):");
scanf("%s",&s[j].score);
}
printf("\n");
}
n=n+a;
printf("The information has been saved successfully!\n");
getch();
return n;
}
void output_number(INFO s[], int n) /*输出某位学生成绩信息*/
{
int i,j;
char a[10];
clrscr();
printf("Please input the student's number: ");
scanf("%s",&a);
for(i=0;i<n;i++)
{
if(strcmp(s.number,a)==0)
{
printf("\nclass\tnumber\tname\n");
printf("\n%s\t%s\t%s\n",s.class_number,s.number,s.name);
printf("Score:");
for(j=0;j<10;j++)
{
printf("\n%s\n",s[j].score);
}
}
}
getch();
}
void output_class(INFO s[], int n) /*输出某班所有学生成绩信息*/
{
int i,j;
char a[10];
clrscr();
printf("Please input the class number: ");
scanf("%s",&a);
for(i=0;i<n;i++)
{
if(strcmp(s.class_number,a)==0)
{
printf("\nclass\tnumber\tname\n");
printf("\n%s\t%s\t%s\n",s.class_number,s.number,s.name);
printf("Score:");
for(j=0;j<10;j++)
{
printf("\n%s\n",s[j].score);
}
}
}
getch();
}
void modify(INFO s[], int n) /*修改某学生成绩信息*/
{
int i,j;
char a[10];
char b;
clrscr();
printf("Please input the student's number you want to change:");
scanf("%s",&a);
printf("Are you sure?(Y/N) ");
b=getch();
printf("\n");
if(b=='y'||b=='Y')
{
for(i=0;i<n;i++)
{
if(strcmp(s.number,a)==0)
{
printf("Please input the student's class_number(example:110551):\n");
scanf("%s",&s.class_number);
printf("Please input the student's number(example:11055101):\n");
scanf("%s",&s.number);
printf("Please input the student's name(not more than 15 letters):\n");
scanf("%s",&s.name);
printf("Score:");
for(j=0;j<10;j++)
{
printf("Please input the score(not more than 100):");
scanf("%s",&s[j].score);
}
}
}
}
printf("Finish!Press any key to return.");
getch();
}
int delete(INFO s[], int n) /*删除某学生成绩信息*/
{
int i,j,k;
char a,delstudent[10];
clrscr();
printf("Enter the student number that you want to delete:\n");
scanf("%s",&delstudent);
for(i=0;i<n;i++)
{
if(strcmp(s.number,delstudent)==0)
{
printf("\nclass_number\tnumber\tname\n");
printf("\n%s\t%s\t%s\n",s.class_number,s.number,s.name);
printf("Score:");
for(k=0;k<10;k++)
{
printf("\n%s\n",s[k].score);
}
printf("Do your want to delete the student?(Y or N)\n");
scanf("%s",&a);
if(a == 'Y' || a=='y')
{
for (j=i+1;j<n;j++)
{
s[j-1]=s[j];
}
n=n-1;
printf("delete finish.");
}
}
}
getch();
return n;
}
void maxmin(INFO s[],int n) /*最高分和最低分*/
{
int i,j;
int a=0;
int b=100;
clrscr();
printf("The max score is:");
for(i=0;i<n;i++)
{
for(j=0;j<10;j++)
{
if(s[j].score>a)
{
a=s[j].score;
}
}
}
printf("%d",a);
getch();
printf("The min score is:");
for(i=0;i<n;i++)
{
for(j=0;j<10;j++)
{
if(s[j].score<b)
{
b=s[j].score;
}
}
}
printf("%d",b);
getch();
}
void average(INFO s[],int n) /*平均分*/
{
int sum=0;
float ave=0;
int i,j,a;
clrscr();
printf("The average socre is:\n");
for(i=0;i<n;i++)
{
for(j=0;j<10;j++)
{
sum=sum+s[j].score;
}
}
a=10*n;
ave=sum/a;
printf("%f",ave);
getch();
}[/mw_shl_code]
大概是这样..在输入完学生成绩后(比如10次成绩是1到10)..然后查看全部学生成绩..查看的成绩不是1到10..而是一些其他的数..而且都是三到四位数...而且最大值最小值也不对..平均值也不对..总之就是关于分数的显示的都有问题..
[查看全文]
[mw_shl_code=c,true]typedef struct info{ /*学生学分信息的结构类型*/
char class_number[20]; /*班级*/
char number[20]; /*学号*/
char name[20]; /*姓名*/
int score[NUM]; /*分数*/
}INFO;[/mw_shl_code]
int就不要數組了,你先一個學生一個分數吧
[查看全文]
