構造体についてのC言語のプログラミングです。
構造体を使用して家庭教師のとりますめをします。
希望金額をscanfで入力し、金額の差が少ない三人を表示するというものです。
順番に三人だけ表示することはできたのですが、並び替えをうまく行えません。
アロー演算子を使っていますがそれ以外でも大丈夫です。
お助けください
ソース
#include<stdio.h>
#include <string.h>
#include<math.h>
struct teacher {
int number;
char *name;
int kane;
int gakunen;
};
int main(){
struct teacher katei[15]={
1,"Andou",10000,2,
2,"Inoue",20000,1,
3,"Ueno",15000,2,
4,"Endou",18000,3,
5,"Okazaki",22000,3,
6,"Katou",13000,1,
7,"Simizu",17000,2,
8,"Tsuda",25000,3,
9,"Nemoto",21000,2,
10,"Hotta",19000,1,
11,"Miura",30000,3,
12,"Yamazaki",29000,3,
13,"Wada",14000,1,
14,"Fujii",23000,1,
15,"Jinbo",28000,2,
};
int i;
int x;
int j,tmp;
struct teacher *p;
p = katei;
scanf("%s",x);
/*x -= (p+i)->kane;
printf("%d\n",abs(x));
for(i=0;i<15;++i){
for(j=i+1;j<15;++j){
if(x>(p+i)->kane){
tmp=(p+i)->kane;
(p+i)->kane = (p+i)->kane[j];
(p+i)->kane[j] = tmp;
}
}
}
*/
for(i=0;i<3;i++){
printf("%d円、(%d) %s \n",(p+i)->kane,(p+i)->gakunen,(p+i)->name);
}
return 0;
}
実行したい結果
1 20000
1: 20000円、(2) Inoue
2: 19000円、(10) Hotta
3: 23000円、(14) Fujii
構造体のプログラム
- purin52002
- 記事: 235
- 登録日時: 7年前
- 連絡を取る:
Re: 構造体のプログラム
希望金額をグローバル変数にして、希望金額と教師の金額の絶対値をとったものを比較するプレディケートを作って、qsortにぶち込んで、上から3人抜き出せば簡単そう^p^p^
[hr]
っていう冗談はさておき、
3人だけでいいなら、
という感じでどうでしょう?
[hr]
っていう冗談はさておき、
3人だけでいいなら、
という感じでどうでしょう?
c++初心者を自負しています。
質問者さんには今後私にプログラミングを教えてくれるようにやさしく丁寧に教えるつもりです。ぎぶあんどていく^p^
回答者さんには精一杯感謝します。ぎぶおんりー^p^
質問者さんには今後私にプログラミングを教えてくれるようにやさしく丁寧に教えるつもりです。ぎぶあんどていく^p^
回答者さんには精一杯感謝します。ぎぶおんりー^p^
Re: 構造体のプログラム
purin52002 さんが書きました:希望金額をグローバル変数にして、希望金額と教師の金額の絶対値をとったものを比較するプレディケートを作って、qsortにぶち込んで、上から3人抜き出せば簡単そう^p^p^
#include <stdio.h>
#include <stdlib.h>
struct teacher {
int number;
char *name;
int kane;
int gakunen;
};
struct teacher katei[15] = {
1, "Andou", 10000, 2,
2, "Inoue", 20000, 1,
3, "Ueno", 15000, 2,
4, "Endou", 18000, 3,
5, "Okazaki", 22000, 3,
6, "Katou", 13000, 1,
7, "Simizu", 17000, 2,
8, "Tsuda", 25000, 3,
9, "Nemoto", 21000, 2,
10, "Hotta", 19000, 1,
11, "Miura", 30000, 3,
12, "Yamazaki", 29000, 3,
13, "Wada", 14000, 1,
14, "Fujii", 23000, 1,
15, "Jinbo", 28000, 2,
};
int kane;
int comp(const void *a, const void *b)
{
int x = abs((*(struct teacher **)a)->kane - kane);
int y = abs((*(struct teacher **)b)->kane - kane);
return x < y ? -1 : x > y;
}
int main(void)
{
int gakunen, i, n;
struct teacher *p[15];
printf("gakunen kane: ");
if (scanf("%d%d", &gakunen, &kane) != 2) return 1;
for (n = i = 0; i < 15; i++)
if (katei[i].gakunen == gakunen)
p[n++] = katei + i;
qsort(p, n, sizeof *p, comp);
if (n > 3) n = 3;
for (i = 0; i < n; i++)
printf("%d円、(%d) %s \n", p[i]->kane, p[i]->number, p[i]->name);
return 0;
}