可以注意下sizeof获取数组长度的问题

来源:6-12 综合练习

weixin_慕雪8055451

2019-12-06 19:38

#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;

}


写回答 关注

1回答

  • weixin_慕雪8055451
    2019-12-06 19:41:12

    最后测试score2的打印 printf内容写错了 应该是

    printf("score2的数组长度为%d\n", cut);

C语言入门

C语言入门视频教程,带你进入编程世界的必修课-C语言

926207 学习 · 20797 问题

查看课程

相似问题