一、前言
提示:以下是博主自己写的代码,仅供参考,欢迎有兴趣的朋友们留言讨论呀
二、正文
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中验证:
手写版: