下記の条件で、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;iprintf( "%d %s %s\n", male[i].no, male[i].sex, male[i].name);return 0;}
0 件のコメント:
コメントを投稿