右移n位数组

 一、问题

若有n个数的数组arr,循环右移一位指每个数移到相邻的右边一个位置,最右边的数移到最左边。如数组1,2,3,4,5;循环右移1位的结果为5,1,2,3,4;右移3位的结果为3,4,5,1,2。

使用指针方法,编写数组右移k位的函数。

编写主函数输入若干元素和右移位数,调用函数右移,在主函数中输出结果。元素个数不超过100。

输入:两行,第1行为若干用空格分隔的整数,以9999表示结束;第2行一个整数,表示右移的位数。

输出:一行,移位的结果,各个数值用一个空格隔开,末尾无空格。

【输入输出样例】
输入:
1 2 3 4 5 9999
3

输出:
3 4 5 1 2

二、代码

#include <stdio.h>

// 数组右移k位函数
void rightshift(int arr[], int n, int k) {
    int j, m = 0;
    // 取模操作得到实际要右移的位数
    int i = k % n;
    int temp[i]; // 用于存储要右移的元素
    // 将要右移的元素保存
    for (j = n - i; j < n; j++) {
        temp[m] = arr[j];
        m++;
    }
    // 将数组元素向右移动k位
    for (j = n - i - 1; j >= 0; j--) {
        arr[j + i] = arr[j];
    }
    // 将右移的元素添加到数组前面
    for (j = 0; j < i; j++) {
        arr[j] = temp[j];
    }
}

int main() {
    int arr[100];
    int i = 0, k;
    // 读取输入的数组元素
    while (scanf("%d", &arr[i]) != EOF) {
        if (arr[i] == 9999) {
            break;
        }
        i++;
    }
    // 读取要右移的位数
    scanf("%d", &k);
    // 调用右移函数
    rightshift(arr, i, k);
    // 输出右移后的结果
    for (int p = 0; p < i; p++) {
        printf("%d ", arr[p]);
    }
    return 0;
}

三、tips

1.学习如何传入数组,不包含9999

2. EOF

EOF是End Of File的缩写,表示文件结尾。

在C语言中,EOF是一个宏定义,用于表示文件末尾的标记。当程序读取文件内容时,如果已经到达文件结尾,就会返回EOF,告诉程序已经无法从文件中读取更多的数据。

在使用scanf等输入函数时,如果读取到了EOF,会返回-1,程序可以根据这个返回值判断是否已经读取完文件。例如:

while (scanf("%d", &num) != EOF) {
    // 读取到一个数字,处理它
}

这个循环会不断读取输入的数字,直到读取到EOF为止。

3.学习这个思想,将溢出的数字保存

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值