二级C语言:已有一个已排好序的数组,要求输入一个数后,按原来的排序的规律将它插入数组中。
这是谭浩强课本的课后题,别在网上找答案,要自己写的程序,我关键是不会让后面那些数的位置往后挪一位。。。
看我的程序错在哪?求大神给出正确的完整版的程序。。。。谢谢! 展开
#include <stdio.h>
int main() {
int a[15] = {9,12,13,23,24,35,46,54,57,67,89};
int i,j,x,n = 11;
int flag = 1;
for(i = 0; i < n; ++i)
printf("%d ",a[i]);
printf("\n要插入的数:");
scanf("%d",&x);
for(i = 0; i < n && flag; ++i) {
if(a[i] > x) {
for(j = n; j > i; --j)
a[j] = a[j - 1];
a[i] = x;
flag = 0;
}
}
if(flag) a[n] = x;
++n;
printf("删除%d后:\n",x);
for(i = 0; i < n; ++i)
printf("%d ",a[i]);
printf("\n");
return 0;
}
所以在要插入的位置之后所有的元素都要后移一个位置——不能前移,因为已经到0了
你的错误在for循环内部一直比较a[i]和a[i+1],没刚读入的a[9]什么事,一直到i=8了才会涉及到a[9],不过也就交换了8和9的位置而已,根本不算插入
以下程序可以正确编译运行
void main()
{
int a[10]={0,1,3,4,5,6,7,8,9};
int i,t;
int found = 0; //是否已经插入的标志位
scanf("%d",&a[9]);
t= a[9];
for(i=0;i<9;i++)
{
if(a[i]>t && !found) //判断是否为插入位置
{
t=a[i]; //插入数据并设置标志位
a[i]=a[9];
found = 1;
}
else if(found) //已经插入,之后数据全部后移1格
{
a[9] = a[i];
a[i] = t;
t = a[9];
}
}
for(i=0;i<10;i++)
printf("%5d",a[i]);
printf("\n");
}
#define_CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
voidsort(inta[],intL,intx){
inttepm;
for(inti=0;i<L;++i){
intm=i;
for(intj=i+1;j<L;++j){//a[i]依次和a[i]之后的元素作比较,记录较小的下标
switch(x){
case0:
if(a[j]>a[m]){
m=j;
}break;
case1:
if(a[j]<a[m]){
m=j;
}break;
}
}
if(m!=i){
tepm=a[i];
a[i]=a[m];
a[m]=tepm;
}
}
}
voidmain(){
//intarr[11]={0,8,36,45,89,185,234,250,290,300};
intarr[11]={300,290,250,234,185,89,45,36,8,0};
intlength=sizeof(arr)/sizeof(arr[0]);
intX;
for(inti=0;i<10;++i){
printf("%d",arr[i]);
}
printf("\n请输入需要插入的数\n");
scanf("%d",&arr[10]);
if(arr[0]<arr[9]){//从小到大
X=1;
}
elseif(arr[0]>arr[10]){//从大到小
X=0;
}
sort(arr,length,X);
printf("插入新元素后数组为;\n");
for(inti=0;i<11;++i){
printf("%d",arr[i]);
}
printf("\n");
system("pause");
}
运行效果:
扩展资料:
system用法
system函数的用法,需要包含头文件#include<process.h>这个函数跟它的参数没有任何关系,它的参数是字符串:
intsystem(constchar*command);
int_wsystem(constwchar_t*command);
command:Commandtobeexecuted
可以用来执行指定路径下的可执行文件,其中可以包含一些DOS命令,在这里使用和在CMD的命令行中执行这条命令的效果相同,比如:
system("C:\\MT_Sqlconn.exe>C:\\out.log");这行代码的意思就是,执行C:\\MT_Sqlconn.exe,并把这个文件的输出结果重定向到C:\\out.log文件中,以前通过printf打印到标准输出的结果全system("pause");部打印到了C:\\out.log文件中。
system函数是可以调用一些DOS命令;比如:
system("cls");//清屏,等于在DOS上使用cls命令system("notepad")//打开记事本程序system("ipconfig>>123.txt");//输出ipconfig查询出的结果到当前目录的123.txt文件中,每次都是覆盖的。
system(执行shell命令)相关函数fork,execve,waitpid,popen表头文件#include<stdlib.h>。
例:
#include<stdlib.h>
main()
{
system(“ls-al/etc/passwd/etc/shadow”);
}
main()
{
int a[11]={1,4,6,9,13,16,19,28,40,100};
int num,i,j;
printf("Array a:\n");
for(i=0;i<10;i++)
printf("%5d",a[i]);
printf("\n");
printf("insert data:");
scanf("%d",&num);
for(i=0;i<10;i++)
if(a[i]>num)
{j=a[i];a[i]=num;num=j;}
a[i]=num;
printf("Now,array a:\n");
for(i=0;i<11;i++)
printf("%5d",a[i]);
printf("\n");
}
这绝对正确,我上机验证过了!!要加分啊。。。