天天看點

帶注釋 習題9-6 按等級統計學生成績 (20分)

習題9-6 按等級統計學生成績 (20分)

本題要求實作一個根據學生成績設定其等級,并統計不及格人數的簡單函數。

函數接口定義:

其中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

//2020/08/17
#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;
}

/* 你的代碼将被嵌在這裡 */
int set_grade( struct student *p, int n ){
//這裡注意,*p=stu[] ;
//指針的相關常識 
	int i,j=0;
	for (i = 0;i < n;*p++,i++){
//這裡由于*p是一個位址變量,是以不能參與判斷 
		if ((*p).score >= 85) (*p).grade='A';
//記得*p要加上括号哦,不然就變成了 ,*(p.grage)了 
		else if ((*p).score >= 70&&(*p).score <85 ) (*p).grade='B';
		else if ((*p).score >= 60&&(*p).score <70 ) (*p).grade='C';
		else {
			(*p).grade='D';
			j++;
	//j存放不及格人數; 
		}
	}
	return j;
} 

           

繼續閱讀