前書き: 学校の CG の宿題 - 構造の章。構造体の最初の導入では、学生が構造体の作成、構造体の呼び出し、構造体配列、および構造体ポインターのパラメーターの受け渡しを習得することを検討しました。
一般に、これらは以前に書かれた質問と同じですが、データ型が整数および浮動小数点型から構造体型に変更されている点が異なります。
ここにディレクトリがあります
1. 現在の平面上の 2 つの点は (x1, y1) (x2, y2) です。ここで、x1、y1、x2、y2 は整数に設定されます。
【問題の説明】
必要に応じて座標点 Point を記述する構造体を設計してください。座標を表すメンバー x と y を持ちます。現在の平面上の 2 つの点は (x1, y1) (x2, y2) です。ここで、
x1、y1、x2、y2 は整数に設定されます。
関数計算を設計してください:1. マンハッタン距離 MHTDistance は次のように定義されます: |x1 - x2 | + | y1 -y2|
2. 2点間の直線距離 float TrueDistance(struct Point pt1,struct Point pt2)
【入力フォーム】 2点の座標を入力します。
【入力例】
1,2 8,11
[出力例]MHTDistance=16.00 TrueDistance=11.40
#include<stdio.h>
#include<math.h> //pow函数头文件
typedef struct Point
{
float x;
float y;
}Pt;
float MHTDistance(Pt s1,Pt s2)
{
return abs(s1.x - s2.x) + abs(s1.y - s2.y);
}
float TrueDistance(Pt s1,Pt s2)
{
double tmp = (s1.x - s2.x)* (s1.x - s2.x) + (s1.y - s2.y)* (s1.y - s2.y);
return pow(tmp, 0.5);
}
int main()
{
Pt s1;
Pt s2;
scanf("%f,%f", &s1.x, &s1.y);
scanf("%f,%f", &s2.x, &s2.y);
printf("MHTDistance=%.2f\n", MHTDistance(s1, s2));
printf("TrueDistanc=%.2f", TrueDistance(s1, s2));
return 0;
}
2. 生徒の名前と得点を降順に出力する関数 StructSort を記述してください。(qsortフラッシュセール、定期的な書き込み方法は更新予定)
【問題の説明】
生徒の記録は名前と成績で構成されています。main関数では4人の生徒のデータをループで入力し、構造体配列に格納しています。生徒の名前と成績を得点の高い順に出力する関数StructSortを作成してください。
必要とする:
構造体を使用します。
struct Student { char name[10]; int スコア; };
サブ関数を使用します。void StructSort(struct Student stu[],int n)
【入力フォーム】
4人の生徒の名前と得点を順番に入力します
【出力形式】
生徒情報を得点の高い順に出力
【入力例】
KOBE 97 YAO 98 HC 99 JAMES 96
[サンプル出力]HC 99 ヤオ 98 コービー 97 ジェームス 96
#include<stdio.h>
#include<stdlib.h> //qsort函数头文件
typedef struct Student
{
char name[10];
int score;
}Stu;
int score_cmp(const void* s1,const void* s2) //qsort核心参数实现
{
return ((Stu*)s2)->score - ((Stu*)s1)->score;
}
void StructSort(Stu sap[], int n)
{
qsort(sap,n,sizeof(sap[0]), score_cmp); //qsort函数秒杀
}
int main()
{
int i = 0;
Stu sap[4];
for (i = 0; i < 4; i++)
{
scanf("%s %d", sap[i].name, &sap[i].score);
}
StructSort(sap,4);
for (i = 0; i < 4; i++)
{
printf("%s %d\n", sap[i].name, sap[i].score);
}
return 0;
}
3. 平均点出力を返す関数計算を記述し、平均点以上の生徒データを出力してください。
【問題の説明】
学生の記録は名前と成績で構成されます。main 関数では、4 人の学生のデータをループで入力し、構造体配列に格納します。平均点の出力を計算して返す関数を作成し、学生のデータを出力してください平均点以上の成績を収めている人。
必要とする:
構造体を使用します。
struct Student { char name[10]; int スコア; };
サブ関数を使用します。float StructAvg(struct Student stu[],int n,int *m)
【入力フォーム】
4人の生徒の名前と得点を順番に入力します
【出力形式】
平均点以上の生徒のデータを出力
【入力例】
KOBE 90 YAO 90 HC 80 JAMES 70
[サンプル出力]平均=82.5 神戸 90 八尾 90
これは非常に単純な質問です。整数データを解いた方法に従ってください。
出力に注意する必要があります。等しい均等に分割しました, 最初はより高いだけを書きました, いくつかのテストケースは失敗しました, あなたはまだ質問を明確に読む必要があります.
関数パラメータの int* m を float に変更しました (ここでは int 型が少し邪魔です, 後すべて、平均は浮動小数点です。ポイント)
#include<stdio.h>
typedef struct Student
{
char name[10];
int score;
}Stu;
float StructAvg(Stu sap[], int n, float* m)
{
int i = 0;
for (i = 0; i < 4; i++)
{
*m += sap[i].score;
}
*m /= 4; //注意不要直接返回*m/4,这样写的话*m(avg)的值就是4个数据的总和。
return *m; //在后面比较时不方便。
}
int main()
{
int i = 0;
float avg = 0;
Stu sap[4];
for (i = 0; i < 4; i++)
{
scanf("%s %d", sap[i].name, &sap[i].score);
}
StructAvg(sap, 4, &avg);
printf("Avg=%.1f\n", avg);
for (i = 0; i < 4; i++)
{
if (sap[i].score >= avg)
printf("%s %d\n", sap[i].name, sap[i].score);
}
return 0;
}
記事末尾BB: ご不明な点がございましたら、コメント欄にメッセージを残してください。記載内容に誤りがある場合は、コメント欄でご指摘ください。ブロガーが修正します。見た後はお早めに。最後に、作るのは簡単ではありませんが、お友達の参考になれば、「いいね」や注目をしていただければ幸いです。