質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

2回答

696閲覧

数字順に並べ替えるプログラム

KeiD

総合スコア26

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2020/07/24 01:17

編集2020/07/24 01:55

以下の5人名前、背番号、身長(高い低い)

struct Person p[5] =
{{"Messi",30,"short"},
{"Neto",20,"tall"},
{"Tenas",10,"tall"},
{"Semedo",50,"short"},
{"Roberto",40,"tall"}};

を背番号順に
Tenas 10 tall
Neto 20 tall
Messi 30 short
Roberto 40 tall
Semedo 50 short
と並べ替えるプログラムを作成したいのですが、以下のプログラムで実行すると

Messi 10 short
Neto 20 tall
Tenas 30 tall
Semedo 40 short
Roberto 50 tall

と元の順序の背番号のみ入れ替わってしまいます。
Tenas 10 tall
Neto 20 tall
Messi 30 short
Roberto 40 tall
Semedo 50 short
と出力されるようにするにはどうすればよいのかご存じの方ご教示お願い致します。

#include <stdio.h> struct Person{ char name[30]; int num; char height[10]; }; int main() { int i,j; int temp; struct Person p[5] = {{"Messi",30,"short"}, {"Neto",20,"tall"}, {"Tenas",10,"tall"}, {"Semedo",50,"short"}, {"Roberto",40,"tall"}}; for(i=0; i<5; ++i){ for(j=i+1;j<5;++j) { if (p[i].num > p[j].num) { temp = p[i].num; p[i].num = p[j].num; p[j].num = temp; } } } for(i=0;i<5;i++){ printf("%s %d %s\n", p[i].name,p[i].num,p[i].height); } return 0; }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

プログラムを修正している間に回答が出ちゃってますが。

C

1#include <stdio.h> 2 3struct Person { 4 char name[30]; 5 int num; 6 char height[10]; 7}; 8 9int main(void) 10{ 11 struct Person p[5] = { 12 { "Messi", 30, "short" }, 13 { "Neto", 20, "tall" }, 14 { "Tenas", 10, "tall" }, 15 { "Semedo", 50, "short" }, 16 { "Roberto", 40, "tall" }, 17 }; 18 19 for (int i = 0; i < 5; i++) { 20 for (int j = i + 1; j < 5; j++) { 21 if (p[i].num > p[j].num) { 22 struct Person temp = p[i]; 23 p[i] = p[j]; 24 p[j] = temp; 25 } 26 } 27 } 28 29 for (int i = 0; i < 5; i++) { 30 printf("%s %d %s\n", p[i].name,p[i].num,p[i].height); 31 } 32 33 return 0; 34}

のように、構造体の配列の要素(名前・背番号・身長)を入れ替えてください。

投稿2020/07/24 01:33

Daregada

総合スコア11990

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KeiD

2020/07/24 01:46

ありがとうございます。
Daregada

2020/07/24 01:48

タグを「C」に修正しておいてください。C++の機能は何も使っていないので。
KeiD

2020/07/24 01:55

承知しました。ありがとうございました。
guest

0

入れ替えが、数字(背番号)だけだからでしょう。

int temp;struct Person temp

で、for での入れ替えも、temp = p[i]; のように合わせる。

C/C++

1 temp = p[i]; 2 p[i] = p[j]; 3 p[j] = temp;

投稿2020/07/24 01:30

編集2020/07/24 01:32
pepperleaf

総合スコア6383

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KeiD

2020/07/24 01:45

ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問