问题 一
(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;
}
网友评论