← 2022 · MTK联发科 笔试

推荐答案 测试一下

用C语言统计100~1000里面共有多少个素数,并且把所有素数打印出来。素数又称质数。所谓素数是指除了1和它本身以外,不能被任意整数整除的数. (15分)

编程题 中等 经典问答问答题

参考答案

参考答案:统计100~1000内的素数并打印。C语言实现如下: ```c #include <stdio.h> #include <math.h> int is_prime(int n) { if (n <= 1) return 0; if (n == 2) return 1; if (n % 2 == 0) return 0; int limit = (int)sqrt(n); for (int i = 3; i <= limit; i += 2) { if (n % i == 0) return 0; } return 1; } int main() { int count = 0; printf("100~1000内的素数有:\n"); for (int i = 100; i <= 1000; ++i) { if (is_prime(i)) { printf("%d ", i); count++; } } printf("\n共计%d个素数\n", count); return 0; } ``` 解析: 1. 素数判断:从2到sqrt(n)试除,若都不能整除则为素数。优化:先排除偶数(除2外),步长改为2,减少一半计算。 2. 边界处理:1和0不是素数,2是素数;100~1000内排除偶数(除2外),因此从100开始,100是偶数直接跳过,但函数中已处理。 3. 循环范围:i从100到1000,逐个判断。使用sqrt函数需包含math.h,编译器可能需链接-lm。 4. 输出:打印每个素数,并统计个数。 5. 易错点:忘记包含头文件、sqrt参数类型转换错误、未处理n<=1、循环条件写成i<n导致效率低、未优化步长导致超时(本题无时限,但面试常考优化)。 6. 考点:素数定义、试除法原理、循环控制、函数封装、数学库使用。 注意:面试时需明确说明算法思想,尤其是只除到sqrt(n)的理由:若n有因子大于sqrt(n),则必有对应因子小于sqrt(n)。

涉及知识点

  • IC 基础
  • 数字电路
  • 设计与验证
← 上一题
登录后反馈错题
下一题 →