COMP1711Coursework1-1

该C程序接收命令行参数,验证学生ID和成绩的有效性,读取输入文件中的数据,计算每个学生的平均分,并将结果写入输出文件。程序检查学生ID是否在有效范围内,成绩是否在0-100之间,并对过高或过低的成绩进行调整。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

COMP1711Coursework1-1
linux C

#include <stdio.h>
#include <stdlib.h>


int main( int argc, char **argv ) {

  // command line arguments
  if(argc != 4)
  {
    printf("Incorrect arguments given. Expecting nStudents nGrades fileName. Exiting.\n");
    exit(0);
  }

  int nStudents = atoi(argv[1]);
  if( nStudents < 0 || nStudents > 100 )
  {
    printf("Requires 1 to 100 students. Exiting.\n");
    exit(0);
  }
  int nGrades = atoi(argv[2]);
  if( nGrades < 0 || nGrades > 8 )
  {
    printf("Requires 1 to 8 grades. Exiting.\n");
    exit(0);
  }
  FILE *fp;
  if((fp = fopen(argv[3], "r")) == NULL)
  {
    printf("Input file does not exist. Exiting.\n");
    exit(0);
  }

  
  int student_id[nStudents];
  int avgs[nStudents];
  int grades[nStudents][nGrades];

  // reading from file
  printf("Input file. Opening.\n");
  int k = 0;
  int m = 0;
  while(!feof(fp))
  {
    for(int i = 0; i < nStudents; i++)
    {
      for(int j = 0; j < nGrades + 1; j++)
      {
        if(j % 5 == 0)
        {
          fscanf(fp, "%d", &student_id[k]);
          k++;
        }else{
          fscanf(fp, "%d", &grades[i][j-1]);
        }
      }
    }
  }

  printf("Input file. Closing.\n");
  fclose(fp);

  
  // data processing
  printf("Checking data.\n");
  
  for(int i = 0; i < nStudents; i++)
  {
    for(int j = 0; j < nGrades; j++)
    {

      int grade = grades[i][j];
      int id = student_id[i];

      if (id < 2022000 || id > 2022099)
    {
      printf("Found an invalid student id: %d. Exiting.\n", id ); // requires student id
      exit(0);
    }
      if(grade < 0 || grade > 100)
    {
      printf("Found an invalid grade: id %d grade %d. Exiting.\n", id,grade ); // requires student id and relevant grade
      exit(0);
    }

      printf("Correcting student %d grade %d\n", id,grade ); // requires student id and relevant grade
    }
  }
  

  // compute averages
  printf("Computing averages.\n");
  for(int i = 0; i < nStudents; i++)
  {
    int total = 0;
    for(int j = 0; j < nGrades; j++)
    {
      int grade = grades[i][j];
      if(grade > 90)
      {
        grade = 90;
      }
      if(grade < 20)
      {
        grade = 20;
      }
      total += grade;
    }
    int avg = 0;
    avg = (int)(total * 1.0 / nGrades + 0.5);
    avgs[i] = avg;
  }

  // writing to file
  printf("Output file. Opening.\n");
  FILE* out;
  out = fopen("averages.txt", "w");


  printf("Output file. Closing.\n");
  for(int i = 0; i < nStudents; i++)
  {
      fprintf(out, "%d %d\n", student_id[i], avgs[i]);
  }
  fclose(out);
  return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值