c語言:模擬大樂透開獎程式(陣列)
問題一 (用陣列寫出程式)
讓使用者先輸入座號再輸入成績(打-1結束輸入),算出平均、總分、不及格人數、最高分.最低分的座號和分數,在輸入座號時,會檢查是否有重複的座號輸入,如果發生的話,就要求使用者重新輸入,例如第一次輸入20號, 分數90分,第二次輸入〇號,此時會顯示”號碼20已經出現過,請重新輸入座號!” 要求使用者重新輸入座號。另外, 再找最高分最低分的時候,如果有同分的,也要把號碼都顯示出來。
問題二 (用陣列寫出程式)
請設計一個程式,模擬大樂透開獎程式,利用亂數產生六個1~46號碼。每次都不會有相同的排列結果。你的程式必須利用陣列儲存每次開獎號碼的次數。假設模擬30,000次,你的程式會顯示號碼分布情形。記得: 六個號碼不會重複產生。
1 則回答
最佳解答
題1與這題一樣,題2達達幫你解了!!
#include <stdio.h>
#define n 3 //設定同學數
int main(void)
{
int i, j,
A[n][2];
for(i = 0; i < n; i++) {
printf("請輸入第%d位學號: ", i+1);
scanf("%d", &A[i][0]);
for(j = 0; j < i; j++) {
if(A[i][0] == A[j][0]) {
printf("號碼%d已經出現過,請重新輸入座號!\n", A[i][0]);
break;
}
}
if(j != i) {
i--;
continue;
}
printf("請輸入第%d位成績: ", i+1);
scanf("%d", &A[i][1]);
printf("\n");
}
//排序
for(i = 0; i < n-1; i++) {
for(j = i+1; j < n; j++) {
if(A[i][1] < A[j][1]) { //降冪排序
A[i][1] ^= A[j][1] ^= A[i][1] ^= A[j][1];
A[i][0] ^= A[j][0] ^= A[i][0] ^= A[j][0];
}
}
}
printf("==最高分==\n學號: %d, 成績: %d\n", A[0][0], A[0][1]);
for(i = 1; i < n; i++) {
if(A[i][1] == A[0][1]) printf("學號: %d, 成績: %d\n", A[i][0], A[i][1]);
else break;
}
printf("\n");
printf("==最低分==\n學號: %d, 成績: %d\n", A[n-1][0], A[n-1][1]);
for(i = n-2; i >= 0; i--) {
if(A[i][1] == A[n-1][1]) printf("學號: %d, 成績: %d\n", A[i][0], A[i][1]);
else break;
}
return 0;
}
已編譯可以執行!!