用c语言做以下题目:已有一个已排好的数组,要求输入一个数后,按原来排序的规律将它插入数组中。
#include<stdio.h>
void main()
{
int a[10]={0,1,3,4,5,6,7,8,9};
int i,t;
scanf("%d",&a[9]);
for(i=0;i<9;i++)
if(a[i]>a[i+1])
{
t=a[i];
a[i]=a[i+i];
a[i+1]=t;
}
for(i=0;i<10;i++)
printf("%5d",a[i]);
printf("\n");
}
请问这样错在哪里?
答案是for(i=9;i>0;i--)循环的,
我只是用加的循环代替减的循环,为什么不行?
求解~
尽量用for(i=0;i<9;i++)这个循环!
请在我写的程序上修改,不要另取程序,谢谢! 展开
#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”);
}
代码如下:
#include<stdio.h>
int main()
{ int a[8]={1,3,5,7,9,11,13},i,j,t,k;
scanf("%d",&t);
for(i=1;i<8;i++)
{
if(t>a[i-1]&&t<a[i])
{
for(j=7;j>i-1;j--)
a[j]=a[j-1];
a[i]=t;}
if(t==a[i])
{
for(j=7;j>i-1;j--)
a[j]=a[j-1];
a[i]=t;
}
for(i=0;i<8;i++)
printf("%d ",a[i]);
}
return 0;
}
扩展资料
C语言数组
同一数组中存储的数必须满足以下两个条件:
1、这些数的类型必须相同。
2、这些数在内存中必须是连续存储的。
换句话说,数组是在内存中连续存储的具有相同类型的一组数据的集合。
一维数组
一维数组的定义方式如下:
类型说明符 数组名[常量表达式];
例如:int a[5];
它表示定义了一个整型数组,数组名为 a,定义的数组称为数组 a。数组名 a 除了表示该数组之外,还表示该数组的首地址(关于地址现在先不讨论,稍后讲指针的时候再说)。
此时数组 a 中有 5 个元素,每个元素都是 int 型变量,而且它们在内存中的地址是连续分配的。也就是说,int 型变量占 4 字节的内存空间,那么 5 个int型变量就占 20 字节的内存空间,而且它们的地址是连续分配的。
#include<stdio.h>
intmain()
{
inta[6]={1,3,6,7,9};
inti,j,x,t;
printf("insertdata:");
scanf("%d",&x);
for(i=0;i<5;i++)
if(x<a[i])
break;
for(j=5;j>i;j--)
a[j]=a[j-1];
a[j]=x;
printf("Nowarraya:\n");
for(i=0;i<6;i++)
printf("%4d",a[i]);
printf("\n");
return0;
}
扩展资料
排序方法:
一、冒泡排序
冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
二、选择排序
选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
所以在要插入的位置之后所有的元素都要后移一个位置——不能前移,因为已经到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");
}