FPGA高速接口Aurora8B/10B协议实战:从IP核配置到数据流优化
2026/3/24 0:38:28
通过素数判断函数确保输入 10 个符合要求的素数存入数组,
再调用最值、平均值函数处理数组,
最后输出结果。
#include <stdio.h> #include <math.h> int max(int n[], int m) { int max_1; max_1 = n[0]; for (int i = 0; i < m; i++) { if (n[i] > max_1) { max_1 = n[i]; } } return max_1; } int min(int n[], int m) { int min_1; min_1 = n[0]; for (int i = 0; i < m; i++) { if (n[i] < min_1) { min_1 = n[i]; } } return min_1; } int aver(int n[], int m) { int sum=0; for (int i = 0; i < m; i++) { sum += n[i]; } sum = sum / m; return sum; } int prime(int a) { int k = 0; if (a < 1) { return k; } else if (a > 1) { if (a % 2 == 0) { return k; } else if (a % 2 != 0) { for (int i = 3; i <sqrt(a)+1; i+= 2) { if (a % i == 0) { return k; } else { k++; return k; } } } } } int main() { int k[10]; printf("输入10个[3,9999]之间的素数:"); for (int i = 0; i < 10; i++) { scanf_s("%d", &k[i]); prime(k[i]); while (prime(k[i]) == 0) { scanf_s("%d", &k[i]); } } printf("%d %d %d", max(k, 10), min(k, 10), aver(k, 10)); return 0; }解题思路
构建测试基础,确保初始数组符合 “元素各不相同” 的要求。
函数功能实现(按 “增、查、排、删、输出” 拆解)
按 “输出初始数组→插入→顺序查找→排序→折半查找→删除→最终输出” 的顺序,验证每个函数的正确性。
#include <stdio.h> void insert(int n, int a[], int *m) { for (int i = 0; i <*m; i++) { if (n == a[i]) { printf("输入错误,元素%d已存在,插入失败!\n", n); return; } } a[*m] = n; (*m)++; printf("元素%d插入成功!\n", n); } int search(int x, int n, int a[]) { for (int i = 0; i < n; i++) { if (a[i] == x) { printf("顺序查找成功:元素%d在数组的第%d个位置(下标%d)\n", x, i + 1, i); return i; } } printf("顺序查找失败:数组中无元素%d\n", x); return -1; } void sort(int n, int a[]) { for (int i = 0; i < n; i++) { for (int j = n-1; j > i; j--) { if (a[j] < a[j - 1]) { int temp; temp = a[j - 1]; a[j - 1] = a[j]; a[j] = temp; } } } printf("数组排序完成!\n"); } void delElem(int x, int *n, int a[]) { int k = 0; int j = 0; for (int i = 0;i < *n;i++) { if (a[i] != x) { a[j++] = a[i]; } else k++; } *n -= k; if (k > 0) { printf("成功删除%d个元素%d!\n", k, x); } else { printf("删除失败:数组中无元素%d\n", x); } } void printArr(int n, int a[]) { if (n == 0) { printf("数组为空!\n"); return; } for (int i = 0;i < n;i++) { printf("%d ", a[i]); } printf("\n"); } int halfSearch(int x, int n, int a[]) { for (int i = 0; i < n; i++) { for (int j = n - 1; j > i; j--) { if (a[j] < a[j - 1]) { int temp; temp = a[j - 1]; a[j - 1] = a[j]; a[j] = temp; } } } int low = 0; int high = n - 1; int mid; while (low <= high) { mid = (low + high) / 2; if (a[mid] == x) { printf("二分查找成功:元素%d在数组的第%d个位置(下标%d)\n", x, mid + 1, mid); return mid; } else if (a[mid] < x) { low = mid + 1; } else { high = mid - 1; } } printf("二分查找失败:数组中无元素%d\n", x); return -1; } int main() { int a[100000]; int n = 0; int k = 0; printf("输入数组的大小:"); scanf_s("%d", &n); printf("输入数组的值:"); for (int i = 0;i < n;i++) { scanf_s("%d", &a[i]); } while (k != 7) { printf("1.将形参x插入到数组a的后面\n"); printf("2.在n个元素的数组a中按照顺序查找元素x\n"); printf("3.查找元素x\n"); printf("4.从小到大进行排序\n"); printf("5.删除形参为x的元素\n"); printf("6.逐个输出\n"); printf("7.退出程序\n"); printf("请输入你要选择的操作:"); scanf_s("%d", &k); int x; if (k == 1) { printf("输入你要插入的元素:"); scanf_s("%d", &x); insert(x, a, &n); continue; } if (k == 2) { printf("输入你要查找的元素:"); scanf_s("%d", &x); search(x, n, a); continue; } if (k == 3) { printf("输入你要查找的元素:"); scanf_s("%d", &x); halfSearch(x, n, a); continue; } if (k == 4) { sort(n, a); for (int i = 0;i < n;i++) { printf("%d", a[i]); } continue; } if (k == 5) { printf("输入你要删除的元素:"); scanf_s("%d", &x); delElem(x, &n, a); continue; } if (k == 6) { printArr(n, a); continue; } } return 0; }