C语言程序设计练习(四)

1.某幼儿园里有五个小朋友编号为12345,他们按自己的编号顺序围坐在一张圆桌旁,他们身上都有若干个糖果(键盘输入),现在他们做一个分糖果游戏,从一号小朋友开始将自己的糖果均分三份,如果有多余的糖果则立即吃掉,自己留一份,其余两份分给他的相邻的两个小朋友,接着二号,三号,四号,五号小朋友,同样那么做。问一轮后,每个小朋友手上分别有多少颗糖果?

#include <stdio.h>  
  
#define KIDS 5  
  
// 函数用于计算分发糖果后的结果  
void distributeCandies(int candies[]) {  
    int tempCandies;  
    for (int i = 0; i < KIDS; i++) {  
        tempCandies = candies[i];  
          
        // 计算每个小朋友分出去的糖果数(先除后余)  
        int share = tempCandies / 3;  
        int left = tempCandies % 3; // 剩下的糖果自己吃掉  
  
        // 更新当前小朋友的糖果数  
        candies[i] = share;  
  
        // 分配糖果给相邻的小朋友  
        int next = (i + 1) % KIDS;  
        int prev = (i - 1 + KIDS) % KIDS; // 处理环状结构  
        candies[next] += share;  
        candies[prev] += share;  
  
        // 吃掉多余的糖果  
        candies[i] += left;  
    }  
}  
  
int main() {  
    int candies[KIDS];  
  
    // 从键盘输入每个小朋友的糖果数量  
    printf("请输入每个小朋友的糖果数量(共%d个小朋友): ", KIDS);  
    for (int i = 0; i < KIDS; i++) {  
        scanf("%d", &candies[i]);  
    }  
  
    // 执行分发过程  
    distributeCandies(candies);  
  
    // 打印结果  
    printf("一轮后,每个小朋友手上的糖果数量分别为:");  
    for (int i = 0; i < KIDS; i++) {  
        printf("%d ", candies[i]);  
    }  
    printf("\n");  
  
    return 0;  
}

2.读入一个单精度浮点数,输出保留3位小数的浮点数

#include <stdio.h>  
  
int main() {  
    float num;  
  
    // 读入一个单精度浮点数  
    printf("请输入一个单精度浮点数: ");  
    scanf("%f", &num);  
  
    // 输出保留3位小数的浮点数  
    printf("保留3位小数的浮点数是:%.3f\n", num);  
  
    return 0;  
}

3.读入一个双精度浮点数,输出保留12位小数的浮点数

#include <stdio.h>  
  
int main() {  
    double num;  
  
    // 读入一个双精度浮点数  
    printf("请输入一个双精度浮点数: ");  
    scanf("%lf", &num);  
  
    // 输出保留12位小数的浮点数  
    printf("保留12位小数的浮点数是:%.12lf\n", num);  
  
    return 0;  
}

4.给定一个字符*,用它来构造一个对角线长5个字符,倾斜放置的菱形。

#include <stdio.h>  
  
int main() {  
    int rows = 5; // 菱形的行数  
    int maxStars = (rows - 1) / 2; // 菱形上半部分(不包括中间行)每行的最大*数  
  
    // 打印上半部分(包括中间行)  
    for (int i = 0; i <= maxStars; i++) {  
        // 打印前导空格  
        for (int j = 0; j < maxStars - i; j++) {  
            printf(" ");  
        }  
        // 打印*  
        for (int k = 0; k < 2 * i + 1; k++) {  
            printf("*");  
        }  
        printf("\n");  
    }  
  
    // 打印下半部分  
    for (int i = maxStars - 1; i >= 0; i--) {  
        // 打印前导空格  
        for (int j = 0; j < maxStars - i; j++) {  
            printf(" ");  
        }  
        // 打印*  
        for (int k = 0; k < 2 * i + 1; k++) {  
            printf("*");  
        }  
        printf("\n");  
    }  
  
    return 0;  
}

5.输入一个三位数,把这个数的个位数和百位数对调,然后输出对调的数

#include <stdio.h>  
  
int main() {  
    int num, swappedNum;  
    int h, t, u; // h for hundreds, t for tens, u for units  
  
    // 输入一个数(这里假设它是三位数)  
    printf("请输入一个数: ");  
    scanf("%d", &num);  
  
    // 分解数字  
    h = num / 100;     // 获取百位数  
    t = (num / 10) % 10; // 获取十位数(在本例中未直接使用,但保留以展示完整性)  
    u = num % 10;      // 获取个位数  
  
    // 对调个位和百位,十位保持不变  
    swappedNum = u * 100 + t * 10 + h;  
  
    // 输出结果  
    printf("对调后的数是: %d\n", swappedNum);  
  
    return 0;  
}

6.已知某班有男同学x位女同学y位x位男生平均分是87分,y位女生的平均分是85分,问全体同学平均分是多少分?

#include <stdio.h>  
  
int main() {  
    int x, y; // 分别代表男生和女生的人数  
    float maleAvg = 87.0, femaleAvg = 85.0; // 男生和女生的平均分  
    float totalScore, totalAvg; // 全体同学的总分和平均分  
  
    // 假设这里x和y已经被某种方式赋值,例如通过用户输入  
    // 但为了示例的简洁性,我们直接给它们赋值  
    x = 30; // 假设男生有30人  
    y = 25; // 假设女生有25人  
  
    // 计算全体同学的总分  
    totalScore = x * maleAvg + y * femaleAvg;  
  
    // 计算全体同学的平均分  
    totalAvg = totalScore / (x + y);  
  
    // 输出结果  
    printf("全体同学的平均分是:%.2f分\n", totalAvg);  
  
    return 0;  
}

7.歌手大赛上,六名评委给一位参赛者打分,六个人打分的平均分为9.6分。如果去掉一个最高分,这名参赛者的平均分为9.4分。如果去掉一个最低分,这名参赛者的平均分为9.8分。如果去掉一个最低分和一个最高分,这名参赛者的平均分是多少?

#include <stdio.h>  
  
int main() {  
    // 已知条件  
    float avgAll = 9.6; // 所有评委的平均分  
    float avgWithoutHighest = 9.4; // 去掉一个最高分后的平均分  
    float avgWithoutLowest = 9.8; // 去掉一个最低分后的平均分  
    int numJudges = 6; // 评委人数  
  
    // 计算总分  
    float totalScore = avgAll * numJudges;  
  
    // 计算去掉一个最高分后的总分  
    float totalWithoutHighest = avgWithoutHighest * (numJudges - 1);  
  
    // 计算最高分  
    float highestScore = totalScore - totalWithoutHighest;  
  
    // 计算去掉一个最低分后的总分  
    float totalWithoutLowest = avgWithoutLowest * (numJudges - 1);  
  
    // 计算最低分  
    float lowestScore = totalScore - totalWithoutLowest;  
  
    // 计算去掉一个最低分和一个最高分后的总分  
    float totalWithoutLowestAndHighest = totalScore - highestScore - lowestScore;  
  
    // 计算去掉一个最低分和一个最高分后的平均分  
    float avgWithoutLowestAndHighest = totalWithoutLowestAndHighest / (numJudges - 2);  
  
    // 输出结果  
    printf("去掉一个最低分和一个最高分后,参赛者的平均分是:%.2f\n", avgWithoutLowestAndHighest);  
  
    return 0;  
}

8.传说古代的叙拉古国王海伦二世发现的公式利用三角形的三条边长来求取三角形面积,已知三角形ABC中的三边长分别为ABC求三角形的面积

#include <stdio.h>  
#include <math.h> // 引入数学库以使用sqrt函数  
  
// 函数声明  
double calculateArea(double a, double b, double c);  
  
int main() {  
    double a, b, c, area;  
  
    // 输入三角形的三边长  
    printf("请输入三角形ABC的三边长(用空格分隔): ");  
    scanf("%lf %lf %lf", &a, &b, &c);  
  
    // 检查是否满足三角形的条件  
    if (a + b > c && a + c > b && b + c > a) {  
        // 计算并输出面积  
        area = calculateArea(a, b, c);  
        printf("三角形ABC的面积为: %.2f\n", area);  
    } else {  
        printf("输入的三边长不能构成三角形!\n");  
    }  
  
    return 0;  
}  
  
// 根据海伦公式计算三角形面积的函数  
double calculateArea(double a, double b, double c) {  
    double p = (a + b + c) / 2; // 计算半周长  
    return sqrt(p * (p - a) * (p - b) * (p - c)); // 返回面积  
}

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

混迹网络的权某

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

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

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

打赏作者

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

抵扣说明:

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

余额充值