利用指针操作一维数组,请测试程序8-3.c,并分析运行结果。

#include <stdio.h>

void main()

{

   int i,a[10];

   int *p;

   for(p = a;p<a + 10;p++)

          scanf("%d",p);

   for(p = a,i = 0;i<10;i++,p++)

          printf("a[%d] = %d\n",i,*p);

}

程序的运行结果取决于输入了什么
假设输入 1 2 3 4 5 6 7 8 9 10
输出
a[0] = 1
a[1] = 2
a[2] = 3
a[3] = 4
a[4] = 5
a[5] = 6
a[6] = 7
a[7] = 8
a[8] = 9
a[9] = 10
也就是a[第几个]=你输入的数

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7636525
  • 这篇博客也不错, 你可以看下8只数码管滚动显示单个数字
  • 除此之外, 这篇博客: C程序设计语言读书笔记中的 8.不存在字符串这个定义,多个字符将用字符数组进行存储,数组的各元素分别存储字符串的各个字符,并以 \0 标志字符串的结束: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    例如存放 ‘hello\n’:

  • 您还可以看一下 朱有鹏老师的内存这个大话题-4.1.C语言专题第一部分课程中的 4.1.9、复杂数据结构小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    我可以帮你检查一下8-3.c程序。根据段落1的参考资料,可以看出问题出在以下代码:

    struct node A=(struct node )malloc(sizeof(struct node)); A->next->Data=3; A->next->next=NULL; A=A->next; printf("%d",A->Data);

    在这段代码中,使用了指针操作一维数组,但是没有给A->next分配内存空间,导致程序出错。如果想要使用指针操作一维数组,需要先给数组分配足够的内存空间。解决办法是:

    struct node A = (struct node)malloc(sizeof(struct node)); A->Data = 3; A->next = NULL; printf("%d", A->Data);

    这样就可以正常输出结果了。

    关于参考资料中的段落2,它是一个二分查找算法的实现。如果要查找一个有序数组中是否存在某个数,并输出该数在数组中的位置,可以使用该算法。具体实现参考以下代码:

    int binary_search(int arr[], int sz, int target) { int left = 0, right = sz - 1;

    while (left <= right) {
        int mid = (left + right) / 2;
    
        if (arr[mid] == target) {
            return mid;
        } else if (arr[mid] < target) {
            left = mid + 1;
        } else {
            right = mid - 1;
        }
    }
    
    return -1;
    

    }

    int main() { int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}; int sz = sizeof(arr) / sizeof(arr[0]); int target; printf("请输入要查找的数:"); scanf("%d", &target);

    int index = binary_search(arr, sz, target);
    if (index == -1) {
        printf("无此数\n");
    } else {
        printf("%d 在数组中的位置是 %d\n", target, index);
    }
    
    return 0;
    

    }

    如果存在该元素,则输出其在数组中的位置,如果不存在,则输出“无此数”。这里的实现方法是采用折半查找或二分查找的方法,在查找之前需要将数组排序。

    关于参考资料中的段落5,它是一个二分查找的递归实现。在数组中查找一个数,可以使用递归折半查找的方法。具体实现参考以下代码:

    int binary_search_recursive(int arr[], int left, int right, int target) { if (left > right) { return -1; }

    int mid = (left + right) / 2;
    if (arr[mid] == target) {
        return mid;
    } else if (arr[mid] < target) {
        return binary_search_recursive(arr, mid + 1, right, target);
    } else {
        return binary_search_recursive(arr, left, mid - 1, target);
    }
    

    }

    int main() { int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}; int sz = sizeof(arr) / sizeof(arr[0]); int target; printf("请输入要查找的数:"); scanf("%d", &target);

    int index = binary_search_recursive(arr, 0, sz - 1, target);
    if (index == -1) {
        printf("无此数\n");
    } else {
        printf("%d 在数组中的位置是 %d\n", target, index);
    }
    
    return 0;
    

    }

    这个递归函数的实现思想是将数组一直折半,直到折半到只有两个数字的时候,如果还没有查找到,就证明不存在该数。这里同样需要先将数组排序。

    最后,关于参考资料中的段落4和段落9,它们分别是预处理指令和替换规则的说明。预处理指令可以用于在编译时根据定义的符号、宏等条件控制编译过程。替换规则用于在编译时对符号和宏进行替换,以便优化代码或实现特定的功能。这些指令和规则的使用需要根据具体的情况和需求进行选择和编写。


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