#include<stdio.h>
float func1(int *arr)
{
int i,sum;
float ave;
for(i=0;i<10;i++)
sum+=arr[i];
ave=sum/10.0;
return ave;
}
void func2(int *arr)
{
int i,j,t;
for(i=0;i<9;i++)
{
for(j=0;j<9-i;j++)
{
if(arr[j]<arr[j+1])
{
t=arr[j];
arr[j]=arr[j+1];
arr[j+1]=t;
}
}
}
}
void func3(int *arr,int x,int data)
{
int i;
for(i=9;i>=x;i--)
arr[i+1]=arr[i];
arr[x]=data;
}
void func4(int *arr,int out)
{
int i;
for(i = out; i < 9; i++) {
arr[i] = arr[i+1];
}
}
void menu()
{
printf("**欢迎使用系统!!!*********\n");
printf("***1.求数组平均值*********\n");
printf("***2.数组元素降序排序*****\n");
printf("***3.数组添加元素*********\n");
printf("***4.数组删减元素*********\n");
printf("**************************\n");
printf("**请选择要使用的功能:*****\n");
}
int main()
{
int arr[10];
int i,index,in,out,data;
float aver;
printf("请输入数组的元素:\n");
for(i=0;i<10;i++)
scanf("%d",&arr[i]);
for(i=0;i<10;i++)
printf("%d ",arr[i]);
printf("\n");
menu();
printf("请输入你要选择的功能:\n");
scanf("%d",&index);
while(index>0&&index<5)
{
switch(index)
{
case 1:
aver=func1(arr);
printf("数组元素平均值为:%lf\n",aver);
break;
case 2:
func2(arr);
printf("降序后的结果为:\n");
for(i=0;i<10;i++)
printf("%3d",arr[i]);
break;
case 3:
printf("请输入要插入的位置和元素:\n");
scanf("%d %d",&in,&data);
func3(arr,in,data);
for(i=0;i<11;i++)
printf("%3d",arr[i]);
printf("\n");
break;
break;
case 4:
printf("请输入要删除的位置:\n");
scanf("%d",&out);
func4(arr,out);
for(i=0;i<9;i++)
printf("%3d",arr[i]);
printf("\n");
break;
break;
default:
printf("输入错误,重新输入:\n");
}
printf("请继续选择实现的功能:\n");
scanf("%d",&index);
}
return 0;
}

能不能给我这个数组系统优化一下啊,谢谢你们啊
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
4条回答 默认 最新
- 语言-逆行者 2023-05-07 11:37关注
基于new bing的建议:以下是对这个数组系统的一些优化建议:
1、在定义 sum 变量时,应该进行初始化。如果不初始化,可能会得到一个随机值,导致计算出错。
2、在函数 func2 中,使用了类似于冒泡排序的方法对数组进行排序。但是这种方法是比较慢的,时间复杂度为O(n^2),数组规模较大时会很耗时。推荐使用快速排序算法(Quick Sort),时间复杂度为平均情况下的O(nlogn),效率更高。
3、在函数 func3 和 func4 中,采用的是挪动元素的方法来实现插入和删除操作。这种方法虽然简单易懂,但也比较慢,时间复杂度为O(n),推荐使用单向链表(Single Linked List)或双向链表(Double Linked List)来实现插入和删除操作,时间复杂度为O(1)
4.在菜单 menu 函数中,最好对用户输入进行校验。如限制用户只能输入 1-4 之间的数字,避免用户输入无效内容。5.在输入数组元素时,最好进行数据有效性校验,如限制输入的元素在某一合法范围内,避免非法数据的出现。
6.最后,在代码中加入注释可以让阅读者更好的理解代码,增加代码的可读性。
综上所述,对于这个数组系统,可以进行如下的优化:
#include <stdio.h> // 求数组平均值 float func1(int *arr) { int sum = 0; for (int i = 0; i < 10; i++) { sum += arr[i]; } float ave = sum / 10.0f; return ave; } // 快速排序 void quicksort(int *arr, int left, int right) { if (left >= right) { return; } int i = left, j = right; int key = arr[left]; while (i < j) { while (i < j && arr[j] <= key) { j--; } arr[i] = arr[j]; while (i < j && arr[i] >= key) { i++; } arr[j] = arr[i]; } arr[i] = key; quicksort(arr, left, i - 1); quicksort(arr, i + 1, right); } // 数组元素降序排序 void func2(int *arr) { quicksort(arr, 0, 9); } // 数组添加元素,使用单向链表实现 typedef struct node { int data; struct node *next; } Node; void func3(Node **head, int index, int data) { Node *p = malloc(sizeof(Node)); p->data = data; if (index == 0) { p->next = *head; *head = p; } else { Node *q = *head; for (int i = 0; i < index - 1; i++) { q = q->next; } p->next = q->next; q->next = p; } } // 数组删除元素,使用双向链表实现 typedef struct dnode { int data; struct dnode *prev; struct dnode *next; } DNode; void func4(DNode **head, int index) { if (index == 0) { DNode *p = *head; *head = p->next; if (p->next != NULL) { p->next->prev = NULL; } free(p); } else { DNode *p = *head; for (int i = 0; i < index; i++) { p = p->next; } p->prev->next = p->next; if (p->next != NULL) { p->next->prev = p->prev; } free(p); } } // 菜单 void menu() { printf("**欢迎使用系统!!!*********\n"); printf("***1.求数组平均值*********\n"); printf("***2.数组元素降序排序*****\n"); printf("***3.数组添加元素*********\n"); printf("***4.数组删减元素*********\n"); printf("**************************\n"); printf("**请选择要使用的功能:*****\n"); } int main() { int arr[10]; int i, index, in, out, date; float aver; printf("请输入数组的元素:\n"); for (i = 0; i < 10; i++) { scanf("%d", &arr[i]); } for (i = 0; i < 10; i++) { printf("%d ", arr[i]); } printf("\n"); menu(); printf("请输入你要选择的功能:\n"); scanf("%d", &index); while (index > 0 && index < 5) { switch (index) { case 1: aver = func1(arr); printf("数组元素平均值为:%lf\n", aver); break; case 2: func2(arr); printf("降序后的结果为:\n"); for (i = 0; i < 10; i++) { printf("%3d", arr[i]); } break; case 3: printf("请输入要插入的位置和元素:\n"); scanf("%d %d", &in, &date); Node *head = NULL; for (i = 0; i < 10; i++) { func3(&head, i, arr[i]); } func3(&head, in, date); Node *p = head; while (p != NULL) { printf("%3d", p->data); p = p->next; } printf("\n"); break; case 4: printf("请输入要删除的位置:\n"); scanf("%d", &out); DNode *dhead = malloc(sizeof(DNode)); dhead->data = arr[0]; dhead->prev = NULL; dhead->next = NULL; DNode *p1 = dhead; for (i = 1; i < 10; i++) { DNode *q = malloc(sizeof(DNode)); q->data = arr[i]; q->prev = p1; q->next = NULL; p1->next = q; p1 = q; } func4(&dhead, out); p1 = dhead; while (p1 != NULL) { printf("%3d", p1->data); p1 = p1->next; } printf("\n"); break; default: printf("输入错误,重新输入:\n"); } printf("请继续选择实现的功能:\n"); scanf("%d", &index); } return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录