参考方法:
#include <stdio.h> int main(int argc, char *argv[]) { int i,num,a[10]={0,1,2,3,4,5,6,7,8}; for(i=8;i>=0;i--){ printf("%d ",a[i]); } return 0; }
#include <stdlib.h> #include <time.h> #include <stdio.h> void rank(int *numArray, int arrayLen);//排序函数声明 void insert(int *numArray, int num, int arrayLen);//插入函数声明 int main() { srand((int)time(NULL)); int *numArray = NULL, i, *InsertNumArray = NULL, len, insertN, max, min; printf("输入数组元素个数:"); scanf("%d", &len); printf("数组元素取值范围:"); scanf("%d %d", &min, &max); //为原始数组分配适当空间 numArray = (int*)realloc(numArray, len*sizeof(int)); for (i = 0; i < len; ++i)//初始化随机数数组 numArray[i] = rand() % (max - min + 1) + min;//min-max之间随机数 rank(numArray, len);//将原始数组元素从小到大排序 printf("原始数组是:\n");//输出一遍原始数组 for (i = 0; i < len; ++i) printf("%-6d", numArray[i]); printf("\n要插入的元素个数:"); scanf("%d", &insertN); printf("输入要插入的%d个新数字:", insertN); InsertNumArray = (int*)realloc(InsertNumArray, insertN*sizeof(int));//分配适当空间给插入的数字组成的数组InsertNumArray numArray = (int*)realloc(numArray, (len + insertN)*sizeof(int));//重新增添insertN个int空间给numArray以存放新增元素 for (i = 0; i < insertN; ++i)//将新元素挨个插入原始数组 { scanf("%d", &InsertNumArray[i]);//输入第i个元素 insert(numArray, InsertNumArray[i], len + i);//调用函数insert插入第i个元素InsertNumArray[i],数组numArray总长度len+i随i变化 } printf("新数组是:\n");//输出新数组 for (i = 0; i < len + insertN; ++i) printf("%-6d", numArray[i]); printf("\n"); return 0; } void rank(int *numArray, int arrayLen)//排序函数,numArray为数组,arrayLen为数组长度 { int i, j; for (i = 0; i < arrayLen; ++i) for (j = i + 1; j < arrayLen; ++j) if (numArray[i] > numArray[j])//小的元素排在前面,大的元素换到后面 { numArray[i] += numArray[j]; numArray[j] = numArray[i] - numArray[j]; numArray[i] = numArray[i] - numArray[j]; } } void insert(int *numArray, int insertNum, int arrayLen)//插入操作函数,numArray为数组,insertNum为要插入的数,arrayLen为数组长度 { int i, j, *p1 = numArray, *p2 = numArray; p1 += arrayLen - 1;//指针置于最末尾元素 p2 += arrayLen;//末尾置于最末尾元素后一位 for (i = 0; i < arrayLen; ++i)//加上insertNum共arraylen + 1个数组元素,从小到大遍历前arrayLen个元素 { if (insertNum < numArray[i])//如果第i位上的数组元素大于insertNum,则该位及其以后的数全部 往后移动一位,腾出第i位用于存放num { for (j = 1; j <= (arrayLen - i); ++j)//用指针实现挨个移位操作,共需要移动strlen - i位(strlen是数组长度,i是首个大于insertNum的数组元素在数组numArray上的索引位i) *p2-- = *p1--; *p2 = insertNum;//最后p2指向第i位,将num插入第i位 break; } if (i == arrayLen - 1)//已循环到了最后一个元素但还没有找到插入位置,说明此时最大元素就是insertNum,直接将insertNum放到numArray数组最后 { *p2 = insertNum;//此时p2指向数组numArray最末位置 break; } } }
执行输出结果为:
输入数组元素个数:5 数组元素取值范围:23 45 原始数组是: 25 30 32 39 40 要插入的元素个数:1 输入要插入的1个新数字:23 新数组是: 23 25 30 32 39 40
#include <stdio.h> int main(){ int a[11]={1,4,6,9,13,16,19,28,40,100}; int i,num; printf("原始数组:"); for(i=0;i<10;i++) printf("%4d ",a[i]); printf("\n输入一个数,插入原数组:"); scanf("%d",&num); if(a[0]<a[9]){ //原数组为升序排列 if(num>a[9]) a[10]=num; else{ for(i=9;i>=0;i--){ if(num<a[i]) a[i+1]=a[i]; else{ a[i+1]=num; break; } } if(i==0) //当num比a[0]还小时 a[0]=num; } } if(a[0]>a[9]){ //原数组为降序排列 if(num<a[9]) a[10]=num; else{ for(i=9;i>=0;i--){ if(num>a[i]) a[i+1]=a[i]; else{ a[i+1]=num; break; } } if(i==0) //当num比a[0]还大时 a[0]=num; } } for(i=0;i<11;i++) printf("%4d",a[i]); printf("\n"); return 0; }
#include<stdio.h> #define N 100 void insert_sort(int a[],int *length,int x); int main(void) { int a[N] = {0},j = 0,x,n; printf("输入数组长度:\n"); scanf("%d",&n); printf("原始数组是:\n"); for(;j < n; j++) scanf("%d",&a[j]); printf("插入一个新的数字:"); scanf("%d",&x); insert_sort(a,&n,x); for(int i = 0;i < n; i++) printf("%4d",a[i]); return 0; } void insert_sort(int a[],int *length,int x) { int i = 0,j; while(x > a[i]) //找到待插入位置 i++; for(j = *length - 1; j >= i; j--) a[j + 1] = a[j]; a[j + 1] = x; (*length)++; }
这样最简单了,一次循环全部搞定
C99:
#include <stdio.h> #include <stdbool.h> // C99 int main() { int a[11] = { 1,4,6,9,13,16,19,28,40,100 }; int c=0, temp=0; bool z = false; printf("插入一个新的数字: "); scanf("%d", &c); for (int b = 0; b < 10; b++) { if (!z && c > a[b] && c <= a[b + 1]) { z = true; } if (z) { temp = a[b + 1]; a[b + 1] = c; c = temp; } printf("%-3d,", a[b]); } printf("%-3d,", a[10]); return 0; }
C89 没有定义布尔类型:
#include <stdio.h> int main() { int a[11] = { 1,4,6,9,13,16,19,28,40,100 }; int c=0, temp=0; typedef enum { true=1, false=0 }bool; bool z = false; printf("插入一个新的数字: "); scanf("%d", &c); for (int b = 0; b < 10; b++) { if (!z && c > a[b] && c <= a[b + 1]) { z = true; } if (z) { temp = a[b + 1]; a[b + 1] = c; c = temp; } printf("%-3d,", a[b]); } printf("%-3d,", a[10]); return 0; }
感谢您的支持,我会继续努力的!
支付宝扫一扫,即可进行扫码打赏哦
1805c-exercise-example40
参考方法:
1804c-exercise-example39
参考方法:
执行输出结果为:
1803c-exercise-example39
参考方法:
1802c-exercise-example39
参考方法:
1801c-exercise-example39
这样最简单了,一次循环全部搞定
C99:
C89 没有定义布尔类型: