可以注意下sizeof获取数组长度的问题
#include <stdio.h>
//计算考试的总分
static int totalGrade(int score[10])
{
int sum = 0;
int j;
for(j=0; j<10; j++)
{
sum += score[j];
}
return sum;
}
//最高分
void highGrade(int score[10])
{
int contrast = 0;
int i;
for(i=0;i<10;i++)
{
if (score[i] > contrast)
contrast = score[i];
}
printf("最高分数为%d\n", contrast);
}
//最低分
void lowGrade(int score[10])
{
int i,j;
for(i=9; i>=0; i--)
{
for(j=0;j<i;j++)
{
if(score[j]>score[j+1])
{
int temp;
temp = score[j];
score[j] = score[j+1];
score[j+1] = temp;
}
}
}
printf("最底分数为%d\n",score[0]);
}
//平均分
void argGrade(int score[10], int length)
{
int arg;
int totalgrade = totalGrade(score);
/* int cnt = (sizeof(score) / sizeof(score[0])); //数组作为参数传到函数内部时是返回指针大小不是数组本身
printf("%d\n",cnt);
sizeof(score)其实计算的是指针变量score的类型的大小。指针score的类型是指向整数类型的指针 */
/* sizeof(arr) / sizeof(arr[0])
但这种一般是在主函数里面才能求,如果arr作为参数传递给子函数的话,数组名将会转换成指针形式传递,因此这种求解就有错误了。*/
/* 数组是 int 型的,每个元素占 4 字节,所以长度为
10的数组在内存中所占的字节数就是40。而总的字节数
除以一个元素所占的字节数就是数组的长度 */
arg = totalgrade/length;
printf("平均分为%d\n",arg);
}
//考试成绩降序排序
void downGrade(int score[10])
{
int i,j;
for(i=9; i>=0; i--)
{
for(j=0;j<i;j++)
{
if(score[j]<score[j+1])
{
int temp;
temp = score[j];
score[j] = score[j+1];
score[j+1] = temp;
}
}
}
for(i=0;i<10;i++)
{
printf("倒序为%d\n",score[i]);
}
}
int main()
{
int score[]={67,75,98,63,82,79,81,91,66,84};
printf("十个考生的总分为:%d\n", totalGrade(score));
highGrade(score);
lowGrade(score);
downGrade(score);
int length = sizeof(score) / sizeof(score[0]);
/*求数组长度 score2[10] = {0,1} int length = sizeof(score2) / sizeof(score2[0])也等于10*/
int score2[10] = {0,1}; int cut = sizeof(score2) / sizeof(score2[0]);
printf("score的数组长度为%d\n", cut);
argGrade(score, length);
return 0;
}