對於任意數字的輸入:
#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
已驗證