这是引用函数数组问题,指针那一章的。

img


好难。有人会没,大一小菜刚学,有没有回答俺的问题。明天要交。交集,第一次用这个软件,希望有人回答俺。谢谢!!

第八行的 do
修改为 while (1)

包含下 #include <conio.h>

28行的错误,看不到,你把后面的贴出来

代码修改如下,供参考:

#include <stdio.h>
void sort(int *a, int count);
int main()
{
    int a[10] = {0}, i = 0, j;
    printf("请输入待排序的数:\n");
    do {
        scanf("%d", &a[i]);
        if (i > 9 || a[i] <= 0 || a[i] > 32627)
            break;
        i++;
    }while (1);

    printf("请输出排序前的各个元素的值:");
    for (j = 0;j < i;j++)
        printf("%5d", a[j]);
    printf("\n");

    sort(a , i);

    printf("请输出排序后的各个元素的值:");
    for (j = 0;j < i;j++)
        printf("%5d", a[j]);
    printf("\n");
   
    return 0;
}

void sort(int *a, int count)
{
    int i, j, tmp;
    for (i = count - 1;i > 0;i--)
    {
        for (j = 0;j < i;j++)
        {
            if (a[j] > a[j+1])
            {
                tmp   = a[j];
                a[j]  = a[j+1];
                a[j+1]= tmp;
            }
        }
    }
}

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7607471
  • 这篇博客也不错, 你可以看下黑洞数(黑洞数又称陷阱数,是类具有奇特转换特性的整数。任何一个数字不全相同整数,经有限次“重排求差”操作,总会得某一个或一些数,这些数即为黑洞数。
  • 除此之外, 这篇博客: 看完这篇文章还不会顺序表和链表,请寄刀片给我中的 一、线性表 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    线性表(linear list )是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串...
    线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。
    

    在这里插入图片描述

  • 以下回答来自chatgpt:

    对于如何计算两个数组的交集,可以考虑使用指针和循环来实现。具体步骤如下:

    1. 首先定义两个数组a和b,以及它们的大小size_a和size_b。
    int a[] = {1, 2, 3, 4};
    int b[] = {3, 4, 5, 6};
    int size_a = sizeof(a) / sizeof(int);
    int size_b = sizeof(b) / sizeof(int);
    
    1. 定义一个新的数组result用来存放交集,以及一个变量count用来统计交集中元素的个数,初始值为0。
    int result[size_a < size_b ? size_a : size_b]; // 取两个数组中较小的大小作为交集的最大可能大小
    int count = 0; // 交集中元素的个数
    
    1. 使用两个指针p和q分别指向数组a和b的开头,然后用循环遍历整个数组。
    int *p = a;
    int *q = b;
    while (p < a + size_a && q < b + size_b) {
        // 比较pq对应的值的大小,若相等则将该值添加到result数组中
        if (*p == *q) {
            result[count++] = *p;
            p++;
            q++;
        }
        // 否则将值较小的指针向后移动一位
        else if (*p < *q) {
            p++;
        }
        else {
            q++;
        }
    }
    
    1. 最后输出交集中的元素即可。
    printf("交集为:");
    for (int i = 0; i < count; i++) {
        printf("%d ", result[i]);
    }
    

    将以上步骤整合起来,得到完整代码如下:

    #include <stdio.h>
    
    int main() {
        int a[] = {1, 2, 3, 4};
        int b[] = {3, 4, 5, 6};
        int size_a = sizeof(a) / sizeof(int);
        int size_b = sizeof(b) / sizeof(int);
        int result[size_a < size_b ? size_a : size_b]; // 取两个数组中较小的大小作为交集的最大可能大小
        int count = 0; // 交集中元素的个数
    
        int *p = a;
        int *q = b;
        while (p < a + size_a && q < b + size_b) {
            // 比较p和q对应的值的大小若相等则将该值添加到result数组中
            if (*p == *q) {
                result[count++] = *p;
                p++;
                q++;
            }
            // 否则将值较小的指针向后移动一位
            else if (*p < *q) {
                p++;
            }
            else {
                q++;
            }
        }
    
        printf("交集为:");
        for (int i = 0; i < count; i++) {
            printf("%d ", result[i]);
        }
    
        return 0;
    }
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^