烂冬瓜狮子头 发表于 2020-11-27 10:19:14

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

我的需求是:

采用模块化程序设计方法完成简单成绩管理系统。

某班有最多不超过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[],int n);
void AverCour(int sumcourse[],int score[],int n,int aveforcour[]);
void Averstud(int sum[],int score[],int n,int aveforscore[]);
void Descbysum(int n,int sum[],int score[]);
void AscbyID(int score[],int ID[],int n);
void outputsort(int ID[],int score[],int n);
void search(int ID[],int score[],int n);
void Checkinput(int searchnum);
void Caculation(int total[],int aveforscore[],int n);
void Caculaofpecent(int percent,int total,int n);
void analyse(int total,int precent);
void lastoutput(int ID[],int sum[], int aveforscore[], int score[],int n);



int main(void)
{
    int score,sumcourse,n,aveforcour,aveforscore,sum,total,percent;
    long ID;
    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[],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);

    for(j=0;j<3;j++)
      {
            printf("Please enter score:");
            scanf(" %d",&score);
         }
    }
}


//这里看课本的时候感觉是会的,自己写的时候总是糊涂,
//哪怕练过一些题目,总结总结:如何利用循环对不同形式的二维数组进行排序和求平均值
void AverCour(int sumcourse[],int score[],int n,int aveforcour[])
{
    int i,j;
    for(j=0;j<n;j++)
    {
      sumcourse = 0;
      for(i=0;i<3;i++)
      {
            sumcourse=sumcourse+score;
      }
      aveforcour = (float)sumcourse/n;

    }
}

//计算每个学生总成绩与平均分
void Averstud(int sum[],int score[],int n,int aveforscore[])
{
    int i, j;
    for(i=0;i<n;i++)
    {
      for(j=0;j<3;j++)
      {
            sum=sum+score;
      }
      aveforscore=(float)sum/3;
    }
}


//按总成绩由高到低排出次序表
void Descbysum(int n,int sum[],int score[])
{
   int i,j,k,temp,b;
   for(i=0;i<j;i++)
    {
      for(j=1;j<n;j++)
      {
            if(sum<=sum)
            {
                temp=sum;
                sum=sum;
                sum=temp;

                k=i;
                for(b=0;b<n;b++)
                {
                  temp=score;
                  score=score;
                  score=temp;
                }
            }

      }
    }
}
//按学号由小到大排序次序表
void AscbyID(int score[],int ID[],int n)
{
    int i,j,a,temp;
    for(i=0;i<n;i++)
    {
      for(j=1;j>i;j++)
      {
            if(ID>ID)
            {
                temp=ID;
                ID=ID;
                ID=temp;

                for(a=0;a<3;a++)
                {
                  temp=score;
                  score=score;
                  score=temp;
                }
            }
      }
    }
}

//输出排序后的次序表
void outputsort(int ID[],int score[],int n)
{
    int i,j;
    for(i=0;i<n;i++)
    {
      printf(" %12ld\t ",ID);

      for(j=0;j<3;j++)
      {
            printf(" %4d\t ",score);
      }

      printf("\n");
    }
}

//按学号查询学生排名及各科考试成绩
void search(int ID[],int score[],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==searchnum)
      {
            printf("%ld %d %d %d",ID,score,score,score);
      }
    }
}

//判断学号是否输入正确
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[],int aveforscore[],int n)
{
    int i,j,a,b;
    for(a=0;a<3;a++)
    {
      for(i=0;i<n;i++)
      {
          b = aveforscore/10;

          switch(b)
          {
            case 9:
            case 10:total++;
                  break;
            case 8:total++;
                  break;
            case 7:total++;
                  break;
            case 6:total++;
                  break;
            case 5:
            case 4:
            case 3:
            case 2:
            case 1:total++;
                  break;
         }
      }
    }
}

//按照每个学生的平均成绩,统计每个成绩类别所占百分比
void Caculaofpecent(int percent,int total,int n)
{
    int i;
    for(i=0;i<5;i++)
    {
      percent=total/n;
    }
}

//输出每个成绩所占百分比以及每个成绩类别所占人数
void analyse(int total,int precent)
{
    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);
   }
   printf("/n precent ");
   for(j=0;j<5;j++)
   {
         printf(" %d",precent);
   }
}
//输出每个学生的学号、考试成绩,课程总分和平均分
void lastoutput(int ID[],int sum[], int aveforscore[], int score[],int n)
{
    int i,j;
    printf(" ID SCROE SUM AVERAGE");
    for(i=0;i<n;i++)
    {
      printf("%ld",ID);

      for(j=0;j<3;j++)
      {
            printf(" %d",score);
      }
      printf(" %d",sum);
      printf(" %d",aveforscore);
      printf("/n");
    }
}

xieglt 发表于 2020-11-27 10:36:13

本帖最后由 xieglt 于 2020-11-27 10:38 编辑

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

         for(j=0;j<3;j++)
      {
            printf("Please enter score:");
            //这里不需要加空格
            scanf("%d",&score);
         }
    }
}
3、不管是输入还是输出 int 类型, 用 "%d",不要用 "%ld",更不要写成 "d%"
页: [1]
查看完整版本: 不知道自己的代码哪里出问题了,运行的时候ID输不进去