内容正文:
任务二 输入10名选手的名字并保存
对于选手的名字,应该将其作为字符串存储,如char s[10];
但是对于多名选手,要定义多个字符数组很不方便。应使用二维数组。定义一个字符数组的数组来存储多名选手的名字
char names[10][10];
“names[0]”,“names[1]”,…“names[9]”是字符数组的数组名,分别存放第1个选手名字“zhang”,第2个选手的姓名“li”,…第10个选手的名字。
names[0]
names[1]
names[2]
……
数组names的结构如图所示
z h a n g s a n \0
l i s i \0
w a n g w u \0
… … … …
main()
{
char names[10][10]; /*定义二维字符数组存放选手名字*/
int i;
for(i=0;i<10;i++)
{
printf("please input the name of the No. %d singer
",i+1);
/*提示用户输入编号为i+1的选手的名字*/
gets(names[i]);
/*将用户输入的字符串作为该选手的名字*/
}
}
任务三 输入评委给每位选手打的分
如果要存储10位选手的所有成绩,定义10个一维数组是不方便的,需要利用数组的数组,也就是二维数组作为数据类型,也就是如下定义:
int score[10][7];
其中,score[i][j]对应第j+1位评委对第i+1名选手的评分,i的取值范围为0~9,j的取值范围为0~6。
“score[i]”是一个一维数组,它是二维数组score中的一个元素。每位评委为第i名选手打分要依次放在score[i]的各元素score[i][0]…score[i][6]中。
用户输入数据后,数组“score[i]”的内容如图所示。
score[i] 76 85 83 79 70 91 81
下标 0 1 2 3 4 5 6
任务四 找到每位选手的最高分
10名选手的成绩存放在数组score中,找出选手i的成绩最高分相当于就是找出数组“score[i]”中的最大值。那么如何确定数组的最大值呢?
寻找最大值的过程
首先假定“score[i]”的第1个元素“score[i][0]”元素为当前的最大值,记录在变量“max[i]”中。
然后拿这个最大值去和“score[i]”的其余元素“score[i][j]”顺序比较,如果“score[i][j] > max[i]”,说明“score[i][j]”比“max[i]”更有可能成为最大值,所以将“score[i][j]”作为最大值存储在变量“max[i]”中。
将新的“max[i]”继续和剩余元素比较,然后重复执行步骤2,直到全部元素都已经比较过。由于“max[i]”的值会随着比较而不断更新成更大的元素值,所以最后存在“max[i]”里的内容就是数组里真正的最大值。
首先将“max[i]”的初值设置为“score[i][0]”,代码如下:
max[i] = score[i][0];
然后编写和“score[i][j]”比较的过程,代码如下:
if(score[i][j] > max[i])
max[i] = score[i][j];
对score[1]~score[9]每一个元素循环执行这个过程。综合上面的描述,找到最高分的代码可以写为:
int i;
max[i]=score[i][0];
for(j=1;j<7;j++)
if(score[i] [j]> max[i])
max[i] = score[i][j];
任务五 找到最低分
main()
{
int score[10]={76,85,83,79,70,91,81,67,75,90};
int max,min,maxindex=0,minindex=0;
int i;
max=min=score[0]; /*设置初值*/
for(i=1;i<10;i++)
{
if(score[i]>max)
{
max=score[i]; /*修改当前的最大值,并记录对应的下标*/
maxindex=i;
}
if(score[i]<min)
{
min=score[i]; /