2019春第九周编程总结
发布日期:2025-06-19 14:32:51 浏览次数:3 分类:精选文章

本文共 3228 字,大约阅读时间需要 10 分钟。

学习总结:C语言程序设计课程作业

6-1 按等级统计学生成绩

问题描述:实现一个根据学生成绩设置等级并统计不及格人数的简单函数。

函数接口定义

int set_grade(struct student *p, int n);

其中,struct student的定义为:

struct student {      int num;      char name[20];      int score;      char grade;  };

输入样例

学生信息:
31001 annie 853
31002 bonny 753
31003 carol 703
31004 dan 843
31005 susan 903
31006 paul 693
31007 pam 603
31008 apple 503
31009 nancy 100
31010 bob 78

输出样例

不及格人数:1
学生成绩及等级:
31001 annie A
31002 bonny B
31003 carol B
31004 dan B
31005 susan A
31006 paul C
31007 pam C
31008 apple D
31009 nancy A
31010 bob B

实验代码

int set_grade(struct student *p, int n) {      int i, sum = 0;      for (i = 0; i < n; i++) {          if ((*p).score > 85 && (*p).score <= 100) {              (*p).grade = 'A';          } else if ((*p).score >= 70 && (*p).score <= 84) {              (*p).grade = 'B';          } else if ((*p).score >= 60 && (*p).score <= 69) {              (*p).grade = 'C';          } else {              (*p).grade = 'D';              sum++;          }          p++;      }      return sum;  }

设计思路

  • 遍历每个学生记录。
  • 根据成绩范围设定等级。
  • 统计低于60分的学生人数。
  • 遇到的问题及解决

  • 初始代码未正确处理大括号,导致语法错误。
  • 通过检查代码逻辑,确保每个条件判断正确无误。
  • 测试样例输入后,确认函数正确返回不及格人数,并正确设置等级。
  • 7-1 一帮一学习小组分组

    问题描述:根据学生成绩排名,将名次最高的异性学生分为一组。

    输入格式

    • 第一行:正偶数N(≤50)。
    • 后N行:名次从高到低的学生信息,包括性别(0女,1男)和姓名。

    输出格式

    按名次从高到低的顺序输出每组的两个学生姓名。

    输入样例

    8
    0 Amy
    1 Tom
    1 Bill
    0 Cindy
    0 Maya
    1 John
    1 Jack
    0 Linda

    输出样例

    Amy Jack
    Tom Linda
    Bill Maya
    Cindy John

    实验代码

    #include 
    struct student { int sex; char name[10]; int flag; }; int main() { int n; scanf("%d", &n); struct student students[n]; for (int i = 0; i < n; i++) { scanf("%d %s", &students[i].sex, students[i].name); students[i].flag = 0; } for (int i = 0; i <= n/2; i++) { int j = n - 1 - i; if (students[i].sex != students[j].sex && students[i].flag == 0 && students[j].flag == 0) { printf("%s %s\n", students[i].name, students[j].name); students[i].flag = 1; students[j].flag = 1; } } return 0; }

    设计思路

  • 读取学生信息并初始化标记。
  • 从前半部分和后半部分分别遍历,找到异性配对。
  • 确保每对学生的性别不同时输出,并标记已配对。
  • 遇到的问题及解决

  • 初始代码中 for 语句的条件书写错误。
  • 通过调整循环条件,确保正确遍历学生数组。
  • 最终代码通过测试样例,正确完成分组任务。
  • 7-2 考试座位号查询

    问题描述:根据试机座位号查询考生的考试座位号。

    输入格式

    • 第一行:正整数N(≤1000)。
    • 后N行:每个考生的准考证号、试机座位号、考试座位号。
    • 最后给出M个试机座位号,查询对应的考试座位号。

    输入样例

    10
    43310120150912233 2 43310120150912119
    4 13310120150912126 1 33310120150912002 3 223 4

    输出样例

    3310120150912002 23310120150912119 1

    实验代码

    #include 
    struct a { char num1[100]; int num2; int num3; }; int main() { int N; scanf("%d", &N); struct a s[N]; for (int i = 0; i < N; i++) { scanf("%s %d %d", s[i].num1, &s[i].num2, &s[i].num3); } int M; scanf("%d", &M); int query[M]; for (int i = 0; i < M; i++) { scanf("%d", &query[i]); } for (int i = 0; i < M; i++) { for (int j = 0; j < N; j++) { if (s[j].num2 == query[i]) { printf("%s %d\n", s[j].num1, s[j].num3); break; } } } return 0; }

    设计思路

  • 读取考生信息并存储。
  • 读取查询的试机座位号列表。
  • 对每个查询,遍历考生信息,找到对应的考试座位号并输出。
  • 遇到的问题及解决

  • 初始代码未正确读取多个数字字段。
  • 通过调整 scanf 格式,确保准考证号、试机座位号和考试座位号正确读取和存储。
  • 最终代码通过测试样例,正确完成座位号查询任务。
  • 上一篇:20个正则表达式,让你少写1,000行代码
    下一篇:2019.2.25 区块链论文翻译

    发表评论

    最新留言

    路过,博主的博客真漂亮。。
    [***.116.15.85]2026年06月21日 15时50分49秒