2014年4月16日 星期三

走在鋼索上的人

每個人心中都有一份恐懼,
如果把恐懼融入到生活中,
漸漸的就會無視於它的存在,
就像走在鋼索上的人,
永遠沒有害怕的權力,
因為眼前所要面對的不是恐懼,
而是有沒有體力繼續走下去。

2014年4月10日 星期四

C語言 - 面試考題

1.給變數 int *p, *q, *r,使用malloc取得空間,計算1+…+10的值,用printf印出。
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    char *p, *q, *r;

    p = malloc(sizeof(unsigned int));
    q = malloc(sizeof(unsigned int));
    r = malloc(sizeof(unsigned int));

    *p = 1;
    *q = 1;
    *r = 0;

    for (*p = 0; *p < 10; (*p)++) {
        *r += *q;
        (*q)++;
    }

    printf("sum = %d\n", *r);

    free(p);
    free(q);
    free(r);

    return 0;
}
2.int a=3, b=5,寫一個swap(),使得 a=5, b=3。
#include <stdio.h>

void swap(int *a, int *b)
{
    *a = *a ^ *b;
    *b = *a ^ *b;
    *a = *a ^ *b;
}

int main(int argc, char *argv[])
{
    int a = 5, b = 10;

    printf("a = %d, b = %d\n", a, b);

    swap(&a, &b);

    printf("a = %d, b = %d\n", a, b);

    return 0;
}
3.x的內容為1,2,3,4,用loop分別印出。
typedef struct struct_list
{
    int x;
    struct struct_list *next;
}llst;
#include <stdio.h>
#include <stdlib.h>

typedef struct struct_list
{
    int x;
    struct struct_list *next;
} llst;

int main(int argc, char *argv[])
{
    llst *ptr, *head;
    int num, i, sum = 0;

    ptr = malloc(sizeof(struct struct_list));

    head = ptr;
    printf("please input 5 numbers => \n");

    for (i = 0; i < 5; i++) {
        scanf("%d", &num);
        ptr->x = num;

        ptr->next = malloc(sizeof(struct struct_list));
  
        if (i == 4)
            ptr->next = NULL;
        else
            ptr = ptr->next;
    }

    ptr = head;

    while (ptr) {
        printf("ptr->x = %d\n", ptr->x);
        sum += ptr->x;
        ptr = ptr->next;
    }
 
    printf("sum = %d\n", sum);
   
    return 0;
}
4. 請問f要如何宣告,可得到如下結果 </ br> Input 1</ br> Input 2</ br>
#include <stdio.h>

int aoo(int a)
{
    Printf(“Input%d\n”, a);
}
 
int boo(int b)
{
    Printf(“Input%d\n”, b);
}
 
Int main()
{
    f=aoo;
    f(1);
    f=boo;
    f(2);
}
#include <stdio.h>

int aoo(int a)
{
    printf("input %d\n", a);
    return 0;
}

int boo(int b)
{
    printf("input %d\n", b);
    return 0;
}

int main(int argc, char *argv[])
{
    int (*f)(int a);

    f = aoo;
    f(1);
 
    f = boo;
    f(2);

    return 0;
}
5.請寫一個遞回(recursive)範例
#include <stdio.h>

int recursive(int n)
{
    if (n == 1)
        return 1;
    return recursive(n - 1) + n;
}

int main(int argc, char *argv[])
{
    printf("sum = %d\n", recursive(5));
    printf("sum = %d\n", recursive(10));
 
    return 0;
}
6. int x=2, y=3, z; z=(x++)+y; 請問 x=? y=? z=?
#include <stdio.h>

int main(int argc, char *argv[])
{
    int x = 2, y = 3, z;

    z = (x++) + y;

    /* x = 3, y = 3, z = 5 */
    printf("x = %d, y = %d, z = %d\n", x, y, z);

    return 0;
}