2005年江苏大学885代码题(含答案)

一、前言

提示:以下是博主自己写的代码,仅供参考,欢迎有兴趣的朋友们留言讨论呀

二、正文

1.第一题

在这里插入图片描述

#include<stdio.h>
#include<math.h>
void calculate(double a, double b, double c);
int main() {
	double a, b, c;
	printf("请依次输入a,b,c:");
	scanf_s("%lf%lf%lf", &a, &b, &c);
	if (a == 0 && b == 0 && c == 0)printf("无穷多解\n");
	else if (a == 0 && b == 0 && c != 0)printf("无解\n");
	else if (a == 0 && b != 0)printf("唯一解:%.2lf\n", -c / b);
	else if (a != 0)calculate(a, b, c);
	main();//不需要的可以注释掉
	return 0;
}
void calculate(double a, double b, double c) {
	double j = b * b - 4 * a*c, x = -b / (2 * a), y;
	if (j < 0)
	{
		y = sqrt(-j) / (2 * a);
		printf("两个虚根:%.2lf+%.2lfi,%.2lf-%.2lfi\n", x, y, x, y);
	}
	if (j == 0)printf("唯一解%.2lf\n", x);
	if (j > 0)
	{
		y = sqrt(j) / (2 * a);
		printf("两个解:%.2lf和%.2lf\n", x + y, x - y);
	}
}

运行结果示例:
在这里插入图片描述
手写版:

2. 第二题

在这里插入图片描述

#include<stdio.h>

// 矩阵的行数
#define N1 5
// 矩阵的列数
#define N2 5
int aa[N1][N2];

// 判断行最大,是则返回1,否则返回0
int judge_x(int x, int y);
// 判断列最小,是则返回1,否则返回0
int judge_y(int x, int y);

void main()
{
	int  flag = 0;
	printf("请初始化二维数组:\n");
	for (int i = 0; i < N1; i++)
	{
		for (int j = 0; j < N2; j++)
		{
			scanf("%d", &aa[i][j]);
		}
	}
	printf("鞍点有:\n");
	for (int i = 0; i < N1; i++)
	{
		for (int j = 0; j < N2; j++)
		{
			if (judge_x(i, j) && judge_y(i, j))
			{
				printf("%d(%d,%d)\n", aa[i][j],i + 1, j + 1);
				flag = 1;
			}
		}
	}
	if (flag == 0)
	{
		printf("NO FIND!\n");
	}
}

int judge_x(int x, int y)
{
	for (int j = 0; j < N2; j++)
	{
		if (aa[x][y] < aa[x][j])
		{
			return 0;
		}
	}
	return 1;
}

int judge_y(int x, int y)
{
	for (int i = 0; i < N1; i++)
	{
		if (aa[x][y] > aa[i][y])
		{
			return 0;
		}
	}
	return 1;
}

示例数据1(来自2017的示例数据):

11 4 2 7 8
5 9 23 1 25
3 22 21 18 15
17 16 24 12 6
13 10 19 20 14

运行结果示例1:
在这里插入图片描述

示例数据2:

1 7 4 1 5
4 8 3 6 3
1 6 1 2 3
0 7 8 9 7
7 8 6 6 3

运行结果示例2:
在这里插入图片描述
手写版:

3.第三题

在这里插入图片描述

#include<stdio.h>

#define N 20

void main()
{
	double result = 0, up = 2, down = 1, t;
	for (int i = 0; i < N; i++)
	{
		result += up / down;
		t = up + down;
		down = up;
		up = t;
	}
	printf("数列的前%d项和为;%lf\n", N, result);
}

运行结果示例:
在这里插入图片描述
手写版:

4.第四题

在这里插入图片描述

#include<stdio.h>

// 学生个数
#define SN 30
// 课程门数
#define CN 5
// 平均成绩
float ave[SN];
// 学生信息
struct {
	// 学号
	char id[20];
	// 姓名
	char name[20];
	// 成绩
	float g[CN];
}s[SN];

// 求第一门课的平均分
void f1();
// 找2门以上不及格的学生,输出他们的学号、全部课程成绩和平均成绩
void f2();
// 找平均90分以上或各科85分以上的学生
void f3();
// 判断学生是否没门都85分以上,是则返回1,否则返回0
int g85(int i);
// 打印学生信息
void p(int i);

void main()
{
	// 输入
	for (int i = 0; i < SN; i++)
	{
		printf("请依次输入第%d个学生的信息:(姓名、学号、成绩)\n", i + 1);
		scanf("%s%s", s[i].name, s[i].id);
		for (int j = 0; j < CN; j++)
		{
			scanf("%f", &s[i].g[j]);
		}
	}
	f1();
	f2();
	f3();
}

void f1()
{
	float result = 0;
	for (int i = 0; i < SN; i++)
	{
		result += s[i].g[0];
	}
	printf("\n第一门课的平均分为:%.2f\n",result / SN);
}

void f2()
{
	float sum;
	int count;
	printf("有2门以上不及格的学生有:\n");
	for (int i = 0; i < SN; i++)
	{
		sum = 0;
		count = 0;
		// 遍历学生的各科成绩的同时求他的平均成绩
		for (int j = 0; j < CN; j++)
		{
			sum += s[i].g[j];
			if (s[i].g[j] < 60)
			{
				count++;
			}
		}
		ave[i] = sum / CN;
		if (count > 2)
		{
			p(i);
		}
	}
}

void f3()
{
	printf("平均分在90分以上或各科都在85分以上的学生有:\n");
	for (int i = 0; i < SN; i++)
	{
		if (ave[i] > 90 || g85(i))
		{
			p(i);
		}
	}
}

int g85(int i)
{
	for (int j = 0; j < CN; j++)
	{
		if (s[i].g[j] <= 85)
		{
			return 0;
		}
	}
	return 1;
}

void p(int i)
{
	printf("学号:%s,姓名:%s,平均分:%.2f,各科成绩:", s[i].id, s[i].name, ave[i]);
	for (int j = 0; j < CN; j++)
	{
		printf("%.2f\t", s[i].g[j]);
	}
	printf("\n");
}

示例数据:

姓名   	学号	数学	语文	物理	化学	英语
姓名1 	01	80	75	90	79	92
姓名2 	02	78	80	65	67	78
姓名3 	03	90	66	79	78	74
姓名4 	04	65	87	88	90	86
姓名5 	05	58	55	65	98	95
姓名6 	06	82	97	77	95	67
姓名7 	07	95	66	85	92	82
姓名8 	08	80	56	78	87	85
姓名9 	09	87	89	93	91	87
姓名10	10	97	67	69	98	82
姓名11	11	76	87	60	92	96
姓名12	12	78	88	59	78	93
姓名13	13	85	77	88	66	83
姓名14	14	85	66	84	87	87
姓名15	15	92	74	94	85	95
姓名16	16	75	82	79	86	74
姓名17	17	66	81	85	87	88
姓名18	18	53	93	57	90	90
姓名19	19	93	65	70	92	95
姓名20	20	94	80	76	94	77
姓名21	21	77	66	78	99	68
姓名22	22	88	55	68	67	55
姓名23	23	99	77	88	93	68
姓名24	24	72	96	77	86	69
姓名25	25	86	88	99	99	95
姓名26	26	79	60	54	98	74
姓名27	27	89	55	43	98	69
姓名28	28	90	99	99	95	70
姓名29	29	99	83	91	85	80
姓名30	30	56	55	50	78	92

运行结果示例:
在这里插入图片描述
在excel中验证:
在这里插入图片描述
手写版:

→返回总目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值