鱼C论坛

 找回密码
 立即注册
查看: 1113|回复: 1

不知道自己的代码哪里出问题了,运行的时候ID输不进去

[复制链接]
发表于 2020-11-27 10:19:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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");
    }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-27 10:36:13 | 显示全部楼层
本帖最后由 xieglt 于 2020-11-27 10:38 编辑

找出了点代码语法问题
1、22行 long ID[30] 改成  int ID[30]
2、
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("%d",&ID[i]);
        scanf("ld%",&ID[i]);

         for(j=0;j<3;j++)
        {
            printf("Please enter score:");
            //这里不需要加空格
            scanf("%d",&score[i][j]);
         }
    }
}
3、不管是输入还是输出 int 类型, 用 "%d",不要用 "%ld",更不要写成 "d%"
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 13:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表