SOGO論壇
標題:
c++輸入學號成績
[列印本頁]
作者:
KSJOU
時間:
2014-12-10 00:32:22
標題:
c++輸入學號成績
每一位學生的輸入資料包括學號、姓名、國文分數 數學分數 英文分數 ,輸入完一筆資料後,可以繼續輸入下一筆,直到使用者在輸入學號時,以輸入一個字#作為結束輸入的符號,連續輸入學生考試資料才結束。而此程式需要將使用者輸入的分數資料儲存至以score命名的二維陣列變數中
例如
學號 姓名 國文分數 數學分數 英文分數 (總成績)
kxxxxxxx Jack 66 90 85
kxxxxxxx Mary 99 95 80
還有要算出總成績
使用者可以查看score中所有學生的成績資料
總成績高低進行排序
請求各位幫幫忙謝謝
作者:
mikekao
時間:
2015-1-22 16:22:54
本帖最後由 mikekao 於 2015-1-22 16:25 編輯
這個可用迴圈的方式,放在1個2維陣列內,就可解決你的問題了。
例如:
struct student{
char id[8];
int grade[科目總數+1(總分)];
}
student A[60]; //假設有60位學生
讀輸入符號,當不為#時就讓時用者輸入學號、分數
...
作者:
qq820217
時間:
2015-2-1 16:06:36
善用structure 就可以輕鬆達到
作者:
oist77
時間:
2015-3-5 14:47:16
都用 C++ 寫了,就用物件的觀念來思考吧!
寫先程式前,先想好 要輸入什麼,要輸出什麼。 確定完畢後,再把這些資料"抽像化"成資料結構,然後用物件的方式來處理。
把操作行為剛成一個物件,資料剛成一個物件,日後擴充彈性才會大。當程式愈寫愈大時,再來考慮重構(繼承與多型 desing pattern)。
作者:
dovahkiin
時間:
2015-4-29 22:16:00
同意4樓的說法, 如果只要交差了事. 方法很多, 但既然使用C++ , 就用物件導向的思考方式. 否則用C不就可以了. 當然如果要將C++ 當成C在用也不無不可.
作者:
70058
時間:
2015-6-18 23:22:02
覺得開個class就好了啊
然後寫個compare條件弄好就可以了
作者:
fugitive6
時間:
2015-8-15 10:27:13
這種基本的問題也在問 要用功一點阿 同學
作者:
末日禁軍
時間:
2015-8-17 23:16:05
依我的經驗來講~~這是老師出的作業吧>"<
讓我想到我同學以前,直接把作業PO到知識+
20點這樣...........
作者:
qlfabm2001
時間:
2015-10-9 22:14:51
看來發文者已經過了交作業期限了 我來回一下這題巴
#include <iostream>
struct Score
{
char Mandarin;
char Math;
char English;
char Total;
};
class StudentData
{
public:
static char count;
char num[10];
char name[15];
struct Score score;
void Avg(StudentData p[]);
void Sqrt(StudentData p[]);
void Swap(StudentData *p1,StudentData *p2);
};
//分數加總/3
void StudentData::Avg(StudentData p[])
{
int temp;
for(char i=0;i<StudentData::count;i++){
temp=p[i].score.English;
temp+=p[i].score.Mandarin;
temp+=p[i].score.Math;
p[i].score.Total = temp/3;
}
return;
}
//排序
void StudentData::Sqrt(StudentData p[]){
for(int i=0;i<StudentData::count-1;i++)
for(int j=i;j < StudentData::count-1;j++)
if(p[j].score.Total>p[j+1].score.Total)
Swap(&p[j],&p[j+1]);
}
//交換
void StudentData::Swap(StudentData *p1,StudentData *p2){
StudentData temp;
char (*ptr1),(*ptr2);
ptr1= temp.num;
ptr2= p1->num;
for(int i=0;i<29;i++){*ptr1 = *ptr2;ptr1++;ptr2++;}
ptr1= p1->num;
ptr2= p2->num;
for(int i=0;i<29;i++){*ptr1 = *ptr2;ptr1++;ptr2++;}
ptr1= p2->num;
ptr2= temp.num;
for(int i=0;i<29;i++){*ptr1 = *ptr2;ptr1++;ptr2++;}
}
char StudentData::count=0;
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
StudentData stu[100];
for(char i = 0;i<100;i++){
cout<<i<<"請輸入學號"<<endl;
cin >> stu[i].num ;
if(stu[i].num[0]=='#')
break;
cout<<i<<"請輸入姓名"<<endl;
cin >> stu[i].name ;
cout<<i<<"請輸入國文分數"<<endl;
scanf("%d",&stu[i].score.Mandarin) ;
cout<<i<<"請輸入數學分數"<<endl;
scanf("%d",&stu[i].score.Math) ;
cout<<i<<"請輸入英文分數"<<endl;
scanf("%d",&stu[i].score.English) ;
StudentData::count++;
}
stu[0].Avg(stu);
stu[0].Sqrt(stu);
for(char i=0;i<StudentData::count;i++)
{
cout<<"學號:"<< stu[i].num <<",姓名:"<<stu[i].name
<<"數:"<<int(stu[i].score.Math)
<<"國:"<<int(stu[i].score.Mandarin)
<<"英:"<<int(stu[i].score.English)
<<",總分:"<<int(stu[i].score.Total)<<endl;
}
system("pause");
return 0;
}
歡迎光臨 SOGO論壇 (https://oursogo.com/)
Powered by OURSOGO.COM