题目要求:
0:删除数组中给定范围t到s的值(用-1表示删除)
1:通过键盘输入随机数个数来填充数组的初始值;
2:通过delete()函数实现;
3:考虑输出结果,数组内元素的位置发生改变和不发生改变俩种情况;
输出情况一:数组内元素位置发生改变的情况(使用了冒泡排序)
#include <stdio.h>
#include <stdlib.h>
#include "time.h"
void myrand(int,int[]);
void delete(int,int[]);//删除给定元素
void sort(int n,int[]);//冒泡排序
void show(int n,int arr[]);//输出结果
int main(){
//使用随机数要用这两个头文件:"time.h",stdlib.h
int n;
printf("输入随机数的个数:");
scanf("%d",&n);
int arr[n]; //定义了一个动态数组
myrand(n,arr);
sort(n,arr);
// 1:如果不考虑数组其他元素的位置关系,可以先用sort冒泡排序,再对数组进行操作
// 2:如果考虑数组元素其他元素的位置关系,就不要使用sort冒泡排序
delete(n,arr);
show(n,arr);
}
//生成随机数填充数组;并输出该数组
void myrand(int n,int arr[]){
srand((int)time(0));
printf("\n生成的随机数如下:\n");
for(int i=0;i<n;i++){
arr[i]=rand()%291+10;
printf("%d ",arr[i]);
}
}
void delete(int n,int arr[]){
int min,max,i=0,flag=0;
printf("\n请输入你要删除的最大值和最小值: ");
scanf("%d %d",&min,&max);
do {//不知道循环次数
if(arr[i]>=min && arr[i]<=max){
arr[i]=-1;
}
i++;
}while(i<n);
}
//冒泡排序
void sort(int n,int arr[]){
int temp;
for(int i=0;i<n-1;i++){
for (int j = 0; j < n-1-i; j++) {
if(arr[j]>arr[j+1]){
temp = arr[j];//不要写成arr【i】了
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
//输出数组的值
void show(int n,int arr[]){
printf("\n-----------the result as follow-----------:\n");
for (int i = 0; i < n; ++i) {
printf("%4d ",arr[i]);
if((i+1)%10==0 ){
printf("\n");
}
}
}
//删除给定t-s的值
//思路:先冒泡排序,后比较大小,通过将后面的元素往前移动达到删除效果
输出结果如下:
输出情况二:数组内元素位置没有发生改变的情况(未使用冒泡排序)
将sort冒泡排序函数注释掉即可;
输出结果如下: