对于任意数字的输入:
#include<stdio.h> int main(void) { int i,j,k; int num[100]; i = 0; int b; while(scanf("%d",&b) == 1) { num[i++] = b; if(‘\n‘ == getchar()) { num[i] = ‘\0‘; break; } } printf("i 的值:%d \n",i); int number = i; for(j = 0;j < number;j++) num[i+j] = num[j]; int n; printf("please input n number:"); scanf("%d",&n); n = i - (n - n/9*9); for(k = 0; k < number ; k++) {printf(" %d ",num[n++]);} return 0; }
解决一个输入任意数字,然后输一个任意数右移位问题。
以下是给出的第二种方法:
#include <stdio.h> void Reverse(int a[], int start, int end); //逆置数组a中下标[start...end]之间的元素 int main(int argc, char *argv[]) { int a[100], num, k, m, i; int n = 0; printf("数组:"); while((num=getchar())!=‘\n‘)//试探读取 { ungetc(num, stdin); //若下一个字符不是换行,则将次字符放回输入流 scanf("%d", &num); //读取数字 a[n++] = num; } printf("k = "); //读入要移动的位数 scanf("%d", &k); m = k%n; Reverse(a, 0, n-1); //首先整体逆置 Reverse(a, 0, m-1); Reverse(a, m, n-1); for(i=0; i<n; i++) printf("%d ", a[i]); printf("\n"); return 0; } void Reverse(int a[], int start, int end) { int i, j, tmp; for(i=start,j=end; i<j; i++,j--) { tmp = a[i]; a[i] = a[j]; a[j] = tmp; } }
输入数据: 1 2 3 4 5 6 7 8 9
输入:11
输出: 8 9 1 2 3 4 5 6 7
已验证
原文:http://www.cnblogs.com/liudan520/p/5007686.html