同調実験室 - ARGIUS.net

TOP PAGE INDEX Number / 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

11:構造体

機能

  1. 社員番号、社員名、年齢を1レコードとする構造体を定義する
  2. レコード1を作成する
  3. レコード2を作成する
  4. レコード1を表示する
  5. レコード2を表示する

※各項目の表示形式は下記(表示形式)の通りとする

※Javaでは、標準APIに桁編集クラスが無いため自作

レコード

社員
番号 社員名           年齢
====.================.====
0001 suzuki taro       25
0002 takahashi jiro    23

表示形式

社員番号 4桁ゼロ付右詰め (%04d)
社員名   そのまま
年齢     4桁右詰め (%4d)

実行結果

$ ./test
社員番号 : 0001
社員名   : suzuki taro
年齢     :   25

社員番号 : 0002
社員名   : takahashi jiro
年齢     :   23

$

ソース

C

#include <stdio.h>
#include <string.h>

/* 構造体 Shain型 */
typedef struct {
  int   number;   /* 社員番号 */
  char  name[50]; /* 社員名   */
  int   age;      /* 年齢     */
} Shain;

/* 1レコードを表示する関数 */
void printRecord(Shain *p)
{
    printf("社員番号 : %04d\n",p->number);
    printf("社員名   : %s\n"  ,p->name  );
    printf("年齢     : %4d\n" ,p->age   );
    printf("\n");
}

int main()
{
  Shain s1;
  Shain s2;
  
  /* strcpyはオーバーフローチェックしない */
  
  s1.number = 1;
  strcpy(s1.name, "suzuki taro");
  s1.age    = 25;
  
  s2.number = 2;
  strcpy(s2.name, "takahashi jiro");
  s2.age    = 23;
  
  printRecord(&s1);
  printRecord(&s2);
  
  return 0;
}

C++

#include <iostream>
#include <string>
#include <iomanip>

// manipがあるので名前空間を取り込む
using namespace std;

// Shainクラス
class Shain {
  
public:
  int    number; // 社員番号
  string name;   // 社員名
  int    age;    // 年齢
  
  Shain(int a, char * b, int c) : number(a), name(b), age(c) {};
  ~Shain() {};
  
  void printRecord();
};

// 1レコードを表示するクラスメソッド
void Shain::printRecord()
{
  cout << "社員番号 : " << setw(4) << setfill('0')          << number << endl;
  cout << "社員名   : "                                     << name   << endl;
  cout << "年齢     : " << setw(4) << setfill(' ') << right << age    << endl;
  cout << endl;
}

int main()
{
  Shain s1(1, "suzuki taro", 25);
  Shain s2(2, "takahashi jiro", 23);
  
  s1.printRecord();
  s2.printRecord();
  
  return 0;
}

Java

// Shainクラス
class Shain {
    
    int    number = 0;  // 社員番号
    String name   = ""; // 社員名
    int    age    = 0;  // 年齢
    
    Shain(int a, String b, int c) {
        this.number = a;
        this.name   = b;
        this.age    = c;
    }
    
    // 1レコードを表示するクラスメソッド
    void printRecord() {
        
        String sNumber = new java.text.DecimalFormat("0000").format(this.number);
        String sAge    = alignRight(this.age, 4);
        
        System.out.println("社員番号 : " + sNumber);
        System.out.println("社員名   : " + this.name);
        System.out.println("年齢     : " + sAge);
        System.out.println("");
        
    }
    
    // 数値の右詰メソッド
    private String alignRight( long number, int cols) {
        
        StringBuffer buf = new StringBuffer("");
        buf.append( number );
        while ( buf.length() < cols ) {
            buf.insert(0,' ');
        }
        return buf.toString();
        
    }
    
}

class Main {
    
    public static void main (String[] args) {
        
        Shain s1 = new Shain(1, "suzuki taro", 25);
        Shain s2 = new Shain(2, "takahashi jiro", 23);
        
        s1.printRecord();
        s2.printRecord();
        
    }
    
}

Perl

# 構造体 Shain
sub Shain {
    
    my $a = shift;
    my $b = shift;
    my $c = shift;
    
    return {
        
        number => $a,  # 社員番号
        name   => $b,  # 社員名
        age    => $c,  # 年齢
        
    }
    
}

# 1レコードを表示する関数
sub printRecord() {
    
    my $struct = shift;
    
    printf"社員番号 : %04d\n",$struct->{"number"};
    printf"社員名   : %s\n",  $struct->{"name"};
    printf"年齢     : %4d\n", $struct->{"age"};
    print"\n";
    
}

#
# main
#
my $s1 = &Shain(1, "suzuki taro", 25);
my $s2 = &Shain(2, "takahashi jiro", 23);

&printRecord($s1);
&printRecord($s2);

Ruby

class Shain
  def initialize(a, b, c)
    @number = a.to_i
    @name   = b.to_s
    @age    = c.to_i
  end
  def printRecord
    printf"社員番号 : %04d\n", @number
    printf"社員名   : %s\n",   @name
    printf"年齢     : %4d\n",  @age
    puts
  end
end

# main

s1 = Shain.new(1, "suzuki taro",    25);
s2 = Shain.new(2, "takahashi jiro", 23);

s1.printRecord
s2.printRecord

最終更新日 : 2004.08.23

TOP PAGEINDEX Number / 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18