2016年4月27日水曜日

The circle of life.


20代までは、若さと外見の小奇麗さがあれば、押し切れる時代。
30代からは、人生のテーマとどんな風に時間を過ごしているかが外見に出てくる時代。

したがって、年老いても美しいひとは昔から容姿が整っていたのではなく、
長い年月、充実した時間を過ごしてきた証明。

2016年4月4日月曜日

C言語:ファイルの入出力

問題1
下記の条件で、5人分キーボードから入力し、
それをディスク上にファイルとして生成するプログラムを作成。
・受験番号(4ケタ)
・性別(男:M、女:F)
・氏名(20ケタ以内、姓と名の間を"-"でつなぐ)

問題2
問題1で生成したファイルを読み込み、まず性別で分け、
その中を氏名順でソートするプログラムを作成。

問題1のプログラム
struct exam{
  int no;
  char sex;
  char first[10];
  char last[10];
};

int main(void){
  FILE *fp;
  int i;
  struct exam member[10];
  for(i=0;i<5 i="" p="">    printf("%d番目の受験番号を入力してください:",i+1);
    scanf("%d", &member[i].no );
    printf("%d番目の性別を入力してください M/F:",i+1);
    scanf(" %[MF]", &member[i].sex );
    printf("%d番目のファーストネームを入力してください:",i+1);
    scanf("%s", member[i].first );
    printf("%d番目のラストネームを入力してください:",i+1);
    scanf("%s", member[i].last );
  }
   fp = fopen("test.txt","a");
   for(i =0;i<5 i="" p="">        printf("受験番号:%d\n性別:%c\n氏名:%s-%s\n",member[i].no, member[i].sex, member[i].first,member[i].last);
        fprintf(fp,"%d %c %s-%s\n",member[i].no, member[i].sex, member[i].first,member[i].last);
    }
   fclose(fp);
   printf("test.txtに出力完了\n");

  return 0;
}


問題2のプログラム
typedef struct {
  int no;
  char sex[5];
  char name[20];
} exam;
int main(void){
  FILE *fp;
  int  i,j,s=0,t=0;
  exam member[10];
  exam male[10],female[10],x[1],y[1];
  fp = fopen("test.txt","r");
  // ファイルの終端まで文字列を読み取り表示
  for(i=0;i<5 div="" i="">
      if(fscanf(fp,"%d %s %s\n" ,&member[i].no,member[i].sex, member[i].name ) != 3 ) break;
  }
  fclose(fp);
  //性別ごとに分類
  printf( "女性だけ表示\n");
  for (i=0;i<5 div="" i="">
    if(strcmp(member[i].sex,"M")){
     female[t].no = member[i].no;
     strcpy(female[t].sex,member[i].sex);
     strcpy(female[t].name,member[i].name);
     printf( "%d %s %s\n", female[t].no, female[t].sex, female[t].name);
     t++;
    }
  }
  printf( "男性だけ表示\n");
  for (i=0;i<5 div="" i="">
    if(strcmp(member[i].sex,"F")){
     male[s].no = member[i].no;
     strcpy(male[s].sex,member[i].sex);
     strcpy(male[s].name,member[i].name);
     printf( "%d %s %s\n", male[s].no, male[s].sex, male[s].name);
     s++;
   }
  }
  //女性の並べ替え
  for(i=0;i
    for(j=0;j
      if (strcmp(female[j].name,female[j+1].name) > 0) {
         y[1] = female[j];
         female[j] = female[j+1];
         female[j+1] = y[1];
      }
    }
  }
  printf( "女性を氏名順に並び替え\n");
  for(i=0;i
     printf( "%d %s %s\n",  female[i].no, female[i].sex, female[i].name);
  //男性の並べ替え
  for(i=0;i
    for(j=0;j
      if (strcmp(male[j].name,male[j+1].name) > 0) {
         x[1] = male[j];
         male[j] = male[j+1];
         male[j+1] = x[1];
      }
    }
  }
  printf( "男性を氏名順に並び替え\n");
  for(i=0;i
     printf( "%d %s %s\n",  male[i].no, male[i].sex, male[i].name);
  return 0;
  }