函数的练习
2026/3/24 0:42:03 网站建设 项目流程
  1. 编写一个主函数以及四个函数max(a, n)、min(a, n)、aver(a, n)和prime(m)。要求是:
    1. 函数max(a, n)、min(a, n)和aver(a, n)分别求出含有n个元素的数组a中的最大值、最小值和平均值,并返回结果到主调函数。函数prime(m)要求对m是否为素数进行判断,如果不是素数则返回0,否则返回1,
    2. 在主函数中任意输入10个[3,9999]之间的素数存放到数组中,保证输入10个[3,9999]之间的素数(输入的符合要求的素数未到十个时要求重新输入);然后分别调用max、min和aver函数,并输出返回的最大值、最小值和平均值。
解题思路

通过素数判断函数确保输入 10 个符合要求的素数存入数组,

再调用最值、平均值函数处理数组,

最后输出结果。

    1. #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; }
      2.编写名称为insert,search,sort,delElem,printArr,halfSearch的函数,定义整型数组arr,输入m个各不相同的元素(假设数组arr的长度足够)。测试上述函数的功能。各个函数的功能如下
      1. insert函数的功能为将形参x插入到数组a的后面,要求x元素不与a中的其他元素相同,如果相同在输出报错提示;
      2. search函数的功能是在n个元素的数组a中按照顺序查找元素x,返回x在数组a中的下标,若无x元素,则返回-1;
      3. halfSearch函数的功能是在n个元素的数组a中按照折半查找法查找元素x,返回x在数组a中的下标,若无x元素,则返回-1;
      4. sort函数的功能是对数组a中的n个元素从小到大进行排序,
      5. delElem函数的功能是在n个元素的数组a中删除形参为x的元素。
      6. printArr函数的功能是将数组a中n个的元素逐个输出

解题思路

构建测试基础,确保初始数组符合 “元素各不相同” 的要求。

函数功能实现(按 “增、查、排、删、输出” 拆解)

按 “输出初始数组→插入→顺序查找→排序→折半查找→删除→最终输出” 的顺序,验证每个函数的正确性。

#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; }

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询