|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
我的需求是:
采用模块化程序设计方法完成简单成绩管理系统。
某班有最多不超过30人参加语文,数学,外语课程的考试,用二维数组存储数据,
使用函数分模块编程实现如下学生成绩管理功能:
录入每个学生的学号和各科考试成绩。
计算每门课程的总分和平均分
按总成绩由高到低排出名次表;
按学号由小到大排出成绩表;
按学号查询学生排名及各科考试成绩;
按各科平均优秀(90~100)、良好(80~90)、中等(70~79)、及格(60~69)、不及格(0~59)5个类别,统计每个类别的人数及所占百分比;
输出每个学生的学号、考试成绩,课程总分和平均分。
我的问题是:我的程序在运行到Inputidscore的时候输不进去ID
代码:
- #include <stdio.h>
- #include <stdlib.h>
- #include <math.h>
- void Inputidscore(int ID[],int score[][3],int n);
- void AverCour(int sumcourse[],int score[][3],int n,int aveforcour[]);
- void Averstud(int sum[],int score[][3],int n,int aveforscore[]);
- void Descbysum(int n,int sum[],int score[][3]);
- void AscbyID(int score[][3],int ID[],int n);
- void outputsort(int ID[],int score[][3],int n);
- void search(int ID[],int score[][3],int n);
- void Checkinput(int searchnum);
- void Caculation(int total[][4],int aveforscore[],int n);
- void Caculaofpecent(int percent[1][5],int total[1][5],int n);
- void analyse(int total[1][5],int precent[1][5]);
- void lastoutput(int ID[],int sum[], int aveforscore[], int score[][3],int n);
- int main(void)
- {
- int score[30][3],sumcourse[3],n,aveforcour[3],aveforscore[30],sum[30],total[1][5],percent[1][5];
- long ID[30];
- printf("Please input student's total number:\n");
- scanf("%d",&n);
- Inputidscore(ID,score,n);
- outputsort(ID,score,n);
- AverCour(sumcourse,score,n,aveforcour);
- Averstud(sum,score,n,aveforscore);
- Descbysum(n,sum,score);
- outputsort(ID,score,n);
- AscbyID(score,ID,n);
- outputsort(ID,score,n);
- search(ID,score,n);
- analyse(total,percent);
- lastoutput(ID,sum,aveforscore, score, n);
- return 0;
- }
- //输入学生的学号和成绩
- //老毛病又犯了,写完函数的基本之后,没有补充应该需要什么样的数值传入函数
- void Inputidscore(int ID[],int score[][3],int n)
- {
- int i,j;
- printf("Please enter students' ID number and Chinese Math English score:\n");
- for( i=0;i<n;i++)
- {
- printf("Please enter ID:");
- scanf("ld%",&ID[i]);
- for(j=0;j<3;j++)
- {
- printf("Please enter score:");
- scanf(" %d",&score[i][j]);
- }
- }
- }
- //这里看课本的时候感觉是会的,自己写的时候总是糊涂,
- //哪怕练过一些题目,总结总结:如何利用循环对不同形式的二维数组进行排序和求平均值
- void AverCour(int sumcourse[],int score[][3],int n,int aveforcour[])
- {
- int i,j;
- for(j=0;j<n;j++)
- {
- sumcourse[j] = 0;
- for(i=0;i<3;i++)
- {
- sumcourse[j]=sumcourse[j]+score[i][j];
- }
- aveforcour[j] = (float)sumcourse[j]/n;
- }
- }
- //计算每个学生总成绩与平均分
- void Averstud(int sum[],int score[][3],int n,int aveforscore[])
- {
- int i, j;
- for(i=0;i<n;i++)
- {
- for(j=0;j<3;j++)
- {
- sum[i]=sum[i]+score[i][j];
- }
- aveforscore[i]=(float)sum[i]/3;
- }
- }
- //按总成绩由高到低排出次序表
- void Descbysum(int n,int sum[],int score[][3])
- {
- int i,j,k,temp,b;
- for(i=0;i<j;i++)
- {
- for(j=1;j<n;j++)
- {
- if(sum[i]<=sum[j])
- {
- temp=sum[j];
- sum[j]=sum[i];
- sum[i]=temp;
- k=i;
- for(b=0;b<n;b++)
- {
- temp=score[k][b];
- score[k][b]=score[j][b];
- score[j][b]=temp;
- }
- }
- }
- }
- }
- //按学号由小到大排序次序表
- void AscbyID(int score[][3],int ID[],int n)
- {
- int i,j,a,temp;
- for(i=0;i<n;i++)
- {
- for(j=1;j>i;j++)
- {
- if(ID[i]>ID[j])
- {
- temp=ID[i];
- ID[i]=ID[j];
- ID[j]=temp;
- for(a=0;a<3;a++)
- {
- temp=score[i][a];
- score[i][a]=score[j][a];
- score[j][a]=temp;
- }
- }
- }
- }
- }
- //输出排序后的次序表
- void outputsort(int ID[],int score[][3],int n)
- {
- int i,j;
- for(i=0;i<n;i++)
- {
- printf(" %12ld\t ",ID[i]);
- for(j=0;j<3;j++)
- {
- printf(" %4d\t ",score[i][j]);
- }
- printf("\n");
- }
- }
- //按学号查询学生排名及各科考试成绩
- void search(int ID[],int score[][3],int n)
- {
- int i,searchnum;
- printf("Please enter your searching ID number:/n");
- scanf("%ld",&searchnum);
- Checkinput(searchnum);
- for(i=0;i<n;i++)
- {
- if(ID[i]==searchnum)
- {
- printf("%ld %d %d %d",ID[i],score[i][0],score[i][1],score[i][2]);
- }
- }
- }
- //判断学号是否输入正确
- void Checkinput(int searchnum)
- {
- if(searchnum<=0)
- {
- printf("Input error!/n Please enter your searching number again:/n");
- scanf("%ld",&searchnum);
- Checkinput(searchnum);
- }
- else return;
- }
- //按各科平均成绩的5个类别,统计每个成绩类别的人数
- void Caculation(int total[][4],int aveforscore[],int n)
- {
- int i,j,a,b;
- for(a=0;a<3;a++)
- {
- for(i=0;i<n;i++)
- {
- b = aveforscore[i]/10;
- switch(b)
- {
- case 9:
- case 10:total[0][0]++;
- break;
- case 8:total[0][1]++;
- break;
- case 7:total[0][2]++;
- break;
- case 6:total[0][3]++;
- break;
- case 5:
- case 4:
- case 3:
- case 2:
- case 1:total[0][4]++;
- break;
- }
- }
- }
- }
- //按照每个学生的平均成绩,统计每个成绩类别所占百分比
- void Caculaofpecent(int percent[1][5],int total[1][5],int n)
- {
- int i;
- for(i=0;i<5;i++)
- {
- percent[0][i]=total[0][i]/n;
- }
- }
- //输出每个成绩所占百分比以及每个成绩类别所占人数
- void analyse(int total[1][5],int precent[1][5])
- {
- int i,j;
- printf("100~90 89~80 79~70 69~60 59~0/n");
- printf("total ");
- for(i=0;i<5;i++)
- {
- printf("%d",total[1][i]);
- }
- printf("/n precent ");
- for(j=0;j<5;j++)
- {
- printf(" %d",precent[1][j]);
- }
- }
- //输出每个学生的学号、考试成绩,课程总分和平均分
- void lastoutput(int ID[],int sum[], int aveforscore[], int score[][3],int n)
- {
- int i,j;
- printf(" ID SCROE SUM AVERAGE");
- for(i=0;i<n;i++)
- {
- printf("%ld",ID[i]);
- for(j=0;j<3;j++)
- {
- printf(" %d",score[i][j]);
- }
- printf(" %d",sum[i]);
- printf(" %d",aveforscore[i]);
- printf("/n");
- }
- }
复制代码 |
|