C语言课后8-4

题目描述

输入n个整数(不超过10),使前面各数顺序后移m个位置,最后m个数变成最前面的m个数(m<n),写一个函数实现上述功能。

在main函数中调用该函数,最后分行输出移动后的n个数,每个数占一行。

输入输出都在main函数中进行。

n和m以及n个数都需要从键盘上进行输入。


答案如下

// Test.cpp: 定义控制台应用程序的入口点。
/*
数据挪动
*/


#include "stdafx.h"
#include"stdio.h"
#include"math.h"
#include<iostream>
#include"string.h"
using namespace std;
int main()


{
int m, n,A[10];
int*p,*pre;
void func(int *p, int*pre, int m, int n, int A[]);
printf("需输入的数字总数\n");
scanf_s("%d",&n);
printf("后移的位数\n");
scanf_s("%d", &m);
printf("输入数字,以空格分隔\n");
for (int i = 0; i < n; i++)
{
scanf_s("%d", &A[i]);
}
p = &A[n - m];
pre = p - 1;
func(p, pre, m, n, A);
for (int i = 0; i < n; i++)
{
printf("%d", A[i]);
}
}
void func(int *p, int*pre, int m, int n, int A[]) {
int temp;
int t=1;
for (int i = 0; i < m; i++)
{
temp = *p;
for (int j = 0; j < n-m-1; j++)
{
*p = *pre;
pre--;
p--;
}
*p = *pre;
*pre = temp;
p = &A[n-m+t];
pre = p-1;
t++;
}
}



这个程序编的很困难,因为编完以后并没有出现编译错误的提示,但是一运行就报出红叉的错误,搞得我很费解,然后用单步调试发现了如下的问题:

func循环次数搞错,导致栈溢出;

pre的内容没有赋给p,导致出现两个2;

因为百度也没有结果,只能单步调试一点一点猜着改,花了我差不多3个小时。。。在演草本上画了好几遍。。。

最后还是弄出来了,很高兴

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值