C语言实验06_数学

C语言实验06_数学

实验06(01)判断素数的函数

6.2 写一个判断素数的函数,在主函数中输出 1~100 间的素数信息
输入描述
无
输出描述
输出 1~100 之间所有的素数,中间用空格隔开
输入样例
无
输出样例
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
#include <stdio.h>
int IsPrime(int n);
int main()
{
    int n;
    for (n = 2; n <= 100; n++)
    {
        if (IsPrime(n))
            printf("%d ", n);
    }
    printf("\n");
    return 0;
}
int IsPrime(int n)
{
    int i;
    for (i = 2; i < n; i++)
    {
        if (n % i == 0)
            return 0;
    }
    return 1;
}

实验06(02)不定方程组解

6.3 设 a,b,c 为三个大于零的正整数,计算并输出下列不定方程组解的个数 Number 以及满足
此条件的所有 a,b,c 之和 sum。题目描述
设 a,b,c 为三个大于零的正整数,计算并输出下列不定方程组解的个数 Number 以及满足此条件的所有 a,b,c 之和 sum。
不定方程组为:(1) a+b+c=13 (2)a-c=5,且(a,b,c>0)
请编写函数 countValue()实现程序要求并在主函数中输出结果。
输入描述
无
输出描述
在子函数 countValue()中依次输出满足条件的 a,b,c,并求 Number 和 sum,在主函数里输出
Number 和 sum
输入样例
无
输出样例
a=6,b=6,c=1
a=7,b=4,c=2
a=8,b=2,c=3
sum=39,Number=3
#include <stdio.h>
void countValue();
int main()
{
    countValue();
    return 0;
}
void countValue()
{
    int a, b, c, sum, Number;
    sum = 0, Number = 0;
    for (a = 1; a < 10; a++)
    {
        for (b = 1; b < 10; b++)
        {
            for (c = 1; c < 10; c++)
            {
                if (a + b + c == 13 && a - c == 5)
                {
                    printf("a=%d,b=%d,c=%d\n", a, b, c);
                    sum = sum + a + b + c;
                    Number++;
                }
            }
        }
    }
    printf("sum=%d,Number=%d\n", sum, Number);
}

实验06(03)Fibonacci

6.4 用递归调用法求 Fibonacci 数列前 30 个数。题目描述
递推公式如下:F1=1(n=1),F2=1(n=2),Fn=Fn-1+Fn-2(n>2)
输入描述
无
输出描述
每一个数以%15ld 的格式输出,每 5 个数换一行
输出样例
//忽略第一行的注释
1 1 2 3 5
8 13 21 34 55
89 144 233 377 610
987 1597 2584 4181 6765
10946 17711 28657 46368 75025
121393 196418 317811 514229 832040
#include <stdio.h>
void Fibonacci();
int main()
{
    Fibonacci();
    return 0;
}
void Fibonacci()
{
    long f1, f2, i, t;
    f1 = 1, f2 = 1, t = 0;
    for (i = 0; i < 15; i++)
    {
        if (t != 0 && t % 5 == 0)
            printf("\n");
        printf("%15ld", f1);
        t++;
        if (t != 0 && t % 5 == 0)
            printf("\n");
        printf("%15ld", f2);
        t++;
        f1 = f1 + f2;
        f2 = f1 + f2;
    }
    printf("\n");
}

实验06(04)计算分数

参加我校大学生英语演讲比赛决赛阶段的选手有 n 位,决赛中共有 m 位评委,假设所有选
手的成绩存放在一个二维数组中,根据评分规则计算每位选手的平均分,并按成绩逆序打印。
(评分的规则是:去掉一个最高分,去掉一个最低分,然后对剩下评委的评分求和平均即为
该选手得分)请编程实现(输出形式表 6.1)(假设 n=5, m=5)。本程序要求必须编写如下 2
个函数:
题目描述
参加我校大学生英语演讲比赛决赛阶段的选手有 n 位,决赛中共有 m 位评委,假设所有选
手的成绩存放在一个二维数组中,根据评分规则计算每位选手的平均分,并按成绩逆序打印。
(评分的规则是:去掉一个最高分,去掉一个最低分,然后对剩下评委的评分求和平均即为
该选手得分)请编程实现(输出形式表 6.1)(假设 n=5, m=5)。本程序要求必须编写如下 2
个函数:a)  求平均分的函数;
b)  排序函数。(排序时注意分数和姓名的对应关系,姓名可以使用拼音)
表 6.1 英语演讲比赛成绩表
Name  Ref1 Ref2 Ref3 Ref4 Ref5 Average 排名
ChenJun 9.3 8.5 9.2 9.2 9.5 9.23 1
ZhanRen 9.0 8.9 8.6 9.2 7.8 8.83 2
HuKai  8.6 8.4 8.8 9.5 8.0 8.63 3
XieQian 9.1 8.3 8.5 8.1 9.0 8.60 4
DuMu  7.8 8.2 9.7 8.0 9.4 8.53 5
【提示】选手姓名用二维字符数组,成绩用二维数组存储。排名可采用两种方法:(1)另用
一个数组存储选手的名次,根据名次输出成绩。(2)实现数据排序,注意按均分排序时,姓
名要对应(即姓名也要对应交换)。
输入描述
依次输入 5 位选手的姓名和成绩,空格隔开
输出描述
按照平均成绩从高到低排名并输出各个选手的姓名成绩平均成绩以及排名
输出格式:%10s%8.1f%8.1f%8.1f%8.1f%8.1f%8.2f%8d\n
输入样例
ChenJun 9.3 8.5 9.2 9.2 9.5
ZhanRen 9.0 8.9 8.6 9.2 7.8
HuKai 8.6 8.5 8.8 9.5 8.0
XieQian 9.1 8.3 8.5 8.1 9.0
DuMu 7.8 8.2 9.7 8.0 9.4
输出样例
ChenJun 9.3 8.5 9.2 9.2 9.5 9.23 1
ZhanRen 9.0 8.9 8.6 9.2 7.8 8.83 2
HuKai 8.6 8.5 8.8 9.5 8.0 8.63 3
XieQian 9.1 8.3 8.5 8.1 9.0 8.60 4
DuMu 7.8 8.2 9.7 8.0 9.4 8.53 5
#include <stdio.h>
void xuanze();
void scan();
void avg();
void print();
char Name[5][10];
double Score[5][5];
double a[5][5];
double Average[5];
int i, j;
int main()
{
    scan();
    xuanze();
    avg();
    print();
}
void scan()
{
    for (i = 0; i < 5; i++)
    {
        scanf("%s", Name[i]);
        for (j = 0; j < 5; j++)
        {
            scanf("%lf", &Score[i][j]);
        }
    }
    for (i = 0; i < 5; i++)
    {
        for (j = 0; j < 5; j++)
        {
            a[i][j] = Score[i][j];
        }
    }
}
void xuanze()
{
    int k;
    double t;
    for (i = 0; i < 5; i++)
    {
        for (k = 0; k < 5; k++)
        {
            for (j = 0; j < 4 - k; j++)
            {
                if (a[i][j] > a[i][j + 1])
                {
                    t = a[i][j];
                    a[i][j] = a[i][j + 1];
                    a[i][j + 1] = t;
                }
            }
        }
    }
}
void avg()
{
    double sum;
    sum = 0;
    for (i = 0; i < 5; i++)
    {
        sum = sum + a[i][1] + a[i][2] + a[i][3];
        Average[i] = sum / 3.0;
        sum = 0;
    }
}
void print()
{
    double t1, t2;
    int z;
    char m;
    for (i = 0; i < 4; i++)
    {
        for (j = 0; j < 4 - i; j++)
        {
            if (Average[j] < Average[j + 1])
            {
                t1 = Average[j];
                Average[j] = Average[j + 1];
                Average[j + 1] = t1;
                for (z = 0; z < 10; z++)
                {
                    m = Name[j][z];
                    Name[j][z] = Name[j + 1][z];
                    Name[j + 1][z] = m;
                }
                for (z = 0; z < 5; z++)
                {
                    t2 = Score[j][z];
                    Score[j][z] = Score[j + 1][z];
                    Score[j + 1][z] = t2;
                }
            }
        }
    }
    for (i = 0; i < 5; i++)
        printf("%10s%8.1f%8.1f%8.1f%8.1f%8.1f%8.2f%8d\n", Name[i], Score[i][0], Score[i][1], Score[i][2], Score[i][3], Score[i][4], Average[i], i + 1);
}
  • 2
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bmNkotc2AECynaY6

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值