二级C语言:已有一个已排好序的数组,要求输入一个数后,按原来的排序的规律将它插入数组中。

我的思路是这样的:先找到适合这个数的位置,然后插入,再将后面的数位置往后挪一位。。这是谭浩强课本的课后题,别在网上找答案,要自己写的程序,我关键是不会让后面那些数的位置往... 我的思路是这样的:先找到适合这个数的位置,然后插入,再将后面的数位置往后挪一位。。
这是谭浩强课本的课后题,别在网上找答案,要自己写的程序,我关键是不会让后面那些数的位置往后挪一位。。。
看我的程序错在哪?求大神给出正确的完整版的程序。。。。谢谢!
展开
 我来答
xoaxa
2015-05-24 · TA获得超过8607个赞
知道大有可为答主
回答量:6415
采纳率:72%
帮助的人:3406万
展开全部

#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;   
}
memberwin
2011-07-28 · TA获得超过3903个赞
知道大有可为答主
回答量:1000
采纳率:100%
帮助的人:494万
展开全部
题目要求是插入原有序列,并且存储在数组中
所以在要插入的位置之后所有的元素都要后移一个位置——不能前移,因为已经到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");
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
问明6E
高粉答主

2019-06-10 · 每个回答都超有意思的
知道答主
回答量:279
采纳率:100%
帮助的人:12.4万
展开全部

#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”);

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友af6bfe3407
2012-10-19
知道答主
回答量:29
采纳率:0%
帮助的人:27.3万
展开全部
#include "stdio.h"
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");
}
这绝对正确,我上机验证过了!!要加分啊。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wuiiao333
2014-12-08 · TA获得超过799个赞
知道小有建树答主
回答量:666
采纳率:0%
帮助的人:198万
展开全部
插入后的是新数组还是原来的数组,
若是原来的数组的话,则在原先定义时就要先多定义1个。
往后挪一位很简单。

定义a[11],有10个元素a[0]~a[9]已排序好,若插入到第五个元素a[4]后面,
则只需一个for循环
for(i=9;i>5;i--) //挪动6~9的元素,第五位为插入元素,在循环完后在执行
a[i+1]=a[i];
最后再
a[5]=插入元素;
更多追问追答
追问

看我程序错在哪里?

追答
for(j=9;j>i;j--)
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式