問題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;
}