| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 806 人关注过本帖
标题:向排好序的数组中插入一个数字
只看楼主 加入收藏
wuxiami
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2022-7-17
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
向排好序的数组中插入一个数字

#include<stdio.h>

void main()
{
    int a[10];
    int i, j, x;
    printf("输入此数组");
    for (i = 0; i < 10; i++)
    {
        scanf_s("%d", &a[i]);
    }

     
    // for(i=0;i<10;i++)
    if (a[1]<a[2]);
    {
        printf("小到大排序");
    }
      if (a[1] > a[2])
    {
        
        printf("大到小排序");
    }

     
    printf("输入插入的数字");
    scanf_s("%d", &x);
    for (i = 0; i < 10; i++)
        if (a[i] > x)
        {
            break;
        }
    for (j = 9; j >= i; j--)
    {
        a[j + 1] = a[j];
    }
    a[i] = x;
    printf("插入后的数组为:");
    for (i = 0; i <= 10; i++)
        printf("%d     ", a[i]);
}
这个判断排好序的数组的排序顺序,   并按原有大到小或小到大规律在其中插入一个数字  
中间的判断始终达不到预想的效果    而且插入数字也只是可以实现小到大排序
大佬们  求解
搜索更多相关主题的帖子: 插入 i++ 数组 printf for 
2022-08-04 11:42
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:10 
中间的判断始终达不到预想的效果
什么是你“预想的效果”,为什么要让别人猜,而不肯明确说出来呢?

而且插入数字也只是可以实现小到大排序
语言描述没这么复杂,你就告诉大家你 输入了什么,输出了什么,期待输出什么 就行了

程序代码:
#define _CRT_SECURE_NO_WARNINGS // 仅VC++需要定义这个累赘才能使得VC++符合标准规定
#include <stdio.h>
#include <stdbool.h>

int main( void )
{
    int a[10+1]; // 输入10个数,再插入1个,所以共11个
    printf( "输入10个元素的数组: " );
    for( size_t i=0; i!=10; ++i )
        scanf( "%d", &a[i] ); // 判断输入成功与否?你源代码中没写,那我也就略过

    // 是不是有序数组?你源代码中没写,那我也就略过

    // true:升序, false:降序
    bool asc = a[0]<=a[9]; // 我不明白你原代码中为什么用第二个数与第三个数相比,并且也不考虑第二个数与第三个数相等的情况。想不懂,我就不想了
    puts( asc ? "升序" : "降序" );

    int x;
    printf( "输入待插入的数字: " );
    scanf( "%d", &x );

    size_t index;
    if( asc )
        for( index=0; index!=10 && a[index]<=x; ++index );
    else
        for( index=0; index!=10 && a[index]>=x; ++index );

    for( size_t i=10; i!=index; --i )
        a[i] = a[i-1];
    a[index] = x;

    printf( "插入后的数组为: " );
    for( size_t i=0; i!=11; ++i )
        printf( "%d%c", a[i], " \n"[i==10] );
}
2022-08-04 15:35
wuxiami
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2022-7-17
收藏
得分:0 
回复 2楼 rjsp
多谢大佬
2022-08-04 17:33
chenyucheng
Rank: 3Rank: 3
来 自:浙江省台州市临海市
等 级:论坛游侠
威 望:3
帖 子:141
专家分:181
注 册:2022-7-1
收藏
得分:10 
回复 2楼 rjsp
#define _CRT_SECURE_NO_WARNINGS // 仅VC++需要定义这个累赘才能使得VC++符合标准规定

什么意思?

爱玩编程的小学生,有Python,但只会一点点C++。

版主->斑竹->竹子,所以版主是竹子。(doge)
//不要让我当版主
2022-08-09 08:19
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
按照标准,#include <stdio.h> 之后就可以使用 scanf/printf 等标准库函数,
但在VC中,需要在 #include <stdio.h> 之前定义 #define _CRT_SECURE_NO_WARNINGS 才可以使用 scanf/printf 等标准库函数。

------ 回答完毕 ------

VC认为 scanf/printf 等标准库函数不安全,于是搞了 scanf_s/printf_s 等私有函数,并且不让用 scanf/printf 等标准库函数。
后来VC说要支持C语言(说来话长,虽然之前的VC也能编译C,但VC其实是不支持C语言的,微软每年都要多次向公众重申VC不支持C语言),于是与C语言标准委员会有了一段蜜月期。
在这段蜜月期中,MS厚颜无耻地向标准委员会提交了 scanf_s/printf_s 等函数,标准委员会忍住恶心接受了它们,但这些函数实在粗劣,于是标准委员会帮它进行了完善后,作为可选附件进入了标准,名叫“Annex K”。
……,懒得把这些黑历史再讲下去了,我只总结一下现状吧:
a. 标准有个“Annex K”,但只是“可选”,而且没有任何一个编译器支持它。
b. VC 不支持 Annex K,VC 用的仍然是自己那套粗陋不堪,与标准不一致的东西
c. 其它所有编译器(严格来讲是库) 也不支持 Annex K。gcc/clang 都公开嘲笑过这些垃圾函数
2022-08-09 09:05
快速回复:向排好序的数组中插入一个数字
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019723 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved