C语言不声明函数造成的错误(swust oj 排序查找)

C语言不声明函数造成的错误(swust oj 排序查找)

问题描述
对N个学生的成绩按从大到小的顺序排序,N个学生的成绩整数用scanf 输入,输入的成绩在[0,100]之间。排序完成后,输入一个成绩,要求用逐个比较查找的方式找出该成绩是该组中第几个元素的值(即第几名)。如果该成绩不在数组中,则输出“no this score!”。 要求:
1、把排序算法写成函数形式,在主函数中输入N个数据,然后调用排序函数排序。
2、在排序过程中尽量减少数据的交换和移动。
3、把查找算法写成函数形式,在主函数中输入1个数据,然后调用查找函数查找。
第一行输出N个已经排好序的成绩,每两个成绩之间有一个空格隔开,每10个数据换一行(由大到小排列)。 第二行输出你要查找的成绩的名次(如果成绩相同,则并列,如果该成绩不在数组中,则输出“no this score!”)。

最初的代码:

void fuck_this_shit();
void fuck_the_world();
int n, a[40], damn;
void main()
{
    scanf("%d\n", &n);

    for(int i = 0; i < n; i++)
    {
        scanf("%d", &a[i]);
    }

    scanf("%d", &damn);
    fuck_the_world(a);
    fuck_this_shit(damn);
}
void fuck_the_world()
{
    int t;

    for(int i = 0; i < n; ++i)
    {
        for(int k = 0; k < n - i; k++)
        {
            if(a[k] < a[k + 1])
            {
                int t = a[k];
                a[k] = a[k + 1];
                a[k + 1] = t;
            }
        }
    }

    int j;

    for(j = 0; j < n; j++)
    {
        if(j == 9)
            printf("%d\n", a[j]);
        else
            printf("%d ", a[j]);
    }
}
void fuck_this_shit()
{
    int i, m = 0;

    for(i = 0; i < n; i++)
    {
        if(damn == a[i])
        {
            m++;
            break;
        }
    }

    if(m > 0)
        printf("\n%d", i + 1);
    else
        printf("\nno this score!");
}

这样写代码在codeblocks上运行结果是没错的,但在oj上运行结果是
在这里插入图片描述
原因是没有声明参数,书上说可以不声明参数,但如果不声明参数也就没法往里面传递参数了。 所以在main里面把参数传给函数就会引发错误。
codeblocks可以运行是因为它的编译器比较智能,无视了错误,这种写法是不行的。

改错后的代码:

void fuck_this_shit(int damn, int a[], int n);
void fuck_the_world(int a[], int n);

void main()
{
    int damn, a[50], n;
    scanf("%d\n", &n);

    for(int i = 0; i < n; i++)
    {
        scanf("%d", &a[i]);
    }

    scanf("%d", &damn);
    fuck_the_world(a, n);
    fuck_this_shit(damn, a, n);
}
void fuck_the_world(int a[], int n)
{
    int t, s = 0, i = 0;

    for(int i; i < n - 1; ++i)
    {
        for(int k = 0; k < n - i - 1; k++)
        {
            if(a[k] < a[k + 1])
            {
                int t = a[k];
                a[k] = a[k + 1];
                a[k + 1] = t;
            }
        }
    }

    int j;

    for(j = 0; j < n; j++)
    {
        s = j % 10;

        if((j + 1) % 10 == 0)
            printf("%d\n", a[j]);
        else if(j != n - 1)
            printf("%d ", a[j]);
        else
            printf("%d", a[j]);
    }
}
void fuck_this_shit(int damn, int a[], int n)
{
    int i, m = 0;

    for(i = 0; i < n; i++)
    {
        if(damn == a[i])
        {
            m++;
            break;
        }
    }

    if(m > 0)
        printf("\n%d", i + 1);
    else
        printf("\nno this score!");
}

改错时也没有再用全局变量了,注意。

如有错误,请指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值