鱼C论坛

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

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

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

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

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

x
我的需求是:

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

某班有最多不超过30人参加语文,数学,外语课程的考试,用二维数组存储数据,

使用函数分模块编程实现如下学生成绩管理功能:

    录入每个学生的学号和各科考试成绩。

    计算每门课程的总分和平均分

    按总成绩由高到低排出名次表;

    按学号由小到大排出成绩表;

    按学号查询学生排名及各科考试成绩;

    按各科平均优秀(90~100)、良好(80~90)、中等(70~79)、及格(60~69)、不及格(0~59)5个类别,统计每个类别的人数及所占百分比;

    输出每个学生的学号、考试成绩,课程总分和平均分。

我的问题是:我的程序在运行到Inputidscore的时候输不进去ID
代码:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4. void Inputidscore(int ID[],int score[][3],int n);
  5. void AverCour(int sumcourse[],int score[][3],int n,int aveforcour[]);
  6. void Averstud(int sum[],int score[][3],int n,int aveforscore[]);
  7. void Descbysum(int n,int sum[],int score[][3]);
  8. void AscbyID(int score[][3],int ID[],int n);
  9. void outputsort(int ID[],int score[][3],int n);
  10. void search(int ID[],int score[][3],int n);
  11. void Checkinput(int searchnum);
  12. void Caculation(int total[][4],int aveforscore[],int n);
  13. void Caculaofpecent(int percent[1][5],int total[1][5],int n);
  14. void analyse(int total[1][5],int precent[1][5]);
  15. void lastoutput(int ID[],int sum[], int aveforscore[], int score[][3],int n);



  16. int main(void)
  17. {
  18.     int score[30][3],sumcourse[3],n,aveforcour[3],aveforscore[30],sum[30],total[1][5],percent[1][5];
  19.     long ID[30];
  20.     printf("Please input student's total number:\n");
  21.     scanf("%d",&n);
  22.     Inputidscore(ID,score,n);
  23.     outputsort(ID,score,n);

  24.     AverCour(sumcourse,score,n,aveforcour);

  25.     Averstud(sum,score,n,aveforscore);


  26.     Descbysum(n,sum,score);
  27.     outputsort(ID,score,n);

  28.     AscbyID(score,ID,n);
  29.     outputsort(ID,score,n);

  30.    search(ID,score,n);

  31.     analyse(total,percent);
  32.     lastoutput(ID,sum,aveforscore, score, n);
  33.     return 0;

  34. }

  35. //输入学生的学号和成绩
  36. //老毛病又犯了,写完函数的基本之后,没有补充应该需要什么样的数值传入函数
  37. void Inputidscore(int ID[],int score[][3],int n)
  38. {
  39.     int i,j;
  40.     printf("Please enter students' ID number and Chinese Math English score:\n");
  41.     for( i=0;i<n;i++)
  42.     {
  43.         printf("Please enter ID:");

  44.         scanf("ld%",&ID[i]);

  45.     for(j=0;j<3;j++)
  46.         {
  47.             printf("Please enter score:");
  48.             scanf(" %d",&score[i][j]);
  49.          }
  50.     }
  51. }


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

  65.     }
  66. }

  67. //计算每个学生总成绩与平均分
  68. void Averstud(int sum[],int score[][3],int n,int aveforscore[])
  69. {
  70.     int i, j;
  71.     for(i=0;i<n;i++)
  72.     {
  73.         for(j=0;j<3;j++)
  74.         {
  75.             sum[i]=sum[i]+score[i][j];
  76.         }
  77.         aveforscore[i]=(float)sum[i]/3;
  78.     }
  79. }


  80. //按总成绩由高到低排出次序表
  81. void Descbysum(int n,int sum[],int score[][3])
  82. {
  83.      int i,j,k,temp,b;
  84.      for(i=0;i<j;i++)
  85.     {
  86.         for(j=1;j<n;j++)
  87.         {
  88.             if(sum[i]<=sum[j])
  89.             {
  90.                 temp=sum[j];
  91.                 sum[j]=sum[i];
  92.                 sum[i]=temp;

  93.                 k=i;
  94.                 for(b=0;b<n;b++)
  95.                 {
  96.                     temp=score[k][b];
  97.                     score[k][b]=score[j][b];
  98.                     score[j][b]=temp;
  99.                 }
  100.             }

  101.         }
  102.     }
  103. }
  104. //按学号由小到大排序次序表
  105. void AscbyID(int score[][3],int ID[],int n)
  106. {
  107.     int i,j,a,temp;
  108.     for(i=0;i<n;i++)
  109.     {
  110.         for(j=1;j>i;j++)
  111.         {
  112.             if(ID[i]>ID[j])
  113.             {
  114.                 temp=ID[i];
  115.                 ID[i]=ID[j];
  116.                 ID[j]=temp;

  117.                 for(a=0;a<3;a++)
  118.                 {
  119.                     temp=score[i][a];
  120.                     score[i][a]=score[j][a];
  121.                     score[j][a]=temp;
  122.                 }
  123.             }
  124.         }
  125.     }
  126. }

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

  134.         for(j=0;j<3;j++)
  135.         {
  136.             printf(" %4d\t ",score[i][j]);
  137.         }

  138.         printf("\n");
  139.     }
  140. }

  141. //按学号查询学生排名及各科考试成绩
  142. void search(int ID[],int score[][3],int n)
  143. {
  144.     int i,searchnum;
  145.     printf("Please enter your searching ID number:/n");
  146.     scanf("%ld",&searchnum);
  147.     Checkinput(searchnum);

  148.     for(i=0;i<n;i++)
  149.     {
  150.         if(ID[i]==searchnum)
  151.         {
  152.             printf("%ld %d %d %d",ID[i],score[i][0],score[i][1],score[i][2]);
  153.         }
  154.     }
  155. }

  156. //判断学号是否输入正确
  157. void Checkinput(int searchnum)
  158. {
  159.      if(searchnum<=0)
  160.     {
  161.         printf("Input error!/n Please enter your searching number again:/n");
  162.         scanf("%ld",&searchnum);
  163.         Checkinput(searchnum);
  164.     }
  165.     else return;
  166. }

  167. //按各科平均成绩的5个类别,统计每个成绩类别的人数
  168. void Caculation(int total[][4],int aveforscore[],int n)
  169. {
  170.     int i,j,a,b;
  171.     for(a=0;a<3;a++)
  172.     {
  173.       for(i=0;i<n;i++)
  174.       {
  175.           b = aveforscore[i]/10;

  176.           switch(b)
  177.           {
  178.             case 9:
  179.             case 10:total[0][0]++;
  180.                     break;
  181.             case 8:total[0][1]++;
  182.                     break;
  183.             case 7:total[0][2]++;
  184.                     break;
  185.             case 6:total[0][3]++;
  186.                     break;
  187.             case 5:
  188.             case 4:
  189.             case 3:
  190.             case 2:
  191.             case 1:total[0][4]++;
  192.                     break;
  193.            }
  194.       }
  195.     }
  196. }

  197. //按照每个学生的平均成绩,统计每个成绩类别所占百分比
  198. void Caculaofpecent(int percent[1][5],int total[1][5],int n)
  199. {
  200.     int i;
  201.     for(i=0;i<5;i++)
  202.     {
  203.         percent[0][i]=total[0][i]/n;
  204.     }
  205. }

  206. //输出每个成绩所占百分比以及每个成绩类别所占人数
  207. void analyse(int total[1][5],int precent[1][5])
  208. {
  209.     int i,j;
  210.      printf("100~90 89~80 79~70 69~60 59~0/n");
  211.      printf("total ");
  212.      for(i=0;i<5;i++)
  213.      {
  214.          printf("%d",total[1][i]);
  215.      }
  216.      printf("/n precent ");
  217.      for(j=0;j<5;j++)
  218.      {
  219.          printf(" %d",precent[1][j]);
  220.      }
  221. }
  222. //输出每个学生的学号、考试成绩,课程总分和平均分
  223. void lastoutput(int ID[],int sum[], int aveforscore[], int score[][3],int n)
  224. {
  225.     int i,j;
  226.     printf(" ID SCROE SUM AVERAGE");
  227.     for(i=0;i<n;i++)
  228.     {
  229.         printf("%ld",ID[i]);

  230.         for(j=0;j<3;j++)
  231.         {
  232.             printf(" %d",score[i][j]);
  233.         }
  234.         printf(" %d",sum[i]);
  235.         printf(" %d",aveforscore[i]);
  236.         printf("/n");
  237.     }
  238. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

找出了点代码语法问题
1、22行 long ID[30] 改成  int ID[30]
2、
  1. void Inputidscore(int ID[],int score[][3],int n)
  2. {
  3.     int i,j;
  4.     printf("Please enter students' ID number and Chinese Math English score:\n");
  5.     for( i=0;i<n;i++)
  6.     {
  7.         printf("Please enter ID:");
  8.         //这里应该是 scanf("%d",&ID[i]);
  9.         scanf("ld%",&ID[i]);

  10.          for(j=0;j<3;j++)
  11.         {
  12.             printf("Please enter score:");
  13.             //这里不需要加空格
  14.             scanf("%d",&score[i][j]);
  15.          }
  16.     }
  17. }
复制代码

3、不管是输入还是输出 int 类型, 用 "%d",不要用 "%ld",更不要写成 "d%"
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-9 04:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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