任意數組的輸入

對於任意數字的輸入:

#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

已驗證

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章