2022秋 - C实验A类 –实验8 结构体

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

本题要求实现一个根据学生成绩设置其等级,并统计不及格人数的简单函数。

函数接口定义:

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

其中p是指向学生信息的结构体数组的指针,该结构体的定义为:

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

n是数组元素个数。学号num、姓名name和成绩score均是已经存储好的。set_grade函数需要根据学生的成绩score设置其等级grade。等级设置:85-100为A,70-84为B,60-69为C,0-59为D。同时,set_grade还需要返回不及格的人数。

裁判测试程序样例:

#include <stdio.h>
#define MAXN 10

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

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

int main()
{   struct student stu[MAXN], *ptr;
    int n, i, count;
    
    ptr = stu;
    scanf("%d\n", &n);
    for(i = 0; i < n; i++){
       scanf("%d%s%d", &stu[i].num, stu[i].name, &stu[i].score);
    } 
   count = set_grade(ptr, n);
   printf("The count for failed (<60): %d\n", count);
   printf("The grades:\n"); 
   for(i = 0; i < n; i++)
       printf("%d %s %c\n", stu[i].num, stu[i].name, stu[i].grade);
    return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

10
31001 annie 85
31002 bonny 75
31003 carol 70
31004 dan 84
31005 susan 90
31006 paul 69
31007 pam 60
31008 apple 50
31009 nancy 100
31010 bob 78

输出样例:

The count for failed (<60): 1
The grades:
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 count=0,i;
    for(i=0;i<n;i++)
    {
        if(85<=p[i].score&&p[i].score<=100)
            p[i].grade='A';
        else if(70<=p[i].score&&p[i].score<=84)
            p[i].grade='B';
        else if(60<=p[i].score&&p[i].score<=69)
            p[i].grade='C';
        else if(0<=p[i].score&&p[i].score<=59)
        {
            p[i].grade='D';
            count++;
        }
    }
    return count;
}

6-2 修改学生成绩

输入n(n<50)个学生的成绩信息,再输入一个学生的学号、课程以及成绩,在自定义函数update_score()中修改该学生指定课程的成绩。

函数接口定义:

int update_score(struct student *p, int n, int num, int course, int score);

其中p是结构指针,n是学生个数,course是课程序号,score是修改后的课程成绩。函数须返回指定学生的顺序位置,如果查无此人,返回-1。

裁判测试程序样例:


#include <stdio.h>
struct student{       /*学生信息结构定义*/
  int num;            /* 学号 */
  char name[10];      /* 姓名 */
  int math, english, computer;   /* 三门课程成绩 */
}; 
int update_score(struct student *p, int n, int num, int course, int score); /*函数声明*/

int main(void)
{    
  int i, pos, n, num, course, score;
  struct student students[50];   /* 定义结构数组 */
  scanf("%d", &n);
  for(i = 0; i < n; i++){
    scanf("%d", &students[i].num);
    scanf("%s", students[i].name); 
    scanf("%d", &students[i].math); 
    scanf("%d", &students[i].english); 
    scanf("%d", &students[i].computer);
  }

  /* 输入待修改学生信息 */
  scanf("%d", &num);
  scanf("%d", &course);
  scanf("%d", &score);

  /*调用函数,修改学生成绩*/
  pos = update_score(students, n, num, course, score);

  /*输出修改后的学生信息*/
  if(pos == -1)
    printf("Not found!\n");
  else
  {  printf("%d,%d,%d,%d\n", students[pos].num, students[pos].math, students[pos].english, students[pos].computer);
  }

  return 0;
}

/* 请在这里填写答案 */

输入样例:

3
101 Zhang 78 87 85
102 Wang 91 88 90
103 Li 75 90 84
102 2 89

输出样例:

在这里给出相应的输出。例如:

102,91,89,90

代码段:

int update_score(struct student *p, int n, int num, int course, int score)
{
    int i,count;
    for(i=0;i<n;i++)
        if(p[i].num==num)
        {
            if(course==1)
                p[i].math=score;
            if(course==2)
                p[i].english=score;
            if(course==3)
                p[i].computer=score;
            count=1;
            return i;
        }
    if(count==0)
        return -1;
}

7-1 输出平均分最高的学生信息

假设学生的基本信息包括学号、姓名、三门课程成绩以及个人平均成绩,定义一个能够表示学生信息的结构类型。输入n(1<=n<=10)个学生的成绩信息,计算并输出平均分最高的学生信息,平均分保留两位小数。如果平均分最高的学生有多个,按输入顺序输出第一个学生的信息。

输入格式:

输入整数n(1<=n<=10),在下面n行输入n个学生的信息,包括学号、姓名、三门课程成绩(整数)。

输出格式:

在一行中输出平均分最高的学生信息:学号、姓名、平均分(保留两位小数)。

输入样例:

3
101 Zhang 78 87 85
102 Wang 91 88 90
103 Li 75 90 84

输出样例:

num:102,name:Wang,average:89.67

代码段:

#include <stdio.h>
struct student
{
    int num; 
    char name[10];  
    int c1,c2,c3;
}; 

int main(void)
{
    int i, pos, n, num, course, score;
    struct student students[50];
    scanf("%d", &n);
    for(i = 0; i < n; i++)
    {
        scanf("%d", &students[i].num);
        scanf("%s", students[i].name); 
        scanf("%d", &students[i].c1); 
        scanf("%d", &students[i].c2); 
        scanf("%d", &students[i].c3);
    }
    double aver=0,temp;
    int max=0;
    aver=aver+students[0].c1+students[0].c2+students[0].c3;
    aver=aver/3.0;
    for(i = 0; i < n; i++)
    {
        temp=0;
        temp=temp+students[i].c1+students[i].c2+students[i].c3;
        temp=temp/3.0;
        if(temp>aver)
        {
            aver=temp;
            max=i;
        }
    }
    printf("num:%d,name:%s,average:%.2f",students[max].num,students[max].name,aver);
}

7-2 通讯录排序

输入n个朋友的信息,包括姓名、生日、电话号码,本题要求编写程序,按照年龄从大到小的顺序依次输出通讯录。题目保证所有人的生日均不相同。

输入格式:

输入第一行给出正整数n(<10)。随后n行,每行按照“姓名 生日 电话号码”的格式给出一位朋友的信息,其中“姓名”是长度不超过10的英文字母组成的字符串,“生日”是yyyymmdd格式的日期,“电话号码”是不超过17位的数字及+-组成的字符串。

输出格式:

按照年龄从大到小输出朋友的信息,格式同输出。

输入样例:

3
zhang 19850403 13912345678
wang 19821020 +86-0571-88018448
qian 19840619 13609876543

输出样例:

wang 19821020 +86-0571-88018448
qian 19840619 13609876543
zhang 19850403 13912345678

代码段:

#include <stdio.h>

struct book
{
    char name[10];
    int birday;
    char tel[17];
};

int main()
{
    struct book books[10];
    struct book temp;
    int n,i,j;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%s",books[i].name);
        scanf("%d",&books[i].birday);
        scanf("%s",books[i].tel);
    }
    for(i=0;i<n;i++)
        for(j=i;j<n;j++)
            if(books[i].birday>books[j].birday)
            {
                temp=books[i];
                books[i]=books[j];
                books[j]=temp;
            }
    for(i=0;i<n;i++)
    {
        printf("%s %d %s\n",books[i].name,books[i].birday,books[i].tel);
    }
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值