C 练习实例39
题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的数,依次后移一个位置。
实例
// Created by study.p2hp.com on 15/11/9.
// Copyright © 2015年 高手教程. All rights reserved.
//
#include<stdio.h>
int main()
{
int a[11]={1,4,6,9,13,16,19,28,40,100};
int temp1,temp2,number,end,i,j;
printf("原始数组是:\n");
for(i=0;i<10;i++)
printf("%4d",a[i]);
printf("\n插入一个新的数字: ");
scanf("%d",&number);
end=a[9];
if(number>end)
a[10]=number;
else
{
for(i=0;i<10;i++)
{
if(a[i]>number)
{
temp1=a[i];
a[i]=number;
for(j=i+1;j<11;j++)
{
temp2=a[j];
a[j]=temp1;
temp1=temp2;
}
break;
}
}
}
for(i=0;i<11;i++)
printf("%4d",a[i]);
printf("\n");
return 0;
}
以上实例输出结果为:
原始数组是: 1 4 6 9 13 16 19 28 40 100 插入一个新的数字: 10 1 4 6 9 10 13 16 19 28 40 100
C 语言经典100例



大二狗
160***7055@qq.com
参考方法:
#include<stdio.h> int main() { int opo[11]={1,4,6,9,13,16,19,28,40,100};//原始的数组,题目给的 int a,b,c,e; printf("这是原始的数组"); for(a=0;a<10;a++)printf("%d ",opo[a]); printf("\n输入一个数,插入原数组"); scanf("%d",&b); for(c=9;c>=0;c--){ //使用逆序的话,可以省掉很多过程,而且清晰 if(b<opo[c]) { opo[c+1]=opo[c]; } else { opo[c+1]=b;break; } if(c==0) opo[0]=b; //应为是逆序,如果b比第一个小的话写不进去,要特意弄个if }//哇,逆序超简洁,惊了 for(e=0;e<=10;e++) printf("%d ",opo[e]); }大二狗
160***7055@qq.com
banhuxun
ban***un@163.com
结合上一个来练习,输入5个数字,先将其排序,然后输入一个数字,插入排列好的数组中
#include <stdio.h> #define N 5 int *sort(int a[],int n); int main() { int i,j,a[N+1]; printf("请输入5个数字:\n"); for(i=0;i<N;i++) { scanf("%d",&a[i]); } sort(a,N); printf("排序后:\n"); for(i=0;i<N;i++) { printf("%d ",a[i]); } printf("\n"); printf("请输入想要插入的数字:"); scanf("%d",&j); a[N]=j; sort(a,N+1); printf("插入后排序:\n"); for(i=0;i<N+1;i++) { printf("%d ",a[i]); } printf("\n"); return 0; } int *sort(int a[],int n) { int i,j,min,t; for(i=0;i<n-1;i++) { min=i; for(j=i+1;j<n;j++) { if(a[min]>a[j]) { min=j; } } if(min!=i) { t=a[min]; a[min]=a[i]; a[i]=t; } } return a; }输出结果为:
banhuxun
ban***un@163.com