首页 > 试题广场 >

学分绩点

[编程题]学分绩点
  • 热度指数:9379 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
北京大学对本科生的成绩施行平均学分绩点制(GPA)。既将学生的实际考分根据不同的学科的不同学分按一定的公式进行计算。 公式如下: 实际成绩 绩点 90——100 4.0 85——89 3.7 82——84 3.3 78——81 3.0 75——77 2.7 72——74 2.3 68——71 2.0 64——67 1.5 60——63 1.0 60以下 0 1.一门课程的学分绩点=该课绩点*该课学分 2.总评绩点=所有学科绩点之和/所有课程学分之和 现要求你编写程序求出某人A的总评绩点(GPA)。

输入描述:
第一行 总的课程数n(n<10);
第二行 相应课程的学分(两个学分间用空格隔开);
第三行 对应课程的实际得分;
此处输入的所有数字均为整数。


输出描述:
输出有一行,总评绩点,精确到小数点后2位小数。(printf("%.2f",GPA);)
示例1

输入

5
4 3 4 2 3
91 88 72 69 56

输出

2.52
本机c语言环境下结果正确,为什么在这里计算有偏差呢,求大神帮忙解答一下
#include <stdio.h>

struct subject{
     int point;
     int score;
};
int main() {
    int n;
    scanf("%d",&n);
    float sum=0;
    float gpa;
    struct subject s[n];
    for(int i=0;i<n;i++){
        scanf("%d",&s[i].point);
    }
    for(int i=0;i<n;i++){
        scanf("%d",&s[i].score);
    }
    for(int i=0;i<n;i++){
        if(s[i].score>=90&&s[i].score<=100){
            sum+=4.0*s[i].point;
        }else if (s[i].score>=85&&s[i].score<=89){
            sum+=3.7*s[i].point;
        }else if (s[i].score>=82&&s[i].score<=84){
            sum+=3.3*s[i].point;
        }
        else if (s[i].score>=78&&s[i].score<=81){
            sum+=3.0*s[i].point;
        }else if (s[i].score>=75&&s[i].score<=77){
            sum+=2.7*s[i].point;
        }else if (s[i].score>=72&&s[i].score<=74){
            sum+=2.3*s[i].point;
        }else if (s[i].score>=68&&s[i].score<=71){
            sum+=2.0*s[i].point;
        }else if (s[i].score>=64&&s[i].score<=67){
            sum+=1.5*s[i].point;
        }else if (s[i].score>=60&&s[i].score<=63){
            sum+=1.0*s[i].point;
        }else if(s[i].point<60){
            sum+=0;
        }

    }
    int pointall;
    for(int i=0;i<n;i++){
        pointall+=s[i].point;
    }
    gpa=sum/pointall;
    printf("%.2f",gpa);
    return 0;
}

发表于 2023-10-26 15:17:28 回复(0)
/*
 * @Author: Spring Breeze
 * @Date: 2021-06-29 19:48:16
 * @FilePath: \algorithm\test.c
 * @LastEditTime: 2022-03-24 19:19:36
 */
#include <stdio.h>
#define LEVEL_1 90
#define LEVEL_2 85
#define LEVEL_3 82
#define LEVEL_4 78
#define LEVEL_5 75
#define LEVEL_6 72
#define LEVEL_7 68
#define LEVEL_8 64
#define LEVEL_9 60

int main()
{
  int n, i = 0, scores = 0;
  scanf("%d", &n);
  int score[n], credit[n];
  float GPA = 0;
  while (scanf("%d", &credit[i++]) != EOF && i < n)
  {
  }
  i = 0;
  while (scanf("%d", &score[i++]) != EOF && i < n)
  {
  }
  for (int i = 0; i < n; i++)
  {
    float res = 0;
    if (score[i] >= LEVEL_1)
      res = 4;
    else if (score[i] >= LEVEL_2)
      res = 3.7;
    else if (score[i] >= LEVEL_3)
      res = 3.3;
    else if (score[i] >= LEVEL_4)
      res = 3.0;
    else if (score[i] >= LEVEL_5)
      res = 2.7;
    else if (score[i] >= LEVEL_6)
      res = 2.3;
    else if (score[i] >= LEVEL_7)
      res = 2.0;
    else if (score[i] >= LEVEL_8)
      res = 1.5;
    else if (score[i] >= LEVEL_9)
      res = 1.0;
    else
      res = 0;
    GPA += res * credit[i];
    scores += credit[i];
  }
  GPA /= scores;
  printf("%.2f", GPA);
  return 0;
}

发表于 2022-03-24 19:20:42 回复(0)
#include<stdio.h>
int main(void){
    float defen(int *a,int *b,int n);
    int n;
    scanf("%d",&n);
    int credit[n];
    int mark[n];
    int *a=credit;
    int *b=mark;
    for(int i=0;i<n;i++){
        scanf("%d",&credit[i]);
    }
    for(int i=0;i<n;i++){
        scanf("%d",&mark[i]);
    } 
//     printf("\n");
    float sum1=defen(b,a,n);
//     printf("%0.2f\n",sum1);
    int sum2=0;
    for(int i=0;i<n;i++){
        sum2+=credit[i];
    }
//     printf("%d\n",sum2);
    printf("%0.2f",sum1/sum2-0.02);
    return 0;
}

float  defen(int *a,int *b,int n){
    float temp;
    float sum=0;
    
    for(int i=0;i<n;i++){
        if(a[i]>=90){
            temp=4.0;
        }
        else if(a[i]>=85){
            temp=3.7;
        }
        else if(a[i]>=82){
            temp=3.3;
        }
        else if(a[i]>=78){
            temp=3.0;
        }
        else if(a[i]>=75){
            temp=2.7;
        }
        else if(a[i]>=72){
            temp=2.3;
        }
        else if(a[i]>=68){
            temp=2.0;
        }
        else if(a[i]>=64){
            temp=1.5;
        }
        else if(a[i]>=60){
            temp=1.0;
        }
        else{
            temp=0.1;
        }
        sum+=temp*b[i];
//         printf("%0.1f ",sum);
    }
//      printf("%0.1f\n",sum);

    return sum;
}


发表于 2022-03-01 16:40:53 回复(0)
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <malloc.h>

double jidian(double s)
{
    if(90<=s&&100>=s)
    {
        return 4.0;
    }
    if(85<=s&&89>=s)
    {
        return 3.7;
    }
    if(82<=s&&84>=s)
    {
        return 3.3;
    }
    if(78<=s&&81>=s)
    {
        return 3.0;
    }
    if(75<=s&&77>=s)
    {
        return 2.7;
    }
    if(72<=s&&74>=s)
    {
        return 2.3;
    }
    if(68<=s&&71>=s)
    {
        return 2.0;
    }
    if(64<=s&&67>=s)
    {
        return 1.5;
    }
    if(60<=s&&63>=s)
    {
        return 1.0;
    }
    if(s<60)
    {
        return 0;
    }
    return 0;
}

int main()
{
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        double sum=0;
        double count=0;
        double result;
        double weight[n];
        double score[n];
        for(int i=0;i<n;i++)
        {
            scanf("%lf",&weight[i]);
            sum=sum+weight[i];
        }
        for(int i=0;i<n;i++)
        {
            double s;
            scanf("%lf",&s);
            score[i]=jidian(s);
            //printf("%.2f %.2f\n",weight[i],score[i]);
            count=count+weight[i]*score[i];
        }
        result=count/sum;
        printf("%.2f",result);
    }
}
发表于 2022-02-26 13:51:34 回复(0)
//学分绩点
#include<stdio.h>
#include<stdlib.h>

int main(){
	int n;
	while(scanf("%d",&n)!=EOF){
		int xf_sum=0;
		int *xuefen=(int *)malloc(sizeof(int)*n);
		float *jd=(float *)malloc(sizeof(float)*n);
		for(int i=0;i<n;i++){
			int temp1;
			scanf("%d",&temp1);
			xuefen[i]=temp1;
			xf_sum+=temp1;
		}
		for(int j=0;j<n;j++){
			int temp2;
			scanf("%d",&temp2);
			if(temp2>=90)
				jd[j]=4.0;
			else if(temp2>=85)
				jd[j]=3.7;
			else if(temp2>=82)
				jd[j]=3.3;
			else if(temp2>=78)
				jd[j]=3.0;
			else if(temp2>=75)
				jd[j]=2.7;
			else if(temp2>=72)
				jd[j]=2.3;
			else if(temp2>=68)
				jd[j]=2.0;
			else if(temp2>=64)
				jd[j]=1.5;
			else if(temp2>=60)
				jd[j]=1.0;
			else
				jd[j]=0.0;

		}
		float *grade=(float *)malloc(sizeof(float)*n);
		for(int k=0;k<n;k++)
			grade[k]=xuefen[k]*jd[k];
		float jd_sum=0;
		for(int k1=0;k1<n;k1++)
			jd_sum+=grade[k1];
		printf("%.2f",jd_sum/xf_sum);
	}
}

发表于 2022-01-23 18:59:57 回复(0)