題目
撰寫程式,實作如下功能:一個學習小組有5個人,每個人有Math,C,Database三門課的考試成績,求該組各科成績的平均分及所有成績的平均分并輸出到螢屏,
解題步驟
(1)給出結構體;
(2)分析變數;
(3)計算總 / 各科成績平均分;
(4)輸出結果;
Java
import java.util.Scanner;
public class Demo {
static class Student {
private float Math;
private float C;
private float Database;
private float Sum = 0;
public void SetValue(float Math, float C, float Database) {
this.Math = Math;
this.C = C;
this.Database = Database;
Sum = Math + C + Database;
}
public float GetMath() {
return Math;
}
public float GetC() {
return C;
}
public float GetDataBase() {
return Database;
}
public float GetSum() {
return Sum;
}
}
public static void main(String[] args) {
float Math = 0, C = 0, Database = 0, Total = 0, MathSum = 0, CSum = 0, DatabaseSum = 0;
Student[] student = new Student[5];
Scanner user = new Scanner(System.in);
for (int i = 0; i < 5; i++)
{
System.out.format("Please enter the math score of the %d student:", i + 1);
Math = user.nextFloat();
System.out.format("Please enter the C language score of the %d student::", i + 1);
C = user.nextFloat();
System.out.format("Please enter the database score of the %d student::", i + 1);
Database = user.nextFloat();
student[i] = new Student();
student[i].SetValue(Math, C, Database);
}
for (int i = 0; i < 5; i++) {
MathSum += student[i].GetMath();
CSum += student[i].GetC();
DatabaseSum += student[i].GetDataBase();
Total += student[i].GetSum();
}
System.out.format("MathAverage=%f CAverage=%f DatabaseAverage=%f", MathSum / 5.0, CSum / 5.0, DatabaseSum / 5.0);
System.out.format("\nTotalScoreAverage=%.3f", Total / 5.0);
}
}
說明:
Java是一種高級語言,它舍棄了C/C++中容易出錯的指標、一些莫須有的語言結構(其中就包含結構體),所以這道題如果我們用Java語言解決,就需要用到類和物件,
我們在類中包含其屬性和方法,不太容易想到的是三門科目的成績從鍵盤接收并且需要回圈五次的操作:使用物件陣列Student[] student = new Student[5];并對其進行實體化實作動態接收資料,
在類和物件中,只要有需求,我們就添加方法解決問題,例如本題中設定回傳三個科目成績的方法實作單科成績平均分、總成績平均分求算,
物件陣列需要進行實體化student[i] = new Student();,否則報錯:空指標錯誤!!!
C語言
#include <stdio.h>
struct Student
{
float Math;
float C;
float Database;
} student[5];
int main()
{
float Math, C, Database, Sum;
for (int i = 0; i < 5; i++)
{
printf("please enter the three door subject grades of the first %d name classmate:", i + 1);
scanf("%f%f%f", &student[i].Math, &student[i].C, &student[i].Database); //注意 &
Sum += student[i].Math + student[i].C + student[i].Database;
Math += student[i].Math;
C += student[i].C;
Database += student[i].Database;
}
printf("MathAverage=%f CAverage=%f DatabaseAverage=%f", Math / 5.0, C / 5.0, Database / 5.0);
printf("\nTotalAverage=%f", Sum / 5.0);
return 0;
}
說明:
關鍵點在于如何將不同科目的成績和同學進行區分,這里我們采用結構體陣列的方式解決:有5個元素的結構體陣列
student[5]包含Math、C和Database三個變數對應不同科目成績,考慮到這點,題目就變得非常簡單,只要接收輸入值,計算方可,
計算中,要考慮周全,成績有可能是float型別,而計算平均值時用到的/號,結果為整型,所以我們做除法的時候,除數應該是5.0而不是5,
異同點:
下面這道題目和本題類似,需要注意的點是使用
scanf()時,若結構體中包含陣列,就需要關注&是否需要存在,對比原始碼,可以進一步理解,
#include <stdio.h>
struct student
{
int num;
char name[20];
float score[3];
};
void main()
{
struct student s[3]; //struct student 等價于int,實質:撰寫了一個資料型別
int i, j;
float sum, avg[3];
for (i = 0; i < 3; i++)
{
sum = 0;
printf("請輸入學號:\n");
scanf("%d", &s[i].num); // num 為int型別,是普通變數,不代表地址
printf("請輸入姓名:\n");
scanf("%s", s[i].name); // 不需要 &s.name 因為陣列名name代表首地址
printf("請輸入三門科目成績:\n");
for (j = 0; j < 3; j++)
{
scanf("%f", &s[i].score[j]);
sum = sum + s[i].score[j];
}
avg[i] = sum / 3.0;
}
printf("輸出資訊:\n");
for (i = 0; i < 3; i++)
printf("學號:%d,姓名:%s,平均分:%.2f\n", s[i].num, s[i].name, avg[i]);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/293681.html
標籤:其他
上一篇:Linux平臺Redis安裝總結
