問題 一
(1) 比賽評分。從10個評委的評分中扣除一個最高分和一個最低分,得到8個有效分,選手的最後得分爲8個有效分相加,求平均值。要求從鍵盤輸入10個評委的評分,輸出選手的最後得分,結果保留兩位小數。
(2) 將第(1)題的8個有效分從大到小排序輸出。
詳細代碼如下:
#include <stdio.h>
int main()
{
// 聲明數組,以及變量
int a[10],i,j,t,sum=0;
//輸入十個評委的成績
for(i=0;i<10;i++)
{
printf("請輸入第 %d個評委的打分成績: \n",i+1);
scanf("%d",&a[i]);
printf("第 %d 個評委的打分成績:%d \n",i+1,a[i]);
}
printf("原始評委評分數組內容爲:");
// 原始評委評分數組內容
for(i=0;i<10;i++)
{
printf(" %d",a[i]);
}
//從大到小排序
for(i=0;i<9;i++)
{
for(j=0;j<9-i;j++)
{
if(a[j]<a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
printf("\n 第i= %d 輪,第j=%d 次排序數組內容爲:",i,j);
for(int tmp=0;tmp<10;tmp++)
{
printf("%d ",a[tmp]);
}
}
}
// 輸出從大到小排序後的數組
printf("\n 輸出數組從大到小的排列順序:");
for(i=0;i<10;i++)
{
printf("%d ",a[i]);
}
// for循環進行數組求和
printf("\n 去掉最大值a[0],最小值a[9]:");
for(i=1;i<9;i++)
{
sum=sum+a[i];
printf("%d ",a[i]);
}
// 去掉最大值a[0],最小值a[9] 的平均值
printf("\n 平均值成績爲:%.2f\n",sum/8.0);
return 0;
}
C 語言在線運行網站如下:
https://www.nhooo.com/tool/c/
輸入參數如下:
2 3 4 5 6 7 8 9 10 11
運行結果如下
$gcc -o main *.c -lm
$main
請輸入第 1個評委的打分成績:
第 1 個評委的打分成績:2
請輸入第 2個評委的打分成績:
第 2 個評委的打分成績:3
請輸入第 3個評委的打分成績:
第 3 個評委的打分成績:4
請輸入第 4個評委的打分成績:
第 4 個評委的打分成績:5
請輸入第 5個評委的打分成績:
第 5 個評委的打分成績:6
請輸入第 6個評委的打分成績:
第 6 個評委的打分成績:7
請輸入第 7個評委的打分成績:
第 7 個評委的打分成績:8
請輸入第 8個評委的打分成績:
第 8 個評委的打分成績:9
請輸入第 9個評委的打分成績:
第 9 個評委的打分成績:10
請輸入第 10個評委的打分成績:
第 10 個評委的打分成績:11
原始評委評分數組內容爲: 2 3 4 5 6 7 8 9 10 11
第i= 0 輪,第j=0 次排序數組內容爲:3 2 4 5 6 7 8 9 10 11
第i= 0 輪,第j=1 次排序數組內容爲:3 4 2 5 6 7 8 9 10 11
第i= 0 輪,第j=2 次排序數組內容爲:3 4 5 2 6 7 8 9 10 11
第i= 0 輪,第j=3 次排序數組內容爲:3 4 5 6 2 7 8 9 10 11
第i= 0 輪,第j=4 次排序數組內容爲:3 4 5 6 7 2 8 9 10 11
第i= 0 輪,第j=5 次排序數組內容爲:3 4 5 6 7 8 2 9 10 11
第i= 0 輪,第j=6 次排序數組內容爲:3 4 5 6 7 8 9 2 10 11
第i= 0 輪,第j=7 次排序數組內容爲:3 4 5 6 7 8 9 10 2 11
第i= 0 輪,第j=8 次排序數組內容爲:3 4 5 6 7 8 9 10 11 2
第i= 1 輪,第j=0 次排序數組內容爲:4 3 5 6 7 8 9 10 11 2
第i= 1 輪,第j=1 次排序數組內容爲:4 5 3 6 7 8 9 10 11 2
第i= 1 輪,第j=2 次排序數組內容爲:4 5 6 3 7 8 9 10 11 2
第i= 1 輪,第j=3 次排序數組內容爲:4 5 6 7 3 8 9 10 11 2
第i= 1 輪,第j=4 次排序數組內容爲:4 5 6 7 8 3 9 10 11 2
第i= 1 輪,第j=5 次排序數組內容爲:4 5 6 7 8 9 3 10 11 2
第i= 1 輪,第j=6 次排序數組內容爲:4 5 6 7 8 9 10 3 11 2
第i= 1 輪,第j=7 次排序數組內容爲:4 5 6 7 8 9 10 11 3 2
第i= 2 輪,第j=0 次排序數組內容爲:5 4 6 7 8 9 10 11 3 2
第i= 2 輪,第j=1 次排序數組內容爲:5 6 4 7 8 9 10 11 3 2
第i= 2 輪,第j=2 次排序數組內容爲:5 6 7 4 8 9 10 11 3 2
第i= 2 輪,第j=3 次排序數組內容爲:5 6 7 8 4 9 10 11 3 2
第i= 2 輪,第j=4 次排序數組內容爲:5 6 7 8 9 4 10 11 3 2
第i= 2 輪,第j=5 次排序數組內容爲:5 6 7 8 9 10 4 11 3 2
第i= 2 輪,第j=6 次排序數組內容爲:5 6 7 8 9 10 11 4 3 2
第i= 3 輪,第j=0 次排序數組內容爲:6 5 7 8 9 10 11 4 3 2
第i= 3 輪,第j=1 次排序數組內容爲:6 7 5 8 9 10 11 4 3 2
第i= 3 輪,第j=2 次排序數組內容爲:6 7 8 5 9 10 11 4 3 2
第i= 3 輪,第j=3 次排序數組內容爲:6 7 8 9 5 10 11 4 3 2
第i= 3 輪,第j=4 次排序數組內容爲:6 7 8 9 10 5 11 4 3 2
第i= 3 輪,第j=5 次排序數組內容爲:6 7 8 9 10 11 5 4 3 2
第i= 4 輪,第j=0 次排序數組內容爲:7 6 8 9 10 11 5 4 3 2
第i= 4 輪,第j=1 次排序數組內容爲:7 8 6 9 10 11 5 4 3 2
第i= 4 輪,第j=2 次排序數組內容爲:7 8 9 6 10 11 5 4 3 2
第i= 4 輪,第j=3 次排序數組內容爲:7 8 9 10 6 11 5 4 3 2
第i= 4 輪,第j=4 次排序數組內容爲:7 8 9 10 11 6 5 4 3 2
第i= 5 輪,第j=0 次排序數組內容爲:8 7 9 10 11 6 5 4 3 2
第i= 5 輪,第j=1 次排序數組內容爲:8 9 7 10 11 6 5 4 3 2
第i= 5 輪,第j=2 次排序數組內容爲:8 9 10 7 11 6 5 4 3 2
第i= 5 輪,第j=3 次排序數組內容爲:8 9 10 11 7 6 5 4 3 2
第i= 6 輪,第j=0 次排序數組內容爲:9 8 10 11 7 6 5 4 3 2
第i= 6 輪,第j=1 次排序數組內容爲:9 10 8 11 7 6 5 4 3 2
第i= 6 輪,第j=2 次排序數組內容爲:9 10 11 8 7 6 5 4 3 2
第i= 7 輪,第j=0 次排序數組內容爲:10 9 11 8 7 6 5 4 3 2
第i= 7 輪,第j=1 次排序數組內容爲:10 11 9 8 7 6 5 4 3 2
第i= 8 輪,第j=0 次排序數組內容爲:11 10 9 8 7 6 5 4 3 2
輸出數組從大到小的排列順序:11 10 9 8 7 6 5 4 3 2
去掉最大值a[0],最小值a[9]:10 9 8 7 6 5 4 3
平均值成績爲:6.50
簡單代碼實現如下:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
// 聲明一個二維數組用來存放3個人4門課的成績
int a[3][4],i,j,sum=0;
float b[3],c[4],max;
int n=0;
//數組b存放每個學生的平均成績,數組c存放每門課程的平均成績
//輸入3個人4門課的成績
for(i=0;i<3;i++)
for(j=0;j<4;j++)
scanf("%d",&a[i][j]);
//求每名學生的平均成績
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
sum=sum+a[i][j];
}
b[i]=sum/4.0;
sum=0;
}
// 打印3個學生的成績
for(i=0;i<3;i++)
printf("第%d名學生的平均成績爲%.2f\n",i,b[i]) ;
//求3個學生最好的平均成績及序號
max=b[0];
for(i=0;i<3;i++)
if(max<b[i])
{
max=b[i];
n=i;
}
printf("第%d名學生的平均成績最高爲%.2f\n",n,max);
//求每名門課程的平均成績
sum=0;
for(j=0;j<4;j++)
{
for(i=0;i<3;i++)
sum=sum+a[i][j];
c[j]=sum/4.0;
sum=0;
}
// 打印4門課的平均成績
for(i=0;i<4;i++)
printf("第%d門課程的平均成績爲%.2f\n",i,c[i]) ;
//求最好的課程平均成績及序號
max=c[0];
for(i=0;i<4;i++)
if(max<c[i])
{
max=c[i];
n=i;
}
printf("第%d門課程的平均成績最高爲%.2f\n",n,max);
return 0;
}
問題二
(3) 有3個學生,上4門課,要求輸入全部學生的各門課成績,並分別求出每個學生的平均成績。
(4) 求出第(3)題中平均成績最高的成績,以及該學生的序號。
(5) 求出第(3)題中每門課的平均成績,並求出平均成績最高的課程序號。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
// 聲明一個二維數組用來存放3個人4門課的成績
int a[3][4],i,j,sum=0;
float b[3],c[4],max;
int n=0;
//數組b存放每個學生的平均成績,數組c存放每門課程的平均成績
//輸入3個人4門課的成績
for(i=0;i<3;i++)
for(j=0;j<4;j++)
scanf("%d",&a[i][j]);
//求每名學生的平均成績
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
sum=sum+a[i][j];
}
b[i]=sum/4.0;
sum=0;
}
// 打印3個學生的成績
for(i=0;i<3;i++)
printf("第%d名學生的平均成績爲%.2f\n",i,b[i]) ;
//求3個學生最好的平均成績及序號
max=b[0];
for(i=0;i<3;i++)
if(max<b[i])
{
max=b[i];
n=i;
}
printf("第%d名學生的平均成績最高爲%.2f\n",n,max);
//求每名門課程的平均成績
sum=0;
for(j=0;j<4;j++)
{
for(i=0;i<3;i++)
sum=sum+a[i][j];
c[j]=sum/4.0;
sum=0;
}
// 打印4門課的平均成績
for(i=0;i<4;i++)
printf("第%d門課程的平均成績爲%.2f\n",i,c[i]) ;
//求最好的課程平均成績及序號
max=c[0];
for(i=0;i<4;i++)
if(max<c[i])
{
max=c[i];
n=i;
}
printf("第%d門課程的平均成績最高爲%.2f\n",n,max);
return 0;
}