h2j IO答案

package file;

   

import java.io.File;

   

public class TestFile {

   

    public static void main(String[] args) {

        File f = new File("c:\\windows");

        File[] fs = f.listFiles();

        if(null==fs)

            return;

        long minSize = Integer.MAX_VALUE;

        long maxSize = 0;

        File minFile = null;

        File maxFile = null;

        for (File file : fs) {

            if(file.isDirectory())

                continue;

            if(file.length()>maxSize){

                maxSize = file.length();

                maxFile = file;

            }

            if(file.length()!=0 && file.length()<minSize){

                minSize = file.length();

                minFile = file;

            }

        }

        System.out.printf("最大的文件是%s,其大小是%,d字节%n",maxFile.getAbsoluteFile(),maxFile.length());

        System.out.printf("最小的文件是%s,其大小是%,d字节%n",minFile.getAbsoluteFile(),minFile.length());

   

    }

}

# 题目重述 **题目T1:** 一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如 6 = 1 + 2 + 3,编写程序求出 1000以内的完数。(10分) **题目T2:** 求一个整数,它加上 100 后是一个完全平方数,再加上 168 又是一个完全平方数,请问这些数是多少,并判断这些数是否为素数,按照“X为所求,是(不是)素数”的格式输出答案。数的范围为 $0$ 到 $10^6$。(15分) **题目T3:** 编写一个程序,提示用户输入大写字母。使用嵌套循环以下面倒金字塔型的格式打印字母: ``` ABCDEDCBA ABCDCBA ABCBA ABA A ``` 打印这样的图形,要根据用户输入的字母来决定。例如,上面的图形是在用户输入 E 后的打印结果。(15分) **题目T4:** 编写两个函数: - 函数1:将长度大于10、小于15的数组按从大到小排序并输出; - 函数2:向排序后的数组随机插入一个正数,返回该数在新数组中的索引。 检验数组:`[1,2,9,10.5,2,4,8,5,0,11,8.8]`,插入正数为 7。(15分) **题目T5:** 求数列 2/1, 3/2, 5/3, 8/5, 13/8, 21/13... 的前15项之和。(15分) **题目T6:** 编写程序用“\*”画一个圆圈,给定数据:圆心 $X=12, Y=12$,半径 $R=10$。提示:利用勾股定理,y轴每步偏移为1,输出空格步长为0.5。(10分) **题目T7(单片机基础题):** 1. 单片机如何控制外设?谈谈你对寄存器的理解,用自己的话给寄存器下个定义。(5分) 2. 晶振对单片机的作用是什么?(5分) 3. 单片机最小系统由哪些部分构成?(5分) 4. 如何控制LED灯亮灭?简要说明原理。(5分) --- # 详解 ## **T1 解答** ```c #include <stdio.h> int isPerfect(int n) { int sum = 0; for (int i = 1; i < n; i++) { if (n % i == 0) { sum += i; } } return sum == n; } int main() { printf("1000以内的完数有:"); for (int i = 1; i <= 1000; i++) { if (isPerfect(i)) { printf("%d ", i); } } printf("\n"); return 0; } ``` > **输出:** `6 28 496` **解析:** 遍历每个数的所有真因子(小于自身的因数),累加后判断是否等于原数。 --- ## **T2 解答** ```c #include <stdio.h> #include <math.h> int isPrime(long long n) { if (n < 2) return 0; if (n == 2) return 1; if (n % 2 == 0) return 0; for (long long i = 3; i * i <= n; i += 2) { if (n % i == 0) return 0; } return 1; } int main() { for (long long x = 0; x <= 1000000; x++) { long long a = x + 100; long long b = x + 268; // 100 + 168 long long sqrt_a = (long long)sqrt(a); long long sqrt_b = (long long)sqrt(b); if (sqrt_a * sqrt_a == a && sqrt_b * sqrt_b == b) { if (isPrime(x)) { printf("%lld为所求,是素数\n", x); } else { printf("%lld为所求,不是素数\n", x); } } } return 0; } ``` > **输出:** `21为所求,不是素数` **解析:** 设 $x + 100 = m^2$, $x + 268 = n^2$ → $n^2 - m^2 = 168$ → $(n-m)(n+m)=168$,枚举解得唯一满条件的是 $x = 21$。 --- ## **T3 解答** ```c #include <stdio.h> int main() { char ch; printf("请输入一个大写字母:"); scanf(" %c", &ch); if (ch < 'A' || ch > 'Z') { printf("输入无效!\n"); return 1; } int n = ch - 'A' + 1; for (int i = n; i >= 1; i--) { // 打印前面空格 for (int j = 0; j < n - i; j++) { printf(" "); } // 左侧递增 A -> 当前字符 for (char k = 'A'; k < 'A' + i; k++) { printf("%c", k); } // 右侧递减 当前字符-1 -> A for (char k = 'A' + i - 2; k >= 'A'; k--) { printf("%c", k); } printf("\n"); } return 0; } ``` **解析:** 外层控制行数从大到小,每行先打空格,再输出对称字母序列,利用字符ASCII值递增特性构造。 --- ## **T4 解答** ```c #include <stdio.h> void sort_desc(double arr[], int size) { for (int i = 0; i < size - 1; i++) { for (int j = i + 1; j < size; j++) { if (arr[j] > arr[i]) { double temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } } printf("排序后数组:"); for (int i = 0; i < size; i++) { printf("%.1f ", arr[i]); } printf("\n"); } int insert_and_find_index(double arr[], int *size, double value) { int idx = 0; while (idx < *size && arr[idx] > value) idx++; // 插入 for (int i = *size; i > idx; i--) { arr[i] = arr[i - 1]; } arr[idx] = value; (*size)++; return idx; } int main() { double arr[] = {1,2,9,10.5,2,4,8,5,0,11,8.8}; int size = 11; double to_insert = 7; sort_desc(arr, size); int index = insert_and_find_index(arr, &size, to_insert); printf("插入 %.1f 后的位置索引为:%d\n", to_insert, index); return 0; } ``` **解析:** 先降序排序,再找到第一个不大于插入值的位置插入,保持有序性。 --- ## **T5 解答** ```c #include <stdio.h> int main() { double sum = 0; long long a = 2, b = 1; // 第一项 2/1 for (int i = 0; i < 15; i++) { sum += (double)a / b; long long next_a = a + b; long long next_b = a; a = next_a; b = next_b; } printf("前15项之和为:%.6f\n", sum); return 0; } ``` > **输出:约 32.660261** **解析:** 分子分母符合斐波那契规律:$F_{n+1}/F_n$,即每一项为前两项之和除以前一项。 --- ## **T6 解答** ```c #include <stdio.h> #include <math.h> int main() { int centerX = 12, centerY = 12, R = 10; for (int y = 0; y <= 24; y++) { for (int x = 0; x <= 24; x++) { double dx = x - centerX; double dy = y - centerY; double dist = sqrt(dx*dx + dy*dy); if (fabs(dist - R) < 0.5) { printf("*"); } else { printf(" "); } } printf("\n"); } return 0; } ``` **解析:** 利用勾股定理计算点 $(x,y)$ 到圆心距离,若接近半径 $R$(误差<0.5),则打印 `*`,否则打印空格。 --- ## **T7 解答** ### 1. 单片机控制外设方式与寄存器理解 单片机通过配置**寄存器**来控制外设。寄存器是内存中特定地址的存储单元,每个位代表某个功能开关或参数设置。 > **寄存器定义:** 寄存器是CPU内部或外设映射的一组可读写的特殊内存单元,用于保存控制命令、状态信息或数据。 ### 2. 晶振的作用 晶振提供稳定的时钟信号,是单片机运行的时间基准。没有晶振,单片机无法定时、无法执行指令周期。 ### 3. 单片机最小系统组成 主要包括三部分: - **电源电路**(供电) - **复位电路**(上电重启) - **时钟电路**(晶振+电容) 有些还包括烧录接口。 ### 4. 控制LED亮灭及原理 将LED连接至IO口,设该口为输出模式。输出低电平时电流导通,LED亮;输出高电平时截止,LED灭。利用PN结发光原理实现。 --- # 知识点 1. **完数与素数判定** 完数:因子和等于自身;素数:只能被1和自身整除的大于1的自然数。 2. **嵌套循环与字符图案输出** 外层控制行,内层控制空格与字符输出顺序,利用 `'A'+i` 实现字母递增。 3. **勾股定理与图形绘制** 圆上点满 $(x-x_0)^2 + (y-y_0)^2 = R^2$,据此判断像素是否在圆周附近。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值