落書きノート

ふと自分が気になった事を書いてます

C言語で問題を解く

#include <time.h>
#include <stdio.h>
#include <stdlib.h>

int maxof(const int a[], int n) {
  int i;
  int max = a[0];

  for(i = 1; i < n; i++)
    if(a[i] > max) max = a[i];

  return max;
}

int main(void) {
  int i;
  int *height;
  int number;
  
  height = calloc(number, sizeof(int));

  srand(time(NULL));

  number = 5 + rand() % 16;
  
  for(i = 0; i < number; i++) {
    height[i] = 100 + rand() % 90;
    printf("height[%d] = %d\n", i, height[i]);
  }

  printf("最大値は%dです。\n", maxof(height, number));

  free(height);
  
  return 0;
}




#include <stdio.h>
#include <stdlib.h>

#define swap(type, x, y) do { type t = x; x = y; y = t; } while (0)

void ary_reverse(int a[], int n) {
  int i,j;
  for(i = 0; i < n / 2; i++) {
    swap(int, a[i], a[n - i - 1]);
    for(j = 0; j < n; j++)
      printf("%d ", a[j]);
    puts("");
    printf("a[%d]とa[%d]を交換します。\n", i, n - i - 1);
  }
}

int main(void) {
  int i;
  int *x;
  int nx;

  printf("要素数 : ");
  scanf("%d", &nx);
  
  x = calloc(nx, sizeof(int));
  
  printf("%d個の整数を入力してください。\n", nx);
  
  for(i = 0; i < nx; i++) {
    printf("x[%d] : ", i);
    scanf("%d", &x[i]);
  }

  puts("");
  ary_reverse(x, nx);

  puts("");
  printf("配列の要素の並びを反転しました。\n");
  
  for(i = 0; i < nx; i++)
    printf("x[%d] = %d\n", i, x[i]);
  
  free(x);
  
  return 0;
}




#include <stdio.h>

int card_convr(unsigned x, int n, char d[]) {
  char dchar[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  int digits = 0;
  int i;
  
  if(x == 0)
    d[digits++] = dchar[0];
  else
    while(x) {
      d[digits++] = dchar[x % n];
      x /= n;
    }

  for(i = 0; i < digits / 2; i++) {
    int t = d[digits - i - 1];
    d[digits - i - 1] = d[i];
    d[i] = t;
  }
  
  return digits;
}

int main(void) {
  int i;
  unsigned no;
  int cd;
  int dno;
  char cno[512];
  int retry;

  puts("10進数を基数変換します。");

  do {
    printf("変換する非負の整数 : ");
    scanf("%u", &no);

    do {
      printf("何進数に変換しますか(2-36) : ");
      scanf("%d", &cd);
    } while(cd < 2 || cd > 36);

    dno = card_convr(no, cd, cno);

    printf("%d進数では", cd);
    for(i = 0; i < dno; i++)
      printf("%c", cno[i]);
    printf("です。\n");

    printf("もう一度しますか(1···はい/0···いいえ) : ");
    scanf("%d", &retry);
    
  } while(retry == 1);
  
  return 0;
}