作业的debug反思(求亚军)

来源:互联网 发布:2017网络玩什么最赚钱 编辑:程序博客网 时间:2024/06/10 17:13

先写上两个错误的代码

第一个

#include <stdio.h>int main (void){    int n;      int a[n]; //** n未输入就用来创造数组,未初始化的n是一个很大的数,会导致爆栈,所以程序直接终止**    int i,t;    scanf("%d",&n);    for (i = 0; i < n; ++i)    {        scanf("%d",&a[i]);    }    for (i = 0; i < n - 1; ++i)    {        if (a[0] < a[i + 1])        {        t = a[i + 1];        a[i + 1] = a[0];        a[0] = t;        }    }    for (i = 1; i < n - 1; ++i)    {        if (a[1] < a[i + 1])        {        t = a[i + 1];        a[i + 1] = a[1];        a[1] = t;        }     }    printf("%d\n",a[1]);    return 0;}

第二个

#include <stdio.h>int main (void){    int n,T;    scanf("%d",&T);//此处的错误,在于逗号输入为中文的QAQ,改为英文的就行了    while(T){         scanf("%d",&n);    int a[n];    int i,t;    for (i = 0; i < n; ++i)    {        scanf("%d",&a[i]);    }    for (i = 0; i < n - 1; ++i)    {        if (a[0] < a[i + 1])        {        t = a[i + 1];        a[i + 1] = a[0];        a[0] = t;        }    }    for (i = 1; i < n - 1; ++i)    {        if (a[1] < a[i + 1])        {        t = a[i + 1];        a[i + 1] = a[1];        a[1] = t;        }     }    printf("%d\n",a[1]);    --T;}    return 0;}

问题要求


输入的第一行为一个数T,表示测试用例的个数。 每组测试用例包括两行,第一行为一个数N(2<=N<=10000),表示该组测试用例的数据个数。 第二行为N个整数,表示这一组测试数据。

Output

对于每组测试用例,输出一个数,为这组数据中第二大的数。

Sample Input

2
2
1 2
5
2 3 1 4 4
Sample Output

1
4

思考
这个程序的算法能否优化
是否能用函数

0 0
原创粉丝点击