落書きノート

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

C言語で不定期練習

// 演習問題3-6

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

int int_cmpr(const long *a, const long *b) {
  if(*a < *b)
    return 1;
  else if(*a > *b)
    return -1;
  else
    return 0;
}

int main(void) {
  int i, nx;
  long ky;
  long *x;
  long *p;

  puts("bsearch関数による探索");
  printf("要素数 : ");
  scanf("%d", &nx);
  x = calloc(nx, sizeof(long));
  printf("降順に入力してください。\n");
  printf("x[0] : ");
  scanf("%ld", &x[0]);
  
  for(i = 1; i < nx; i++) {
    do {
      printf("x[%d] : ", i);
      scanf("%ld", &x[i]);
    } while (x[i] > x[i - 1]);
  }
  
  printf("探す値 : ");
  scanf("%ld", &ky);
  
  p = bsearch(&ky,
              x,
              nx,
              sizeof(long),
              (int (*)(const void *, const void *))int_cmpr
              );
  
  if(p == NULL)
    puts("探索に失敗しました。");
  else
    printf("%ldはx[%ld]にあります。\n", ky, (long)(p - x));
  free(x);
  
  return 0;
}



// 演習問題3-7

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

void *seqsearch(const void *key, const void *base, size_t nmemb,
                size_t size, int (*compar)(const void *, const void *)) {
  int i;
  for(i = 0; i < nmemb; i++) {
    if(compar(key, base + i * size))
      return (void *)base + i * size;
  }
  return NULL;
}

int int_cmpr(const int *a, const int *b) {
  return *a == *b;
}

int main(void) {
  int i, nx, ky;
  int *x, *p;

  puts("bsearch関数による探索");
  printf("要素数 : ");
  scanf("%d", &nx);
  x = calloc(nx, sizeof(int));
  printf("降順に入力してください。\n");
  printf("x[0] : ");
  scanf("%d", &x[0]);
  
  for(i = 1; i < nx; i++) {
    do {
      printf("x[%d] : ", i);
      scanf("%d", &x[i]);
    } while (x[i] > x[i - 1]);
  }
  
  printf("探す値 : ");
  scanf("%d", &ky);
  
  p = seqsearch(&ky,
                x,
                nx,
                sizeof(int),
                (int (*)(const void *, const void *))int_cmpr
                );
  
  if(p == NULL)
    puts("探索に失敗しました。");
  else
    printf("%dはx[%d]にあります。\n", ky, (int)(p - x));
  free(x);
  
  return 0;
}

新・明解C言語によるアルゴリズムとデータ構造

新・明解C言語によるアルゴリズムとデータ構造