Report#8 基数変換とSORT

 入力した正の整数を降順に並べ換えて出力するプログラムを作成せよ。プログラムは個別にコンパイルし、makeコマンドで実行すること。

入力データは50以下とし、以下の数が混在しているとする。
 
 	16進数:先頭1文字がxまたはX(エックスの小文字か大文字)
 	 8進数:先頭1文字が0(零)
 	10進数:先頭1文字が0(零)以外の数字

 考察ポイント:複数あるポインタ変数が何を指しているかの把握、Makeコマンドでの実行

プログラムの一部

/*
  Program    : cardinal.c
  Comment    : 基数変換と整列処理
*/

#include <stdio.h>
#include <string.h>
#define  MAX 256

void conv10(char **x, int *k, int n);
void select_sort(int x[], int m[], int n);
void print_num(char *x[], int m[], int n);
void msg();

int main(){
  char *dt[50], num[10], buf[MAX], *p=buf;
  int  n=0, len, i10[50], move[50];

  puts("-------- Input");
  while(gets(num) != NULL) {
    len = strlen(num);
    if(p > ?_?_?_?_? )  break;
    strcpy(p, num);
    dt[n] = p;
    p += ?_?_?_?_?;
    n++;
  }
  puts("-------- Result");
  conv10(?_?_?_?_?);
  select_sort(?_?_?_?_?);
  print_num(?_?_?_?_?);
  msg();

  return(0);
}
/*
  Program    : conv10.c
*/

void conv10(char **x, int *k, int n){
  while(n-- > 0){
    switch(**x){
      case '0' :
        sscanf(?_?_?_?_?, "%o", k);
        break;
      case 'x' :
      case 'X' :
        sscanf(?_?_?_?_?, "%x", k);
        break;
      default :
        sscanf(?_?_?_?_?, "%u", k);
        break;
    }
    ?_?_?_?_?;
    ?_?_?_?_?;
  }
}
/*
  Program    : select_sort.c
*/

void select_sort(int x[], int m[], int n){
  int  i, j, k, w;

  for(i=0; i<n; i++)  m[i]=i;
  for(i=0; i<n-1; i++){
    k=i;
    for(j=i+1; j<n; j++)
      if( ?_?_?_?_? )  k=j;
    w    = x[i];
    x[i] = x[k];
    x[k] = w;
    w    = m[i];
    m[i] = m[k];
    m[k] = w;
  }
}
/*
  Program    : print_num.c
*/

void print_num(char *x[], int m[], int n){
  int  i;

  for(i=0; i<n; i++){
    puts( ?_?_?_?_? );
  }
}
/*
  Program    : msg.c
*/
int msg(){
  printf("#### Message from C #### By Taniguchi\n");
  return(0);
}

実行例

-------- Input
x21
021
055
22
^D
-------- Result
055
x21
22
021
#### Message from C #### By Taniguchi

Report#7<==


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-04-21 (火) 11:06:10 (1584d)