残冬Nightmare
请高手帮忙看看我用C语编的这个程序

本帖最后由 残冬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]

残冬Nightmare
把新的代码再贴一下吧
展开Biu

ninja 发表于 2012-5-27 15:11

把新的代码再贴一下吧

[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]; /*姓名*/

int 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("%d",&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%d\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("%d",&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%d\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%d\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("%d",&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%d\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]

[查看全文]
ninja
把新的代码再贴一下吧
展开Biu

把新的代码再贴一下吧

[查看全文]
残冬Nightmare
你只是用来保和显示存当然没事
展开Biu

ninja 发表于 2012-5-27 14:25

你只是用来保和显示存当然没事

char是字符,他不能运算,你比较大小的话也是比较的asc码,并不是比较数值 ...

又不会了...改成int后还是原来的问题..下面该改成%d的地方也改了...为什么呢= =``

[查看全文]
残冬Nightmare
你只是用来保和显示存当然没事
展开Biu

ninja 发表于 2012-5-27 14:25

你只是用来保和显示存当然没事

char是字符,他不能运算,你比较大小的话也是比较的asc码,并不是比较数值 ...

哦!!!!:84:我明白了..char不能运算...哦哦哦哦~~~:77:

[查看全文]
ninja
你只是用来保和显示存当然没事
展开Biu

你只是用来保和显示存当然没事

char是字符,他不能运算,你比较大小的话也是比较的asc码,并不是比较数值

[查看全文]
残冬Nightmare
你丫的居然用
展开Biu

ninja 发表于 2012-5-27 14:13

不对!你丫的居然用char来保存成绩,不出错才怪了。

成绩用char可以保存...不信你编译试试~~~~还有一个学生10个成绩

[查看全文]
ninja
你丫的居然用
展开Biu

不对!你丫的居然用char来保存成绩,不出错才怪了。

[查看全文]
ninja
你的成绩是怎么保存的
展开Biu

平均分:

你的成绩是怎么保存的,一个学生可以拥有多个成绩?

那么你算平均分的话用sum/n就不对了啊

[查看全文]