输入任意数组

对于任意数字的输入:

#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

已验证

posted @ 2015-11-30 16:58  刘丹wood  阅读(454)  评论(0编辑  收藏  举报