/* * Copyright (c) 2014, 煙台大學計算機學院 * All rights reserved. * 文件名稱:test.cpp * 作 者:劉暢 * 完成日期:2014 年 11 月 26 日 * 版 本 號:v1.0 * * 問題描述:設score[8]數組中存儲8名同學的C++成績,增加一個數組string name[8]並賦初值,表示同學們的姓名。這兩個數組中,每名同學的姓名與成績的下標要始終保持一致; * 輸入描述:等待運行; * 程序輸出:輸出按成績排序後的同學的名單和按同學姓名排序後的成績單。
(1)
#include#include using namespace std; const int num = 8; int main() { int i, j, t; string temp; string name[num] = { "zhao", "qian", "sun", "li", "zhou", "wu", "zheng", "wang" }; double score[num] = { 79, 84, 65, 89, 60, 92, 78, 56 }; cout << "按成績排序並輸出結果:" << endl; for (j = 1; j < num; ++j) for (i = 0; i < num-j; ++i) { if (score[i] < score[i + 1]) { t = score[i]; score[i] = score[i + 1]; score[i + 1] = t; temp = name[i]; name[i] = name[i + 1]; name[i + 1] = temp; } } for (i=0; i name[i+1]) { temp = name[i]; name[i] = name[i + 1]; name[i + 1] = temp; t = score[i]; score[i] = score[i + 1]; score[i + 1] = t; } } for (i=0; i
(2)
#include#include using namespace std; const int num = 8; int main() { int i, j, t; char temp[20]; char name[num][20] = { "zhao", "qian", "sun", "li", "zhou", "wu", "zheng", "wang" }; double score[num] = { 79, 84, 65, 89, 60, 92, 78, 56 }; cout << "按成績排序並輸出結果:" << endl; for (j = 1; j < num; ++j) for (i = 0; i < num-j; ++i) { if (score[i] < score[i + 1]) { t = score[i]; score[i] = score[i + 1]; score[i + 1] = t; strcpy(temp,name[i]); strcpy(name[i],name[i+1]); strcpy(name[i+1],temp); } } for (i=0; i 0) { strcpy(temp,name[i]); strcpy(name[i],name[i+1]); strcpy(name[i+1],temp); t = score[i]; score[i] = score[i + 1]; score[i + 1] = t; } } for (i=0; i
運行結果:
知識點總結:
注意冒泡排序的用法,還有運用string的條件。
學習心得:
越來越受打擊了,上午寫出來後,就是開始運行後接著就停止運行。一直以為是temp那裡的問題,發到群裡一問,大神親自跑寢室來給我解決,原來是冒泡排序for語句中i的范圍沒處理好;感謝童宇童鞋!!! 後來我又在博客下面的推薦看到一位學長做的類似的題目,於是有了第二種,當時居然沒想到,今天剛學過使用字符串處理函數對字符串進行操作。。。淚奔啊 不過可能是編譯器不同吧,codeblocks運用這種方法的時候需要把頭文件string改為string.h,又學到了很多啊,得收收心好好加油了。