模电会挂吗?

模电会挂吗?

最近,模电考试成绩快公布了,心中忐忑不安,但也无可奈何。于是写了一个程序,预测模电会不会挂科。

各项成绩及其默认权重如下表所示:

各项成绩所占权重
第1次过程考核5%
第2次过程考核5%
第3次过程考核5%
第4次过程考核5%
作业10%
实验10%
慕课10%
期末考试卷面成绩50%

此程序可以计算模电课程的平时成绩(前4次过程考核及作业、实验、慕课得分按比例折算后的成绩),并且给出不挂的情况下的最少卷面分数!

运行界面:

开始界面:
在这里插入图片描述
默认权重:
在这里插入图片描述
更改权重:
在这里插入图片描述
必挂的情况:
在这里插入图片描述

点击此处即可下载安装:
模电会挂吗.apk

源代码:
#include <stdio.h>
#define M 7
float pscj = 0;
float pass_fail = 0;
float cj[2][M] = { {0} ,{0.05,0.05,0.05,0.05,0.1,0.1,0.1} };
//第一行存储各项得分,第二行存储各项权重,默认权重初始化时已写入

float Daily_score(float score[2][M])//计算平时分数
{
	float daily_cj = 0;
	float i_cj = 0;

	for (int i = 0; i < M; i++) 
	{
		i_cj = cj[0][i] * cj[1][i];
		daily_cj += i_cj;
	}
	return daily_cj;
}
void Q_A_1()//设置得分占比(各项权重)
{
	float cj0[M] = { 0 };
	for (int i = 0; i < 4; i++)
	{
		printf("请输入“第%d次过程考核”得分占比(小数):\n", i + 1);
		scanf_s("%f", &cj0[i]);
	}
	printf("请输入“作业”得分占比(小数):");
	scanf_s("%f", &cj0[4]);
	printf("请输入“实验”得分占比(小数):");
	scanf_s("%f", &cj0[5]);
	printf("请输入“慕课”得分占比(小数):");
	scanf_s("%f", &cj0[6]);
	for (int i = 0; i < M; i++) 
	{
		cj[1][i] = cj0[i];
	}
}

void y_n() //更改权重
{
	char x = 'x';
	
	scanf_s("%c", &x,2);

	if (x == 'n' || x == 'N')
	{
		printf("当前得分比重为默认值!\n");
	}
	else if (x == 'y' || x == 'Y')
	{
		Q_A_1();
		printf("得分比重已重置!\n\n");
	}
	else
	{
		printf("请输入:“y”或“n”!\n");
		y_n();
	}
}
void Show() //展示默认信息
{
	printf("本程序可以计算您的模电课程的平时成绩,并且给出您不挂的情况下的最少卷面分数!\n\n");
	printf("开始!\n\n设置得分比重(默认):\n");
	for (int i = 0; i < 4; i++)
	{
		printf("“第%d次过程考核”得分占比:%.2f %%\n", i + 1, 100.00 * cj[1][i]);
	}
	printf("“作业”得分占比:%.2f %%\n", 100.00 * cj[1][4]);
	printf("“实验”得分占比:%.2f %%\n", 100.00 * cj[1][5]);
	printf("“慕课”得分占比:%.2f %%\n", 100.00 * cj[1][6]);
	printf("是(y)否(n)需要更改比重?\n请输入:“y”或“n”\n");
	y_n();
}
void Q_A()//写入平时各项分数
{
	for (int i = 0; i < 4;i++) 
	{
		printf("请输入“第%d次过程考核”得分:", i + 1);
		scanf_s("%f",&cj[0][i]);
	}
	printf("请输入“作业”得分:");
	scanf_s("%f", &cj[0][4]);
	printf("请输入“实验”得分:");
	scanf_s("%f", &cj[0][5]);
	printf("请输入“慕课”得分:");
	scanf_s("%f", &cj[0][6]);
}

int flag(float arr[2][M]) //判断分数是否异常
{
	int j = 0;
	for (int i = 0; i < M; i++) 
	{
		if (cj[0][i] > 100 || cj[0][i] < 0)
		{
			j++;
		}
	}
	return j;
}

int main(int argc, char** argv)
{
	Show();
	loop: 
	{ 
		Q_A();
		if (flag(cj) == 0)
		{
			pscj = Daily_score(cj);
			printf("您的平时成绩是:%.2f\n", pscj);

			pass_fail = 2.00 * (60.00 - pscj);
			if (pass_fail <= 100) 
			{
				printf("您的卷面成绩至少为 %.2f 才能不挂科!\n\n", pass_fail);
				printf("谢谢使用!祝您模电不挂科!\n");
			}
			else 
			{
				printf("很遗憾!\n您的平时成绩太低,您的卷面成绩即使是满分(100)也会挂科!\n");
				printf("不要气馁,明年再战!\n");
			}
		}
		else
		{
			printf("输入有误!\n请输入正确的得分(必须为0~100范围内的数字)!\n\n");
			goto loop;
		}
	}
	return 0;
}

写在最后:
此代码还有许多不完善的地方。
比如:运行时

请输入:“y”或“n”!

会重复出现。知道如何解决的同学,还请不吝赐教!欢迎评论斧正!

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值