C言語関係掲示板

過去ログ

No.1329 年齢順に名前を表示するプログラム

[戻る] [ホームページ]
No.17940

年齢順に名前を表示するプログラム
投稿者---はらい(2004/11/10 22:46:15)


下に二人の名前と生年月日を入力して年齢順に表示するプログラムを作ったのですが、これを三人でする場合に書き換えるにはelse ifだと無理ですか?無理な場合は何を使って書き換えるといいですか?

#include <stdio.h>

void main (void)

{
  char  a[20],b[20];
  int   f,g;
    
  printf("1人目の人、名前と生年月日を入力してください:");
  scanf("%s %d",&a,&f);
  printf("2人目の人、名前と生年月日を入力してください:" );
  scanf("%s %d",&b,&g);
  
 if (f>=g)
 {printf("%s\n %s\n ",b,a);}
  else if(g>=f)
 {printf("%s\n %s\n",a,b);}  
   
}



よろしくおねがいします。


No.17942

Re:年齢順に名前を表示するプログラム
投稿者---NykR(2004/11/10 23:04:36)


>下に二人の名前と生年月日を入力して年齢順に表示するプログラムを作ったのですが、これを三人でする場合に書き換えるにはelse ifだと無理ですか?

可能です。
年齢の並び方が6通りあるのでif文のネストが4段になりますが。


> 無理な場合は何を使って書き換えるといいですか?

でも名前と年齢を一つのレコードにしたものを6個作って配列に突っ込んでqsortした方があとで読むときに楽だと思います。


No.17944

Re:年齢順に名前を表示するプログラム
投稿者---かずま(2004/11/10 23:41:34)


> 年齢の並び方が6通りあるのでif文のネストが4段になりますが。

3段ではありませんか?
#include <stdio.h>

int main(void)
{
    char a[20], b[20], c[20];  int na, nb, nc;

    printf("1人目の人、名前と生年月日(YYYYMMDD)を入力してください:");
    if (scanf("%s %d", &a, &na) != 2) return 1;
    printf("2人目の人、名前と生年月日(YYYYMMDD)を入力してください:");
    if (scanf("%s %d", &b, &nb) != 2) return 1;
    printf("3人目の人、名前と生年月日(YYYYMMDD)を入力してください:");
    if (scanf("%s %d", &c, &nc) != 2) return 1;

    if (na < nb)
        if (nb < nc)
            printf("%s\n %s\n  %s\n", a, b, c);  /* 2 */
        else if (na < nc)
            printf("%s\n %s\n  %s\n", a, c, b);  /* 3 */
        else
            printf("%s\n %s\n  %s\n", c, a, b);  /* 3 */
    else
        if (na < nc)
            printf("%s\n %s\n  %s\n", b, a, c);  /* 2 */
        else if (nb < nc)
            printf("%s\n %s\n  %s\n", b, c, a);  /* 3 */
        else
            printf("%s\n %s\n  %s\n", c, b, a);  /* 3 */
    return 0;
}