写在前面:完成数组的输入,输出,排序,删除元素,清空的功能;使用的VS2019版本
首先建立好头文件myArray.h用于声明函数以及包含宏定义;建立函数的文件function.c,建立主要的main函数文件myArray,c,如图所示
头文件中的代码如下:
#pragma once//防止头文件重复
#include<stdio.h>
#define MAX 20//无参宏定义数组最大长度
#define TYPE int//无参宏定义数组类型
#define SCANF(a) scanf("%d",&a);//有参宏定义输入
#define PRINT(a) printf("%d",a);//有参宏定义输出
void inputArray(int a);//输入函数
void showArray();//显示函数
void sortArray(int s[], int l, int r);//排序函数
void deleteArr(int elm);//删除函数
通过有参和无参宏定义,定义了数组的大小、类型,以及输入输出。头文件还声明了四个功能函数,函数的实现主要在function.c中实现。我们先来搭建main函数,搭建好之后,完成功能函数即可。
main函数代码如下:
#include"myArray.h"
TYPE arr[MAX] = {0};//数组初始化
int len=0;//数组元素大小
int main()
{
int select = 0;//定义用户的选择
while (1)
{
printf("\t\t|------------------------------|\n");
printf("\t\t|------- 欢迎来到MyArray!-----|\n");
printf("\t\t|-------- 1、输入数组 --------|\n");
printf("\t\t|-------- 2、显示数组 --------|\n");
printf("\t\t|-------- 3、数组排序 --------|\n");
printf("\t\t|-------- 4、删除元素 --------|\n");
printf("\t\t|-------- 5、清空数组 --------|\n");
printf("\t\t|-------- 0、退出程序 --------|\n");
printf("\t\t-------------------------------|\n");
printf("请输入您的选择:\n");
SCANF(select);
switch (select)
{
case 1://输入数组
printf("请输入一个数字:");
int num = 0;
SCANF(num);
inputArray(num);
printf("输入成功!\n");
printf("请输入下一个选择:\n");
system("pause");
system("cls");
break;
case 2://显示数组
printf("您的输入为:");
showArray();
printf("请输入下一个选择:\n");
system("pause");
system("cls");
break;
case 3://数组排序
printf("排序前的数组:\n");
showArray(arr[len - 1]);
sortArray(arr,0,len-1);
printf("排序后的数组:\n");
showArray(arr[len - 1]);
printf("请输入下一个选择:\n");
system("pause");
system("cls");
break;
case 4://删除元素
printf("请输入要删除的元素:\n");
int elm = 0;
SCANF(elm);
deleteArr(elm);
printf("请输入下一个选择:\n");
system("pause");
system("cls");
break;
case 5://清空数组
len = 0;
printf("清空成功!\n");
printf("请输入下一个选择:\n");
system("pause");
system("cls");
break;
case 0://退出程序
printf("欢迎下次使用!");
return;
default:
printf("输入有误,请重新输入!\n");
system("pause");
system("cls");
break;
}
}
getchar();
return 0;
}
定义了数组长度以及数组初始化后(全局变量,)搭建选择框架,这里采用的是switch,也可以采用if语句,通过while循环以及清屏操作,使得用户一直停留在界面,为了对用户友好,输入了一些列提示语句。在main函数中1 2 3 4的选择用到了function函数,我们先搭建出框架,随后在function中完成。在这里我们主要完成的是清空数组】退出还有输入其他字符的问题。清空数组:只要使数组长度为0,即清空完成;退出的话return即可,如果用户输入其他字符,我们提示一下,然后结束此次循环,进入重新选择的界面。搭建好之后主要就是完成function.c的文件了!
function.c代码如下:
#include"myArray.h"
extern TYPE arr[MAX];//数组初始化
extern int len;//数组元素大小
void inputArray(TYPE a)
{
arr[len] = a;//一个一个输入数据,每输入一个,长度加一
len++;
}
void showArray()
{
if (len <= 0)//显示前先判断是否为空
{
printf("数组为空,请重新输入!\n");
return;
}
printf("数组中的元素:");
for (int i = 0; i < len; i++)
{
PRINT(arr[i]);
}
printf("\n");
}
void sortArray(int s[], int l, int r)//采用快速排序法排序
{
int i = l;
int j = r;
int point = s[l];
if (l >= r)return;
while (i < j)
{
while (i<j && s[j]>point)j--;
if (i < j) { s[i] = s[j]; i++; }
while (i < j && s[i] < point)i++;
if (i < j) { s[j] = s[i]; j--; }
}
s[i] = point;
sortArray(s, l, i - 1);
sortArray(s, j + 1, r);
}
void deleteArr(TYPE elm)
{
int flag = len;//定义一个flag接收目前数组的长度
for (int i = 0; i < len; i++)
{
if (elm == arr[i])//循环遍历是否存在要删除的元素,假设存在
{
if (i == len - 1)//如果元素位于数组的最后一位,数组长度减一返回即可
{
len--;
return;
}
for (int j = i; j < len; j++)//如果元素位于非最后一位的位置,用j来接收要删除的元素的位置,将删除元素后的所有元素前移
{
arr[j] = arr[j + 1];
}
len--;
}
}
if (flag == len)//如果数组长度不变,则说明没有删除
{
printf("删除失败,数组中不存在元素%d\n", elm);
}
else
{
printf("删除成功!\n");
}
}
首先包含头文件“myArray.arr[MAX],由于要用到数组长度以及数组,在main函数中我们已经定义过,在这里不能重复定义,采用extern来寻找这两个参数。
在输入函数中,将元素一个一个赋值给数组即可,然后长度++;
在显示函数中,先判断一下元素是否为空,再输出。
在排序函数中,采用的是快速排序算法,详情可见往期文章:https://blog.csdn.net/m0_56891548/article/details/115712560?spm=1001.2014.3001.5502
删除函数中,我们要注意的是如果元素在最后一个的话直接数组长度--,此外加一个是否判断成功的语句。
代码完成后,控制台窗口如下:我们输入8601,看看其他功能