http://www.educity.cn 作者:pc 来源:希赛教育 
3、写出程序运行结果

    int sum(int a)
    {
    auto int c=0;
    static int b=3;
    c+=1;
    b+=2;
    return(a+b+c);
    }
    void main()
    {
    int I;
    int a=2;
    for(I=0;I<5;I++)
    {
    printf("%d,", sum(a));
    }
    }

    运行结果是:8,10,12,14,16,

    在求和函数sum里面c是auto变量,根据auto变量特性知每次调用sum函数时变量c都会自动赋值为0.b是static变量,根据static变量特性知每次调用sum函数时变量b都会使用上次调用sum函数时b保存的值。

    简单的分析一下函数,可以知道,若传入的参数不变,则每次调用sum函数返回的结果,都比上次多2.所以答案是:8,10,12,14,16, 

4、func(1) = ?
    int func(int a)
    {
    int b;
    switch(a)
    {
    case 1: 30;
    case 2: 20;
    case 3: 16;
    default: 0;
    }
    return b;
    }

    在 case 语句中可能忘记了对变量b赋值。如果改为下面的代码:

    int func(int a)
    {
    int b;
    switch(a)
    {
    case 1:      b = 30;
    case 2:      b = 20;
    case 3:      b = 16;
    default:     b = 0;
    }
    return b;
    }

    因为case语句中漏掉了break语句,所以无论传给函数的参数是多少,运行结果均为0。 

 5、a[q - p] = ?
    int a[3];
    a[0]=0; a[1]=1; a[2]=2;
    int *p, *q;
    p=a;
    q=&a[2];

    很明显:a[q - p] = a[2] = 2;

    6、内存空间占用问题

    定义 int **a[3][4], 则变量占有的内存空间为:16位系统24,32位编译系统中是48。

    PS:公式:3 * 4 * sizeof(int **)

    7、程序编写

    编写一个函数,要求输入年月日时分秒,输出该年月日时分秒的下一秒。如输入2004年12月31日23时59分59秒,则输出2005年1月1日0时0分0秒。

    void ResetTheTime(int *year,int *month,int *date,int *hour,int *minute,int*second)
    {
    int dayOfMonth[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    if( *year < 0   || *month < 1 || *month > 12 ||
    *date < 1   || *date > 31 || *hour < 0   || *hour > 23 ||
    *minute < 0 ||*minute > 59|| *second <0 || *second >60 )
    return;
    if( *year%400 == 0 || *year%100 != 0 && *year%4 == 0 )
    dayOfMonth[1] = 29;
    if(*second >= 60)
    {
    *second = 0;
    *minute += 1;
    if(*minute >= 60)
    {
    *minute = 0;
    *hour += 1;
    if(*hour >= 24)
    {
    *hour = 0;
    *date += 1;
    if(*date > dayOfMonth[*month-1])
    {
    *date = 1;
    *month += 1;
    if(*month > 12)
    {
    *month=1;
    *year += 1;
    }
    }
    }
    }
    }
    return;
    }