伴学终生 发表于 2023-11-24 21:48:31

考研前突击一下,遇到问题!

#include <stdio.h>
#include <string.h>
#include <stdlib.h>


int main(){
    int n,m;
    scanf("%d",&n);
    int *p = (int *)malloc(n*sizeof(int));
    if(p==NULL){
      printf("Error");
    }
    for(int i=0; i<n; i++){
      scanf("%d",&p);
    }
    scanf("%d",&m);
    for(int i=0; i<n; i++){
      printf("%d",p);
    }

    for(int i=0; i<m; i++){
      int num=p;
      for(int j=n-1; j>0;j--){
            p[(j+1)/n]=p;
      }
      p=num;
    }

    for(int i=0; i<n; i++){
      printf("%d",p);
    }

    free(p);
}


像循环队列一样,向后移动m位,我感觉是我移位for循环出错了!!大佬帮我看一下!!

FishC_GPT 发表于 2023-11-24 21:49:04

你的代码有一些错误。
首先,你需要包含stdio.h头文件以使用scanf和printf函数。
其次,你需要包含stdlib.h头文件以使用malloc函数。
最后,你的for循环缺少结束括号 }。

下面是修正后的代码:

#include <stdio.h>
#include <stdlib.h>

int main() {
    int n;
    scanf("%d", &n);
    int *p = (int *) malloc(n * sizeof(int));
    if (p == NULL) {
      printf("Error");
      return 0; // 如果内存分配失败,直接返回
    }
    for (int i = 0; i < n; i++) {
      scanf("%d", p + i); // 使用%p的偏移量来读取输入
    }
    for (int i = 0; i < n; i++) {
      printf("%d ", *(p + i)); // 使用%p的偏移量来打印输出
    }
    free(p); // 释放内存
    return 0;
}

这段代码在运行时,会首先从输入中读取一个整数n,然后动态分配一个大小为n的int类型数组,接着通过一个循环依次从输入中读取n个整数到数组中。最后,再通过一个循环将数组中的元素依次打印出来,并释放动态分配的内存。
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 考研前突击一下,遇到问题!