yyy8086 2023-11-05 10:39 采纳率: 100%
浏览 11
已结题

C语言循环基础实践操作

本人大一新生C语言课程学校进度学到循环整章节完,这是本周的周末的homework,毫无头绪,麻烦各位指点。
这是题目内容:
南京某高校退休教授潜心研究数学,发现一个用于计算1/997的技巧,并据此得知计算结果为无限循环,且循环节为166位,请编程帮他验证该结论是否正确。1/997=0.0010 0300 9027 0812 4373 1193 5807 4222 6680 0401 2036 1083 2497 4924 7743 2296 8906 7201 6046 1444 332 9989 9699 0972 9187 5626 8806 4192 5777 3319 9598 7963 8916 7502 5075 2256 7703 1093 2798 3951 8555 667……

img

  • 写回答

6条回答 默认 最新

  • 社区专家-Monster-XH 2023-11-05 11:11
    关注

    任务1:使用蒙特卡洛方法计算圆周率

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    int main() {
        int total = 10000; // 总点数
        int circle_count = 0; // 圆内点数计数器
        double x, y;
        double pi;
    
        srand(time(NULL)); // 初始化随机数生成器
    
        for(int i = 0; i < total; ++i) {
            x = (double)rand() / RAND_MAX; // 生成0到1之间的随机数
            y = (double)rand() / RAND_MAX; // 同上
    
            if ((x - 0.5) * (x - 0.5) + (y - 0.5) * (y - 0.5) <= 0.25) {
                // 如果点在圆内
                circle_count++;
            }
        }
    
        pi = 4.0 * circle_count / total; // 计算圆周率的近似值
        printf("估计的圆周率值为:%f\n", pi);
        return 0;
    }
    

    任务2:求1000以内最大的20个素数之和

    #include <stdio.h>
    
    int is_prime(int number) {
        if (number <= 1) return 0;
        if (number % 2 == 0 && number > 2) return 0;
        for(int i = 3; i * i <= number; i += 2) {
            if (number % i == 0)
                return 0;
        }
        return 1;
    }
    
    int main() {
        int count = 0;
        int sum = 0;
        for(int i = 1000; i > 1 && count < 20; --i) {
            if (is_prime(i)) {
                sum += i;
                count++;
            }
        }
        printf("1000以内最大的20个素数之和为:%d\n", sum);
        return 0;
    }
    

    任务3:验证1/997的循环节

    #include <stdio.h>
    
    int main() {
        int remainder = 1; // 初始余数
        int position = 0; // 位置计数器
    
        printf("0.");
    
        while (position < 166) { // 仅输出166位
            remainder *= 10; // 余数扩大10倍
            printf("%d", remainder / 997); // 输出当前商
            remainder %= 997; // 更新余数
            if (remainder == 0) break; // 如果余数为0,则退出循环
            position++;
        }
        printf("\n");
        if (position == 166)
            printf("循环长度为166,如预期所见。\n");
        else
            printf("循环长度不为166位。\n");
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

问题事件

  • 系统已结题 11月13日
  • 已采纳回答 11月5日
  • 创建了问题 11月5日