冒泡排序输入n(n<=10)个正整数,将它们从小到大排序后输出,

img

img

img


这个是C语言程序设计(第四版)书的第197页的例8-5,验证完程序后发现这个书的程序始终差了一个返回的值,

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7547275
  • 这篇博客你也可以参考下:C语言程序设计练习题 课本第八章 8-14 将N个数按输入时顺序的逆序排列,用函数实现.
  • 除此之外, 这篇博客: C语言顺序查找、折半查找在一个有序数组里查找某个数字n的下标中的 1.顺序查找法(for循环从头开始找) 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 写一个循环从数组的第一个元素开始比较,一直比到想要找到的数字找到后把他的下标输出,如果一直到最后的元素都没有找就输出“找不到”,很明显这里可以用一个for循环加一个if判断语句就可以实现。
     

    #include<stdio.h>
    int main()
    {
        int a[]={1,2,3,4,5,6,7,8};
        int n;
        scanf("%d",&n);
        int ge=sizeof(a)/sizeof(a[0]);//数组的第一个元素下标是0,这样可以求出数组中有多少个元素
        int i=0;
        printf("数组a内的元素有%d个\n",ge);
        for (i=0;i<ge;i++)//i从0开始,所以就让i代表数组的下标
        {
            if(n==a[i])
            {
                printf("找到了,%d的下标是%d\n",n,i);
                break;
            }
        }
        if(i>ge-1)//i从0开始,其实在这个程序中数组中最后一个元素的下标是ge-1
        {
            printf("找不到\n");
        }
        return 0;
    }

    运行结果是:
          
    运行结果正确,但是我们也能看出来,这种方法仅仅适用于数组中元素较少的情况,因为这个for循环是要从第一个元素一直找到n,如果n是最后一个元素,那么就需要循环到最后,效率太低了,是要我们就要找一种更好一点的方法,接下来介绍另一种方法

  • 您还可以看一下 张明阳老师的深入理解C语言指针和结构体课程中的 如何修改实际参数变量的数值(5)小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:
    #include <stdio.h>
    
    int main() {
        int n;
        scanf("%d", &n);
        int a[10];
        for (int i = 0; i < n; i++) {
            scanf("%d", &a[i]);
        }
        // 冒泡排序
        for (int i = 0; i < n-1; i++) {
            for (int j = 0; j < n-i-1; j++) {
                if (a[j] > a[j+1]) {
                    int temp = a[j];
                    a[j] = a[j+1];
                    a[j+1] = temp;
                }
            }
        }
        // 输出排序后的结果
        for (int i = 0; i < n; i++) {
            printf("%d ", a[i]);
        }
        return 0;
    }
    

    《C语言程序设计第四版》第197页的例8-5是一个用冒泡排序排序一维数组的例子,确实缺少了返回值。在例子中,排序后的结果直接打印输出而不需要通过返回值来表达,在实际项目中不会存在类似的问题。如果需要通过函数返回值来传输数据,可以将需要返回的数据作为函数的返回值,或者将需要传递的数据设为函数参数的指针类型,函数修改指针所指向的内存区域,从而达到传递数据的目的。如果以上两种方式都无法使用,可以将需要传递的数据写入共享内存中,在不同进程之间共享数据。

书上印刷有错误,修改如下,供参考:

img